免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3631 | 回复: 7
打印 上一主题 下一主题

怎么实现一个使用madlib的mp3播放器? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-03-12 19:31 |只看该作者 |倒序浏览
我看了http://www.ibm.com/developerworks/cn/linux/l-cn-libmadmp3player/index.html#rate
Sample Text
这篇文章.但是在实现这个播放器的时候遇到问题.问题在把解码后的pcm数据在调用alsa来写入音频设备,播放出来的声音并不正确,而是杂省.哪位有兴趣和我共同研究一下linux在这方面的开发,怎么样?谢谢!

player.tar

120 KB, 下载次数: 192

mp3播放器

论坛徽章:
0
2 [报告]
发表于 2007-03-13 11:30 |只看该作者
这样使用啊,madlld  <  *.mp3    有规律的乱响。

[ 本帖最后由 kingroc 于 2007-3-13 13:58 编辑 ]

论坛徽章:
0
3 [报告]
发表于 2007-03-13 18:53 |只看该作者
就是呀。问题就出在这里。你认真看看源代码,看看找的到问题的结症在哪里不?我也在早。但是这几天比较忙。大家共同提高啊

论坛徽章:
0
4 [报告]
发表于 2007-03-16 14:04 |只看该作者
我把这些
          Sample = Synth.pcm.samples[0][i];
          
                snd_pcm_writei (handle, OutputBuffer, OUTPUT_BUFFER_SIZE);
我把sample保存到OutputBuffer中,然后直接输出到handle这个音频设备上,可以不?

楼上的可以把我的代码修改来正常播放mp3吗?

论坛徽章:
0
5 [报告]
发表于 2007-03-17 19:11 |只看该作者
经过我的修改现在可以播放声音了.
但是问题在
播放器会随机的自动停止播放声音.就是说每一次停止播放声音的位置在一首歌曲的不同地方.

但是还在继续解码知道解码完成.而且也在向音频设备中输入pcm数据.但是就是没有声音播放了.
这是什么道理?有哪个可以想出来的?
谢谢哈

论坛徽章:
0
6 [报告]
发表于 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();
                }

怎么解决?

论坛徽章:
0
7 [报告]
发表于 2007-03-18 06:17 |只看该作者
.

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

.

论坛徽章:
0
8 [报告]
发表于 2007-03-18 12:05 |只看该作者
我是练习一下编程.所以就是用的madlib库,解码的.你可以在看看我的贴上的代码.看看问题的解决方案是什么?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP