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);
是否可以在 运行 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);