使用树莓派3B+开发智能音乐播放器
2018年07月03日 21:25:13 qq_42044484 阅读数:2397
一、功能描述

对麦克风说出歌名后,树莓派自动下载对应歌曲的MP3,默认播放搜索到的第一首歌曲。

二、硬件设备

1、树莓派3B+

2、sony的ps3 eye麦克风一个(淘宝20块一个,带摄像头和4个麦克风阵列,USB连接)

3、蓝牙音箱

三、需要的python库

1、pyaudio:用于采集麦克风语音信号

2、baidu-aip:使用百度的AI库,用于语音识别,将语音转化为文字和将文字转化为语音。需要到百度AI上注册,获取ID和KEY

3、requests:网络爬虫,用于搜索歌曲的MP3并下载,爬取百度

4、pygame:用于音乐文件播放

四、源代码

-- coding: utf-8 --

from aip import AipSpeech #百度语音识别库
import pyaudio #麦克风声音采集库
import wave
import requests,json #音乐搜索
import pygame #mp3播放
import os
import time
import sys
“”" 我的 APPID AK SK “”"
APP_ID = ‘XXXXXXX’ #需要到百度AI注册申请ID KEY
API_KEY = ‘XXXXXXXXXXXXXXXXXX’
SECRET_KEY = ‘XXXXXXXXXXXXXXXXX’

#定义采集声音文件参数
CHUNK = 1024
FORMAT = pyaudio.paInt16 #16位采集
CHANNELS = 1 #单声道
RATE = 16000 #采样率
RECORD_SECONDS = 9 #采样时长 定义为9秒的录音
WAVE_OUTPUT_FILENAME = “/home/pi/my_python_programe/myvoice.pcm” #采集声音文件存储路径

def get_file_content(filePath):
with open(filePath, ‘rb’) as fp:
return fp.read()

#获取下载地址
def get_down_url(songid):
req=requests.get(“http://tingapi.ting.baidu.com/v1/restserver/ting?method=baidu.ting.song.play&format=jsonp&callback=jQuery17206073972467458864_1511011710426&songid=%s&_=1511011713541” %songid)
req.encoding=‘utf-8’
#print(json.loads(req.text))
json1=json.loads(req.text.replace(“jQuery17206073972467458864_1511011710426(”,"").replace(");",""))
print(“下载地址:”,json1[“bitrate”][‘show_link’])
return json1[“bitrate”][‘show_link’]
#下载保存文件
def music_down(url,music_name,artistname):
f=open(music_name+’-’+artistname+’.mp3’,‘wb’)
req_mp3=requests.get(url)
f.write(req_mp3.content)
f.close()
#调用百度AI,将文字转化为声音输出,用于提示音
def word_to_voice(text):
result = client.synthesis(text, ‘zh’, 1, {
‘vol’: 5, ‘spd’: 3, ‘per’: 3})
if not isinstance(result, dict):
with open(’/home/pi/my_python_programe/audio.mp3’, ‘wb’) as f:
f.write(result)
f.close()
pygame.mixer.music.load(’/home/pi/my_python_programe/audio.mp3’)#text文字转化的语音文件
pygame.mixer.music.play(loops=0)
while pygame.mixer.music.get_busy() == True:
print(‘waiting’)

def word_to_voice1(text):
result = client.synthesis(text, ‘zh’, 1, {
‘vol’: 5, ‘spd’: 3, ‘per’: 3})
if not isinstance(result, dict):
with open(’/home/pi/my_python_programe/audio1.mp3’, ‘wb’) as f:
f.write(result)
f.close()
pygame.mixer.music.load(’/home/pi/my_python_programe/audio1.mp3’)
pygame.mixer.music.play(loops=0)
while pygame.mixer.music.get_busy() == True:
print(‘waiting’)

#获得麦克风输入的声音文件,保存在myvoice.pcm
def get_mic_voice_file§:
word_to_voice(‘请说出歌名’)

stream = p.open(format=FORMAT,channels=CHANNELS,rate=RATE,input=True,frames_per_buffer=CHUNK)
print("* recording")frames = []
for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)):data = stream.read(CHUNK)frames.append(data)
print("* done recording")
stream.stop_stream()
stream.close()
#p.terminate()#这里先不使用p.terminate(),否则 p = pyaudio.PyAudio()将失效,还得重新初始化。
wf = wave.open(WAVE_OUTPUT_FILENAME, 'wb')
wf.setnchannels(CHANNELS)
wf.setsampwidth(p.get_sample_size(FORMAT))
wf.setframerate(RATE)
wf.writeframes(b''.join(frames))
wf.close()
print('recording finished')

