我正在尝试为我的项目创建一个简单的助手。我创建了一个mp3文件,并使用gtts模块将其保存。之后,我尝试播放该文件,但无法播放。我尝试了许多不同的模块。我尝试os.system()播放mp3文件,但它给了我权限被拒绝的错误。 我在pycharm中使用anaconda环境来运行我的项目。我在anaconda环境中使用的python版本是3.6。我曾尝试pygame尝试使音频文件破损,但它也不起作用。
下面是我尝试的代码和我得到的错误。
import time
import speech_recognition as sr
from gtts import gTTS
from pydub import AudioSegment
from pydub.playback import play
def playMp3(filename):
mp3file = AudioSegment.from_mp3(filename)
play(mp3file)
def playWav(filename):
wavfile = AudioSegment.from_file(filename)
play(wavfile)
def speak(sentence):
tts = gTTS(text=sentence, lang='en')
filename = './new.wav'
tts.save(filename)
playMp3(filename)
def get_audio():
r = sr.Recognizer()
with sr.Microphone() as source:
r.adjust_for_ambient_noise(source)
print('say something')
audio = r.listen(source)
said = ''
try:
said = r.recognize_google(audio)
print(said)
except Exception as e:
print('Exception: ' + str(e))
return said
# text = get_audio()
# if 'hello' or 'hi' in text:
speak('hello, how are you?')
运行以上代码后,出现以下错误
ALSA lib conf.c:3723:(snd_config_hooks_call) Cannot open shared library libasound_module_conf_pulse.so (libasound_module_conf_pulse.so: libasound_module_conf_pulse.so: cannot open shared object file: No such file or directory)
ALSA lib control.c:1379:(snd_ctl_open_noupdate) Invalid CTL hw:0
ALSA lib pcm_dsnoop.c:642:(snd_pcm_dsnoop_open) unable to open slave
ALSA lib pcm_dmix.c:1090:(snd_pcm_dmix_open) unable to open slave
ALSA lib pcm.c:2660:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.rear
ALSA lib pcm.c:2660:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.center_lfe
ALSA lib pcm.c:2660:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.side
ALSA lib dlmisc.c:340:(snd_dlobj_cache_get0) Cannot open shared library libasound_module_pcm_jack.so (libasound_module_pcm_jack.so: libasound_module_pcm_jack.so: cannot open shared object file: No such file or directory)
ALSA lib dlmisc.c:340:(snd_dlobj_cache_get0) Cannot open shared library libasound_module_pcm_jack.so (libasound_module_pcm_jack.so: libasound_module_pcm_jack.so: cannot open shared object file: No such file or directory)
ALSA lib dlmisc.c:340:(snd_dlobj_cache_get0) Cannot open shared library libasound_module_pcm_oss.so (libasound_module_pcm_oss.so: libasound_module_pcm_oss.so: cannot open shared object file: No such file or directory)
ALSA lib dlmisc.c:340:(snd_dlobj_cache_get0) Cannot open shared library libasound_module_pcm_oss.so (libasound_module_pcm_oss.so: libasound_module_pcm_oss.so: cannot open shared object file: No such file or directory)
ALSA lib dlmisc.c:340:(snd_dlobj_cache_get0) Cannot open shared library libasound_module_pcm_pulse.so (libasound_module_pcm_pulse.so: libasound_module_pcm_pulse.so: cannot open shared object file: No such file or directory)
ALSA lib dlmisc.c:340:(snd_dlobj_cache_get0) Cannot open shared library libasound_module_pcm_pulse.so (libasound_module_pcm_pulse.so: libasound_module_pcm_pulse.so: cannot open shared object file: No such file or directory)
ALSA lib dlmisc.c:340:(snd_dlobj_cache_get0) Cannot open shared library libasound_module_pcm_upmix.so (libasound_module_pcm_upmix.so: libasound_module_pcm_upmix.so: cannot open shared object file: No such file or directory)
ALSA lib dlmisc.c:340:(snd_dlobj_cache_get0) Cannot open shared library libasound_module_pcm_upmix.so (libasound_module_pcm_upmix.so: libasound_module_pcm_upmix.so: cannot open shared object file: No such file or directory)
ALSA lib dlmisc.c:340:(snd_dlobj_cache_get0) Cannot open shared library libasound_module_pcm_vdownmix.so (libasound_module_pcm_vdownmix.so: libasound_module_pcm_vdownmix.so: cannot open shared object file: No such file or directory)
ALSA lib dlmisc.c:340:(snd_dlobj_cache_get0) Cannot open shared library libasound_module_pcm_vdownmix.so (libasound_module_pcm_vdownmix.so: libasound_module_pcm_vdownmix.so: cannot open shared object file: No such file or directory)
ALSA lib dlmisc.c:340:(snd_dlobj_cache_get0) Cannot open shared library libasound_module_pcm_usb_stream.so (libasound_module_pcm_usb_stream.so: libasound_module_pcm_usb_stream.so: cannot open shared object file: No such file or directory)
ALSA lib dlmisc.c:340:(snd_dlobj_cache_get0) Cannot open shared library libasound_module_pcm_usb_stream.so (libasound_module_pcm_usb_stream.so: libasound_module_pcm_usb_stream.so: cannot open shared object file: No such file or directory)
ALSA lib pcm_dsnoop.c:642:(snd_pcm_dsnoop_open) unable to open slave
ALSA lib pcm_dmix.c:1090:(snd_pcm_dmix_open) unable to open slave
ALSA lib pcm_dmix.c:1090:(snd_pcm_dmix_open) unable to open slave
Expression 'paInvalidSampleRate' failed in 'src/hostapi/alsa/pa_linux_alsa.c', line: 2043
Expression 'PaAlsaStreamComponent_InitialConfigure( &self->playback, outParams, self->primeBuffers, hwParamsPlayback, &realSr )' failed in 'src/hostapi/alsa/pa_linux_alsa.c', line: 2717
Expression 'PaAlsaStream_Configure( stream, inputParameters, outputParameters, sampleRate, framesPerBuffer, &inputLatency, &outputLatency, &hostBufferSizeMode )' failed in 'src/hostapi/alsa/pa_linux_alsa.c', line: 2838
Traceback (most recent call last):
File "/home/nabeel/PycharmProjects/EmotionsAgent/PersonalAssistant.py", line 44, in <module>
speak('hello, how are you?')
File "/home/nabeel/PycharmProjects/EmotionsAgent/PersonalAssistant.py", line 24, in speak
playMp3(filename)
File "/home/nabeel/PycharmProjects/EmotionsAgent/PersonalAssistant.py", line 11, in playMp3
play(mp3file)
File "/home/nabeel/anaconda3/envs/EmotionsAgent/lib/python3.8/site-packages/pydub/playback.py", line 67, in play
_play_with_pyaudio(audio_segment)
File "/home/nabeel/anaconda3/envs/EmotionsAgent/lib/python3.8/site-packages/pydub/playback.py", line 26, in _play_with_pyaudio
stream = p.open(format=p.get_format_from_width(seg.sample_width),
File "/home/nabeel/anaconda3/envs/EmotionsAgent/lib/python3.8/site-packages/pyaudio.py", line 750, in open
stream = Stream(self, *args, **kwargs)
File "/home/nabeel/anaconda3/envs/EmotionsAgent/lib/python3.8/site-packages/pyaudio.py", line 441, in __init__
self._stream = pa.open(**arguments)
OSError: [Errno -9997] Invalid sample rate
我运行以下脚本来检查默认采样率,并得到以下结果:
from pydub import AudioSegment
from pydub.playback import play
import pyaudio
import sounddevice as sd
pa = pyaudio.PyAudio()
print(pa.get_default_input_device_info())
print(pyaudio.pa.__file__)
samplerates = 32000, 44100.0, 48000, 96000, 128000
device = 0
supported_samplerates = []
for fs in samplerates:
try:
sd.check_output_settings(device=device, samplerate=fs)
except Exception as e:
print(fs, e)
else:
supported_samplerates.append(fs)
print(supported_samplerates)
# import pyglet
#
# song = pyglet.media.load('new.mp3')
# song.play()
# pyglet.app.run()
# pyglet.app.exit()
我得到的上述代码的输出是:
/home/nabeel/anaconda3/envs/EmotionsAgent/bin/python3 /home/nabeel/PycharmProjects/EmotionsAgent/test.py
{'index': 0, 'structVersion': 2, 'name': 'HDA Intel PCH: CX20751/2 Analog (hw:1,0)', 'hostApi': 0, 'maxInputChannels': 2, 'maxOutputChannels': 0, 'defaultLowInputLatency': 0.005804988662131519, 'defaultLowOutputLatency': -1.0, 'defaultHighInputLatency': 0.034829931972789115, 'defaultHighOutputLatency': -1.0, 'defaultSampleRate': 44100.0}
/home/nabeel/anaconda3/envs/EmotionsAgent/lib/python3.8/site-packages/_portaudio.cpython-38-x86_64-linux-gnu.so
32000 Invalid number of channels [PaErrorCode -9998]
44100.0 Invalid number of channels [PaErrorCode -9998]
48000 Invalid number of channels [PaErrorCode -9998]
96000 Invalid number of channels [PaErrorCode -9998]
128000 Invalid number of channels [PaErrorCode -9998]
[]
之后,我运行以下命令来检查声卡
lspci -knn|grep -iA2 audio
并得到以下结果
00:03.0 Audio device [0403]: Intel Corporation Broadwell-U Audio Controller [8086:160c] (rev 09)
Subsystem: Lenovo Broadwell-U Audio Controller [17aa:390b]
Kernel driver in use: snd_hda_intel
Kernel modules: snd_hda_intel
--
00:1b.0 Audio device [0403]: Intel Corporation Wildcat Point-LP High Definition Audio Controller [8086:9ca0] (rev 03)
Subsystem: Lenovo Wildcat Point-LP High Definition Audio Controller [17aa:390b]
Kernel driver in use: snd_hda_intel
Kernel modules: snd_hda_intel
我还调试了代码,并进入pyaudio.py文件。它在给出错误的行上有一个断点。但是,我真的不知道这是什么。也许我必须在pyaudio中手动更改采样率。由于默认采样率是44100,在pyaudio.py中,采样率是24000。
下面是self._stream = pa.open(** arguments)
的参数{'rate':24000,'channels':1,'format':8,'input':False,'output':True,'input_device_index':无,'output_device_index':无,'frames_per_buffer': 1024}
对于我的系统信息,我正在使用ubuntu 20.04,默认的python版本是3.8,但是在我的anaconda环境中,我正在使用python 3.6
我在终端中运行alsamixer命令,并获得了有关声卡的以下信息
0 HDA Intel HDMI
1 HDA Intel PCH
请帮助我摆脱这种情况。我被困在这里太久了,一直在寻找它,但似乎找不到解决方法。如果需要有关我的硬件或任何其他配置的更多信息,我可以提供。