- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我遇到了 AVAudioConverter
的问题.我正在尝试转换 AVAudioPCMBuffers
至 AAC
.
这是我用于转换的函数,取自“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>
所以你可以看到它没有被填满。
如果你想知道我得到了 AVAudioPCMBuffer
在 AVAudioEngine
上安装水龙头.我正在将其转换为与 inputFormat
相同的格式使用 AVAudioEngines
主 blender 。
有人知道解决这个问题的方法吗?
最佳答案
我认为问题在于您构建的inputFormat
与inBuffer.format
不同。试试这个:
let inputFormat = inBuffer.format
并确保在设备上运行代码,因为它似乎无法在模拟器上运行。
关于swift - AVAudioConverter 将 AVAudioPCMBuffer 转换为 AAC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40419319/
我需要将用 2 个音频 channel 录制的 .wav 文件转换为只有 1 个 channel 的 .wav 文件,并将位深度从 32 减少到 16。我一直在尝试使用 AVAudioConverte
AVAudioConverter 在 iOS 10 中似乎坏了。该代码在 iOS 9 中运行,现在 错误域=NSOSStatusErrorDomain 代码=-50“(空)” 无论使用什么音频格式,都
我遇到了 AVAudioConverter 的问题.我正在尝试转换 AVAudioPCMBuffers至 AAC . 这是我用于转换的函数,取自“What's new in Core Audio” s
我正在尝试将音频缓冲区转换为不同的格式,并且我正在使用 AVAudioConverter。当您具有相同的采样率并且您不需要使用 AVAudioConverterInputBlock 时,AVAudio
此方法处理来自 AVAudioEngine 输入节点上 installTap 的回调。我已确认我正在获取单声道 float32/48000hz 缓冲区数据,我想将其转换为单声道 int16/16000
如何在 Swift 上使用 AVAudioConverter、AVAudioCompressedBuffer 和 AVAudioPCMBuffer 将 AAC 转换为 PCM? 在 WWDC 2015
我是一名优秀的程序员,十分优秀!