造一个智能语音音箱!!!太简单了【语音智能管家】
文章目录
一、获取歌曲
二、播放歌曲
三、总结
【加群获取学习资料QQ群:901381280】
上一篇文章已经介绍了语音智能管家之语音唤醒功能
那今天就来分享语音听音乐的技术教程
一、获取歌曲
通过语音输入:播放海阔天空,程序调用搜索歌曲功能,去搜索“海阔天空”对应的歌曲列表
歌曲来源:本人在自己的网站搭建了歌曲采集系统(2年前搭建的,正好现在可以使用上),个人网站链接:www.chenlove.cn
在这个基础上进行动态获取歌曲url(根据歌名或者歌手去在线搜索)
先上代码,再进行讲解
这里是程序请求头
####李运辰
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:53.0) Gecko/20100101 Firefox/53.0",
"Accept": "application/json,text/javascript,*/*; q=0.01",
"Accept-Language": "zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3",
"Accept-Encoding": "gzip,deflate, br",
"X-Requested-With": "XMLHttpRequest",
'Access-Control-Allow-Origin': '*',
"Cookie": "Hm_lvt_50027a9c88cdde04a70f5272a88a10fa=1537365515; Hm_lpvt_50027a9c88cdde04a70f5272a88a10fa=1537511828; hibext_instdsigdipv2=1",
"Connection": "keep-alive"
}
请求参数,其中name是歌曲名字(海阔天空)或者歌手的名字,page是页数
data = {
'filter': 'name',
'input': name,
'page': page,
'type': typename,
}
开始发送请求
####李运辰
url = "http://music.chenlove.cn"
r = requests.post(url, headers=headers, data=data)
r.encoding = 'utf-8'
ss = json.loads(r.text)
获取到数据之后,开始取出里面的真是歌曲url
由于树莓派上(python里面)不支持播放在线歌曲,所以需要根据url把歌曲下载到本地(因为可以会搜索很多次歌曲,所以每次下载都把之前的覆盖掉,避免占用存储空间)
这里也是根据requests去发送请求,以流的形式stream读取歌曲,最后保存成music.mp3文件。
resp = requests.get(url=url, stream=True)
if resp.status_code == 200:
print("开始下载")
with open('music.mp3', 'wb') as wf:
for data in resp.iter_content(1024):
if data:
wf.write(data)
print("下载结束")
二、播放歌曲
下载好歌曲之后,开始进行播放
(这里我百度和google了很多python播放mp3文件的代码,好多都无法使用,只有下面这么效果还算不错)
先导入相应的包文件
import pygame # pip install pygame
pygame.mixer.init() # 音乐模块初始化
传入mp3音频文件路径filename(本地路径,咱们刚刚下载好的music.mp3文件)
可以设置
- 是否循环播放次数loops,默认是0次
- 开始播放位置start,默认是从0秒开始
- 音量value,设置播放的音量,音量value的范围为0.0到1.0
pygame.mixer.music.load(filename)
# pygame.mixer.music.play(loops=0, start=0.0)
#loops和start分别代表重复的次数和开始播放的位置。
pygame.mixer.music.play(loops=loops, start=start)
pygame.mixer.music.set_volume(value)
# 来设置播放的音量,音量value的范围为0.0到1.0。
此外还可以对正在播放的歌曲进行暂停播放
pygame.mixer.music.stop() # 停止播放
附上完整代码
####李运辰
###播放音乐 貌似只能播放单声道音乐,可能是pygame模块限制
def playMusic(filename, loops=0, start=0.0, value=0.5):
"""
:param filename: 文件名
:param loops: 循环次数
:param start: 从多少秒开始播放
:param value: 设置播放的音量,音量value的范围为0.0到1.0
:return:
"""
flag = False # 是否播放过
pygame.mixer.init() # 音乐模块初始化
while 1:
if flag == 0:
pygame.mixer.music.load(filename)
# pygame.mixer.music.play(loops=0, start=0.0) loops和start分别代表重复的次数和开始播放的位置。
pygame.mixer.music.play(loops=loops, start=start)
pygame.mixer.music.set_volume(value) # 来设置播放的音量,音量value的范围为0.0到1.0。
if pygame.mixer.music.get_busy() == True:
flag = True
else:
if flag:
pygame.mixer.music.stop() # 停止播放
break
三、总结
以上就是根据歌名或者歌手去在线搜索音乐,这些操作都可以通过语音唤醒对搜索程序进行操作,使用语音就可以直接搜索歌曲,并播放,还可以通过语音方式对正在播放歌曲的程序进行暂停和继续播放。
欢迎在下方评论。
在平时的科研和任务不多的时候,利用空闲的时间去编写这个系统(因为空闲时间的乐趣就是做自己喜欢的事情,嘻嘻嘻,正好可以用来编写这个系统)。
每次完成一个小进度的时候都会在公众号和博客进行更新,记录一下这个过程(毕竟自己动手完成一件事,还是很有成就感的)
希望大家也能在这个过程中可以学习到一些知识(大牛就忽略了吧,哈哈哈)
同时在这个过程中,大家有更好的建议也可以进行评论交流,让这个系统更加完善。
【加群获取学习资料QQ群:901381280】
【各种爬虫源码获取方式】
识别文末二维码,回复:爬虫源码
欢迎关注公众号:Python爬虫数据分析挖掘,方便及时阅读最新文章
回复【开源源码】免费获取更多开源项目源码