造一个智能语音音箱!!!太简单了【语音智能管家】

文章目录

一、获取歌曲

二、播放歌曲

三、总结

【加群获取学习资料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文件)
可以设置

  1. 是否循环播放次数loops,默认是0次
  2. 开始播放位置start,默认是从0秒开始
  3. 音量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爬虫数据分析挖掘,方便及时阅读最新文章
回复【开源源码】免费获取更多开源项目源码

欢迎扫码

posted @ 2020-12-19 21:09  Python研究者  阅读(743)  评论(0编辑  收藏  举报