经验总结:
1.mpg123到底是什么东西?
mpg123是一个音频解码工具,负责解码,然后调用驱动播放音乐或者视频。(默认调用的驱动是dps/alsa)。
2.如何使用mpg123?
在官方网站可以下载到mpg123的源码。当然源码也有win和Linux的,我所下载的版本分别为:
mpg123-0.59r-gpl
里面没有configure文件,但是有Makefile文件,修改gcc(CC 交叉编译器位置)以及头文件位置(CFLAGS 开发板内核include位置,在前面要加上-I)。在终端运行make将会生成一个名为mpg123的可执行文件,下载到开发板上面,./mpg123 *.mp3 就可以播放音乐。也可以在运行的时候添加后缀 ./mpg123 -C *.mp3(实现键盘控制的功能,s为暂停,f为下一曲,坑爹的是没有上一曲与音量的加减)。
使用方法;
-v 打印播放时间 -q 不打印标题,默认是打印的
-t 测试程序,没有输出 -s 解码后的pcm输出到屏幕(默认是送到声卡驱动播放)
-w 将播放的pcm打包成wav输出,而不是播放
-k n skip多少帧播放,用于seek用 -n n 只解码多少帧
-c 测试过,没看出来什么效果 -y 显示同步错误
-b 改变输出buf的大小(不常用) -f 10000 改变声音系数,可以用来调节声音大小
-os,-ol,-oh output to built-in speaker,line-out connector,headphones
-d k 每隔k帧播放一次,用于跳帧,实际当中可以用来快进快退
-C 产生热键校园: s 应用pause ,pp用于换房播放 q用于退出
注:尝试了通过进程间通讯的方式向程序发送‘s’,并没有让音乐暂停,而且程序在C程序里面启动的后停下来的时候终端会出现问题。按键就出现#。但是通过控制进程的方法实现了暂停与播放,方法为暂停进程和恢复进程
("kill -TSTP `pidof mpg123`" "kill -CONT `pidof mpg123`")。
程序中启动可执行程序的语句为
(system:重新运行一个程序,execlp:将当前进程替换)。
( system("./mpg123 trxd.mp3 &") , execlp( "./mpg123", "./mpg123","-C" ,"trxd.mp3",NULL ) )。
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
mpg123-1.25.2
这个版本里面东西比较多,有configure文件,在编译之前需要先运行configure文件(./configure),运行后就会生成Makefile文件,然后先make,接着make install,最终编译完成后会在src文件夹下面生成一个mpg123的可执行文件,而且在终端也能直接mpg123 *.mp3(个人认为是一个软件包安装完成了,在Linux下面有mpg123的软件了,所以可以直接使用)。
但是在系统中会报错:
原:main: [src/mpg123.c:309] error: out123 error 3: failure loading driver module
翻译后:主:[src / mpg123.c:309]错误:out123错误3:加载驱动程序模块失败。
(本人怀疑是没有驱动,在Linux下面的 /dev 目录下确实没有dsp/alsa驱动,所以文件才会报错)。
但是在编译成功后会在Linux下面的 /usr/local/lib 文件夹下面生成动态库与静态库文件。
(动态库为.so文件,用的时候加载不用不加载,如果移植的话需要将动态库一起移植到开发板上面。 静态库为 .a 文件,在编译的时候就与程序编译到一起了,程序会有点大,但是不需要将静态库移植到开发板上面,只需要将编译好的文件放在开发板上面就可以运行。)
也曾尝试过修改gcc以及添加头文件的路径,但是程序会报错,没有交叉编译成功,出错愿意有可能是里面有win32文件的原因,尝试过在Makefile中删除有关win32的东西,但是4000+的Makefile实在是无从下手。
在这个版本的说明中,热键里面有,上一曲下一曲,音量的控制等。
您可以指定选项-C以启用终端控制界面,通过按某个键可以影响当前标题/播放列表的播放:
- =终端控制键= -
[s]或[]中断/重新开始播放(即'暂停')
[f]下一首歌曲
[d]之前的曲目
[b]回到赛道的开始
[p]暂停当前声音块的循环
[。]向前
[,]倒带
[:]快进
[;]快退
[>]罚款前进
[<]倒带
[+]音量增加
[-] 音量减小
[R] RVA开关
[v]详细切换
[l]列出当前播放列表,指示当前的曲目
[t]显示标签信息(再次)
[m]打印MPEG标题信息(再次)
[h]这个帮助
[Q]退出
您可以通过修改term.h来更改这些绑定以符合您的喜好。
注意:此接口不需要在_every_ platform / build上可用。
想过将这个版本里面的功能添加到可用的版本中,但是在实现的时候发现在功能中有好多函数在可用的版本中没有,尝试将热键的 .c 与 .h文件直接拷贝过去,结果实现不了。
注:无论是使用静态库还是动态库都要连接,要不然会报错,而且如果要移植到开发板上面库可能也要交叉编译。不然可能会出现找不到文件。
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 总结 -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
目标为带有播放列表,点击播放列表里面的可以选择播放,带有上一曲下一曲,暂停播放,调节声音的音乐播放器。
目前实现功能:暂停与播放(还不是很满意)。
个人觉的后期还是要修改源码,要不然可能实现不了,也可以移植库文件,然后将程序重写,但是技术有限,修改源码都不知从何下手呢。
原因:虽然可以使用进程间通讯,但是mpg123是通过键盘按键的消息控制快进,暂停什么的。
虽然可以通过暂停进程的方式实现暂停与播放,但是不可以实现音量的加减。
可能没有我想的那么难,但是现在的我还没有理解到位,先做个笔记,免得忘了。
加油,你是最棒的!!!