Update SDK integrations from the multi-channel buffer APIs to the mono processing and buffering API.
Migration introduced in core SDK 0.22.0 and Python 3.0.0. The before/after examples target that API transition. For a current upgrade, start with the upgrade guide and compatibility matrix.
Before: you passed a multi-channel buffer. The SDK mixed it down to mono internally, enhanced it and mixed the result back into your channels. That mixback was hard to predict per channel, so the output level and spatial presentation could surprise you.Now: every audio API takes one mono buffer. Your application controls downmixing and output channel layout.
The same release also moves voice activity detection into a dedicated Vad object and removes energy-based VAD. If you read a VAD signal from a processor, see Migrate to the dedicated VAD.
Your old num_frames value is your new block_size, because it already meant samples per channel. Error codes were renamed too, see the changelog.
Do not pass the total length of a multi-channel buffer. A stereo block of 480 frames holds 960 samples, but the mono block size is still 480. A mismatch returns AIC_ERROR_CODE_AUDIO_CONFIG_MISMATCH.
# audio is (frames, channels), as returned by soundfile.readmono = np.ascontiguousarray(audio.mean(axis=1), dtype=np.float32)enhanced = processor.process(mono)
Pass a contiguous float32 array to process(). NumPy preserves float32 when averaging float32 input, but integer input defaults to float64; the explicit cast handles either case.
// interleaved stereo in, mono outfor (size_t i = 0; i < block_size; ++i) { mono[i] = 0.5f * (interleaved[i * 2] + interleaved[i * 2 + 1]);}aic_processor_process(processor, mono, block_size);
Allocate mono once outside the processing loop, because allocation is not real-time safe.
# Back to (frames, channels), same enhanced signal in every channelout = np.repeat(enhanced[:, None], num_channels, axis=1)
// aic_processor_process enhanced mono in placefor (size_t i = 0; i < block_size; ++i) { for (uint16_t ch = 0; ch < num_channels; ++ch) { interleaved[i * num_channels + ch] = mono[i]; }}
This does not reproduce the old mixback. Every channel now carries the identical enhanced signal, so any stereo image in the input is gone and the perceived level may differ. Check loudness and enhancement level against representative audio.
See Audio format for downmix caveats when channel gain or phase matters.
The processors can share one model. The old 16-channel limit is gone, since concurrency is now bounded only by how many instances you create. The same applies to the analyzer: one collector and analyzer pair per stream.
Move voice activity detection onto a dedicated VAD model.
Python SDK 2.5 to 3.0
Every Python-specific rename in this release.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"ai-coustics Docs","description":"Integrate and operate ai-coustics audio models in your application.","colors":{"primary":"#006FFF","light":"#6993FF","dark":"#006FFF"},"logo":{"light":"https://mintcdn.com/ai-coustics/TRQ6cYSvxBnlqNAk/logo/light.svg?fit=max\u0026auto=format\u0026n=TRQ6cYSvxBnlqNAk\u0026q=85\u0026s=811a7351a129b8c16831882725fa1e9f","dark":"https://mintcdn.com/ai-coustics/TRQ6cYSvxBnlqNAk/logo/dark.svg?fit=max\u0026auto=format\u0026n=TRQ6cYSvxBnlqNAk\u0026q=85\u0026s=0ed4b1ebfd381ef8674fcc5aba00e414"},"favicon":{"light":"https://mintcdn.com/ai-coustics/TRQ6cYSvxBnlqNAk/logo/favicon-light.svg?fit=max\u0026auto=format\u0026n=TRQ6cYSvxBnlqNAk\u0026q=85\u0026s=59bbb7bd1ad6425827271c3cb866b4af","dark":"https://mintcdn.com/ai-coustics/TRQ6cYSvxBnlqNAk/logo/favicon-dark.svg?fit=max\u0026auto=format\u0026n=TRQ6cYSvxBnlqNAk\u0026q=85\u0026s=89d8a383bd7a7ee3b718157ae00da595"},"appearance":{"default":"system","strict":false},"background":{"color":{"light":"#F9F9F9","dark":"#0F0F0F"}},"navbar":{"links":[{"href":"https://discord.gg/wrSthtNqQ4","label":"Discord"}],"primary":{"type":"button","label":"Dashboard","href":"https://developers.ai-coustics.com"}},"footer":{"socials":{"github":"https://github.com/ai-coustics","linkedin":"https://linkedin.com/company/ai-coustics","discord":"https://discord.gg/wrSthtNqQ4"},"links":[{"items":[{"label":"Artifacts","href":"https://artifacts.ai-coustics.io/"},{"label":"Blog","href":"https://ai-coustics.com/blog"},{"label":"Contact","href":"https://ai-coustics.com/contact"},{"label":"Support","href":"https://discord.gg/wrSthtNqQ4"}]},{"items":[{"label":"Privacy Policy","href":"https://ai-coustics.com/legal/privacy-policy"},{"label":"Legal Notice","href":"https://ai-coustics.com/legal/legal-notice"}]}]},"fonts":{"family":"Milling Duplex","source":"https://marketing.ai-coustics.com/asset-nr111222","format":"woff2"},"integrations":{"posthog":{"apiKey":"phc_jUyY7eTktQfc09C1NsINHKUOFptORtA3GXQwmWQCxwv","apiHost":"https://phdata.ai-coustics.com","sessionRecording":true}},"banner":{"content":"Core SDK 0.26.0 uses model file version 8 and renamed Quail, Rook and VAD model IDs such as `quail-l-16khz`. [Update your model IDs](/models/older-models/model-naming-changes#model-file-version-8-use-the-new-ids).","dismissible":true},"contextual":{"options":["copy","view","chatgpt","claude","perplexity","mcp","cursor","vscode"],"display":"header"},"variables":{"CoreSdkVersion":"0.25.2","CPackageVersion":"0.25.2","CppPackageVersion":"0.25.2","NodePackageVersion":"0.25.2","WasmPackageVersion":"0.25.1","RustCrateVersion":"0.25.2","RustSysCrateVersion":"0.25.2","LiveKitExtrasVersion":"0.25.2","PythonPackageVersion":"3.3.2","PipecatFrameworkPackageVersion":"1.15.0","PipecatPythonPackageVersion":"3.3.2","PipecatCoreSdkVersion":"0.25.2","CppCoreSdkVersion":"0.25.2","NodeCoreSdkVersion":"0.25.2","WasmCoreSdkVersion":"0.25.1","RustCoreSdkVersion":"0.25.2","PythonCoreSdkVersion":"0.25.2","LiveKitExtrasCoreSdkVersion":"0.25.2","LiveKitPythonPackageVersion":"3.3.2","LiveKitNodePackageVersion":"0.25.2"},"styling":{"latex":true},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"ai-coustics","hasAudioNarration":false,"actualSubdomain":"ai-coustics","customDomains":["docs.ai-coustics.com"],"gitSource":{"type":"github","owner":"ai-coustics","repo":"docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6ae86e7b06138f92515d8588","collectionId":"b4a3f6bf-d57f-4a86-892f-7792782126f0","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ae86e7b06138f92515d8588"},"feedback":{"thumbs":true},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6aece5dcd8adbfee3c2f4a7e","clientVersion":"0.0.4074","searchFilterCounts":[{"language":"default","tag":"Reference","count":47},{"language":"default","tag":"API reference","count":37},{"language":"default","tag":"Guides","count":15},{"language":"default","tag":"Models","count":14},{"language":"default","tag":"Get started","count":13},{"language":"default","tag":"WebAssembly","count":7},{"language":"default","tag":"C","count":6},{"language":"default","tag":"C++","count":6},{"language":"default","tag":"Node.js","count":6},{"language":"default","tag":"Python","count":6}]},"assistantConfig":{"enableAskAiButton":true,"enableStarterQuestions":true,"enableAskAiSearchBar":false,"deflection":{"enabled":true,"email":"support@ai-coustics.com","showHelpButton":true}},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"comment-mode","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"starterQuestions":[{"_id":"69860095cf6bd26bac483cd9","deploymentId":"68beef77fe02728a34d52964","questionText":"How to generate an SDK key?","status":"active","generatedBy":"manual","createdAt":"2026-02-06T14:54:13.180Z","updatedAt":"2026-02-06T14:54:13.180Z","__v":0},{"_id":"69860087cf6bd26bac483cc6","deploymentId":"68beef77fe02728a34d52964","questionText":"Which model is the best for my integration?","status":"active","generatedBy":"manual","createdAt":"2026-02-06T14:53:59.865Z","updatedAt":"2026-02-06T14:53:59.865Z","__v":0},{"_id":"69860078cf6bd26bac483c9e","deploymentId":"68beef77fe02728a34d52964","questionText":"How to get started with the SDK?","status":"active","generatedBy":"manual","createdAt":"2026-02-06T14:53:44.411Z","updatedAt":"2026-02-06T14:53:44.411Z","__v":0}],"privacy":{"consentBanner":{"enabled":true}},"googleFontsInlined":false},"customCss":[{"filePath":"style.css","content":"sidebar-nav-group-divider{display:block;height:0;margin:0.85rem 0;border-top:1px solid #DEDEDE}.dark sidebar-nav-group-divider{border-top-color:#333333}.nav-tabs-item img[aria-hidden=\"true\"]{filter:none}.dark .nav-tabs-item img[aria-hidden=\"true\"]{filter:invert(1)}#content :is(a,span)[id]:empty{scroll-margin-top:var(--scroll-mt, 10rem)}"}],"page":{"pagePath":"reference/deprecated/multi-channel-to-mono","slug":"/reference/deprecated/multi-channel-to-mono","pageMetadata":{"title":"Migrate to Mono Processing","sidebarTitle":"Multi-channel to mono","description":"Update SDK integrations from the multi-channel buffer APIs to the mono processing and buffering API.","href":"/reference/deprecated/multi-channel-to-mono"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Update SDK integrations from the multi-channel buffer APIs to the mono processing and buffering API.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,..._provideComponents(),...props.components},{Card,CardGroup,CodeBlock,Heading,Note,Tab,Table,Tabs,Warning}=_components;if(!Card)_missingMdxReference(`Card`,true);if(!CardGroup)_missingMdxReference(`CardGroup`,true);if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Note)_missingMdxReference(`Note`,true);if(!Tab)_missingMdxReference(`Tab`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Tabs)_missingMdxReference(`Tabs`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsx(Note,{children:_jsxs(_components.p,{children:[`Migration introduced in core SDK 0.22.0 and Python 3.0.0. The before/after examples target that API transition. For a current upgrade, start with the `,_jsx(_components.a,{href:`/reference/sdk/upgrading`,children:`upgrade guide`}),` and `,_jsx(_components.a,{href:`/reference/sdk/compatibility-matrix`,children:`compatibility matrix`}),`.`]})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Before:`}),` you passed a multi-channel buffer. The SDK mixed it down to mono internally, enhanced it and mixed the result back into your channels. That mixback was hard to predict per channel, so the output level and spatial presentation could surprise you.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Now:`}),` every audio API takes one mono buffer. Your application controls downmixing and output channel layout.`]}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[`The same release also moves voice activity detection into a dedicated `,_jsx(_components.code,{children:`Vad`}),` object and removes energy-based VAD. If you read a VAD signal from a processor, see `,_jsx(_components.a,{href:`/reference/deprecated/energy-vad-to-dedicated-vad`,children:`Migrate to the dedicated VAD`}),`.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`what-changed`,children:`What changed`}),`\n`,_jsxs(Tabs,{children:[_jsx(Tab,{title:`Python`,id:`python`,children:_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Before`}),_jsx(_components.th,{children:`Now`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`ProcessorConfig(sample_rate, num_channels, num_frames, allow_variable_frames)`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`ProcessorConfig(sample_rate, block_size, variable_block_size)`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`ProcessorConfig.optimal(model, num_channels=2)`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`ProcessorConfig.optimal(model)`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`model.get_optimal_num_frames(sample_rate)`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`model.get_optimal_block_size(sample_rate)`})})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.code,{children:`processor.process(audio)`}),` with a 2D `,_jsx(_components.code,{children:`(channels, frames)`}),` array`]}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`processor.process(audio)`}),` with a 1D mono array`]})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.code,{children:`collector.buffer(audio)`}),` with a 2D array`]}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`collector.buffer(audio)`}),` with a 1D mono array`]})]})]})]})}),_jsx(Tab,{title:`C`,id:`c`,children:_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Before`}),_jsx(_components.th,{children:`Now`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`aic_processor_initialize(processor, sample_rate, num_channels, num_frames, allow_variable_frames)`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`aic_processor_initialize(processor, sample_rate, block_size, variable_block_size)`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`aic_model_get_optimal_num_frames`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`aic_model_get_optimal_block_size`})})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.code,{children:`aic_processor_process_planar`}),` / `,_jsx(_components.code,{children:`_interleaved`}),` / `,_jsx(_components.code,{children:`_sequential`})]}),_jsx(_components.td,{children:_jsx(_components.code,{children:`aic_processor_process(processor, audio_ptr, audio_len)`})})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.code,{children:`aic_collector_buffer_planar`}),` / `,_jsx(_components.code,{children:`_interleaved`}),` / `,_jsx(_components.code,{children:`_sequential`})]}),_jsx(_components.td,{children:_jsx(_components.code,{children:`aic_collector_buffer(collector, audio_ptr, audio_len)`})})]})]})]})})]}),`\n`,_jsxs(_components.p,{children:[`Your old `,_jsx(_components.code,{children:`num_frames`}),` value is your new `,_jsx(_components.code,{children:`block_size`}),`, because it already meant samples per channel. Error codes were renamed too, see the `,_jsx(_components.a,{href:`/changelog`,children:`changelog`}),`.`]}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[`Do not pass the total length of a multi-channel buffer. A stereo block of 480 frames holds 960 samples, but the mono block size is still 480. A mismatch returns `,_jsx(_components.code,{children:`AIC_ERROR_CODE_AUDIO_CONFIG_MISMATCH`}),`.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`if-you-still-want-multi-channel-output`,children:`If you still want multi-channel output`}),`\n`,_jsx(_components.p,{children:`Two steps: downmix to mono, then distribute the enhanced mono back across your channels.`}),`\n`,_jsx(Heading,{level:`3`,id:`1-downmix-to-mono`,children:`1. Downmix to mono`}),`\n`,_jsxs(Tabs,{children:[_jsxs(Tab,{title:`Python`,id:`python-2`,children:[_jsx(CodeBlock,{filename:``,numberOfLines:`4`,language:`python`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`python`,children:_jsxs(_components.code,{language:`python`,numberOfLines:`4`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# audio is (frames, channels), as returned by soundfile.read`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`mono `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` np.ascontiguousarray(audio.mean(`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`axis`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`1`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`), `}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`dtype`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`np.float32)`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`enhanced `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` processor.process(mono)`})]}),`\n`]})})}),_jsxs(_components.p,{children:[`Pass a contiguous `,_jsx(_components.code,{children:`float32`}),` array to `,_jsx(_components.code,{children:`process()`}),`. NumPy preserves `,_jsx(_components.code,{children:`float32`}),` when averaging `,_jsx(_components.code,{children:`float32`}),` input, but integer input defaults to `,_jsx(_components.code,{children:`float64`}),`; the explicit cast handles either case.`]})]}),_jsxs(Tab,{title:`C`,id:`c-2`,children:[_jsx(CodeBlock,{filename:``,numberOfLines:`6`,language:`c`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`c`,children:_jsxs(_components.code,{language:`c`,numberOfLines:`6`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// interleaved stereo in, mono out`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`for`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`size_t`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` i `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 0`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`; i `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`\u003c`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` block_size; `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`++`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`i) {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` mono`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`[i] `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 0.5`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#B5CEA8`},children:`f`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` *`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`interleaved`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`[i `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`*`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 2`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`] `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`+`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` interleaved`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`[i `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`*`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 2`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` +`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 1`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`]);`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`aic_processor_process`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(processor, mono, block_size);`})]}),`\n`]})})}),_jsxs(_components.p,{children:[`Allocate `,_jsx(_components.code,{children:`mono`}),` once outside the processing loop, because allocation is not real-time safe.`]})]})]}),`\n`,_jsx(Heading,{level:`3`,id:`2-copy-the-enhanced-mono-into-each-channel`,children:`2. Copy the enhanced mono into each channel`}),`\n`,_jsxs(Tabs,{children:[_jsx(Tab,{title:`Python`,id:`python-3`,children:_jsx(CodeBlock,{filename:``,numberOfLines:`2`,language:`python`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`python`,children:_jsxs(_components.code,{language:`python`,numberOfLines:`2`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# Back to (frames, channels), same enhanced signal in every channel`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`out `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` np.repeat(enhanced[:, `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:`None`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`], num_channels, `}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`axis`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`1`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})]}),`\n`]})})})}),_jsx(Tab,{title:`C`,id:`c-3`,children:_jsx(CodeBlock,{filename:``,numberOfLines:`6`,language:`c`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`c`,children:_jsxs(_components.code,{language:`c`,numberOfLines:`6`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// aic_processor_process enhanced mono in place`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`for`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`size_t`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` i `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 0`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`; i `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`\u003c`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` block_size; `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`++`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`i) {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` for`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`uint16_t`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ch `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 0`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`; ch `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`\u003c`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` num_channels; `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`++`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`ch) {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` interleaved`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`[i `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`*`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` num_channels `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`+`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ch] `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` mono`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`[i];`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})})})]}),`\n`,_jsx(Warning,{children:_jsx(_components.p,{children:`This does not reproduce the old mixback. Every channel now carries the identical enhanced signal, so any stereo image in the input is gone and the perceived level may differ. Check loudness and enhancement level against representative audio.`})}),`\n`,_jsxs(_components.p,{children:[`See `,_jsx(_components.a,{href:`/reference/concepts/audio-format`,children:`Audio format`}),` for downmix caveats when channel gain or phase matters.`]}),`\n`,_jsx(Heading,{level:`2`,id:`if-your-channels-are-independent-streams`,children:`If your channels are independent streams`}),`\n`,_jsx(_components.p,{children:`Do not downmix. Two sides of a call, or two speakers on separate mics, are separate streams. Create one processor per stream, each with its own state:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`5`,language:`python`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`python`,children:_jsxs(_components.code,{language:`python`,numberOfLines:`5`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`left_processor `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` aic.Processor(model, license_key, config)`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`right_processor `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` aic.Processor(model, license_key, config)`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`enhanced_left `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` left_processor.process(left)`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`enhanced_right `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` right_processor.process(right)`})]}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`The processors can share one model. The old 16-channel limit is gone, since concurrency is now bounded only by how many instances you create. The same applies to the analyzer: one collector and analyzer pair per stream.`}),`\n`,_jsx(Heading,{level:`2`,id:`related-migrations`,children:`Related migrations`}),`\n`,_jsxs(CardGroup,{cols:2,children:[_jsx(Card,{title:`Migrate to the dedicated VAD`,href:`/reference/deprecated/energy-vad-to-dedicated-vad`,children:_jsx(_components.p,{children:`Move voice activity detection onto a dedicated VAD model.`})}),_jsx(Card,{title:`Python SDK 2.5 to 3.0`,href:`/reference/deprecated/python-2-5-to-3-0`,children:_jsx(_components.p,{children:`Every Python-specific rename in this release.`})})]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Migrate to Mono Processing","sidebarTitle":"Multi-channel to mono","description":"Update SDK integrations from the multi-channel buffer APIs to the mono processing and buffering API.","href":"/reference/deprecated/multi-channel-to-mono"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"What changed","slug":"what-changed","depth":2,"children":[]},{"title":"If you still want multi-channel output","slug":"if-you-still-want-multi-channel-output","depth":2,"children":[{"title":"1. Downmix to mono","slug":"1-downmix-to-mono","depth":3,"children":[]},{"title":"2. Copy the enhanced mono into each channel","slug":"2-copy-the-enhanced-mono-into-each-channel","depth":3,"children":[]}]},{"title":"If your channels are independent streams","slug":"if-your-channels-are-independent-streams","depth":2,"children":[]},{"title":"Related migrations","slug":"related-migrations","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"ai-coustics","siteName":"ai-coustics Docs","title":"Migrate to Mono Processing - ai-coustics Docs","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-09-22T14:54:24.541Z","originalFileLocation":"reference/deprecated/multi-channel-to-mono.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Update SDK integrations from the multi-channel buffer APIs to the mono processing and buffering API.\">\u003cmeta data-mint-head name=\"application-name\" content=\"ai-coustics Docs\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/ai-coustics/q-jz6v9pdza4WsLO/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/ai-coustics/q-jz6v9pdza4WsLO/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/ai-coustics/q-jz6v9pdza4WsLO/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/ai-coustics/q-jz6v9pdza4WsLO/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/ai-coustics/q-jz6v9pdza4WsLO/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/ai-coustics/q-jz6v9pdza4WsLO/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/ai-coustics/q-jz6v9pdza4WsLO/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/ai-coustics/q-jz6v9pdza4WsLO/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/ai-coustics/q-jz6v9pdza4WsLO/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Migrate to Mono Processing - ai-coustics Docs\">\u003cmeta data-mint-head property=\"og:description\" content=\"Update SDK integrations from the multi-channel buffer APIs to the mono processing and buffering API.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"ai-coustics Docs\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.ai-coustics.com/reference/deprecated/multi-channel-to-mono\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://ai-coustics.mintlify.site/_mintlify/api/og/v2?division=Historical+migrations\u0026amp;title=Migrate+to+Mono+Processing\u0026amp;description=Update+SDK+integrations+from+the+multi-channel+buffer+APIs+to+the+mono+processing+and+buffering+API.\u0026amp;theme=e0930299b035dc5f296d141a\u0026amp;signature=1d770873500f1af27d18c9407e4ef65744abebbdb13154312079403779ddc425\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Migrate to Mono Processing - ai-coustics Docs\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Update SDK integrations from the multi-channel buffer APIs to the mono processing and buffering API.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://ai-coustics.mintlify.site/_mintlify/api/og/v2?division=Historical+migrations\u0026amp;title=Migrate+to+Mono+Processing\u0026amp;description=Update+SDK+integrations+from+the+multi-channel+buffer+APIs+to+the+mono+processing+and+buffering+API.\u0026amp;theme=e0930299b035dc5f296d141a\u0026amp;signature=1d770873500f1af27d18c9407e4ef65744abebbdb13154312079403779ddc425\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/ai-coustics/q-jz6v9pdza4WsLO/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"ai-coustics Docs\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#006FFF\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.ai-coustics.com/reference/deprecated/multi-channel-to-mono\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/reference/deprecated/multi-channel-to-mono.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.ai-coustics.com/#organization\",\"name\":\"ai-coustics Docs\",\"url\":\"https://docs.ai-coustics.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/ai-coustics/TRQ6cYSvxBnlqNAk/logo/light.svg?fit=max\u0026auto=format\u0026n=TRQ6cYSvxBnlqNAk\u0026q=85\u0026s=811a7351a129b8c16831882725fa1e9f\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.ai-coustics.com#website\",\"name\":\"ai-coustics Docs\",\"url\":\"https://docs.ai-coustics.com\",\"publisher\":{\"@id\":\"https://docs.ai-coustics.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.ai-coustics.com/reference/deprecated/multi-channel-to-mono#webpage\",\"url\":\"https://docs.ai-coustics.com/reference/deprecated/multi-channel-to-mono\",\"name\":\"Migrate to Mono Processing\",\"description\":\"Update SDK integrations from the multi-channel buffer APIs to the mono processing and buffering API.\",\"dateModified\":\"2026-09-22T14:54:24.541Z\",\"isPartOf\":{\"@id\":\"https://docs.ai-coustics.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.ai-coustics.com/reference/deprecated/multi-channel-to-mono#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.ai-coustics.com/reference/deprecated/multi-channel-to-mono#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"ai-coustics Docs\",\"item\":\"https://docs.ai-coustics.com\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Migrate to Mono Processing\",\"item\":\"https://docs.ai-coustics.com/reference/deprecated/multi-channel-to-mono\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.ai-coustics.com/reference/deprecated/multi-channel-to-mono#article\",\"headline\":\"Migrate to Mono Processing\",\"name\":\"Migrate to Mono Processing\",\"description\":\"Update SDK integrations from the multi-channel buffer APIs to the mono processing and buffering API.\",\"url\":\"https://docs.ai-coustics.com/reference/deprecated/multi-channel-to-mono\",\"mainEntityOfPage\":{\"@id\":\"https://docs.ai-coustics.com/reference/deprecated/multi-channel-to-mono#webpage\"},\"dateModified\":\"2026-09-22T14:54:24.541Z\",\"publisher\":{\"@id\":\"https://docs.ai-coustics.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.ai-coustics.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"ai-coustics Docs\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"ai-coustics Docs","nav":{"global":null,"tabs":[{"tab":"Get started","pages":[{"title":"Get started","href":""}]},{"tab":"Guides","pages":[{"title":"Guides","href":"/reference/concepts/audio-format"}]},{"tab":"Models","pages":[{"title":"Models","href":"/reference/sdk/models"}]},{"tab":"Reference","groups":[{"group":"SDK","pages":[{"title":"Language bindings","href":"/reference/sdk/language-bindings"},{"title":"Examples","href":"/reference/sdk/examples"},{"title":"Compatibility matrix","href":"/reference/sdk/compatibility-matrix"}]},{"group":"API reference","pages":[{"group":"Python","pages":[{"title":"Python API reference","href":"/reference/sdk/api/python/index"},{"title":"Python models and configuration","sidebarTitle":"Models and configuration","href":"/reference/sdk/api/python/models-and-config"},{"title":"Python enhancement","sidebarTitle":"Enhancement","href":"/reference/sdk/api/python/enhancement"},{"title":"Python voice activity detection","sidebarTitle":"VAD","href":"/reference/sdk/api/python/vad"},{"title":"Python audio analysis","sidebarTitle":"Audio analysis","href":"/reference/sdk/api/python/analysis"},{"title":"Python errors","href":"/reference/sdk/api/python/errors"}]},{"group":"Node.js","pages":[{"title":"Node.js API reference","href":"/reference/sdk/api/node/index"},{"title":"Node.js models and configuration","href":"/reference/sdk/api/node/models-and-config"},{"title":"Node.js enhancement API","href":"/reference/sdk/api/node/enhancement"},{"title":"Node.js VAD API","href":"/reference/sdk/api/node/vad"},{"title":"Node.js analysis API","href":"/reference/sdk/api/node/analysis"},{"title":"Node.js errors","href":"/reference/sdk/api/node/errors"}]},{"group":"C","pages":[{"title":"C API reference","href":"/reference/sdk/api/c/index"},{"title":"C models and configuration","href":"/reference/sdk/api/c/models-and-config"},{"title":"C enhancement and processor control","href":"/reference/sdk/api/c/processing"},{"title":"C voice activity detection","href":"/reference/sdk/api/c/vad"},{"title":"C audio analysis","href":"/reference/sdk/api/c/analysis"},{"title":"C errors and types","href":"/reference/sdk/api/c/errors-and-types"}]},{"group":"C++","pages":[{"title":"C++ API reference","href":"/reference/sdk/api/cpp/index"},{"title":"C++ models and configuration","href":"/reference/sdk/api/cpp/models-and-config"},{"title":"C++ enhancement and processor control","href":"/reference/sdk/api/cpp/processing"},{"title":"C++ voice activity detection","href":"/reference/sdk/api/cpp/vad"},{"title":"C++ audio analysis","href":"/reference/sdk/api/cpp/analysis"},{"title":"C++ results and errors","href":"/reference/sdk/api/cpp/results-and-errors"}]},{"group":"Rust","pages":[{"title":"Rust API reference","href":"/reference/sdk/api/rust/index"},{"title":"Rust models and configuration","href":"/reference/sdk/api/rust/models-and-config"},{"title":"Rust enhancement","href":"/reference/sdk/api/rust/enhancement"},{"title":"Rust voice activity detection","href":"/reference/sdk/api/rust/vad"},{"title":"Rust audio analysis","href":"/reference/sdk/api/rust/analysis"},{"title":"Rust errors and features","href":"/reference/sdk/api/rust/errors-and-features"}]},{"group":"WebAssembly","pages":[{"title":"WebAssembly API reference","href":"/reference/sdk/api/wasm/index"},{"title":"WebAssembly initialization and lifecycle","href":"/reference/sdk/api/wasm/initialization"},{"title":"WebAssembly model API","href":"/reference/sdk/api/wasm/models-and-config"},{"title":"WebAssembly enhancement API","href":"/reference/sdk/api/wasm/enhancement"},{"title":"WebAssembly VAD API","href":"/reference/sdk/api/wasm/vad"},{"title":"WebAssembly analysis API","href":"/reference/sdk/api/wasm/analysis"},{"title":"WebAssembly errors","href":"/reference/sdk/api/wasm/errors"}]}]},{"group":"Upgrades","pages":[{"title":"SDK and model versions","href":"/reference/sdk/upgrading"}]},{"group":"LiveKit","pages":[{"title":"Which LiveKit plugin to use","sidebarTitle":"Plugin scope","href":"/reference/livekit/plugin-scope"},{"title":"Migrate from livekit-plugins to livekit-extras","sidebarTitle":"Migrate to livekit-extras","href":"/reference/livekit/migrate-to-livekit-extras"}]},{"group":"AI tools","pages":[{"title":"MCP server and text export","description":"Connect a coding agent to canonical documentation and retrieve pages as Markdown.","href":"/reference/agents/mcp-server"}]},{"group":"Historical migrations","pages":[{"title":"Migrate to Mono Processing","sidebarTitle":"Multi-channel to mono","href":"/reference/deprecated/multi-channel-to-mono"},{"title":"Migrate to the Dedicated VAD","sidebarTitle":"Energy-based VAD to VAD","description":"Move voice activity detection off the processor and onto a dedicated VAD object backed by a VAD model.","href":"/reference/deprecated/energy-vad-to-dedicated-vad"},{"title":"Migrate Python SDK 2.5 to 3.0","sidebarTitle":"Python SDK 2.5 to 3.0","href":"/reference/deprecated/python-2-5-to-3-0"}]}]},{"tab":"Changelog","pages":[{"title":"Changelog","href":"/changelog"}]}]},"basePath":"","title":"Migrate to Mono Processing - ai-coustics Docs","buildId":"dpl_BLQvU86QFwq3AhPofSTw6q8dGWKm","deploymentId":"dpl_BLQvU86QFwq3AhPofSTw6q8dGWKm","dynamics":["10e4515597"],"chunks":["BannerMarkdown-DcUtcwZ_.js","dist-CJ9Oly2E.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","clsx-C5EfhVm0.js","html-void-elements-mCSPHezU.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js"]}