gpt4 book ai didi

swift - AVAudioConverter 将 AVAudioPCMBuffer 转换为 AAC

转载 作者:可可西里 更新时间:2023-10-31 23:14:09 33 4
gpt4 key购买 nike

我遇到了 AVAudioConverter 的问题.我正在尝试转换 AVAudioPCMBuffersAAC .

这是我用于转换的函数,取自“What's new in Core Audio” 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>所以你可以看到它没有被填满。

如果你想知道我得到了 AVAudioPCMBufferAVAudioEngine 上安装水龙头.我正在将其转换为与 inputFormat 相同的格式使用 AVAudioEngines主 blender 。

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

最佳答案

我认为问题在于您构建的inputFormatinBuffer.format 不同。试试这个:

let inputFormat = inBuffer.format

并确保在设备上运行代码,因为它似乎无法在模拟器上运行。

关于swift - AVAudioConverter 将 AVAudioPCMBuffer 转换为 AAC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40419319/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com