pcm - 尝试使用 AudioKit 将 PCM 转换为 MP3 时崩溃
问题描述
我正在尝试将 iPhone 麦克风中的音频实时转换为 MP3。
我有这样的设置:
let format = AVAudioFormat(commonFormat: AVAudioCommonFormat.pcmFormatInt16,
sampleRate: 44100.0,
channels: 1,
interleaved: true)
mic.avAudioUnitOrNode.installTap(onBus: 0, bufferSize: AVAudioFrameCount((format?.sampleRate)!), format: format, block: { (buffer: AVAudioPCMBuffer!, time: AVAudioTime!) -> Void in
let audioBuffer : AVAudioBuffer = buffer
self.audioProcessor?.processBuffer( audioBuffer.mutableAudioBufferList)
})
-(void)processBuffer: (AudioBufferList*) audioBufferList;
{
const int PCM_SIZE = 8192;
const int MP3_SIZE = 8192;
short int pcm_buffer[PCM_SIZE*2];
unsigned char mp3_buffer[MP3_SIZE];
int write = lame_encode_buffer_interleaved(mLame, pcm_buffer,(int*) audioBufferList->mBuffers[0].mData, mp3_buffer, MP3_SIZE);
//some other stuff
}
但是一到编码部分,我就会崩溃。
编辑:
我让它停止崩溃,但音频质量非常苛刻:
int size = audioBufferList->mBuffers[0].mDataByteSize / 2;
unsigned char mp3_buffer[size * 4];
int write = lame_encode_buffer(mLame, audioBufferList->mBuffers[0].mData, audioBufferList->mBuffers[0].mData, size, mp3_buffer, size*4);
解决方案
源音频和编码器之间的采样率不匹配。
推荐阅读
- r - 堆积面积图 Y 轴不反映实际数据点:带有可重现的示例
- scala - 应该返回相同的值 3 个连续调用
- list - 如何在 Python3 中检查一个空列表
- r - 在 R 中使用管道运算符重命名变量
- c# - 下载文件时防止 UI 冻结
- javascript - React Checkbox Component返回唯一键道具错误
- javascript - 在wixsite的javascript中循环遍历数组
- java - Java Spring,如何检索记录并使用新的唯一键发布重复项?
- qt - QCursor::pos() 和 event->globalPos() 有什么区别?
- windows - 有没有办法在 Windows 中设置 awsglue 模块以在本地测试 Python Glue 作业