imx6ul之OpenWRT中使用mpd作为音频Server及其使用

本文介绍如何在iMX6UL平台上配置Music Player Daemon (MPD)进行音乐播放。首先验证ALSA声卡正常工作,然后配置mpd.conf文件指定音乐目录和声卡输出设置。最后通过mpc命令或客户端软件实现播放功能。
摘要由CSDN通过智能技术生成

说明

MPD可以播放音乐与streaming Radio,可以用于娱乐用。其官网的说法为:

[plain]  view plain  copy
  1. Music Player Daemon (MPD) is a flexible, powerful, server-side application for playing music.   
  2. Through plugins and libraries it can play a variety of   
  3. sound files while being controlled by its network protocol.  
即MPD是CS架构的Daemon端。

接下来我们将在iMX6UL上面使用MPD, 并在手机与Ubuntu等上面使用其Client来控制与播放音乐。

ALSA验证声卡发声

要完成音乐的播放,首先iMX6UL需要可以播放声音。 iMX6UL使用的Codec是WM8960, 这个和TQE9使用的是一样的。

在播放之前,我们先查看声卡是哪个:

[plain]  view plain  copy
  1. root@(none):/# cat /proc/asound/card1/id   
  2. wm8960audio  
  3.   
  4. root@(none):/# aplay -L  
  5. null  
  6.     Discard all samples (playback) or generate zero samples (capture)  
  7. default:CARD=wm8960audio  
  8.     wm8960-audio,   
  9.     Default Audio Device  
  10. sysdefault:CARD=wm8960audio  
  11.     wm8960-audio,   
  12.     Default Audio Device  

首先需要确定ALSA识别了哪些声卡,然后再确定声卡的设备Index, 例如这里面WM8960不是Card0,所以如果直接默认使用aplay来播放,那么就会出错。

当然启动的时候也有:

[plain]  view plain  copy
  1. [    3.546365] ALSA device list:  
  2. [    3.549498]   #0: Virtual MIDI Card 1  
  3. [    3.553209]   #1: wm8960-audio  

确定设备Index后,我们需要一个WAV文件来播放。

直接使用MP3来convert一个:



然后我们使用wavinfo查看一下wav文件的属性:

[plain]  view plain  copy
  1. Header info for: /home/hexiongjun/Music/CloudMusic/XXX.wav  
  2. WaveHeader Size:    12  
  3. ChunkHeader Size:   8  
  4. FormatChunk Size:   16  
  5. RIFF ID:    RIFF  
  6. Total Size: 56536450  
  7. Wave ID:    WAVE  
  8. Chunk ID:   fmt   
  9. Chunk Size: 16  
  10. Compression format is of type: 1  
  11. Channels:   2  
  12. Sample Rate:    44100  
  13. Bytes / Sec:    176400  
  14. wBlockAlign:    4  
  15. Bits Per Sample Point:  16  
  16. wavDataPtr: 44  
  17. wavDataSize: 56535552  
然后将其放到设备中去,同时也放入MP3文件,作为后面验证用。

alsamixer配置声音

如果直接播放我们会发现没有声音,这个是因为没有将volume开启, 然后使用下面命令完成:

[plain]  view plain  copy
  1. amixer cset name='PCM Playback Volume' 100%,100%  
  2. amixer cset name='HP DAC Playback Volume'  100%,100%     

播放测试

[plain]  view plain  copy
  1. root@(none):/# aplay -D hw:1,0 Two\ Steps\ From\ Hell\ -\ Victory.wav   
  2. Playing WAVE 'Two Steps From Hell[11482.358980] data->clk_frequency = 12288000   
  3.  - Victory.wav' : Signed 16 bit L[11482.364517] sample_rate = 44100   
  4. ittle Endian, Rate 44100 Hz, Stereo  

然后可以听到声音即可。

配置mpd

mpd需要一个配置文件,记录文件都放在where,需要配置声卡output。

因此我们直接更改即可:

vim /etc/mpd.conf

找到存放音乐的目录

[plain]  view plain  copy
  1. music_directory         "/var/lib/mpd/music"  

然后找到audio_output section:

