前言
大一上学期寒假来了,找回吃灰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 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