苹果公司的语音处理audio单元(kAudioUnitSubType_VoiceProcessingIO)在iOS 5.1上打破
我正在为iPad编写一个VOIP应用程序(目前以2和3为目标)。
我最初使用Audio Unit API和kAudioUnitSubtype_RemoteIO单元编写audio代码。 这工作得很好,但不出所料,回声是一个问题。 我试图通过切换到使用kAudioUnitSubType_VoiceProcessingIO单位来使用内置的回声抑制。 这在iOS 6(iPad 3)上运行得非常好,但iOS 5.1(iPad 2)上的相同代码会在麦克风input上产生白噪声。
该文件只是提到它应该在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;
有没有人有kAudioUnitSubType_VoiceProcessingIO在iOS 5.1上工作?
有没有人知道这个IO的任何严重的文档?
TL; DR将kAudioFormatFlagsIsPacked
添加到FORMAT_FLAGS
我通过一些复杂的路线发现了这一点。 这似乎没有任何地方很好的certificate,但我遇到这个SO后讨论在Mac上使用IO。 其中一个提到的是使用“FlagsCononical”。 我试过设置:
#define FORMAT_FLAGS kAudioFormatFlagsAudioUnitCanonical
没有工作,并调用AudioUnitInitialize失败,返回码为29759.我找不到任何有关这意味着什么文件,但是当我尝试:
#define FORMAT_FLAGS kAudioFormatFlagsCanonical
一切正常! 成功!
CoreAudioTypes.h中kAudioFormatFlagsCanonical
的定义,如果您正在为iPad构build(因此将CA_PREFER_FIXED_POINT
定义为1
):
kAudioFormatFlagsCanonical = kAudioFormatFlagsIsSignedInteger | kAudioFormatFlagsNativeEndian | kAudioFormatFlagIsPacked;
将kAudioFormatFlagIsPacked
添加到我的原始代码后,它工作。 我添加了kAudioFormatFlagsNativeEndian
以获得更好的效果。 我删除了kAudioFormatFlagsIsNonInterleaved
因为它对于单声道audio是不必要的。 我留下的是与kAudioFormatFlagsCanonical
相同的。
所以我在iPad 2(iOs 5.1)和iPad 3(iOS 6.0)上的设置如下:
- 采样率为
48000
- 1个频道
-
kAudioFormatFlagsCanonical
-
int16_t
样本 - 线性PCM
我仍然热衷于这个IO的文档,如果任何人有任何,当然,如果这有助于你不忘记upvote 🙂
- 为什么我不能在AU多声道调音台的input范围内更改元素/总线的数量?
- 从Socket连接在iOS上播放audio
- 如何录制混音器单元输出产生的声音(iOS Core Audio&Audio Graph)
- iOS AUSampler audiounit – EXSaudio文件的文件path问题?
- 核心audio:文件播放呈现callback函数
- 在AudioUnit子typeskAudioUnitSubType_NewTimePitch上设置速率
- AudioUnits从Springboard返回后导致通用跳过
- iOS:设置基本的语音处理I / O音频单元-Swift
- AudioUnitaudio发生器在每个音调结束时给我一个唧唧声