×

基于Google AIY的互联网流媒体广播

消耗积分:0 | 格式:rar | 大小:1.38 MB | 2022-12-08

香香技术员

分享资料个

方案介绍

使用您的 Google AIY 制作语音激活的互联网流媒体广播,也可用于播放 MP3 或其他音频文件。

Google AIY 语音工具包是开始使用语音命令控制 Raspberry Pi 的好方法。该项目中的 Google 助理无法像 Google Home 那样播放音乐。所以我想添加使用语音激活播放流媒体广播或 MP3 的功能。使用这种方法,您可以让您的 Google AIY 语音项目在您的语音命令上播放您最喜欢的流媒体广播。

首先,安装 mpd(音乐播放器守护程序)和 mpc(mpd 的控制器)。

sudo apt-get install mpd mpc

接下来,编辑配置文件如下:

sudo nano /etc/mpd.conf

您将看到如下所示的一些行:

audio_output {
type "alsa"
name "My ALSA Device"
#  device "hw:0,0" # optional
#  mixer_type "hardware" # optional
#  mixer_device "default"  # optional
#  mixer_control  "PCM"  # optional
#  mixer_index  "0"  # optional
}

将这些行更改为以下内容(取消注释设备和混合器类型,并用软件替换硬件):

audio_output {
type "alsa"
name "My ALSA Device"
device "hw:0,0" # optional
mixer_type "software" # optional
#  mixer_device "default"  # optional
#  mixer_control  "PCM"  # optional
#  mixer_index  "0"  # optional
}

接下来,在 mpd.conf 中查找单词“group”并将其更改为“audio”。

group           "audio"

现在保存 mpd.conf 文件并返回终端。启动并启用 mpd 守护程序,使其在重新启动时启动。

sudo systemctl start mpd
sudo systemctl enable mpd

现在是时候测试您的网络收音机了。在线查找流媒体广播的链接。我找到了一个 KEXP 90.1 Seattle 的 .pls 文件,在文本编辑器中查看它,发现可以在 http://50.31.180.202:80 直接访问 KEXP 流。所以要测试你的播放器,输入:

mpc add http://50.31.180.202:80/ 
mpc play

您现在应该听到音频流。要停止它,请键入:

mpc stop

现在是时候修改voice-recognizer-raspi代码以使其能够识别您的命令了。使用 nano 编辑 python 文件:

nano /home/pi/voice-recognizer-raspi/src/action.py

首先,import subprocess在其他导入之后添加 action.py。接下来,在“在此处实施您自己的操作”之后放置以下类。确保将 http://50.31.180.202:80/ 更改为您的广播电台:

# Play Radio of your choice (change http://50.31.180.202:80/ to your choice)
class playRadio(object):
    def __init__(self, say):
        self.say = say
    def run(self, voice_command):
        self.say('Playing Radio')
        subprocess.call("mpc clear;mpc add http://50.31.180.202:80/;mpc play",shell=True)

然后在“在此处添加您自己的语音命令”之后添加:

actor.add_keyword(_('my radio station'), playRadio(say))

现在(重新加载语音识别器后),当您触发该框并说“我的广播电台”时,您的广播电台将播放。

现在唯一的问题是,当您尝试执行另一个语音命令时,广播电台不会暂停。要在触发语音识别时使框暂停,您必须编辑 main.py 文件以在触发激活时停止 mpd。

nano /home/pi/voice-recognizer-raspi/src/main.py

首先,import subprocess在其他导入之后添加 main.py。然后在如下所示的确切位置添加 subprocess.call。这将首先停止 mpd,然后像往常一样再次启动 Google Assistant 监听。

   def recognize(self): 
       if self.recognizer_event.is_set(): 
           # Duplicate trigger (eg multiple button presses) 
           return 
       #############stop mpc################ 
       subprocess.call("mpc stop", shell=True) 
       #####################################
       self.recognizer.reset() 
       self.recorder.add_processor(self.recognizer) 
       self._status('listening')  

现在sudo systemctl restart voice-recognizer使用更改。

接着触发盒子,然后说“我的广播电台”。如果要停止,触发框并问另一个问题,或者只是说“谢谢”。

 

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !

'+ '

'+ '

