无法使用python播放音频文件

时间:2020-11-03 01:22:26

标签: python python-3.x linux audio ubuntu-20.04

我正在尝试为我的项目创建一个简单的助手。我创建了一个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

请帮助我摆脱这种情况。我被困在这里太久了,一直在寻找它,但似乎找不到解决方法。如果需要有关我的硬件或任何其他配置的更多信息,我可以提供。

0 个答案:

没有答案