首先,我是iOS和音频编程的新手,所以如果我没有使用正确的技术术语,请容忍我,但是我会尽我最大的努力!
我们想做的是:
在我们正在开发的iOS应用程序中,我们希望能够通过4种不同的输出来播放声音,从而拥有一个迷你环绕声系统。也就是说,我们想让左右通道通过耳机播放,而中心和中心通过连接到闪电端口的音频硬件环绕播放。由于音频文件将从远程服务器进行流/下载,因此不能选择使用原始(PCM)音频文件。
问题是:
从iOS 6开始,苹果就可以使用多路配置播放音频文件.这就是我们需要的..。但是,当我们尝试播放一个4声道音频文件,AAC编码并封装成m4a (或CAF)文件格式时,我们会得到以下错误:
ERROR: [0x19deee000] AVAudioFile.mm:86: AVAudioFileImpl: error 1718449215 (它是"kAudioFileUnsupportedDataFormatError“的状态码 )
当我们使用相同的音频编码为无损(ALAC)时,我们会得到相同的错误,但是当我们在编码之前播放相同的音频(PCM格式)时,我们不会得到这个错误。
当我们在AAC和ALAC中使用立体声音频文件或5.1音频文件编码时,我们也不会得到错误,就像4通道音频文件一样。
我们试过的是:
使用Mac: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为主音频文件提供的音频格式:
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: I16AAC编码格式信息:
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)有人对音频数据格式可能有什么问题有一点提示吗?
发布于 2016-12-20 11:09:28
在与Apple支持部门联系后,答案是,对于当前的发货系统配置来说,这是不可能的:
“感谢您联系Apple Developer Technical (DTS)。我们的工程师已经审查了您的请求,并得出结论认为,考虑到当前的运输系统配置,没有支持实现所需功能的方法。”
https://stackoverflow.com/questions/33034427
复制相似问题