#百度语音识别出歌名文字并返回
def baidu_get_song_name(client):
results = client.asr(get_file_content(WAVE_OUTPUT_FILENAME), ‘pcm’, 16000, { ‘dev_pid’: 1536, })
# print(results[‘result’])
song_name=results[‘result’][0]
print(song_name)
return song_name

#百度音乐下载歌曲,取自百度
def download_music_file(song_name):
req_url = “http://sug.music.baidu.com/info/suggestion?format=json&word=%s&version=2&from=0&callback=window.baidu.sug&third_type=0&client_type=0&_=1511013032878” % song_name
req_so = requests.get(req_url)
data = json.loads(req_so.text.replace(“window.baidu.sug(”, “”).replace(");", “”))
for i in data[“data”][“song”]:
print("\tsongid:" + str(i[“songid”]), “音乐名字:” + i[“songname”], “\t歌手:” + i[“artistname”])
input_songid = data[“data”][“song”][0][“songid”] # input(“请输入你要下载的songid:”)
for i in data[“data”][“song”]:
if input_songid == str(i[“songid”]):
url = get_down_url(i[“songid”])
music_down(url, i[“songname”], i[“artistname”])
print(“下载完成”)
music_name = i[‘songname’] # 获取MP3文件中的歌曲名
artistname = i[“artistname”] # 获取MP3文件中的歌手名
filename = ‘/home/pi/my_python_programe/’ + music_name + ‘-’ + artistname + ‘.mp3’
print(filename)

word_to_voice1('请欣赏')
return filename

def play_mp3(music_file):
pygame.mixer.music.load(music_file)
‘’‘while True:
# 检查音乐流播放,有返回True,没有返回False
# 如果一直有音乐流则选择播放
if pygame.mixer.music.get_busy() == False:
pygame.mixer.music.play()’’’
pygame.mixer.music.play(loops=0) #该函数运行后立即返回,音乐一直在后台运行

def one_time_process§:#一次麦克采样+语音识别+音乐下载+自动播放
get_mic_voice_file§
play_mp3(download_music_file(baidu_get_song_name(client)))

if name==‘main’:
#麦克风采集初始化、百度语音识别初始化、mp3文件播放初始化
p = pyaudio.PyAudio()
client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)
pygame.mixer.init()
#

while 1:#循环调用麦克录音one_time_process(p)while pygame.mixer.music.get_busy()==True:print('playing')

四、其他

1、在/home/pi下新建my_python_programe文件夹,将程序文件拷贝到该文件夹下,“python3 文件名.py”运行程序。

2、程序只是个雏形,还有许多不完善和BUG,下一步将加入snowboy语音唤醒功能。

