[作品] 【IMX6UL开发板试用体验】OpenWRT中使用mpd作为音频Server及其使用

[复制链接]

技术员

发表于 2017-2-5 22:03:17   2181 查看 4 回复 显示全部楼层 倒序浏览
分享
本帖最后由 Tony_Ho 于 2017-2-5 22:13 编辑

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

Music Player Daemon (MPD) is a flexible, powerful, server-side application for playing music.
Through plugins and libraries it can play a variety of
sound files while being controlled by its network protocol.


即MPD是CS架构的Daemon端。
接下来我们将在iMX6UL上面使用MPD, 并在手机与Ubuntu等上面使用其Client来控制与播放音乐。

ALSA验证声卡发声
要完成音乐的播放,首先iMX6UL需要可以播放声音。 iMX6UL使用的Codec是WM8960, 这个和TQE9使用的是一样的。
在播放之前,我们先查看声卡是哪个:
  1. root@(none):/# cat /proc/asound/card1/id
  2. wm8960audio

  3. root@(none):/# aplay -L
  4. null
  5.     Discard all samples (playback) or generate zero samples (capture)
  6. default:CARD=wm8960audio
  7.     wm8960-audio,
  8.     Default Audio Device
  9. sysdefault:CARD=wm8960audio
  10.     wm8960-audio,
  11.     Default Audio Device
复制代码

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

[    3.546365] ALSA device list:[    3.549498]   #0: Virtual MIDI Card 1[    3.553209]   #1: wm8960-audio

确定设备Index后,我们需要一个WAV文件来播放。
直接使用MP3来convert一个:



然后我们使用wavinfo查看一下wav文件的属性:
  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开启, 然后使用下面命令完成:

amixer cset name='PCM Playback Volume' 100%,100%amixer cset name='HP DAC Playback Volume'  100%,100%   

播放测试
  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

找到存放音乐的目录
music_directory         "/var/lib/mpd/music"

然后找到
  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放入到设置的目录中。
运行
查看帮助

  1. root@OpenWrt:~# mpd --help
  2. Usage:
  3.   mpd [OPTION...] [path/to/mpd.conf]

  4. Music Player Daemon - a daemon for playing music.

  5. Options:
  6.   -h, --help        show help options
  7.   --kill            kill the currently running mpd session
  8.   --no-config       don't read from config
  9.   --no-daemon       don't detach from console
  10.   --stderr          print messages to stderr
  11.   -v, --verbose     verbose logging
  12.   -V, --version     print version number
复制代码

尝试运行


root@OpenWrt:~# mpd --no-daemon -vconfig_file: loading file /etc/mpd.confroot@OpenWrt:~# echo $?1


我们发现起直接退出了, 而且返回了一个错误值:
EPERM 1 Operation not permitted
调查发现是mpd.conf里面我们的user改错了。
看看其进程是否存在

root@OpenWrt:~# ps | grep mpd 1376 root     16332 S    mpd -v 1382 root      1160 S    grep mpdroot@OpenWrt:~#

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

  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等信息。

确定端口开启

root@OpenWrt:~# netstat -apn | grep mpdtcp        0      0 :::6600                 :::*                    LISTEN      1376/mpdunix  2      [ ]         DGRAM                     18753 1376/mpd

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


mpd client的使用
板子本身的 Linux command line client
有mpc命令可以用, 我们可以查看都有那些歌曲(mpc listall):


root@OpenWrt:~# mpc listallLady Antebellum - Need You Now.mp3root@OpenWrt:~#root@OpenWrt:~# ls music/Lady Antebellum - Need You Now.mp3root@OpenWrt:~#

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

标签:OpenWRT

实习生

发表于 2017-5-19 22:34:39  
你好,我是x86 的openwrt,该如何编译声卡驱动呢  谢谢
回复

点赞 举报

技术员

发表于 2017-5-21 11:42:20    楼主|

PCB在线计价下单

