社区
Android
帖子详情
LAME PCM 编码 MP3
sfate
2011-10-19 11:25:18
我用lame把重一段视频中抽取的PCM数据转换成MP3,并成功解码播放。(音质没有一点问题)。
但是当我用AudioRecord录音得到的PCM数据,将其编码成MP3后,在解码播放。(却都是噪音)。
如果有做过相关功能的或了解的,赐教阿。。。。。
...全文
956
25
打赏
收藏
LAME PCM 编码 MP3
我用lame把重一段视频中抽取的PCM数据转换成MP3,并成功解码播放。(音质没有一点问题)。 但是当我用AudioRecord录音得到的PCM数据,将其编码成MP3后,在解码播放。(却都是噪音)。 如果有做过相关功能的或了解的,赐教阿。。。。。
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
25 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
s1981x
2014-07-11
打赏
举报
回复
如果读写缓冲区是字节数组(byte[]),对lame来说采样的字节顺序颠倒了,传给lame前需要交换每个采样的两个字节。
stweddy
2014-04-11
打赏
举报
回复
楼主问题解决了吗,我也遇到同样的问题,求解呀
szlwm
2013-01-06
打赏
举报
回复
楼主问题解决了吗,我也遇到同样的问题,求解呀
大扳手工程师
2012-09-24
打赏
举报
回复
LZ问题解决没有。我也遇到同样问题了...
求解答
谢谢
jiokoi
2011-12-02
打赏
举报
回复
write = lame_encode_buffer_interleaved(lame, pcm_buffer, read, mp3_buffer, MP3_SIZE);
这个是处理双通道的,pcm_buffer把两个通道都和在一起了。你应该用 lame_encode_buffer
其中可以把右通道的参数直接置NULL。
lame.h有这个函数的具体写法。
sfate
2011-10-20
打赏
举报
回复
的确,全为0的话, 没有任何声音。
lame_set_num_channels(gf, 1);
lame_set_in_samplerate(gf,8000);
lame_set_brate(gf,128);
//lame_set_mode(gf,1); 默认识MONO 的吧
lame_set_quality(gf,2);
//lame_set_bWriteVbrTag(gf,0);
int ipr = lame_init_params(gf);
我录音 是 8000 16bit
针对于录音的编码,难道还有什么需要设置的吗?
让我想不通的是。 我用一段视频中抽取的PCM数据编码就没有问题。声音也是对的。
sfate
2011-10-20
打赏
举报
回复
谢谢, 我去试试。。
「已注销」
2011-10-20
打赏
举报
回复
用lame编码全为0的PCM数据,如果还有噪音,那lame工作不正常;
没有,则参数设置有问题。
sfate
2011-10-20
打赏
举报
回复
我录制的PCM数据, 通过audioTrack播放正常。
「已注销」
2011-10-20
打赏
举报
回复
AudioRecord录音得到的PCM数据,你验证了是播放正常的?
参数配置错误的话,出现什么问题都有可能。
sfate
2011-10-20
打赏
举报
回复
我录音时, 采样率 8000 宽度 16bit 单声道
从头到尾都是噪音。
如果单单是参数配置问题的话,也不应该都是噪音阿。
sfate
2011-10-20
打赏
举报
回复
这些是 正确的阿,
我录音用的是 采样率 8000 采样宽度 16bit MONO 单声道。
不只是有点噪音, 是从头到尾都是噪音。
「已注销」
2011-10-20
打赏
举报
回复
我不是在android平台上做的。
lame_encode_buffer
常用的播放器啊,暴风影音,Windows Media Player
sfate
2011-10-20
打赏
举报
回复
crystal28
你当时怎么 AudioRecord 用的是 write(byte[],..,..) 还是 write(short[],..,..);
lame_encode_buffer_int lame_encode_buffer_long2 lame_encode_buffer_long
lame_encode_buffer_float lame_encode_buffer_interleaved lame_encode_buffer
还有就是你用的哪个lame的解码方法阿?
麻烦告诉我一下阿。。 谢谢了。
sfate
2011-10-20
打赏
举报
回复
我好像发现问题所在了。
之前我测试录音时, 写PCM 和读PCM都在一个程序里面。 测试声音没有问题。
但是当我 单独写一个程序读取 保存的PCM文件 并输出到AUDIOTRACK时确实噪音
很奇怪啊。。!!!!
sfate
2011-10-20
打赏
举报
回复
我目前就是按你说的这么做的,先把录制的PCM数据存到文件中去,然后读取这个文件在编码成MP3。
void
Java_org_freemp3droid_Converter_convertMP3Simple(JNIEnv* env,jobject thiz,jstring inFile ,jstring outFile, jstring progF, int sampleRate, int bitRate){
int read, write;
const char* outfs;
outfs = (*env)->GetStringUTFChars(env, outFile, NULL);
const char* infs;
infs = (*env)->GetStringUTFChars(env,inFile, NULL);
FILE *pcm = fopen(infs, "rb");
FILE *mp3 = fopen(outfs, "wb");
const int PCM_SIZE = 8192;
const int MP3_SIZE = 8192;
short int pcm_buffer[PCM_SIZE*2];
unsigned char mp3_buffer[MP3_SIZE];
lame_t lame = lame_init();
lame_set_in_samplerate(lame, 44100);
lame_set_brate(lame,192);
lame_set_VBR(lame, vbr_default);
lame_init_params(lame);
do {
read = fread(pcm_buffer, 2*sizeof(short int), PCM_SIZE, pcm);
if (read == 0)
write = lame_encode_flush(lame, mp3_buffer, MP3_SIZE);
else
write = lame_encode_buffer_interleaved(lame, pcm_buffer, read, mp3_buffer, MP3_SIZE);
fwrite(mp3_buffer, write, 1, mp3);
} while (read != 0);
lame_close(lame);
fclose(mp3);
fclose(pcm);
return 0;
}
不考虑错误情况的话,这是最简单的LAME编码吧。
请问是不是我用的方法不对,还是缺少一些处理?
德生coding
2011-10-20
打赏
举报
回复
“但是当我用AudioRecord录音得到的PCM数据”建议在得到PCM数据的时候,先把PCM数据存一份,再编码。存的PCM数据用cooledit软件听一听,看是不是噪音,如果是噪音就说明你的CODEC送出来的数据就有噪音。
sfate
2011-10-20
打赏
举报
回复
都是一样地啊。 宽度都是 16bit, 都是单声道 MONO
是不是我的LAME用法不对啊,还是说你们对Lame库进行了改造呀。。?
「已注销」
2011-10-20
打赏
举报
回复
做过。
除了采样率,两种PCM数据还有不一样的地方吗?如采样宽度,单双声道
sfate
2011-10-20
打赏
举报
回复
不行啊, 我换成了 44100 和 16000 都还是不好使。
你做过将录音的PCM转码成MP3的程序吗?
加载更多回复(5)
cpp-
lame
编码
引擎将
PCM
转为
MP3
LAME
(
LAME
Ain't an
MP3
Encoder)是一个著名的、开源的
MP3
编码
器,用于将数字音频数据从原始的脉冲
编码
调制(
PCM
)格式转换成广泛使用的
MP3
格式。在本文中,我们将深入探讨这个过程,并介绍相关的技术细节。 首先...
Android使用
lame
编码
MP3
//
编码
MP3
FILE *outFile = fopen(outputPath, "wb"); uint32_t numEncodedBytes = 0; while (totalSamples > 0) { numEncodedBytes =
lame
_encode_buffer_interleaved(
lame
,
pcm
Shorts, totalSamples, NULL, ...
FFMPEG实现
PCM
编码
AAC和
MP3
(采用封装格式实现)
1. **
PCM
编码
**:
PCM
是数字音频的基本
编码
方式,它直接将模拟信号转换为数字序列,保留原始音频的所有细节。在FFmpeg中,
PCM
数据可以是单声道或立体声,不同位深度(如16位或24位)表示不同的音频质量。 2. **AAC...
c++
pcm
转
mp3
编码
本文将深入探讨如何使用C++语言将
PCM
(脉冲
编码
调制)数据转换为
MP3
格式,利用
LAME
(Low-Complexity Audio Encoder)这个著名的开源
MP3
编码
库。
PCM
是一种常见的数字音频
编码
方式,它直接对模拟音频信号进行采样并...
Android 录音将
pcm
转
mp3
这个项目利用了Android Studio的环境,通过AudioRecord类来捕捉原始
PCM
(脉冲
编码
调制)音频数据,然后使用
LAME
MP3
编码
库将其转换为高效的
MP3
格式。下面我们将深入探讨这一过程涉及的关键技术点。 首先,`Audio...
Android
80,471
社区成员
91,391
社区内容
发帖
与我相关
我的任务
Android
移动平台 Android
复制链接
扫一扫
分享
社区描述
移动平台 Android
android
android-studio
androidx
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章