创客神器NanoPi
直播中

Jianjun

9年用户 362经验值
擅长:可编程逻辑 电源/新能源 测量仪表 嵌入式技术 模拟技术 处理器/DSP 控制/MCU RF/无线
私信 关注
[经验]

【NanoPi NEO Plus2开发板试用体验】智能音箱项目之搜索并播放在线音乐

硬件准备完毕后开始智能音箱的软件开发之旅,项目名称暂时使用smart pi。
为了实现搜索并播放在线音乐的功能,项目中使用的易源数据提供的QQ音乐接口,API中提供的音频流是.m4a格式的,上一篇帖子中介绍的sox音乐播放器“恰好”不能播放.m4a格式的音频,只好弃坑转向万能的vlc。。。
软件安装比较简单,使用apt-get install vlc命令就能完成安装,安装完成后进行本地音乐播放测试,结果发现有报错
vlc异常.png
在终端中输入aplay -l 命令查看声卡情况发现找不到声卡
  1. pi@NanoPi-NEO-Plus2:/home/woriaty/music$ aplay -l
  2. aplay: device_list:268: no soundcards found...
然而切换到root用户却可以发现
  1. root@NanoPi-NEO-Plus2:/home/woriaty# aplay -l
  2. **** List of PLAYBACK Hardware Devices ****
  3. card 0: Codec [H3 Audio Codec], device 0: CDC PCM Codec-0 []
  4.   Subdevices: 1/1
  5.   Subdevice #0: subdevice #0
接着查看用户组信息(已略去部分显示数据),发现用户pi并没有被添加到audio组中
  1. root@NanoPi-NEO-Plus2:/home/woriaty# cat /etc/group
  2. ...
  3. audio:x:29:
  4. ...
使用时只能已root用户身份运行或将pi用户添加到audio,然而vlc并不支持root用户运行,囧,输入命令usermod -a -G audio pi将用户添加进audio组中,reboot后就能找到声卡了
  1. pi@NanoPi-NEO-Plus2:/home/woriaty/music$ aplay -l
  2. **** List of PLAYBACK Hardware Devices ****
  3. card 0: Codec [H3 Audio Codec], device 0: CDC PCM Codec-0 []
  4.   Subdevices: 1/1
  5.   Subdevice #0: subdevice #0
接着进行本地音乐的播放测试,发现仍然有报错,但是vlc已经正常运行,通过耳机或外接喇叭能听到音乐了。
易源数据提供的QQ音乐接口提供了良好的调用和交互,通过API可以实现输入歌曲的名称进行音源搜索,同时返回json数据,歌曲搜索的函数封装如下
json.png
我们要做的就是对json数据进行分析,提取出返回的歌手、歌曲名和歌曲地址等信息
分析json.png
因为每次返回的json数据中会包含很多相似的搜索内容,上面的函数中使用了将输入歌手名和返回歌手名做比较的方法用于提高搜索的准确度,比较函数def str_cmp(self,source_str, target_str)的原型为
比较.png
既然已经有了歌曲地址,通过调用shell命令调用vlc播放在线音频即可
播放.png
想要把音频保存到本地?那就将音频流写到文件中来!
保存.png
最后,我将函数封装成了一个audio_op类,使用的时候只要调用即可
调用.png
audio_json_get函数中传入的两个参数需要根据易源数据中提供的格式进行定义就行了,具体可参照其官网。
定义.png
将代码保存到main.py文件,使用chmod +x main.py命令给其添加可执行权限,终端输入./main.py就能在线听音乐啦。
播放音乐.png

更多回帖

发帖
×
20
完善资料,
赚取积分