360免费建站官网入口,手机网站建设设计,无极在线网站播放,流感用什么药更好树莓派语音助手从诞生的第一天开始#xff0c;我就想着让它能像小爱音箱一样#xff0c;可以语音控制播放音乐。经过这些日子的倒腾#xff0c;今天终于实现了。 接下里#xff0c;和大家分享下我的实现方法#xff1a;首先音乐播放模块用的是我在上一篇博文写的《用sound…树莓派语音助手从诞生的第一天开始我就想着让它能像小爱音箱一样可以语音控制播放音乐。经过这些日子的倒腾今天终于实现了。 接下里和大家分享下我的实现方法首先音乐播放模块用的是我在上一篇博文写的《用sounddevice实现连续的音乐曲库播放》然后语义解析部分依旧用的是RASA具体做法同前不久实现的《让树莓派智能语音助手实现定时提醒功能》即用RASA解析语义返回关键字指令给语音助手语音助手负责调用sounddevice编写的语音库执行指令。
RASA部分主要定义了4个新的intent和4个新的actions。 如上分别是stories.md和nlu.md新增部分最右边的是其中一个actions的举例没啥技术含量剩下三个就不贴了。另外domain.yml部分记得把intent和actions定义一下。这些就是RASA的全部内容了。
再来看语音助手的demo.py部分。这次我把收到语义解析后的代码都重新改写了一下
if resp 有需要再叫我:print(对话结束等待呼唤……time.strftime(%Y-%m-%d %H:%M:%S,time.localtime(time.time()))) status 0elif resp play_music:resp if flag:playMusic()elif resp next_song:resp nextSong()elif resp prev_song:resp prevSong()elif resp stop_music:resp stopMusic()else:index0 resp.find(5分钟后提醒)if index0 ! -1:text0 /EXTERNAL_remindert threading.Timer(300, act_remind, args[text0])t.start()if resp ! :print(回复内容:resp)tts.text_to_speech(resp)else:print(播放音乐对话结束等待呼唤……time.strftime(%Y-%m-%d %H:%M:%S,time.localtime(time.time())))status 0time.sleep(0.5)以上代码放在callback函数“print(解析耗时:f{time.time() - t:.4f}s)”这句话之后。除了这部分再定义四个函数。
import music
import randommusicThreads []
count 0
index 0
flag Truedef playMusic():global indexglobal countglobal flagglobal musicThreadsmusicThread music.MusicThread()musicThreads.append(musicThread)count musicThread.getCount()index random.randint(0, count-1)musicThread.setId(index)musicThread.start()flag Falsedef stopMusic():global indexglobal countglobal flagglobal musicThreadsindex musicThreads[-1].getId()musicThreads[-1].setId(count-1)musicThreads[-1].stop()flag Truedef nextSong():global indexglobal musicThreadsmusicThreads[-1].stop() def prevSong():global indexglobal musicThreadsindex index - 1musicThreads[-1].setId(index)musicThreads[-1].stop()所有这些语音助手部分的代码都是基于最初的《树莓派智能语音助手之功能整合》修改的有兴趣的小伙伴可以自行拼接。
好了执行了如上代码后树莓派智能语音助手也可以通过语音播放音乐了。
最后补充3个事情
1.语音控制模块我是调用了sounddevice和soundfile的库其中soundfile又是基于libsndfile来解码音频文件的。但是我的raspbian能升级的libsndfile版本最高只有1.0.28这个库在1.1.0版本下是不支持MP3解码的所以最终播放的音乐我都是在pc端把MP3转格式为wav后才能使用。但是我在pc端windows下没有这个问题。在使用这个库之前可以先查看一下libsndfile的版本。 2.用于语音识别的录音模块我用的也是sounddevice所以要修改下record.py在下面这句中添加一个参数device等号后面填写你录音所用的设备编号。
audio sd.rec(int(self.duration * self.sample_rate), samplerateself.sample_rate, channels1)
查看有哪些音频设备可以在终端输入
python -m sounddevice
回车后就会list你可用音频设备列表如下图就是我树莓派上的我选择的是2号USB PNP SOUND DEVICE所以上面新增的device参数可以写device3 这样修改后就可以让音乐播放和语音输入两个功能相对独立存在。
3.一开始在执行音乐播放时遇到了output underflow的提示导致语音助手都卡壳了。后来查了文档解决了这个问题具体解决方法可以看
用sounddevice播放音乐遇到output underflow提示-CSDN博客