Chu*_*kai 6 audio voip core-audio ios
我正在开发一个需要声学回声消除的iOS项目,因此kAudioUnitSubType_VoiceProcessingIO子类型似乎是一个不错的选择.以下是我的音频单元说明
//io unit description
AudioComponentDescription ioUnitDescription;
ioUnitDescription.componentType = kAudioUnitType_Output;
ioUnitDescription.componentSubType = kAudioUnitSubType_VoiceProcessingIO;
ioUnitDescription.componentManufacturer = kAudioUnitManufacturer_Apple;
ioUnitDescription.componentFlags = 0;
ioUnitDescription.componentFlagsMask = 0;
Run Code Online (Sandbox Code Playgroud)
根据我对RemoteIO子类型的经验,我启用了输入元素:
UInt32 enable = 1;
AudioUnitSetProperty(ioUnit, kAudioOutputUnitProperty_EnableIO, kAudioUnitScope_Input, 1, &enable, sizeof(enable));
Run Code Online (Sandbox Code Playgroud)
但是,初始化音频图时出错.如果VoiceProcessingIO被RemoteIO取代,则相同的音频图表可以正常工作.
RemoteIO和VoiceProcessingIO之间有什么区别需要特别注意吗?
谢谢,Chuankai
小智 0
根据我的经验,VoiceProcessingIO 音频单元在缓冲区大小和采样率方面更加挑剔。尝试低于 32000 Hz 的采样率(也许从 8000 Hz 开始,然后向上)和相当大的缓冲区大小(例如 2048 个样本左右)。这没有记录。一旦我有机会提交 rdar 号码,就会来。
我在设置过程中使用以下格式:
size_t bytesPerSample = sizeof(AudioSampleType);
AudioStreamBasicDescription canonicalFormat;
canonicalFormat.mSampleRate = self.samplerate;
canonicalFormat.mFormatID = kAudioFormatLinearPCM;
canonicalFormat.mFormatFlags = kAudioFormatFlagsCanonical;
canonicalFormat.mFramesPerPacket = 1;
canonicalFormat.mChannelsPerFrame = 1;
canonicalFormat.mBitsPerChannel = 8 * bytesPerSample;
canonicalFormat.mBytesPerPacket = bytesPerSample;
canonicalFormat.mBytesPerFrame = bytesPerSample;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1410 次 |
| 最近记录: |