iOS:在音频单元中动态更改采样率

iOS: Changing sample rate dynamically in Audio Unit

是否可以在 运行 AudioSession/AudioUnit 中间 change/set 采样率,而没有 stopping/restarting 当前 AudioSession/AudioUnit (就像音频路由一样) ?

我有一个音频会话,其采样率为 44.1 KHz

AudioStreamBasicDescription.mSampleRate         = 44100

我想在不取消初始化 [AudioUnitUninitialize(audioUnit)] 或停止 [AudioOutputUnitStop(audioUnit)] 或停用音频的情况下将采样率更改为 8KHz Unit/Session。

这是我的音频单元设置。

audioComponentDescription.componentType = kAudioUnitType_Output;
audioComponentDescription.componentSubType = kAudioUnitSubType_VoiceProcessingIO;
audioComponentDescription.componentFlags = 0;
audioComponentDescription.componentFlagsMask = 0;
audioComponentDescription.componentManufacturer = kAudioUnitManufacturer_Apple;


audioStreamBasicDescription.mSampleRate         = 44100;
audioStreamBasicDescription.mFormatID           = kAudioFormatLinearPCM;
audioStreamBasicDescription.mFormatFlags        =  kAudioFormatFlagIsSignedInteger | kAudioFormatFlagIsPacked;
audioStreamBasicDescription.mFramesPerPacket    = 1;
audioStreamBasicDescription.mChannelsPerFrame   = 1;
audioStreamBasicDescription.mBitsPerChannel     = 16;
audioStreamBasicDescription.mBytesPerPacket     = 2;
audioStreamBasicDescription.mBytesPerFrame      = 2;

非常感谢任何帮助。

不,因为每个采样率都需要一些启动时间,涉及以先前的速率从音频单元缓冲区和采样率转换器刷新样本。

最好的选择,如果您需要处理另一个采样率,请在您自己的应用程序内的软件中重新采样。

是的,您可以使用 kAudioUnitSubType_SpatialMixer 音频单元进行动态处理。 在伪代码中:

AudioUnitSetParameter(mixerUnit, k3DMixerParam_PlaybackRate, kAudioUnitScope_Input, 0, sampleRateRatio(from 0.0 to 2.0), 0);