[plain]  view plain  copy
  1. audio_output {  
  2.         type            "alsa"  
  3.         name            "My ALSA Device"  
  4.         device          "hw:1,0"        # optional  
  5. ##      format          "44100:16:2"    # optional  
  6. ##      mixer_type      "hardware"      # optional  
  7. ##      mixer_device    "default"       # optional  
  8. ##      mixer_control   "PCM"           # optional  
  9. ##      mixer_index     "0"             # optional  
  10. }  
然后保存, 并将MP3放入到设置的目录中。

运行

查看帮助

[plain]  view plain  copy
  1. root@OpenWrt:~# mpd --help  
  2. Usage:  
  3.   mpd [OPTION...] [path/to/mpd.conf]  
  4.   
  5. Music Player Daemon - a daemon for playing music.  
  6.   
  7. Options:  
  8.   -h, --help        show help options  
  9.   --kill            kill the currently running mpd session  
  10.   --no-config       don't read from config  
  11.   --no-daemon       don't detach from console  
  12.   --stderr          print messages to stderr  
  13.   -v, --verbose     verbose logging  
  14.   -V, --version     print version number  

尝试运行

[plain]  view plain  copy
  1. root@OpenWrt:~# mpd --no-daemon -v  
  2. config_file: loading file /etc/mpd.conf  
  3. root@OpenWrt:~# echo $?  
  4. 1  

我们发现起直接退出了, 而且返回了一个错误值:

[plain]  view plain  copy
  1. EPERM 1 Operation not permitted  
调查发现是mpd.conf里面我们的user改错了。

看看其进程是否存在

[plain]  view plain  copy
  1. root@OpenWrt:~# ps | grep mpd  
  2.  1376 root     16332 S    mpd -v  
  3.  1382 root      1160 S    grep mpd  
  4. root@OpenWrt:~#   

如果开启了debug或者verbose模式,那么可以看到:

[plain]  view plain  copy
  1. root@(none):/# mpd -v  
  2. config_file: loading file /etc/mpd.conf  
  3. Jan 31 12:31 : server_socket: bind to '0.0.0.0:6600' failed: Address already in use (continuing anyway, because binding to '[::]:6600' succeeded)  
  4. Jan 31 12:31 : path: SetFSCharset: fs charset is: UTF-8  
  5. Jan 31 12:31 : libsamplerate: libsamplerate converter 'Fastest Sinc Interpolator'  
  6. Jan 31 12:31 : vorbis: Xiph.Org libVorbis 1.3.5  
  7. Jan 31 12:31 : opus: libopus 1.1.2  
  8. Jan 31 12:31 : sndfile: libsndfile-1.0.26  
  9. Jan 31 12:31 : db: reading DB  
  10. Jan 31 12:31 : curl: version 7.47.1  
  11. Jan 31 12:31 : curl: with GnuTLS/3.4.9  
这里面说明了使用的端口(CS架构),然后使用的charset等信息。

确定端口开启

[plain]  view plain  copy
  1. root@OpenWrt:~# netstat -apn | grep mpd  
  2. tcp        0      0 :::6600                 :::*                    LISTEN      1376/mpd  
  3. unix  2      [ ]         DGRAM                     18753 1376/mpd   

这样我们就可以使用client来查看确定了。

mpd client的使用

板子本身的 Linux command line client

有mpc命令可以用, 我们可以查看都有那些歌曲(mpc listall):

[plain]  view plain  copy
  1. root@OpenWrt:~# mpc listall  
  2. Lady Antebellum - Need You Now.mp3  
  3. root@OpenWrt:~#  
  4.   
  5. root@OpenWrt:~# ls music/  
  6. Lady Antebellum - Need You Now.mp3  
  7. root@OpenWrt:~#   

然后就是要将歌曲添加到playlist中, 这个网上绝大部分查到的都是使用下面这个命令:

[plain]  view plain  copy
  1. mpd --create-db  

但是如果你真的拿来用,会发现mpd根本就不再具备这个功能了。因此很多人就会卡死在这里了。

正确的做法直接使用directory功能。

我们这里使用mpc add是可以用的。

Ubuntu上面的Client

对于Ubuntu可以到Software中下载Client:



然后安装一个,这里安装的是QMPDClient, 打开,然后设置:


添加完成后, 连接


然后就可以看到Directory的文件, 然后双击即可添加到PlayList中了:


接下来就可以播放了。

Android端Client

Android手机端,使用MPDroid, 可以到github的release页面下载

安装后设置端口与IP地址,然后就可以用了:



参考

MPD Arch Wiki

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值