b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

Raspberry Pi盲折[1]-实现一个简单的命令行音乐播放器

电脑杂谈  发布时间:2020-04-14 22:17:29  来源:网络整理

树莓派音乐播放器_树莓派 qq音乐_树莓派论坛

Raspberry Pi使用Raspberry Pi 3B.

音乐来源来自网易云音乐.

正文:

根据整个Raspberry Pi的折腾体验,该项目主要按照以下路线进行: 听歌->听歌->自由听歌->远程控制Raspberry Pi Play.

树莓派 qq音乐_树莓派论坛_树莓派音乐播放器

首先,听这首歌. 无论是在Windows图形界面还是Linux图形界面中,都有许多音乐播放器可供选择. 但是在命令行的情况下,它要少得多. 其中,mplayer和mpg123是众所周知的. 经过测试,mpg123对mp3的支持较差,而mplayer是最好的. 其运行格式如下:

mplayer / home / pi /音乐/XXX.mp3

但是上述方法有一个缺点,它只能播放本地音乐. 由于SD卡的体积较小,因此存储大量音乐会浪费空间,播放音乐可以解决上述问题. 幸运的是,只要您知道歌曲的URL,mplayer就可以直接播放音乐. 互联网上有很多网站可以提取直接链接,例如: .

mplayer播放音乐的格式如下:

树莓派论坛_树莓派 qq音乐_树莓派音乐播放器

mplayer

类似地,这种方法也有一个问题: 每当我们想听一首歌时,我们还必须搜索它的直链,这无疑是很麻烦的. 为了解决这个问题,互联网上有很多获取音乐直链的方法. 以网易云音乐为例树莓派音乐播放器,主要有三种方法:

1. 模拟登录Web界面和过程. 该方法不仅可以实现音乐播放,还可以实现登录等功能.

2. 每次您申请从网易服务器读取数据时,都要模拟网易云音乐Android客户端1.5.2的行为.

树莓派论坛_树莓派 qq音乐_树莓派音乐播放器

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中执行.

树莓派 qq音乐_树莓派论坛_树莓派音乐播放器

它看起来很简单,但是在编写脚本时遇到了很多问题. 例如,某些歌曲非常流行,并且返回的数据少于三首. 当我们使用字典路径进行查询时,会出现错误. 为了解决这个问题,我们必须首先知道它返回了多少首歌曲,并根据不同情况返回相应的提示. 一般来说,有两种方法: 一种是检查歌曲下属有多少段树莓派音乐播放器,以及他们得到多少首歌曲. 第二个是通过特殊字符数获取歌曲数. 我的方法是计算“ =”字符的数量,因为每首歌曲将返回两个地址,一个是专辑图片,另一个是音频地址. 每个地址包含两个“ =”字符,因此“ =”的数量除以四. (注意: 您可以在此处直接获取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

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...