请问如何利用madplay管理自己的播放器,比如调节音量

zfm850722 2009-03-27 03:28:01
我的板子是基于ARM926EJ-S处理器的,操作系统内核是linux-2.6.24,然后在Ubuntu 8.04编译了madplay,
再将madplay可执行文件下载到目标板的/bin目录下,将libmad.so.0库文件下载到目标板的/lib目录下,
通过Ubuntu 8.04终端的串口调试命令minicom建立与目标板的连接,
然后执行播放一个mp3文件的命令,比如:madplay A.mp3.音乐是播放出来了,效果也还可以,但是madplay会一直播放这首哥,什么命令都输不进去,包括停止不了,暂停不了,就是把Ubuntu 8.04的命令行终端关闭了,目标板也还会一直播放,除非把目标板的电源关了才能关闭这首歌。 怎样才能实现关闭或者暂停madplay啊?还有我想用madplay来调节音量,不知道要用什么命令或者什么程序?
高手帮帮我啊,我是Linux菜鸟啊,刚学习Linux不到半个月。
拜托了。
先谢谢大家。
...全文
4443 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
ttlyfast 2010-02-07
  • 打赏
  • 举报
回复
进度条有点麻烦其他的都容易
once_and_again 2009-04-07
  • 打赏
  • 举报
回复
p or SPACE pause movie (press any key to continue)
q or ESC stop playing and quit program
+ or - adjust audio delay by +/- 0.1 second
o cycle OSD mode: none / seekbar / seekbar + timer
* or / increase or decrease PCM volume

看mplayer 源码.
zfm850722 2009-04-05
  • 打赏
  • 举报
回复
大侠有知道的帮我看看啊,谢谢啦
zfm850722 2009-04-01
  • 打赏
  • 举报
回复
谢谢大家
我这两天写了一个管理madplay的主程序,包括播放,暂停播放,恢复播放,停止播放,现在贴出来讨论一下:

system("madplay wmsj.mp3 &");//利用system函数调用madplay播放器播放*.mp3音乐

system("killall -9 madplay");//利用system函数调用killall命令将madplay终止掉

system("killall -STOP madplay &");//利用system函数调用killall命令将madplay暂停

system("killall -CONT madplay &");//利用system函数调用killall命令恢复madplay的播放

功能基本能实现,但是又出现问题了:

当调用system("killall -STOP madplay &")进行暂停播放之后如果调用system("killall -CONT madplay &")进行恢复播放,则导致播放出来的声音将会失真,这个失真并不是每

次都会发生,有的时候它又能正常进行播放。

分析了好久都没有找到原因,后来考虑是不是在调用 system函数这里出问题了,于是就去看system函数的源代码,发现system函数内部是通过产生一个子进程来进完成所需命令的操作,

它集成了fork()、execl()、waitpid()这样的三个函数,于是针对这个问题我分析如下,不知道对不对,望大侠也帮我分析分析:

每当调用system("killall -STOP madplay &")进行暂停播放时,子进程是暂停了,但是madplay对mp3的数据流继续进行操作,暂停一段时间之后再调用system("killall -CONT

madplay &")进行恢复播放就会使写到音频设备上的数据流对接不上,所以导致了播放出来的声音失真了。而有的时候又不会失真是因为写到音频设备上的数据流正好对接上了,这是个偶

然现象,所以产生上述所描述的有时候失真而有时候又不失真的问题就很有可能了。

请高手也帮我分析分析,我不知道是不是这样理解,如过是这样要怎么解决呢?

先谢谢各位了。
dongpy 2009-03-31
  • 打赏
  • 举报
回复
调节音量是标准接口,跟madplay没关系,madplay的主要工作是解码。

#define BASE_VALUE 257
int fd = open("/dev/mixer",O_RDWR);
int v = BASE_VALUE*50;
ioctl(fd,MIXER_WRITE(0),&v);
zfm850722 2009-03-30
  • 打赏
  • 举报
回复
谢谢hefuhua
我还是先把madplay的原代码看懂吧。
hefuhua 2009-03-30
  • 打赏
  • 举报
回复
madplay --help
你说的这些基本有快捷键的,源码里也可以自己定义

改声声音大小,看你用的声卡接口是oss或者alsa都有相应的shell命令控制,网上也有声音大小的接口控制,madplay中也有的
zfm850722 2009-03-30
  • 打赏
  • 举报
回复
谢谢楼上的
我的问题不是没有编译好madplay,我已经编译好了madplay,并且可以播放mp3音乐,我现在想管理madplay,比如当他播放一首音乐时,我想暂停播放或者继续播放或者停止播放,这样子要怎么实现呢??
还有我想知道怎么利用madplay来控制音乐的音量。
怎么发了那么久的贴子都没有人回答我呢?大侠们,帮帮我啊,我好急啊,
拜托了 ,先谢谢大家了。
unixlinuxsys 2009-03-28
  • 打赏
  • 举报
回复
它还需要libmad 和libid3tag 两个库, 从该网站找到下载连接
http://sourceforge.net/project/showfiles.php?group_id=12349
这样我们就得到了移植madplay 所需要的关键的三个文件:
madplay-0.15.2b.tar.gz
libmad-0.15.1b.tar.gz
libid3tag-0.15.1b.tar.gz


这里有splay_fp版本的。

madplay也可以播放的,libmad是定点运算的。播放很流畅。

如果采用madplay,需要libmad, libid3tag, zlib等。

configure

1.
编译zlib 因为libid3tag需要这个库
./configure --prefix=/usr/local/arm/2.95.3/arm-linux
修改Makefile
AR=/usr/local/arm/2.95.3/bin/arm-linux-ar
CC=/usr/local/arm/2.95.3/bin/arm-linux-gcc
RANLIB=/usr/local/arm/2.95.3/bin/arm-linux-ranlib

最后AR 命令要添加rcs,否则出错

make
make install

2.
编译libid3tag
./configure --host=arm-linux CC=arm-linux-gcc --disable-debugging --disable-shared --prefix=/usr/local/arm/2.95.3/arm-linux
make
make install

3.
编译libmad
./configure --enable-fpm=arm --host=arm-linux --disable-shared --disable-debugging --prefix=/usr/local/arm/2.95.3/arm-linux CC=arm-linux-gcc
make
make install

4.
编译madplay
./configure --host=arm-linux CC=arm-linux-gcc --disable-debugging --disable-shared
make
但是,这样得到的是动态连接的。
rm madplay
拷贝make的最后一个连接的命令,在最后加上-static,然后运行,得到静态连接的程序
OK

18,829

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 专题技术讨论区
社区管理员
  • 专题技术讨论区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