板子大小:

cm
X
cm

层数:

2

板子数量:

10

厚度:

1.6
superclon 发表于 2017-5-19 22:34
你好,我是x86 的openwrt,该如何编译声卡驱动呢  谢谢

一样的查看ALSA以及dts驱动即可
回复

点赞 举报

实习生

发表于 2017-9-4 21:40:57  
求大神指点迷津
                     飞凌开发板(imx6ul)音频采集问题
现状:现有uvc摄像头,在windows下测试uvc摄像头在工作时,能采集到音视频,通过播放器可以看到和听到音视频。

目前采用飞凌开发板(linux操作系统,Arm7,ARMv4架构),插上uvc摄像头之后,能通过程序或者使用ffmpeg获取视频(video通道中获取),能将视频推流到服务器,并拉流进行播放,但是不知道音频怎么捕获以及捕获之后如何与视频同步。

飞凌开发板官方提供的内核中,我看到有OSS和ALSA两种音频变成接口,我如果在编译内核时将任意一个接口的驱动放到内核,烧写内核后,/dev下会不会产生一些与音频有关的设备文件,我只需要进行open,read,write,ioctl,close等系统的调用,即可获取到音频数据,从而通过音频推流代码或者ffmpeg进行推流?

如果利用ffmpeg获取到音频,那么音视频如何同步,是存在相应的设置吗,只需要设置好指令和参数,即可同时将视频和音频推流出去。

回复

点赞 举报

技术员

发表于 2017-11-15 10:16:31  
感谢楼主的支持   楼主辛苦了      关注盈鹏飞嵌入式公众号  第一时间为您提供 产品咨询  技术文章  新产品试用活动  在线技术支持等....盈鹏飞嵌入式的发展  离不开广大友友的支持
谢谢关注
盈鹏飞二维码.jpg
回复

点赞 举报

只有小组成员才能发言,加入小组>>

10个成员聚集在这个小组

加入小组

创建小组步骤

关闭

站长推荐 上一条 /9 下一条

快速回复 返回顶部 返回列表
-

推荐专区

技术干货集中营

专家问答

用户帮助┃咨询与建议┃版主议事

工程师杂谈

工程师创意

工程师职场

论坛电子赛事

社区活动专版

发烧友活动

-

嵌入式论坛

ARM技术论坛

Android论坛

Linux论坛

单片机/MCU论坛

FPGA|CPLD|ASIC论坛

DSP论坛

嵌入式系统论坛

-

电源技术论坛

电源技术论坛

无线充电技术

-

硬件设计论坛

PCB设计论坛

电路设计论坛

电子元器件论坛

控制|传感

总线技术|接口技术

-

测试测量论坛

LabVIEW论坛

Matlab论坛

测试测量技术专区

仪器仪表技术专区

-

EDA设计论坛

multisim论坛

PADS技术论坛

Protel|AD|DXP论坛

Allegro论坛

proteus论坛|仿真论坛

EasyEDA-中国人自已的EDA工具

Orcad论坛

-

综合技术与应用

电机控制

智能电网

光电及显示

参考设计中心

汽车电子技术论坛

医疗电子论坛

-

开源硬件

-

无线通信论坛

无线通信技术专区

天线|RF射频|微波|雷达技术

-

IC设计论坛

芯片测试与失效分析

Mixed Signal/SOC[数模混合芯片设计]

Analog/RF IC设计

设计与制造封装测试

-

厂商专区

TI论坛

TI Deyisupport社区

-

检测技术与质量

电磁兼容(EMC)设计与整改

安规知识论坛

检测与认证

-

消费电子论坛

手机技术论坛

平板电脑/mid论坛

音视/视频/机顶盒论坛

-

电子论坛综合区

聚丰众筹官方社区

新人报道区

聚丰供应链

-

论坛服务区

-

供求信息发布

供需广告

招聘┃求职发布区

电子展览展会专区