2
我遇到AVAudioConverter
问题。我试图将AVAudioPCMBuffers
转换为AAC
。AVAudioConverter将AVAudioPCMBuffer转换为AAC
这是我的转换功能,从采取“什么在核心音频新”会话507在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是空的。如果我打印它,我得到输出<[email protected]: 0/6144 bytes>
,因为你可以看到它没有填充。
如果您想知道我在AVAudioEngine
上安装了水龙头AVAudioPCMBuffer
。我将使用AVAudioEngines
主调音台将其转换为与inputFormat
相同的格式。
有没有人知道这个解决方案?
不幸的是,与以前相同的问题和错误代码(Error Domain = NSOSStatusErrorDomain Code = -50“(null)”):/ – nullforlife
您的inputBlock被调用了吗? –
不,它不是。 – nullforlife