问一个关于实现MP3编码问题

chentian08 发布于 2012/07/03 14:57
阅读 924
收藏 0

我想将从电脑声卡采集的声音信号,编成MP3格式,然后保存到电脑或通过网络发送出去,但是在实现编码压缩的时候(我是用lame,这个库来实现编码的),失真很大,在声卡采集的格式设置是 m_WaveFormat.wFormatTag = WAVE_FORMAT_PCM;
 m_WaveFormat.nChannels = 2;
 m_WaveFormat.nSamplesPerSec = DWORD(22050);
 m_WaveFormat.nAvgBytesPerSec = DWORD(22050 * 4);
 m_WaveFormat.nBlockAlign = 4;
 m_WaveFormat.wBitsPerSample = 16;
 m_WaveFormat.cbSize = sizeof(WAVEFORMATEX);

编码格式设置

lame_init(&m_gf);

 m_gf.num_channels=1;
 m_gf.in_samplerate = 22050;  
 m_gf.brate = 32;
 m_gf.mode = 3;      //* stereo, jstereo, mono
 m_gf.quality = 5;       //* 2=high, 5=medium 9=low

 lame_init_params(&m_gf);

我为声卡采集分配的缓冲是char m_buf[2][1152];//1152个采样值,声音双缓冲(即两个输入缓冲区,轮流提取)

编码

int len = lame_encode_buffer_interleaved(&m_gf, waveBuf[0] /*short waveBuf[2][1152]*/, 2304,(char *)m_mp3Buf , LAME_MAXMP3BUFFER);

加载中
0
c
chentian08

路过的,来看看

0
xyz555
xyz555
mp3搞商业开发是要交专利费的,ogg这种格式就不用。纯属题外话,呵呵。
0
c
chentian08

用lame,xing,bass这些库也不行吗?

0
xyz555
xyz555
某个技术申请了专利,不管用什么方式使用了这个技术,就要向权力人交专利费的。为什么  firefox的HTML5播放器支持ogg但不支持mp3就是专利的原因。另:chrome支持mp3。
0
c
chentian08

问题:使用BASS_StreamPutData将解码后的数据添加到播放流中,为什么数据越来越多的,为什么之前的数据还在,我不知道是不是我的程序有问题,还是不理解它的用法,一首4M左右的歌,分帧解码后,在流中竟有20几M,我应该怎么做才好


如果知道,可以将方法发到我邮箱:735838956@qq.com

0
xyz555
xyz555

mp3是压缩了的编码,解码后体积自然要大。mp3压缩大概是未压缩的1/10的样子,你可以用比如千千静听去转个mp3->wav文件,wav一般是未压缩的声音格式,比较一下大小就知道了。

失真看看是否你的取样频率太低了,一般常见的声音取样频率是44100,

0
yak
yak
语音的话用speex,传输数据比mp3要小  差不多1/6
返回顶部
顶部