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

Posted

技术标签:

【中文标题】iOS:在音频单元中动态更改采样率【英文标题】:iOS: Changing sample rate dynamically in Audio Unit 【发布时间】:2015-09-13 07:00:10 【问题描述】:

是否可以在运行的 Audiosession/AudioUnit 中间更改/设置采样率而不停止/重新启动当前的 AudioSession/AudioUnit(就像音频路由一样)?

我有一个采样率为 44.1 KHz 的活动音频会话

AudioStreamBasicDescription.mSampleRate         = 44100

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

这是我的音频单元设置。

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;

非常感谢任何帮助。

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

【参考方案2】:

是的,您可以使用 kAudioUnitSubType_SpatialMixer 音频单元动态完成。 在伪代码中:

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

【讨论】:

以上是关于iOS:在音频单元中动态更改采样率的主要内容,如果未能解决你的问题,请参考以下文章

如何更改插孔音频中的采样率?

iOS 将音频采样率从 16 kHz 转换为 8 kHz

如何在 Windows 7 中更改音频输出设备的默认共享模式采样率?

在 iOS 上更改 AUGraph 的采样率

什么是音频视频比特率,采样率,讲的很不错

您如何获得 Windows 音频播放的当前采样率?