首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AVAudioConverter将AVAudioPCMBuffer转换为AAC

AVAudioConverter将AVAudioPCMBuffer转换为AAC
EN

Stack Overflow用户
提问于 2016-11-04 09:37:26
回答 1查看 2.4K关注 0票数 3

我和AVAudioConverter有个问题。我正在尝试将AVAudioPCMBuffers转换为AAC

这是我的转换功能,取自“核心音频中的新内容” session 507 at WWDC 2015

代码语言:javascript
复制
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>,所以正如您所看到的,它没有被填充。

如果您想知道我是从安装AVAudioPCMBufferAVAudioEngine上得到的。这是我转换为相同的格式与inputFormat使用AVAudioEngines主混频器。

有人知道解决这个问题的办法吗?

EN

回答 1

Stack Overflow用户

发布于 2016-11-04 12:11:57

我认为问题在于您构造的inputFormatinBuffer.format不同。试一试:

代码语言:javascript
复制
let inputFormat = inBuffer.format

并确保在设备上运行代码,因为它在模拟器上似乎不起作用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40419319

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档