
Raspberry Pi使用Raspberry Pi 3B.
音乐来源来自网易云音乐.
正文:
根据整个Raspberry Pi的折腾体验,该项目主要按照以下路线进行: 听歌->听歌->自由听歌->远程控制Raspberry Pi Play.

首先,听这首歌. 无论是在Windows图形界面还是Linux图形界面中,都有许多音乐播放器可供选择. 但是在命令行的情况下,它要少得多. 其中,mplayer和mpg123是众所周知的. 经过测试,mpg123对mp3的支持较差,而mplayer是最好的. 其运行格式如下:
mplayer / home / pi /音乐/XXX.mp3
但是上述方法有一个缺点,它只能播放本地音乐. 由于SD卡的体积较小,因此存储大量音乐会浪费空间,播放音乐可以解决上述问题. 幸运的是,只要您知道歌曲的URL,mplayer就可以直接播放音乐. 互联网上有很多网站可以提取直接链接,例如: .
mplayer播放音乐的格式如下:

mplayer
类似地,这种方法也有一个问题: 每当我们想听一首歌时,我们还必须搜索它的直链,这无疑是很麻烦的. 为了解决这个问题,互联网上有很多获取音乐直链的方法. 以网易云音乐为例树莓派音乐播放器,主要有三种方法:
1. 模拟登录Web界面和过程. 该方法不仅可以实现音乐播放,还可以实现登录等功能.
2. 每次您申请从网易服务器读取数据时,都要模拟网易云音乐Android客户端1.5.2的行为.

3. 从网易为某些应用程序提供的音乐插件开始,分析其行为并获取数据. 但是功能有限
由于我只需要获得音乐直链,就不需要登录,检查列表和执行其他操作. 因此,我选择了第三种方法,并找到了网易云音乐与网易产品LOFTER的音乐接口. 由于使用同一家公司,因此该界面可能非常简单. 其形式如下: &type = 1&s = X&limit = 3,其中s =是需要搜索的内容,即使不进行任何编码,type是搜索类型查询类型,1是单个,10是专辑,歌手100,歌曲列表1000,用户1002. 超过限制后,返回文章数. 而且返回的json数据非常容易提取.
至此,基本上我们已经收集了所需的数据. 我制作了一个脚本,用户可以在其中输入要搜索的歌曲的名称,并指定要播放的曲目,以便他们可以轻松地收听歌曲.
该脚本的实现方式如下: 第一步,使用urllib2函数获取网页上的内容. 第二步是通过reads和json.loads方法将内容解码为字典形式. 第三步是观察字典格式并提取我们想要的数据. 例如,可以通过以下命令提取直链: name1 = html ['result'] ['songs'] [0] ['name']. 第四步是调用mplayer播放流媒体. 为了方便起见,我们使用commands.getoutput方法让玩家精神在Python中执行.

它看起来很简单,但是在编写脚本时遇到了很多问题. 例如,某些歌曲非常流行,并且返回的数据少于三首. 当我们使用字典路径进行查询时,会出现错误. 为了解决这个问题,我们必须首先知道它返回了多少首歌曲,并根据不同情况返回相应的提示. 一般来说,有两种方法: 一种是检查歌曲下属有多少段树莓派音乐播放器,以及他们得到多少首歌曲. 第二个是通过特殊字符数获取歌曲数. 我的方法是计算“ =”字符的数量,因为每首歌曲将返回两个地址,一个是专辑图片,另一个是音频地址. 每个地址包含两个“ =”字符,因此“ =”的数量除以四. (注意: 您可以在此处直接获取json字段的长度,这更加方便)
在完成脚本的基本功能之后,为了方便用户使用,我还添加了一些实用功能. 例如,帮助按钮(例如更改字体颜色)更加醒目.
有关脚本的源代码,请参见附录.
该脚本可以在命令行上自动搜索和播放,但是很多时候我们需要控制移动设备上的扬声器. 例如: 在微信上发送命令可以实现多种功能. 这是一个相对成熟的项目: WeChat-Raspberry Pi-NetEase云音乐[1],基于ItChat项目和命令行云音乐项目. 使用Raspberry Pi作为播放器,并通过ItChat合并Raspberry Pi和微信帐户. Raspberry Pi可以读取对此帐户的任何命令. Raspberry Pi读取相关指令,并在Python代码中组合定义以执行相关指令.
附录:
# -*- coding: utf-8 -*-
import urllib2
import json
import sys, getopt
import commands
import collections
reload(sys)
sys.setdefaultencoding('utf-8')
def main(argv):
searchname = ''
number = '0'
try:
opts, args = getopt.getopt(argv,'h',["name=","num="])
except getopt.GetoptError:
print '对不起,参数输入不完整,请重新输入'
sys.exit()
for opt, arg in opts:
if opt == '-h':
print '\n本项目源采用网易云音乐,播放器采用mplayer\n--name 写入歌曲名字\n--num 选择歌曲序号\n<- , -> 可快进快退\n9,0可增加减小音量'
sys.exit()
elif opt in ("--name"):
searchname = arg
elif opt in ("--num"):
number = arg
shtml = r'http://s.music.163.com/search/get/?src=lofter&type=1&filterDj=true&s=%s&limit=3'%(searchname)
html = urllib2.urlopen(shtml)
html = html.read() #句柄转化成字符串处理
counts = collections.Counter(html)
counts = counts['='] #此处最好用len函数判断songs底下的段落数目
counts = counts/4
html = json.loads(html) #解码json格式
if counts>0:
name1 = html['result']['songs'][0]['name']
singer1 = html['result']['songs'][0]['artists'][0]['name']
album1 = html['result']['songs'][0]['album']['name']
url1 = html['result']['songs'][0]['audio']
print '\n\033[1;36;40m1.歌名:%s \n 歌手:%s \n 专辑:%s \033[0m'%(name1,singer1,album1)
if counts>1:
name2 = html['result']['songs'][1]['name']
singer2 = html['result']['songs'][1]['artists'][0]['name']
album2 = html['result']['songs'][1]['album']['name']
url2 = html['result']['songs'][1]['audio']
print '\n\033[1;36;40m2.歌名:%s \n 歌手:%s \n 专辑:%s \033[0m'%(name2,singer2,album2)
if counts>2:
name3 = html['result']['songs'][2]['name']
singer3 = html['result']['songs'][2]['artists'][0]['name']
album3 = html['result']['songs'][2]['album']['name']
url3 = html['result']['songs'][2]['audio']
print '\n\033[1;36;40m3.歌名:%s \n 歌手:%s \n 专辑:%s \033[0m'%(name3,singer3,album3)
if counts==0:
print '未指定搜索内容或搜索无结果'
if number =='1':
a = 'mplayer %s'%(url1)
print '\n\033[5;31;40m♪♪\033[0m\033[0;31;40m正在播放第一首曲目\033[0m\033[5;31;40m♪♪\033[0m'
commands.getoutput(a)
if number =='2':
a = 'mplayer %s'%(url2)
print '\n\033[5;31;40m♪♪\033[0m\033[0;31;40m正在播放第二首曲目\033[0m\033[5;31;40m♪♪\033[0m'
commands.getoutput(a)
if number =='3':
a = 'mplayer %s'%(url3)
print '\n\033[5;31;40m♪♪\033[0m\033[0;31;40m正在播放第三首曲目\033[0m\033[5;31;40m♪♪\033[0m'
commands.getoutput(a)
if __name__ == "__main__":
main(sys.argv[1:])
效果图:
[1] GitHub上的地址是:
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/bofangqi/article-175828-1.html
让它们去赚大钱吧