Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to play mp3 from bytes?

Is there a way to play mp3 from bytes directly using python? If not, can I convert the binary to a different audio format and make the binary playable?

Edit: The following code works for wav files but not mp3

from pygame import mixer, time

mixer.pre_init(44100, -16, 2, 2048)
mixer.init()

data = open('filename.mp3', 'rb').read()
sound = mixer.Sound(buffer=data)

audio = sound.play()
while audio.get_busy():
    time.Clock().tick(10)

Edit: The problem has been solved, see my answer below if you're facing a similar issue

like image 917
tushar Avatar asked May 12 '17 15:05

tushar


2 Answers

For anyone who might be facing a similar problem, this works

from pydub import AudioSegment
from pydub.playback import play
import io

data = open('filename.mp3', 'rb').read()

song = AudioSegment.from_file(io.BytesIO(data), format="mp3")
play(song)
like image 140
tushar Avatar answered Nov 19 '22 20:11

tushar


I saw your pygame tag, so I'll to do this in pygame. Pygame can load files from bytes with this line: sound = pygame.mixer.Sound(bytes) or sound = pygame.mixer.Sound(buffer=bytes). I can't guarantee this will work with mp3 files, though, you may need to use OGG or WAV files, as bytes.

like image 23
makeworld Avatar answered Nov 19 '22 21:11

makeworld