【硬创邦】跟hoowa学做智能路由(十三):网络音箱之Android篇

本文涉及的产品
对象存储 OSS,OSS 加速器 50 GB 1个月
简介:
  
  
   我们继续网络音箱的专题,这章将介绍安卓系统下的MP标准软件控制路由器播放音乐。

什么是MP

MP全称为音乐播放进程(Music Player Daemon)。它是一个可定制化功能强大的服务端播放音乐软件,通过其自身的插件和库系统即可完成通过网络控制播放音乐。MP具备一个自己的控制管理协议,这些协议是基于TCP协议进行传输的。客户端连接到服务器上控制服务端进行处理。MPD表示服务端,MPC表示客户端。

MP是一个完全开放源代码的整体系统,因此有很多操作系统下的客户端,在安卓手机中即可使用MPDroid这个软件控制服务端播放,而如果您需要开发自己的产品,完全可以参考官方的资料自己开发一个控制程序,甚至给服务端增加新的功能。

使用MP的好处是,只要你的手机连接到家里的路由器上既可以控制播放音乐,而手机还随身携带,这样不影响你扫地啊、煮饭啊等等工作是不是。

MP的官方网站为http://www.musicpd.org/

安装MPD服务

首先确保你12章的测试和操作OK声卡已经正常工作了。

然后开始安装软件包,我们教程中使用的是mpd-mini该软件包是mpd的OpenWRT精简版完成了主要的功能,而且也比较节省CPU和内存。

root@SmartRouter:/# opkg update
root@SmartRouter:/# opkg install mpd-mini

为MPD准备文件夹和文件

第一步: 创建必须的文件夹,在这一步,我们选择使用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的配置文件

编写配置文件,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下载到手机中安装。

第二步: 配置

首次配置首先要你的无线连接到板子上。打开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期望有识之士能做一个更完美的客户端项目。因此如果有愿意做这方面的朋友,请不要吝啬,加入我们吧。

 
  本文作者: 孙冰

本文转自雷锋网禁止二次转载, 原文链接
相关实践学习
对象存储OSS快速上手——如何使用ossbrowser
本实验是对象存储OSS入门级实验。通过本实验,用户可学会如何用对象OSS的插件,进行简单的数据存、查、删等操作。
目录
相关文章
|
5月前
|
机器学习/深度学习 算法 调度
14种智能算法优化BP神经网络(14种方法)实现数据预测分类研究(Matlab代码实现)
14种智能算法优化BP神经网络(14种方法)实现数据预测分类研究(Matlab代码实现)
467 0
|
9月前
|
边缘计算 人工智能 5G
5G引领家庭网络升级:速度、稳定性与智能化的新时代
5G引领家庭网络升级:速度、稳定性与智能化的新时代
683 69
|
10月前
|
边缘计算 安全 算法
阿里云CDN:构建全球化智能加速网络的数字高速公路
阿里云CDN构建全球化智能加速网络,拥有2800多个边缘节点覆盖67个国家,实现毫秒级网络延迟。其三级节点拓扑结构与智能路由系统,结合流量预测模型,确保高命中率。全栈式加速技术包括QUIC协议优化和Brotli压缩算法,保障安全与性能。五层防御机制有效抵御攻击,行业解决方案涵盖视频、物联网及游戏等领域,支持新兴AR/VR与元宇宙需求,持续推动数字内容分发技术边界。
687 13
|
9月前
|
人工智能 运维 算法
AI加持下的网络流量管理:智能调度还是流量黑洞?
AI加持下的网络流量管理:智能调度还是流量黑洞?
357 8
|
10月前
|
机器学习/深度学习 人工智能 运维
AI“捕风捉影”:深度学习如何让网络事件检测更智能?
AI“捕风捉影”:深度学习如何让网络事件检测更智能?
417 8
|
10月前
|
机器学习/深度学习 人工智能 运维
AI为网络可靠性加“稳”——从断网烦恼到智能运维
AI为网络可靠性加“稳”——从断网烦恼到智能运维
514 2
|
前端开发 Java Shell
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
820 20
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
|
Java Android开发
【Android 组件化】路由组件 ( 组件间共享的服务 )(一)
【Android 组件化】路由组件 ( 组件间共享的服务 )(一)
208 0
【Android 组件化】路由组件 ( 组件间共享的服务 )(一)
|
Java Android开发
【Android 组件化】路由组件 ( 组件间共享的服务 )(三)
【Android 组件化】路由组件 ( 组件间共享的服务 )(三)
131 0
|
4月前
|
移动开发 前端开发 Android开发
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
582 12
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