Ce que je veux faire, c'est simplement
mp3 = read_mp3(mp3_filename)
audio_left = mp3.audio_channels[0]
où audio_left contiendra des données audio PCM brutes.
Je regardais Jouez un son avec Python , mais la plupart des modules suggérés ne sont pas encore portés sur Python 3. Si possible, j'aimerais éviter d'avoir à installer une bibliothèque de développement de jeu à part entière.
Je suis un débutant complet en Python, je voudrais donc commencer par utiliser Python 3.
J'ai fini par utiliser un sous-processus mpg123 pour convertir le mp3 au format wav, puis j'ai utilisé scipy.io.wavfile.read pour lire le fichier wav.
Pour faciliter les choses, je convertirais avec quelques outils mp3 en wav, soit:
$ ffmpeg -i foo.mp3 -vn -acodec pcm_s16le -ac 1 -ar 44100 -f wav foo.wav
or
$ mpg123 -w foo.wav foo.mp3
Lisez ensuite le fichier WAV avec l’une des bibliothèques python WAV . Je recommanderais PySoundFile car il fonctionne correctement avec la plupart des WAV générés et est installé sans problème (par opposition à scikits.audiolab
).
Remarque: Même si scipy.io.wavfile.read()
m'a donné un avertissement "WavFileWarning: octets de format non familier", le fichier a également été chargé correctement.
J'envisage d'utiliser FFmpeg en tant que sous-processus. Il existe un wrapper Python appelé pyffmpeg, mais j'ai eu du mal à l'installer sur mon système (OS X 10.7.3).
Vous pouvez également consulter le code ici pour appeler FFmpeg en tant que sous-processus à partir de Python: https://github.com/albertz/learn-midi/blob/master/decode.py
Peut être fait avec pydub:
import array
from pydub import AudioSegment
from pydub.utils import get_array_type
sound = AudioSegment.from_file(file=path_to_file)
left = sound.split_to_mono()[0]
bit_depth = left.sample_width * 8
array_type = get_array_type(bit_depth)
numeric_array = array.array(array_type, left._data)
Je crois que le meilleur moyen de faire ceci et cela est également compatible avec Python 3.x est:
https://pypi.python.org/pypi/mplayer.py/
Je vous recommande vivement de consulter le code git ou google code de Darwin M. Bautista :
Et voici un exemple tiré de (tel que fourni par lui):
from mplayer import Player, CmdPrefix
# Set default prefix for all Player instances
Player.cmd_prefix = CmdPrefix.PAUSING_KEEP
# Since autospawn is True by default, no need to call player.spawn() manually
player = Player()
# Play a file
player.loadfile('mp3_filename')
# Pause playback
player.pause()
# Get title from metadata
metadata = player.metadata or {}
print metadata.get('Title', '')
# Print the filename
print player.filename
# Seek +5 seconds
player.time_pos += 5
# Set to fullscreen
player.fullscreen = True
# Terminate MPlayer
player.quit()
Liste des codecs audio pris en charge: