首先,我是iOS和音频编程的菜鸟,所以如果我不使用正确的技术术语,请耐心等待,但我会尽我所能!
在我们正在开发的iOS应用程序中,我们希望能够在4种不同的输出中播放声音以拥有迷你环绕声系统。也就是说,我们希望通过耳机播放左右声道,而中心和中心环绕声通过连接到闪电端口的音频硬件播放。由于音频文件将从远程服务器流式传输/下载,因此无法使用原始(PCM)音频文件。
ERROR: [0x19deee000] AVAudioFile.mm:86: AVAudioFileImpl: error 1718449215
(这是“kAudioFileUnsupportedDataFormatError”的status code)
当我们使用编码为无损(ALAC)的相同音频时,我们会得到相同的错误,但是在播放相同的音频编码(PCM格式)时我们不会收到此错误。
在AAC和ALAC中,当我们使用立体声音频文件或编码的5.1音频文件(与4声道音频文件相同)时,我们都不会收到错误。
该文件使用Apple Mac OS X提供的音频工具进行编码: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
----
在代码部分,在开始时,我们使用AVAudioPlayer API跟踪session 505 of WWDC12处提供的实现。在那个级别,多路由似乎没有可靠的工作......我们没有怀疑这可能与音频格式有关,所以我们继续尝试使用AVAudioEngine API,在WWDC14的会话502和相关的示例代码中展示它。我们为主4通道音频文件(经过一些调整后)进行了多路径处理,但是当我们调用scheduleFile
时我们遇到了上面提到的错误,如下面的代码片段所示(注意:我们正在使用Swift和所有必要的音频图设置已完成但未在此处显示):
var playerNode: AVAudioPlayerNode!
...
...
let audioFileToPlay = AVAudioFile(forReading: URLOfTheAudioFle)
playerNode.scheduleFile(audioFileToPlay, atTime: nil, completionHandler: nil)
是否有人暗示音频数据格式可能出错?
答案 0 :(得分:0)
联系Apple支持部门后,答案是当前发货的系统配置无法实现此目的:
“感谢您联系Apple开发人员技术支持(DTS)。我们的工程师已经审核了您的请求,并得出结论认为,根据当前出货的系统配置,没有支持的方法来实现所需的功能。”