最近要支持MAC版的音频采集与播放,所以需要把IOS上现有的AudioUnit代码进行移植。虽然文档里说MAC支持VoiceProcessingIO 的AudioUnit,可MAC上与IOS上还是有些不一样,踩了许多坑,MAC的资料还很难找,纠结了好几天,终于弄通了。所以决定写下来,帮助后来人。
发现的差别有如下几点:
1.kAudioOutputUnitProperty_EnableIO 属性在 MAC上不能设置。在Mac上,input和output都是默认打开的,并且不允许修改。
2.SampleRate在input和output上,必须一样。不然会报错。ios似乎没有这样的限制。
- 设置bufferSize的属性不一样。在Mac上使用kAudioDevicePropertyBufferFrameSize,而在ios上使用 kAudioSessionProperty_PreferredHardwareIOBufferDuration.
4.最坑爹的是,测试中发现, kAudioFormatFlagIsSignedInteger 可以用于采集,但是用于播放,则会出现没有声音。需要使用kAudioFormatFlagIsFloat。
另外还有个非AudioUnit的问题:
Capabilities下的App Sandbox,要么关闭,如果打开,记得开里面的各种权限。不然会没有网络。
AudioUnitMAC的DEMO地址:https://github.com/pinkydodo/AudioUnitMac
里面实现了MAC采集,并把采集数据延迟播放的功能。
网友评论