【问题标题】:how to play mp3如何播放 mp3
【发布时间】:2016-04-01 03:58:55
【问题描述】:

我的问题从这里开始:

pyttsx and gTTS module errors

gTTS 运行良好,从文本文件中获取文本,但首先创建 mp3 文件,然后如果我想听,我必须调用这个 mp3,所以这很好,但如果我可以避免任何音频文件会更好,并得到只需从文本文件中读取。也许不知何故我可以使用谷歌语音从文本文件中读取..?无论如何,现在的主要问题是其他

如果我只能使用 gTTS 在 Windows 10-64 位 Python 3.5 上播放 mp3 的最佳方式是什么

操作系统正常:

import os
os.startfile("D:\my path/rec1.mp3") 

很好,但我不想使用默认播放器,需要类似 simpleaudio 的 mp3...

使用 pygame 我有安装问题,不确定,这样使用它有多好:

from pygame import mixer 

mixer.init()
mixer.music.load('D:/my path/rec1.mp3')
mixer.music.play()

vlc 只是如何安装呢? easy_install vlc 我得到了错误:could not find suitable distribution for requirement.parse ('vlc')pip install vlc 错误:could not find a version that satisfies the requirement vlc (from versions: ) no matching distribution found for vlc

import vlc

p = vlc.MediaPlayer("file:/my path/rec1.mp3")
p.play()
p.stop()

使用 pyglet:

import pyglet

music=pyglet.media.load('D:/my path/rec1.mp3')
music.play()
pyglet.app.run()

我收到了这个错误:

'AVbin is required to decode compressed media')
pyglet.media.riff.WAVEFormatException: AVbin is required to decode compressed media

子进程也使用默认播放器:

import subprocess

sound_program = "path to player"
sound_file = "D:/my path/rec1.mp3"
subprocess.call([sound_program, sound_file])

有mp3play,不知道怎么用:

import mp3play

filename = (r'D:\my path/rec1.mp3')
clip = mp3play.load(filename)
clip.play()

我是这样尝试的:

  filename = ('D:\my path/rec1.mp3')

这样:

  filename = r'D:\my path/rec1.mp3'

在所有情况下我都会出错:

Traceback (most recent call last):
  File "D:/dt/PyCharm_project/0_ASK.py", line 18, in <module>
    import mp3play
  File "C:\Users\User\AppData\Roaming\Python\Python35\site-packages\mp3play\__init__.py", line 4, in <module>
    from .windows import AudioClip as _PlatformSpecificAudioClip
  File "C:\Users\User\AppData\Roaming\Python\Python35\site-packages\mp3play\windows.py", line 27
    print 'Error %s for "%s": %s' % (str(err), txt, buf)
                                ^
SyntaxError: invalid syntax

用 pydub 就可以了:

from pydub import AudioSegment 
from gtts import gTTS
import simpleaudio as sa

blabla = ('my voice')
tts = gTTS(text=blabla, lang='en')
tts.save("D:/my path/rec.mp3")

rec = AudioSegment.from_mp3("D:\my path\rec.mp3")
rec.export("rec.wav", format="wav")

#rec = AudioSegment.ffmpeg ("D:\my path\rec.mp3")
#rec.export("rec.wav", format="wav")

#rec = AudioSegment.converter ("D:\my path\rec.mp3")
#rec.export("rec.wav", format="wav")

