全部博文(685)
分类: 嵌入式
2014-10-14 09:59:17
我们继续网络音箱的专题,这章将介绍安卓系统下的MP标准软件控制播放音乐。
MP全称为音乐播放进程(Music Player Daemon)。它是一个可定制化功能强大的服务端播放音乐软件,通过其自身的插件和库系统即可完成通过网络控制播放音乐。MP具备一个自己的控制管理协议,这些协议是基于TCP协议进行传输的。客户端连接到服务器上控制服务端进行处理。MPD表示服务端,MPC表示客户端。
MP是一个完全开放源代码的整体系统,因此有很多操作系统下的客户端,在安卓手机中即可使用MPDroid这个软件控制服务端播放,而如果您需要开发自己的产品,完全可以参考官方的资料自己开发一个控制程序,甚至给服务端增加新的功能。
使用MP的好处是,只要你的手机连接到家里的上既可以控制播放音乐,而手机还随身携带,这样不影响你扫地啊、煮饭啊等等工作是不是。
MP的官方网站为
首先确保你12章的测试和操作OK声卡已经正常工作了。
然后开始安装软件包,我们教程中使用的是mpd-mini该软件包是mpd的OpenWRT精简版完成了主要的功能,而且也比较节省CPU和内存。
root@SmartRouter:/# opkg update
root@SmartRouter:/# opkg install mpd-mini
第一步: 创建必须的文件夹,在这一步,我们选择使用extdisk作为存储位置,这样的好处是上传到系统的文件可以通过Windows文件共享等方式实现。当然你也可以开发一个新的客户端软件实现将手机的音乐同步到服务端上。
创建音乐文件存放位置
root@SmartRouter:/# mkdir -p /mnt/extdisk/music
root@SmartRouter:/# chmod -R 777 /mnt/extdisk/music
创建播放列表存放位置
root@SmartRouter:/# mkdir -p /mnt/extdisk/music_playlist
root@SmartRouter:/# chmod -R 777 /mnt/extdisk/music_playlist
创建播放器数据位置
root@SmartRouter:/# mkdir -p /mnt/extdisk/music_bin
root@SmartRouter:/# chmod -R 755 /mnt/extdisk/music_bin
第二步: 创建初始化的文件,这些文件都是mpd所需要使用的
root@SmartRouter:/# touch /mnt/extdisk/music_bin/mpd.db
root@SmartRouter:/# touch /mnt/extdisk/music_bin/mpd.log
root@SmartRouter:/# touch /mnt/extdisk/music_bin/mpd.error
root@SmartRouter:/# #touch /mnt/extdisk/music_bin/mpd.pid
root@SmartRouter:/# touch /mnt/extdisk/music_bin/mpdstate
root@SmartRouter:/# touch /mnt/extdisk/music_bin/mpd.sql
编写配置文件,MPD目前没有基于UCI格式的配置文件,需要手工创建一个/etc/mpd.conf文件。
mpd.conf的配置文件涉及到的参数有很多,这里我们一一说明下:
MPD的基本运行参数:
参数 值 说明
music_directory 路径 音乐文件的存放文件夹位置
playlist_directory 路径 音乐播放列表的存放位置,播放列表可以是在设备上创建也可以是通过MPDroid客户端软件创建
db_file 文件路径 MPD的数据库文件路径
log_file 文件路径 MPD的日志文件路径
pid_file 文件路径 MPD的进程号文件路径
state_file 文件路径 MPD的状态文件路径
sticker_file 文件路径 MPD管理音乐动态信息的文件路径
user 帐号 MPD运行时的Linux身份帐号,默认openwrt下只有root
group 分组 MPD运行时的Linux身份帐号,默认openwrt下只有root
bind_to_address IP地址 MPD监听的IP地址,0.0.0.0表示全部设备的IP
port 端口 MPD的监听端口
log_level 字符串 日志信息输出的级别,可以填写default,secure,verbose其中verbose表示显示全部日志,信息很多
auto_update 字符串 当music_directory中的音乐文件有变化时候自动更新MPD的数据库。可以填写yes或no
auto_update_depth 数字 自动更新的时候对文件夹深度的检测,随便写一个值吧只要是数字就可以。
audio_buffer_size 数字 音频播放时的缓存大小,默认值为2048
buffer_before_play 百分比 音频播放之前的缓存比例。默认值为10%
connection_timeout 数字 客户端连接超时,单位秒,默认值为60
max_connections 数字 客户端最大连接数量,默认值为10
max_playlist_length 数字 播放列表文件允许的最大长度,这个不要弄的太大搞死系统了哦。
max_command_list_size 数字 最大list指令尺寸,默认值为2048
max_output_buffer_size 数字 最大输出缓存,默认值为8192
filesystem_charset 字符串 文件系统的编码,如果你的文件是通过windows网络共享上载的这里填写UTF-8即可。
id3v1_encoding 字符串 歌曲的ID3标签名称编码,默认为"ISO-8859-1"
MPD的输出设备output,该设备配置用来实现对声卡的支持,格式如下:
audio_output {
参数内容
}
其中的参数内容在我们的开发板上用的上的是对声卡配置部分:
参数 值 说明
type 字符串 输出类型,可选值为: oss,alsa,pulse,pipe,在我们的开发板上为oss
name 字符串 设备显示名称,在MPDroid客户端软件上可以显示出来。
device 设备路径 oss的设备路径,默认填/dev/sdp
format 字符串 播放格式,默认填写为44100:16:2即可,表示44Khz,16位,双声道
mixer_type 字符串 混音器类型,我们的开发板默认填写"hardware"
mixer_device 设备路径 混音器设备路径,我们的开发板默认填写"/dev/mixer"
mixer_control 字符串 混音器的控制,我们的开发板默认填写"PCM"
在这里,我们举例下配置。
使用VI编辑器创建/etc/mpd.conf配置文件内容如下:
music_directory "/mnt/extdisk/music"
playlist_directory "/mnt/extdisk/music_playlist"
db_file "/mnt/extdisk/music_bin/mpd.db"
log_file "/mnt/extdisk/music_bin/mpd.log"
pid_file "/var/run/mpd.pid"
state_file "/mnt/extdisk/music_bin/mpdstate"
sticker_file "/mnt/extdisk/music_bin/mpd.sql"
user "root"
group "root"
bind_to_address "0.0.0.0"
port "6600"
log_level "default"
auto_update "yes"
auto_update_depth "8"
audio_output {
type "oss"
name "mycard"
device "/dev/dsp"
format "44100:16:2"
mixer_type "hardware"
mixer_device "/dev/mixer"
mixer_control "PCM"
}
#audio_buffer_size "2048"
buffer_before_play "10%"
connection_timeout "60"
max_connections "4"
max_playlist_length "1024"
max_command_list_size "2048"
max_output_buffer_size "4096"
filesystem_charset "UTF-8"
id3v1_encoding "ISO-8859-1"
第一步: 复制音乐
你可以把你喜欢的音乐以文件夹方式存放在/mnt/extdisk/music中,你可以选择使用windows文件共享方式复制音乐文件到系统上来。
第二步: 修正MPD服务的默认音量
因为MPD服务的默认音量参数写的有问题会导致音量被放大到100%吓你一跳,所以需要手工方式修正下。
用VI编辑器编辑/etc/init.d/mpd文件:
找到: [ -x /usr/bin/amixer ] && /usr/bin/amixer set PCM 40%
修改为: [ -x /usr/bin/amixer ] && /usr/bin/amixer set PCM 35%
第三步: 设置启动服务,如果你需要经常听音乐,就要将服务设置为自动开启,或手工开启。
设置每次设备自动开启(如果不是总听,就不用自动拉):
root@SmartRouter:/# /etc/init.d/mpd enable
手工开启一下:
root@SmartRouter:/# /etc/init.d/mpd start
MPDroid是一个免费的安卓系统下客户端,该客户端可以实现大部分播放功能。
第一步: 安装
进入你的安卓市场,搜索MPDroid并且下载安装,如果你的市场中没有可以上网上搜索MPDroid下载到手机中安装。
第二步: 配置
首次配置首先要你的无线连接到板子上。打开MPDroid软件后会显示要求配置:
a. 选择WLAN based connection
b. 选择你当前连接上来的开发板
c. 在Host填写开发板的IP地址
d. 在Port填写MPD的监听端口
e. 退出配置返回主界面
第三步: 选择要播放的音乐
a. 选择主界面左下角的音乐符号,再在屏幕左上角选择Files显示可播放音乐。
b. 屏幕中会显示出可播放的音乐或文件夹,这些都是你上传到/mnt/extdisk/music下的音乐文件。
c. 在音乐文件或文件夹上长按后会显示选项:
add 增加到当前播放列表
add and replace 增加到当前播放列表并且替换掉列表中其他的
add, replace and play 增加到当前播放列表,并且替换掉其他的,并且立即播放
add and play 增加播放
add to playlist 增加到一个列表文件(列表文件,跟当前播放列表不是一个意思,列表文件表示存在路由器上的)
d. 选择好以后返回主界面,就有音乐文件了,点击就可以播放了。还可以调整音量。
MPDroid是一个安卓下可用的播放器软件,MPD的协议也可以完成很多工作,但是毕竟有不完善的地方,首先MPDroid不具备音乐同步通能,不能将音乐同步到服务器上,其次界面是英文的操作比较复杂,hoowa期望有识之士能做一个更完美的客户端项目。因此如果有愿意做这方面的朋友,请不要吝啬,加入我们吧。