前言

大一上学期寒假来了,找回吃灰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月份的时候解决了这个问题,当时在同样有这个问题的帖子留言说:

提问者也给出了思路: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 AipSpeechoutstr = '林星月真帅!'""" 你的 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 timeweather_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也可以生成,不限于树莓派。

小结