我和AVAudioConverter有个问题。我正在尝试将AVAudioPCMBuffers转换为AAC。
这是我的转换功能,取自“核心音频中的新内容” session 507 at WWDC 2015。
func convertPCMBufferToAAC(inBuffer : AVAudioPCMBuffer) -> Void {
let inputFormat = AVAudioFormat(commonFormat: .pcmFormatFloat32,
sampleRate: 8000, channels: 1,
interleaved: false)
var outDesc = AudioStreamBasicDescription(mSampleRate: 8000,
mFormatID: kAudioFormatMPEG4AAC,
mFormatFlags: 0,
mBytesPerPacket: 0,
mFramesPerPacket: 0,
mBytesPerFrame: 0,
mChannelsPerFrame: 1,
mBitsPerChannel: 0,
mReserved: 0)
let outputFormat = AVAudioFormat(streamDescription: &outDesc)
let converter = AVAudioConverter(from: inputFormat, to: outputFormat)
let outBuffer = AVAudioCompressedBuffer(format: outputFormat,
packetCapacity: 8,
maximumPacketSize: converter.maximumOutputPacketSize)
let inputBlock : AVAudioConverterInputBlock = {
inNumPackets, outStatus in
outStatus.pointee = AVAudioConverterInputStatus.haveData
return inBuffer
}
var error : NSError?
let status = converter.convert(to: outBuffer, error: &error, withInputFrom: inputBlock)
}问题是outBuffer是空的。如果我打印它,我就会得到输出<AVAudioCompressedBuffer@0x170012420: 0/6144 bytes>,所以正如您所看到的,它没有被填充。
如果您想知道我是从安装AVAudioPCMBuffer的AVAudioEngine上得到的。这是我转换为相同的格式与inputFormat使用AVAudioEngines主混频器。
有人知道解决这个问题的办法吗?
发布于 2016-11-04 12:11:57
我认为问题在于您构造的inputFormat与inBuffer.format不同。试一试:
let inputFormat = inBuffer.format并确保在设备上运行代码,因为它在模拟器上似乎不起作用。
https://stackoverflow.com/questions/40419319
复制相似问题