wave_obj = sa.WaveObject.from_wave_file('D:/my path/rec.wav'')
play_obj = wave_obj.play()
play_obj.wait_done()

序列中的错误首先使用AudioSegment.from_mp3

RuntimeWarning: Couldn't find ffmpeg or avconv - defaulting to ffmpeg, but may not work
  warn("Couldn't find ffmpeg or avconv - defaulting to ffmpeg, but may not work", RuntimeWarning)
Traceback (most recent call last):
  File " D:/dt/PyCharm_project/0_ASK.py", line 9, in <module>
    rec = AudioSegment.from_mp3("D:\my path\rec.mp3")
  File "C:\Users\User\AppData\Roaming\Python\Python35\site-packages\pydub\audio_segment.py", line 438, in from_mp3
    return cls.from_file(file, 'mp3')
  File "C:\Users\User\AppData\Roaming\Python\Python35\site-packages\pydub\audio_segment.py", line 366, in from_file
    file = _fd_or_path_or_tempfile(file, 'rb', tempfile=False)
  File "C:\Users\User\AppData\Roaming\Python\Python35\site-packages\pydub\utils.py", line 59, in _fd_or_path_or_tempfile
    fd = open(fd, mode=mode)
OSError: [Errno 22] Invalid argument: 'D:\my path\rec.mp3'

AudioSegment.ffmpeg

  warn("Couldn't find ffmpeg or avconv - defaulting to ffmpeg, but may not work", RuntimeWarning)
Traceback (most recent call last):
  File "D:/dt/PyCharm_project/0_ASK.py ", line 12, in <module>
    rec = AudioSegment.ffmpeg ("D:\my path\rec.mp3")
TypeError: 'str' object is not callable

AudioSegment.converter:

RuntimeWarning: Couldn't find ffmpeg or avconv - defaulting to ffmpeg, but may not work
  warn("Couldn't find ffmpeg or avconv - defaulting to ffmpeg, but may not work", RuntimeWarning)
Traceback (most recent call last):
  File "D:/dt/PyCharm_project/0_ASK.py", line 15, in <module>
    rec = AudioSegment.converter ("D:\my path\rec.mp3")
TypeError: 'str' object is not callable

不确定也许是网络浏览器,但如何安装呢?

import webbrowser
webbrowser.open("D:/my path/rec1.mp3")

【问题讨论】:

    标签: python-3.x pygame vlc pyglet pydub


    【解决方案1】:

    同样的问题。它适用于我的playsound 1.2.1

    安装:

    $ pip install playsound
    

    测试:

    >>>from playsound import playsound
    >>>playsound('/path/to/a/sound/file/you/want/to/play.mp3')
    

    【讨论】:

    • playsound 似乎在路径包含非 ascii 字符时失败了。
    【解决方案2】:

    这将完成这项工作,而无需文件:

    def say(text, lang='en'):
    """ Speak the provided text.
    """    
    import pygame
    from gtts import gTTS
    import io
    tts = gTTS(text=text, lang=lang, slow=False)
    pygame.mixer.init()
    pygame.init()  # this is needed for pygame.event.* and needs to be called after mixer.init() otherwise no sound is played 
    with io.BytesIO() as f: # use a memory stream
        tts.write_to_fp(f)
        f.seek(0)
        pygame.mixer.music.load(f)
        pygame.mixer.music.set_endevent(pygame.USEREVENT)
        pygame.event.set_allowed(pygame.USEREVENT)
        pygame.mixer.music.play()
        pygame.event.wait() # play() is asynchronous. This wait forces the speaking to be finished before closing f and returning
    

    【讨论】:

    • 我遇到了 IO 和播放速度问题。我建议不要将此方法用于 gTTS
    【解决方案3】:

    我想你正在寻找:

    pyttsx3

    它是一个兼容python3和python2的离线跨平台TTS。

    安装:

    pip install pyttsx3

    如果您想要一个与 gTTS 不同的 Python 离线 TTS,我认为 pyttsx3 是您的最佳选择。

    【讨论】:

      【解决方案4】:

      您可以使用“子流程”。

      from subprocess import call
      from gtts import gTTS
      import os
      blabla = input('Type IN: ')
      tts = gTTS(text=blabla, lang='en')
      tts.save("test.mp3")
      call(["vlc", "test.mp3"])
      

      这个程序要求用户输入任何内容,它会说是通过 vlc。
      我在 Linux 上使用它,但如果它在 Windows 上运行,我现在就不用了。

      【讨论】:

        【解决方案5】:

        你可以使用playsound模块

        from playsound import playsound
        playsound(file.mp3)
        

        就是这样。它以正确的方式播放音频,就像魅力一样

        【讨论】:

        • 发帖前请查看帖子中的其他回复。您发帖时,同样的解决方案已经提供了半年多。
        【解决方案6】:
            import os
            os.system("music.mp3")
        

        【讨论】:

        • 这会打开一个窗口,而不是仅仅播放文件。
        【解决方案7】:

        使用 pygame 我有安装问题,不确定,这样使用它有多好:

        您能否提供有关 pygame 安装错误的更多详细信息?

        我可以在这段代码中使用 PYGAME,其中“hello.mp3”是同一目录中的一个文件

        from gtts import gTTS
        tts = gTTS(text='Hello', lang='en')
        
        tts.save("hello.mp3")
        
        from Tkinter import *
        root = Tk()
        
        from pygame import mixer
        mixer.init()
        mixer.music.load('hello.mp3')
        mixer.music.play()
        
        root.mainloop()
        

        vlc怎么安装?

        我也使用了 VLC。我已经用这些命令安装了它:

        sudo pip install python-vlc
        

        我得到了这个错误:

        NameError: no function 'libvlc_new
        

        所以,我尝试了命令:

        sudo apt-get install vlc
        

        它与这段代码一起工作:

        from gtts import gTTS
        tts = gTTS(text='Hello', lang='en')
        tts.save("hello.mp3")
        
        from Tkinter import *
        root = Tk()
        
        import vlc
        p = vlc.MediaPlayer("hello.mp3")
        p.play()
        
        root.mainloop()
        

        希望对你有帮助。

        【讨论】:

          【解决方案8】:

          我不知道所有问题的解决方案,但您在使用 pydub 时遇到的问题是您没有安装 ffmpeg 或 avconv。 pydub github上有说明:

          窗户:

          1. 从此处提供的 Windows 二进制文件中下载并提取 libav。
          2. 将 libav /bin 文件夹添加到您的 PATH 环境变量中
          3. pip install pydub

          【讨论】:

            【解决方案9】:

            webbrowser 应该是标准 python 安装的一部分。 检查C:\Your_Python_Folder\Lib下是否有webbrowser.py

            下面的代码对我来说很好,因为webbrowser.py 存在于上述文件夹中。

            import webbrowser
            webbrowser.open("rec.mp3")
            

            【讨论】:

            • 也许我对这个工具是什么以及如何使用它的理解并不完全正确,而且很可能是这种情况,但是当我这样做时import webbrowser webbrowser.open("D:\folder\folder\folder\rec.mp3") 只是打开一个网页跨度>
            • 如果您使用的是 windows,请尝试使用双反斜杠插入单反斜杠。例如webbrowser.open("D:\\folder\\folder\\folder\\rec.mp3")
            • 很好用。是的,它会启动一个窗口。其他选择是使用外部库,如 PyDubPyMediaPyGame 等。否则您将不得不编写自己的驱动程序。
            【解决方案10】:

            使用python -m pip install pyglet安装pyglet

            在这里下载安装Link to AVbin setup (这是必须的)

            32/64 位

            import pyglet
            
            song = pyglet.media.load('file.mp3')
            song.play()
            pyglet.app.run()
            

            就是这样。

            【讨论】:

              【解决方案11】:

              如果您在 Windows 上,那么这应该可以完成这项工作,

              import winsound
              winsound.PlaySound('your_file.mp3',winsound.SND_FILENAME)
              

              记住这个包只存在于 python for windows 中。

              【讨论】:

                【解决方案12】:

                如果发生 AVbin 错误...

                首先下载AVbin.exe并安装 然后转到本地磁盘 C --> windows --> System32 --> 搜索 Avbin.dll 并复制该文件 然后将该特定文件粘贴到您的根目录中

                错误会消失

                【讨论】:

                  猜你喜欢
                  • 2016-11-05
                  • 2012-04-11
                  • 2013-05-20
                  • 1970-01-01
                  • 1970-01-01
                  • 2011-08-21
                  • 2017-10-12
                  • 2011-12-06
                  • 2013-11-11
                  相关资源
                  最近更新 更多