获取音频
只是为了验证问题存在,所以就提供了一个获取音频的方法,就是白嫖了。
根据有道翻译的发音获取到地址:https://dict.youdao.com/dictvoice?le=auto&audio=大家好
import requests
def get_audio_file(text, file_path):
"""
根据文本内容生成音频文件
:param text:
:param file_path:
"""
url = "https://dict.youdao.com/dictvoice?le=auto&audio={}".format(text)
res = requests.get(url)
with open(file_path, 'wb') as f:
f.write(res.content)
播放音频
播放音频通过两种方式,分别通过playsound
和pyaudio
两种库,具体使用哪个看个人爱好,两个在使用过程中都遇到过一点小插曲。
通过playsound播放音频
- 安装
pip install playsound
即可安装 - 代码实现:
def play_sound_by_playsound(file_path):
"""
通过playsound库播放音频文件
:param file_path:
:return:
"""
playsound(file_path)
>>> playsound('a.wav')
Error 296 for command:
open a.wav
无法在指定的 MCI 设备上播放指定的文件。文件可能已损坏,或格式不对,或没有此格式的文件处理程序可用。
Error 263 for command:
close a.wav
指定的设备未打开,或不被 MCI 所识别。
Failed to close the file: a.wav
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "D:\Python\Python310\lib\site-packages\playsound.py", line 72, in _playsoundWin
winCommand(u'open {}'.format(sound))
File "D:\Python\Python310\lib\site-packages\playsound.py", line 64, in winCommand
raise PlaysoundException(exceptionMessage)
playsound.PlaysoundException:
Error 296 for command:
open a.wav
无法在指定的 MCI 设备上播放指定的文件。文件可能已损坏,或格式不对,或没有此格式的文件处理程序可用。
- 解决方法
打开异常中指定的对应文件 playsound.py
,找到文件中有utf-16
的地方,注释掉对应代码,一共三处,
注释后如下(注意括号的匹配问题):
def winCommand(*command):
bufLen = 600
buf = c_buffer(bufLen)
command = ' '.join(command)
errorCode = int(windll.winmm.mciSendStringW(command, buf, bufLen - 1, 0))
if errorCode:
errorBuffer = c_buffer(bufLen)
windll.winmm.mciGetErrorStringW(errorCode, errorBuffer, bufLen - 1)
exceptionMessage = ('\n Error ' + str(errorCode) + ' for command:')
logger.error(exceptionMessage)
raise PlaysoundException(exceptionMessage)
return buf.value
再次执行OK了。
通过pyaudio播放
-
安装
pip install pyaudio
-
代码
def play_sound_by_pyaudio(file_path):
wf = wave.open(file_path, 'rb')
p = pyaudio.PyAudio()
stream = p.open(format = p.get_format_from_width(wf.getsampwidth()),
channels=wf.getnchannels(),
rate=wf.getframerate(),
output=True)
while True:
data = wf.readframes(chunk)
if len(data) == 0:
break
stream.write(data)
stream.stop_stream()
stream.close()
p.terminate()
wf = wave.open(file_path, 'rb')
File "D:\Python\Python310\lib\wave.py", line 509, in open
return Wave_read(f)
File "D:\Python\Python310\lib\wave.py", line 163, in __init__
self.initfp(f)
File "D:\Python\Python310\lib\wave.py", line 130, in initfp
raise Error('file does not start with RIFF id')
wave.Error: file does not start with RIFF id
Process finished with exit code 1
发现在打开音频文件的时候就已经出错了,别说播放了。
- 解决方法
音频文件后缀名改成mp3后,通过ffmpeg
重新转换一下
ffmpeg -i a.mp3 a.wav
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)