Chinaunix

标题: 怎么实现一个使用madlib的mp3播放器? [打印本页]

作者: okdavinci    时间: 2007-03-12 19:31
标题: 怎么实现一个使用madlib的mp3播放器?
我看了http://www.ibm.com/developerworks/cn/linux/l-cn-libmadmp3player/index.html#rate
Sample Text
这篇文章.但是在实现这个播放器的时候遇到问题.问题在把解码后的pcm数据在调用alsa来写入音频设备,播放出来的声音并不正确,而是杂省.哪位有兴趣和我共同研究一下linux在这方面的开发,怎么样?谢谢!

player.tar

120 KB, 下载次数: 192

mp3播放器


作者: kingroc    时间: 2007-03-13 11:30
这样使用啊,madlld  <  *.mp3    有规律的乱响。

[ 本帖最后由 kingroc 于 2007-3-13 13:58 编辑 ]
作者: okdavinci    时间: 2007-03-13 18:53
就是呀。问题就出在这里。你认真看看源代码,看看找的到问题的结症在哪里不?我也在早。但是这几天比较忙。大家共同提高啊
作者: okdavinci    时间: 2007-03-16 14:04
我把这些
          Sample = Synth.pcm.samples[0][i];
          
                snd_pcm_writei (handle, OutputBuffer, OUTPUT_BUFFER_SIZE);
我把sample保存到OutputBuffer中,然后直接输出到handle这个音频设备上,可以不?

楼上的可以把我的代码修改来正常播放mp3吗?
作者: okdavinci    时间: 2007-03-17 19:11
经过我的修改现在可以播放声音了.
但是问题在
播放器会随机的自动停止播放声音.就是说每一次停止播放声音的位置在一首歌曲的不同地方.

但是还在继续解码知道解码完成.而且也在向音频设备中输入pcm数据.但是就是没有声音播放了.
这是什么道理?有哪个可以想出来的?
谢谢哈
作者: okdavinci    时间: 2007-03-17 22:03
原来问题在这里.但是却不知道怎么解决.好像是系统的原因哦.
if (OutputPtr == OutputBufferEnd)
            {

                printf("the buffer is full\n");
                snd_pcm_uframes_t frames = snd_pcm_writei(playback_handle,OutputBuffer,OUTPUT_BUFFER_SIZE >> 3);
                printf("after writei\n");
                if(frames < 0)
                {
                    int ret = snd_pcm_prepare(playback_handle);
                    printf("error 0\n");
                    if(ret < 0)
                    {
                        printf("error 1\n");
                        exit(1);
                    }
                }
                else if(frames >0 && frames < OUTPUT_BUFFER_SIZE>>3)
                {
                    printf("in middle\n");//问题在这里,但是怎么可能会发生这种事情了.但是的确是发生了.
我告诉系统把OutputBuffer中的数据完全输出,但是实际上,偶尔一次,系统不这么做,就导致播放不了声音
                //    int ret = snd_pcm_prepare(playback_handle);
                    //abort();
                }

怎么解决?
作者: bGFuZ3Vl    时间: 2007-03-18 06:17
.

我觉得用 mpg123 就可以了,不必重新造个轮子出来。如果要写我也用 lame 里提供的编/解码器——当然,这些都是个人喜好的问题。

.
作者: okdavinci    时间: 2007-03-18 12:05
我是练习一下编程.所以就是用的madlib库,解码的.你可以在看看我的贴上的代码.看看问题的解决方案是什么?




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2