gpt4 book ai didi

java - Android: LAME 将 AudioRecoder 的 PCM 数据转换为 MP3,但 MP3 文件有一些噪音

转载 作者:行者123 更新时间:2023-11-29 05:16:43 31 4
gpt4 key购买 nike

我在我的 Android 应用程序上使用 LAME,以便将 PCM 数据从 AudioRecoder 转换为 MP3。我可以生成 MP3 文件,但它有一些噪音。

这是我的部分 jni 代码:

jbyte *bufferArray = (*env)->GetByteArrayElements(env, buffer, NULL);
//Convert To Short
int shortLength = length / 2;
short int shortBufferArray[shortLength];
int i ;
for(i=0;i<shortLength;i++){
int index = 2*i;
shortBufferArray[i] = (bufferArray[index+1] << 8) | bufferArray[index];
}

int mp3BufferSize = (int)(shortLength*1.5+7200);
unsigned char output[mp3BufferSize];
int encodeResult;
if(lame_get_num_channels(lame)==2){
encodeResult = lame_encode_buffer_interleaved(lame, shortBufferArray, shortLength/2, output, mp3BufferSize);
}else{
encodeResult = lame_encode_buffer(lame, shortBufferArray, shortBufferArray, shortLength, output, mp3BufferSize);
}

if(encodeResult < 0){
return NULL;
}
jbyteArray result = (*env)->NewByteArray(env, encodeResult);
(*env)->SetByteArrayRegion(env, result, 0, encodeResult, output);
(*env)->ReleaseByteArrayElements(env, buffer, bufferArray, 0);
return result;

我调用此 jni 函数将 PCM 数据编码为 MP3 数据,然后将 MP3 数据写入文件以构建 MP3 文件。 PCM数据全部编码后,生成MP3文件。看起来播放MP3文件是正常的,但是即使我使用320kbps的码率,MP3文件的质量也很差。 MP3 文件中有一些噪音,但为什么?

最佳答案

shortBufferArray[i] = (bufferArray[index+1] << 8) |  bufferArray[index];

当不太重要的字节被隐式地(并且出于您的目的,不正确地)符号扩展为短时,将引入错误。

相反,使用

shortBufferArray[i] = (bufferArray[index+1] << 8) |  ((unsigned char) bufferArray[index]);

强制它将低字节视为没有符号位(只有高字节有)。

关于java - Android: LAME 将 AudioRecoder 的 PCM 数据转换为 MP3,但 MP3 文件有一些噪音,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26306561/

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