树莓派3/4 实现天气语音播报与一种新的文本转语音方法 —— 百度云api +python +和风天气api

前言

大一上学期寒假来了,找回吃灰3个月的树莓派3耍耍,想调试一下高中做的早晨天气语音播报,结果,以前用得好好的ilangbd百度的文本转语音库不能用了,报错如下,查了一圈是mpg123的问题。

main: [src/mpg123.c:679] error: Unknown mpeg MIME type application/json - is it perhaps a playlist (use -@)?
main: [src/mpg123.c:680] error: If you know the stream is mpeg1/2 audio, then please report this as mpg123 bug

按照下面的教程做,就是会这样报错的。

ilangbd安装及使用
1.安装命令行播放器mpg123
sudo apt-get install mpg123
2.安装百度语音python包
sudo python -m pip install ilangbd
或者
sudo pip install ilangbd
3.直接在命令行使用以下命令(注意是命令行,不是python环境中的命令行)
ilang “你好,world!”
————————————————
版权声明:本文为CSDN博主「IngeTeng」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/lovec__/article/details/85273337

现在打开csdn很多小伙伴私信我求解决方案,现在快5月才看到,之前一直都不咋玩csdn……就按以前说的,分享一下我的解决方案。

解决思路

我在1月份的时候解决了这个问题,当时在同样有这个问题的帖子留言说:
3月前
提问者也给出了思路:mpg123的锅,百度不背:
在这里插入图片描述
于是乎,我想了想其他的解决方法:阿里云、百度云等云平台都有提供免费的文本转语音服务,为啥不尝试一下呢?直接把文本上传到云,云返回一段音频.mp3,然后用mplayer播放。

操作

1. 看百度语音合成文档——看懂了后面都不用看

看看百度云语音合成python接口简介,文档说要这样做:
在这里插入图片描述

2. 百度云创建应用

百度云ai应用控制台创建应用在这里插入图片描述
在这里插入图片描述
然后到应用详情,看APP_ID, API_KEY, SECRET_KEY,待会写程序用。
在这里插入图片描述

3. 安装AipSpeech

按照上文1中百度云的文档,安装安装语音合成 Python SDK,我印象中是用python3装的……不行就把下面的pip3换成pip,再看看有没有问题,有问题可评论告诉我qaq,树莓派丢家里没带回来学校,只能SSH远程测试了。

pip3 install baidu-aip

在这里插入图片描述
看这黄色字体就很想更新,但是好怕出问题……不过看着这黄色的WRANING就一阵不舒服,还是更pip吧:
在这里插入图片描述
没有pip?有点奇怪,于是我不用sudo试试:
在这里插入图片描述
好家伙,sudo用户为啥就不同呢?于是我找找:
在这里插入图片描述
原来是程序不一样……跑题了,砸们继续

4. 写程序尝试

我直接贴个图
在这里插入图片描述
图不太好复制……还是贴个代码吧:

import os
from aip import AipSpeech

outstr = '林星月真帅!'

""" 你的 APPID AK SK """
# 请自行替换
APP_ID = 'YourAppID'
API_KEY = 'YourAPIKey'
SECRET_KEY = 'YourSercetKey'

client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)

result  = client.synthesis(outstr, 'zh', 1, {
    'vol': 5,
})

# 识别正确返回语音二进制 错误则返回dict 参照下面错误码
if not isinstance(result, dict):
    with open('TTS_audio.mp3', 'wb') as f:
        f.write(result)

cmdline = 'mplayer TTS_audio.mp3'
os.system(cmdline)

好了,编辑好后运行:
在这里插入图片描述
用python3就行……问题不大

注意百度云不是一直免费的……我调用忽然间没用了,找了很久,检查了很久问题出在哪,甚至到本地wsl测试了一下……裂开!
在这里插入图片描述
这里贴一个能用的吧,白嫖一下,原文链接:https://blog.csdn.net/weixin_38241876/article/details/84949534

from aip import AipSpeech
 
""" 你的 APPID AK SK """
APP_ID = '15079673'
API_KEY = 'mGxvq3Nwr3aVjD4UFIFGsaMD'
SECRET_KEY = 'YIN3wxizj16zCRYZ6EGpdopuA6FwHRhB'
 
client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)
result  = client.synthesis('欢迎入住酒店,祝您入住愉快', 'zh', 1, {
    'vol': 5,
})
 
# 识别正确返回语音二进制 错误则返回dict 参照下面错误码
if not isinstance(result, dict):
    with open('test.mp3', 'wb') as f:
        f.write(result)
————————————————
版权声明:本文为CSDN博主「Alphapeople」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

以及附上天气播报的代码,那时为此学python参考别人的代码重新写的,里面的秘钥已经换成能用的:

import json
import os
import requests
import time

weather_city = "花都"
master_name = "林星月"

postdata = {'location': '{city}'.format(city = weather_city), 'key': '3b37afeada384b2abb3a8b5529f9c7e5'}
stra = requests.post('https://free-api.heweather.net/s6/weather/forecast', data=postdata)
json_obj = json.loads(stra.text)
w0 = json_obj['HeWeather6'][0]
wether = w0['daily_forecast'][1]

now_time = time.strftime("%")
welcome = '主人{name}早上好,正在为您播送{city}天气预报。'.format(city = weather_city, name = master_name)
outstr = '今天天气{0}转{1},温度{2}到{3}摄氏度.'.format(wether['cond_txt_d'], wether['cond_txt_n'], wether['tmp_max'], wether['tmp_min'])

from aip import AipSpeech

""" 你的 APPID AK SK """
APP_ID = '15079673'
API_KEY = 'mGxvq3Nwr3aVjD4UFIFGsaMD'
SECRET_KEY = 'YIN3wxizj16zCRYZ6EGpdopuA6FwHRhB'

client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)

result  = client.synthesis(welcome + outstr, 'zh', 1, {
    'vol': 5,
})

# 识别正确返回语音二进制 错误则返回dict 参照下面错误码
if not isinstance(result, dict):
    with open('TTS_audio.mp3', 'wb') as f:
        f.write(result)

cmdline = 'mplayer TTS_audio.mp3'
os.system(cmdline)

效果如下,在wsl也可以生成,不限于树莓派。
在这里插入图片描述

小结

  • 这种简单的应用python也是挺有意思的,但是学不了啥东西😢,没有学C++来得爽快
  • 百度害人不浅😒 免费的才是最贵的……之前白嫖服务器也是,百度免费额度这个问题白白浪费2小时😩😩😩,还以为程序出问题了
  • 写文章耗时挺长的,总用时3h
  • python菜得很👀
  • wsl播放音频还得一番操作,不能用mplayer
  • wsl代理方法:改.bashrc 链接

——2021年4月28日22:19:24

于河北工程大学图书馆二楼北,基础一西111

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值