'+ ''+ '
'+ ''+ ''+ '
'+ ''+ '' ); $.get('/article/vipdownload/aid/'+webid,function(data){ if(data.code ==5){ $(pop_this).attr('href',"/login/index.html"); return false } if(data.code == 2){ //跳转到VIP升级页面 window.location.href="//m.lene-v.com/vip/index?aid=" + webid return false } //是会员 if (data.code > 0) { $('body').append(htmlSetNormalDownload); var getWidth=$("#poplayer").width(); $("#poplayer").css("margin-left","-"+getWidth/2+"px"); $('#tips').html(data.msg) $('.download_confirm').click(function(){ $('#dialog').remove(); }) } else { var down_url = $('#vipdownload').attr('data-url'); isBindAnalysisForm(pop_this, down_url, 1) } }); }); //是否开通VIP $.get('/article/vipdownload/aid/'+webid,function(data){ if(data.code == 2 || data.code ==5){ //跳转到VIP升级页面 $('#vipdownload>span').text("开通VIP 免费下载") return false }else{ // 待续费 if(data.code == 3) { vipExpiredInfo.ifVipExpired = true vipExpiredInfo.vipExpiredDate = data.data.endoftime } $('#vipdownload .icon-vip-tips').remove() $('#vipdownload>span').text("VIP免积分下载") } }); }).on("click",".download_cancel",function(){ $('#dialog').remove(); }) var setWeixinShare={};//定义默认的微信分享信息,页面如果要自定义分享,直接更改此变量即可 if(window.navigator.userAgent.toLowerCase().match(/MicroMessenger/i) == 'micromessenger'){ var d={ title:'基于Google AIY的互联网流媒体广播',//标题 desc:$('[name=description]').attr("content"), //描述 imgUrl:'https://'+location.host+'/static/images/ele-logo.png',// 分享图标,默认是logo link:'',//链接 type:'',// 分享类型,music、video或link,不填默认为link dataUrl:'',//如果type是music或video,则要提供数据链接,默认为空 success:'', // 用户确认分享后执行的回调函数 cancel:''// 用户取消分享后执行的回调函数 } setWeixinShare=$.extend(d,setWeixinShare); $.ajax({ url:"//www.lene-v.com/app/wechat/index.php?s=Home/ShareConfig/index", data:"share_url="+encodeURIComponent(location.href)+"&format=jsonp&domain=m", type:'get', dataType:'jsonp', success:function(res){ if(res.status!="successed"){ return false; } $.getScript('https://res.wx.qq.com/open/js/jweixin-1.0.0.js',function(result,status){ if(status!="success"){ return false; } var getWxCfg=res.data; wx.config({ //debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。 appId:getWxCfg.appId, // 必填,公众号的唯一标识 timestamp:getWxCfg.timestamp, // 必填,生成签名的时间戳 nonceStr:getWxCfg.nonceStr, // 必填,生成签名的随机串 signature:getWxCfg.signature,// 必填,签名,见附录1 jsApiList:['onMenuShareTimeline','onMenuShareAppMessage','onMenuShareQQ','onMenuShareWeibo','onMenuShareQZone'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2 }); wx.ready(function(){ //获取“分享到朋友圈”按钮点击状态及自定义分享内容接口 wx.onMenuShareTimeline({ title: setWeixinShare.title, // 分享标题 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享给朋友”按钮点击状态及自定义分享内容接口 wx.onMenuShareAppMessage({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 type: setWeixinShare.type, // 分享类型,music、video或link,不填默认为link dataUrl: setWeixinShare.dataUrl, // 如果type是music或video,则要提供数据链接,默认为空 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到QQ”按钮点击状态及自定义分享内容接口 wx.onMenuShareQQ({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到腾讯微博”按钮点击状态及自定义分享内容接口 wx.onMenuShareWeibo({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到QQ空间”按钮点击状态及自定义分享内容接口 wx.onMenuShareQZone({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); }); }); } }); } function openX_ad(posterid, htmlid, width, height) { if ($(htmlid).length > 0) { var randomnumber = Math.random(); var now_url = encodeURIComponent(window.location.href); var ga = document.createElement('iframe'); ga.src = 'https://www1.elecfans.com/www/delivery/myafr.php?target=_blank&cb=' + randomnumber + '&zoneid=' + posterid+'&prefer='+now_url; ga.width = width; ga.height = height; ga.frameBorder = 0; ga.scrolling = 'no'; var s = $(htmlid).append(ga); } } openX_ad(828, '#berry-300', 300, 250);