ios - iPhone 上的立体声录音

标签 ios avfoundation core-audio audiounit

iPhone 5 具有三个麦克风 - 顶部前置、顶部后置和底部。我想同时记录所有这些来做一些信号处理。我试了好几天都没有成功。

使用 AVAudioSession,我可以看到麦克风:

NSLog(@"%@", [AVAudioSession sharedInstance].availableInputs);

  "<AVAudioSessionPortDescription: 0x14554400, type = MicrophoneBuiltIn; name = iPhone Microphone; UID = Built-In Microphone; selectedDataSource = Back>"

NSLog(@"%@", [AVAudioSession sharedInstance].availableInputs[0].inputDataSources);

  "<AVAudioSessionDataSourceDescription: 0x145afb00, ID = 1835216945; name = Bottom>",
  "<AVAudioSessionDataSourceDescription: 0x145b1870, ID = 1835216946; name = Front>",
  "<AVAudioSessionDataSourceDescription: 0x145b3650, ID = 1835216947; name = Back>"

我可以使用 AVAudioSessionPortDescription -setPreferredDataSource:error: 从三者之一进行记录。但是我不能同时录制多个。如果我将输入 channel 数设置为 2,我会从同一个麦克风获得两个相同的音轨。

AVAudioRecorder 有一个属性 channelAssignments 看起来应该可以工作,但是 AVAudioSession inputNumberOfChannelsmaximumInputNumberOfChannels 都是 1。属性 channelAssignments 专为具有多个 channel 的辅助麦克风而设计。

我尝试使用低级 AudioUnit,但我得到了相同的结果。我在 AudioUnit 上找不到任何属性来更改输入源。

如有任何帮助,我们将不胜感激。

最佳答案

我的理解,在我的所有研究都试图做同样的事情之后,正是你所描述的 - 你不能为一个设备选择多个数据源,因此你不能从多个内置麦克风录音立刻。如果有人能证明我是错的,我非常乐意听到!

旁注:我似乎无法运行您的代码。正如所写,我得到

Property availableInputs not found on object of type 'id'

即使在将您所获得的内容修改为不需要任何显式转换的格式之后:

NSLog(@"%@", [[[AVAudioSession sharedInstance] availableInputs][0] inputDataSources]);

我收到 SIGABRT:

-[AVAudioSessionPortDescription inputDataSources]: unrecognized selector sent to instance 0xd59dbe0'

您使用什么 SDK 来实际编译您的代码,更不用说运行了?

关于ios - iPhone 上的立体声录音,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19463103/

相关文章:

ios - UIButton 保持时间越长,增量越快

iphone - 平移手势导致 subview 崩溃?

ios - AVAudioSession setCategory Swift 4.2 iOS 12 - 静音播放声音

iphone - 实现为本地存储的视频中的每一帧触发的委托(delegate)

ios - 如何使用 pathForResource :ofType:inDirectory 访问文件

iphone - SInt32 AudioUnitSampleType 实际上保存了整个音频数据吗?

ios - 什么是交错音频?

iphone - AudioQueue不输出任何声音

iphone - 以最快的方式获取 facebook 好友头像 - iOS

ios - NSTextAttachment 以某种方式缓存图像。关于如何做有什么想法吗?