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:在音频单元中动态更改采样率的主要内容,如果未能解决你的问题,请参考以下文章