我正在为iPad写一个VOIP应用程序(目前针对2和3).
我最初使用音频单元API编写音频代码,并使用kAudioUnitSubtype_RemoteIO单元.这很好用,但不出所料的回声是一个问题.我尝试通过切换到使用kAudioUnitSubType_VoiceProcessingIO单元来使用内置回声抑制.这在iOS 6(iPad 3)上非常有效,但iOS 5.1(iPad 2)上的相同代码会在麦克风输入上产生白噪声.
该文档提到它应该在iOS 3.0及更高版本中可用
iOS版本似乎是这里的重要区别.我尝试在两个iPhone 4S上运行应用程序,一个用iOS 6听起来很好,一个用iOS 5.1听起来像白噪声.
我的ASBD看起来像这样:
typedef int16_t sample_t;
#define AUDIO_BUFFER_SAMPLE_RATE 48000
#define FORMAT_FLAGS (kAudioFormatFlagsIsSignedInteger | kAudioFormatFlagsIsNonInterleaved)
#define CHANNELS_PER_FRAME 1
...
const size_t bytes_per_sample = sizeof(sample_t);
const int eight_bits_per_byte = 8;
AudioStreamBasicDescription streamFormat;
streamFormat.mFormatID = kAudioFormatLinearPCM;
streamFormat.mSampleRate = AUDIO_BUFFER_SAMPLE_RATE;
streamFormat.mFormatFlags = FORMAT_FLAGS;
streamFormat.mChannelsPerFrame = CHANNELS_PER_FRAME;
streamFormat.mBytesPerFrame = bytes_per_sample * CHANNELS_PER_FRAME;
streamFormat.mBitsPerChannel = bytes_per_sample * eight_bits_per_byte;
streamFormat.mFramesPerPacket = 1;
streamFormat.mBytesPerPacket = streamFormat.mBytesPerFrame * streamFormat.mFramesPerPacket;
streamFormat.mReserved = 0;
Run Code Online (Sandbox Code Playgroud)
有没有人有过kAudioUnitSubType_VoiceProcessingIO可以在iOS 5.1上运行?
有谁知道这个IO的任何严肃的文件?
rob*_*e_c 14
TL; DR添加kAudioFormatFlagsIsPacked到FORMAT_FLAGS
我通过一条错综复杂的路线发现了这一点.这些似乎都没有在任何地方得到很好的记录,但我发现这篇SO帖子谈论在Mac上使用IO.提到的一件事是使用"FlagsCononical".我尝试过设置:
#define FORMAT_FLAGS kAudioFormatFlagsAudioUnitCanonical
Run Code Online (Sandbox Code Playgroud)
哪个不起作用,并且对AudioUnitInitialize的调用失败,返回代码为29759.我找不到任何关于这意味着什么的文档,但是当我尝试时:
#define FORMAT_FLAGS kAudioFormatFlagsCanonical
Run Code Online (Sandbox Code Playgroud)
一切正常!成功!
的定义kAudioFormatFlagsCanonical在CoreAudioTypes.h如果你正在建设一个iPad(因此也CA_PREFER_FIXED_POINT被定义为1)是:
kAudioFormatFlagsCanonical = kAudioFormatFlagsIsSignedInteger
| kAudioFormatFlagsNativeEndian
| kAudioFormatFlagIsPacked;
Run Code Online (Sandbox Code Playgroud)
添加kAudioFormatFlagIsPacked到我的原始代码后,它工作.我添加kAudioFormatFlagsNativeEndian了很好的措施.我删除了,kAudioFormatFlagsIsNonInterleaved因为它不需要单通道音频.我留下的是与之相同的kAudioFormatFlagsCanonical.
所以我的设置在iPad 2(iOs 5.1)和iPad 3(iOS 6.0)上运行如下:
48000kAudioFormatFlagsCanonicalint16_t 样本如果有人的话,我仍然热衷于这个IO的文档,当然如果这有助于你不要忘记upvote :)
| 归档时间: |
|
| 查看次数: |
5284 次 |
| 最近记录: |