使用树莓派3B+开发智能音乐播放器相关推荐

  1. .net vue漂亮登录界面_基于 electron-vue 开发的音乐播放器「实践」

    作者:XiaoTuGou 转发链接:https://github.com/SmallRuralDog 前言 基于 electron-vue 开发的音乐播放器,界面模仿QQ音乐. 技术栈electron ...

  2. Android应用开发--MP3音乐播放器滚动歌词实现

    Android应用开发--MP3音乐播放器滚动歌词实现 2013年6月2日  简.美音乐播放器开发记录 -----前话 有网友给我博客评论说,让我借鉴好的Android代码,代码贴出来的时候最好整体先 ...

  3. iOS开发:音乐播放器

    /******************       iOS开发:音乐播放器     *****************/ 要求:给button一个触发事件,点击一下播放歌曲,显示暂停提示: 再点击一下 ...

  4. 微信PHP开发《音乐播放器》

    文章目录 前言 一.简介 二.引入Vant框架 1.引入库 2.需要用到的知识 三.页面编写,以及js的实现 1.首页 2.搜索页 3.获取搜索歌曲 4.播放页 5.榜单列表页 6.对应页面的json ...

  5. Android应用开发--MP3音乐播放器Service实现

    Android应用开发--MP3音乐播放器Service实现 2013年5月29日简.美音乐播放器开发记录 让网友们久等啦,关于简.美音乐播放器的开发,最重要的Service类总算是要发博了.关于An ...

  6. [附源码]计算机毕业设计Python+uniapp基于微信小程序平台开发的音乐播放器f0rrr(程序+lw+远程部署)

    [附源码]计算机毕业设计Python+uniapp基于微信小程序平台开发的音乐播放器f0rrr(程序+lw+远程部署) 该项目含有源码.文档.程序.数据库.配套开发软件.软件安装教程 项目运行环境配置 ...

  7. 基于QT开发的音乐播放器(附源码)

    基于QT开发的音乐播放器(附源码) 一.简介 1.介绍 2.功能描述 3.系统功能层次模块图 4.各模块功能描述 (1)播放界面 (2)歌词 (3)歌曲信息 (4)歌曲列表 5.文件格式 6.运行环境 ...

  8. Android应用开发 MP3音乐播放器滚动歌词实现

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! Andr ...

  9. Android应用开发--MP3音乐播放器代码实现(一)

    Android应用开发--MP3音乐播放器代码实现(一) 需求1:将内存卡中的MP3音乐读取出来并显示到列表当中 1. 从数据库中查询所有音乐数据,保存到List集合当中,List当中存放的是Mp3I ...

最新文章

  1. spring mvc 总结
  2. Mongodb源码分析--Replication之主从模式--Master
  3. 个人对于MySQL的理解_MySQL锁的理解
  4. 雨滴桌面时间插件_真香!这 3 款软件,让你的电脑桌面清爽又高效!
  5. java mysql 动态sql_Java下拼接运行动态SQL语句
  6. (day 39 - 动态规划) 剑指 Offer 47. 礼物的最大价值
  7. Excel-统计函数
  8. 运营商管道的精细化运营之路
  9. 经典软文是如何写作和推广的
  10. java创建pdf空白页_使用itext将html转成PDF,PDF空白的问题。
  11. lnln(10 3.5 2)的c语言,ln10(ln对数表)
  12. 用surfaceview播放FFmpeg解码视屏
  13. MTP 模式 pc端文件和文件管理其中的不同步
  14. 主存储器、辅存、缓存与内存、硬盘的关系
  15. python学习笔记(Data Analysis)
  16. 流量并不仅仅只是存在于互联网时代,更重要的是一种模式
  17. 如何反击职场PUA?
  18. 广州帽峰山一游部分图片
  19. 【优化系列】汇编优化技术(十一):MIPS架构MSA Intrinsic优化及demo
  20. 项目的px单位如何转化vw单位

热门文章

  1. ABLIC推出S-191L/N系列车载高耐压电池监测IC,具有行业首创的电源分压输出功能(*1),为功能安全设计作出贡献
  2. 九度题目1440:Goldbach's Conjecture
  3. arduino自制cnc绘图仪_如何制作一台类似于CNC机器的自动绘图机
  4. linux 磁盘管理相关命令
  5. EmAtlas:探索哺乳动物胚胎发育时空动态的综合图谱
  6. power bi数据分析_Power BI数据模型:使用关系
  7. C++ 个人财务收支管理系统
  8. 学画画软件app推荐_有什么好用的绘画app?
  9. 设定关系(A=1,B=2,C=3,···,Z=26,AA=27,AB=28,···,AAA=XXX,···),写一个转换函数,根据上面规则把一个字符串转换为数字。
  10. ROS实验笔记之——基于Prometheus的无人机运动规划