how to play mp3
Asked Answered
J

12

7

my problem starts here:

pyttsx and gTTS module errors

gTTS works well, takes text from text file, but first creates mp3 file, then if I want listen, I must call this mp3, so it is good but it would be better if I can avoid any audio files, and get just read from text file. maybe somehow I can use google voice to read from text file..? anyway main question now is other

if I can use only gTTS what is the best way to play mp3 on Windows 10-64 bit, Python 3.5

ok with os:

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

it is good, but I don't want use default player, need something like simpleaudio for mp3...

with pygame I have installation problem and not sure, how good is use it this way:

from pygame import mixer 

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

vlc just how to install it? with easy_install vlc I got error: could not find suitable distribution for requirement.parse ('vlc') and with pip install vlc error: 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()

with pyglet:

import pyglet

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

I got this error:

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

subprocess also uses default player:

import subprocess

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

with mp3play, not sure how to use it:

import mp3play

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

I tried it this way:

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

this way:

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

In all cases I got error:

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

ok so with 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()

Errors in the sequence first with 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'

with 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

with 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

not sure maybe webbrowser, but how to install it?

import webbrowser
webbrowser.open("D:/my path/rec1.mp3")
Janeljanela answered 1/4, 2016 at 3:58 Comment(0)
A
4

Same problem here. It works with playsound 1.2.1 for me.

Install with :

$ pip install playsound

test with:

>>>from playsound import playsound
>>>playsound('/path/to/a/sound/file/you/want/to/play.mp3')
Aggarwal answered 23/8, 2017 at 18:19 Comment(1)
playsound seems to fail the moment the path contains non-ascii characters though.Sena
U
3

You can use "subprocess".

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"])

This program asks user to type in anything and it will say that trough vlc.
I use this on Linux but i don't now if it works on Windows.

Unison answered 22/6, 2016 at 18:58 Comment(0)
P
2

with pygame I have installation problem and not sure, how good is use it this way:

Can you provide more details about the pygame installation error?

I was able to use PYGAME with this code, where "hello.mp3" is a file in the same directory

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 just how to install it?

I also used VLC. I have installed it with these commands:

sudo pip install python-vlc

And I got this error:

NameError: no function 'libvlc_new

So, I tryed the command:

sudo apt-get install vlc

And it worked with this code:

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()

Hope It help You.

Prolongate answered 26/1, 2017 at 15:47 Comment(0)
L
2

This will do the job and without the need for files:

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
Lepp answered 24/9, 2017 at 4:31 Comment(1)
I'm getting problems with IO and playback speed. I recommend not using this method for gTTSOperculum
P
1

I think you are looking for :

pyttsx3

Its an offline cross-platform TTS that's compatible with python3 and python2.

Install :

pip install pyttsx3

If u want an offline TTS for python unlike gTTS , pyttsx3 is your best choice in my opinion.

Plectognath answered 26/6, 2017 at 4:22 Comment(0)
D
0

I don't know the solution to all of the questions, but the issue you're having with pydub is that you don't have ffmpeg or avconv installed. There are instructions on the pydub github:

Windows:

  1. Download and extract libav from Windows binaries provided here.
  2. Add the libav /bin folder to your PATH envvar
  3. pip install pydub
Dusk answered 3/4, 2016 at 15:59 Comment(0)
A
0

webbrowser should be part of you standard python install. Check if there is a webbrowser.py under C:\Your_Python_Folder\Lib.

Below code works just fine for me as webbrowser.py is present at above mentioned folder.

import webbrowser
webbrowser.open("rec.mp3")
Anabelle answered 5/4, 2016 at 16:48 Comment(3)
maybe I'm not quite correctly understood for what this tool is of how to use it, and most likely this is the case, but when I do this import webbrowser webbrowser.open("D:\folder\folder\folder\rec.mp3") simply opens a web pageJaneljanela
If you are using windows,try double backslash insted of single. e.g. webbrowser.open("D:\\folder\\folder\\folder\\rec.mp3")Anabelle
Good that it works. Yes , it launches a window. Other option is to use external libraries like PyDub , PyMedia , PyGame etc. Else you will have to write your own driver.Anabelle
C
0

install pyglet using python -m pip install pyglet

Download installed here Link to AVbin setup ( it's a must )

32/64 bit

import pyglet

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

That's all.

Centimeter answered 17/2, 2017 at 22:37 Comment(0)
S
0

You can use playsound module

from playsound import playsound
playsound(file.mp3)

Boom that's it.it plays the audio right way works like charm

Spineless answered 2/3, 2018 at 9:0 Comment(1)
Please check other replies in the thread before you post. The same solution has already been provided for over half a year when you posted.Sena
F
0

If you are on windows then this should do the job,

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

Remember this package is only present in python for windows.

Floeter answered 2/3, 2018 at 9:21 Comment(0)
B
0

If AVbin error occurs...

First download AVbin.exe and Install it then Go to local disk C --> windows --> System32 --> search the Avbin.dll and copy that file then paste that particular file in your root directory

Error will vanish

Betimes answered 19/2, 2019 at 6:20 Comment(0)
S
-1
    import os
    os.system("music.mp3")
Siddur answered 23/11, 2017 at 7:54 Comment(1)
This opens a window though, instead of just playing the file.Sena

© 2022 - 2024 — McMap. All rights reserved.