iOS支持的压缩4通道音频文件格式是什么?

4
首先,我对iOS和音频编程都是新手,如果我没有使用正确的技术术语,请谅解,我会尽力而为!
我们想做什么:
在我们开发的iOS应用程序中,我们希望能够通过4个不同的输出播放声音,以实现迷你环绕系统。也就是说,我们希望左声道和右声道通过耳机播放,而中心和中心环绕则通过连接到闪电口的音频硬件播放。由于音频文件将从远程服务器流式传输/下载,因此使用原始(PCM)音频文件不是一个选项。
问题:
自iOS 6以来,苹果已经使得使用多路配置播放音频文件成为可能... 这正是我们需要的,但是,每当我们尝试播放一个4声道的音频文件(采用AAC编码,并封装为m4a(或CAF)文件格式),我们会收到以下错误:

错误:[0x19deee000] AVAudioFile.mm:86: AVAudioFileImpl:错误1718449215 (这是“kAudioFileUnsupportedDataFormatError”的状态代码

当我们使用相同的音频以无损(ALAC)编码时,我们也会遇到同样的错误,但在播放相同的音频进行编码之前(PCM格式)时不会出现此错误。

当我们使用立体声音频文件或以相同方式对4通道和5.1音频文件进行编码时(均为AAC和ALAC),我们都不会遇到此错误。

我们尝试过:

  • 编码

该文件是使用Mac OS X提供的Apple音频工具afconvert编码的,使用以下命令:

afconvert -v -f 'm4af' -d "aac@44100" 4ch_master.caf 4ch_44100_AAC.m4a

将以下文本从英语翻译成中文:

afconvert -v -f 'caff' -d "alac@44100" 4ch_master.caf 4ch_44100_ALAC.caf

在无损编码的情况下。

音频格式,由afinfo给出的主(PCM)音频文件:

File:           4ch_master.caf
File type ID:   caff
Num Tracks:     1
----
Data format:     4 ch,  44100 Hz, 'lpcm' (0x0000000C) 16-bit little-endian signed integer
                no channel layout.
estimated duration: 582.741338 sec
audio bytes: 205591144
audio packets: 25698893
bit rate: 2822400 bits per second
packet size upper bound: 8
maximum packet size: 8
audio data file offset: 4096
optimized
audio 25698893 valid frames + 0 priming + 0 remainder = 25698893
source bit depth: I16

AAC编码格式信息:
File:           4ch_44100_AAC.m4a
File type ID:   m4af
Num Tracks:     1
----
Data format:     4 ch,  44100 Hz, 'aac ' (0x00000000) 0 bits/channel, 0 bytes/packet, 1024 frames/packet, 0 bytes/frame
Channel layout: Quadraphonic
estimated duration: 582.741338 sec
audio bytes: 18338514
audio packets: 25099
bit rate: 251730 bits per second
packet size upper bound: 1039
maximum packet size: 1039
audio data file offset: 106496
optimized
audio 25698893 valid frames + 2112 priming + 371 remainder = 25701376
source bit depth: I16
format list:
[ 0] format:      4 ch,  44100 Hz, 'aac ' (0x00000000) 0 bits/channel, 0 bytes/packet, 1024 frames/packet, 0 bytes/frame
Channel layout: Quadraphonic
----

而对于无损编码的音频文件:

File:           4ch_44100_ALAC.caf
File type ID:   caff
Num Tracks:     1
----
Data format:     4 ch,  44100 Hz, 'alac' (0x00000001) from 16-bit source, 4096 frames/packet
Channel layout: 4.0 (C L R Cs)
estimated duration: 582.741338 sec
audio bytes: 83333400
audio packets: 6275
bit rate: 1143862 bits per second
packet size upper bound: 16777
maximum packet size: 16777
audio data file offset: 20480
optimized
audio 25698893 valid frames + 0 priming + 3507 remainder = 25702400
source bit depth: I16
----
  • 代码

在代码部分,一开始,我们按照WWDC12的505会议上所介绍的AVAudioPlayer API实现进行了跟随。在那个级别上,多路传输似乎并不可靠...我们没有怀疑这可能与音频格式有关,因此我们开始尝试使用AVAudioEngine API,在WWDC14的第502次会议中讲解,并附带相应的示例代码。我们对主4通道音频文件进行了一些调整,使得多路传输能够正常工作,但是当我们调用scheduleFile时,就出现了上面提到的错误,如下面的代码片段所示(注意:我们使用的是Swift语言,所有必要的音频图设置已完成,但未在此处显示):

var playerNode: AVAudioPlayerNode!
...
...
let audioFileToPlay = AVAudioFile(forReading: URLOfTheAudioFle)
playerNode.scheduleFile(audioFileToPlay, atTime: nil, completionHandler: nil)

有人对音频数据格式出了什么问题有任何提示吗?

你最终解决了这个问题吗? - Joris Weimar
@JorisWeimar:不,我们还没有。目前,我们正在使用文件的原始格式,同时寻找使用外部音频硬件与5.1压缩音频文件一起的替代解决方案。 - quietNaf
1个回答

0
与苹果支持团队联系后,得到的答复是目前正在销售的系统配置无法实现此功能:
“感谢您联系苹果开发技术支持(DTS)。我们的工程师已经审查了您的请求,并得出结论:鉴于当前正在销售的系统配置,没有支持的方法来实现所需的功能。”

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接