web-dev-qa-db-fra.com

Lire MP3 en Python 3

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.

22
Andreas Jansson

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.

4
Andreas Jansson

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.

9
Wernight

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

6
composer314

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)
4
GuySoft

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:

  • Audio MPEG couches 1, 2 et 3 (MP3)
  • AC3/A52, E-AC3, DTS audio (Dolby Digital) (logiciel ou SP/DIF)
  • AAC (audio MPEG-4)
  • WMA (DivX Audio) v1, v2
  • WMA 9 (WMAv3), audio Voxware, ACELP.net, etc. (à l'aide de DLL x86)
  • RealAudio: COOK, SIPRO, ATRAC3 (à l'aide de bibliothèques Real)
  • RealAudio: DNET et anciens codecs
  • QuickTime: Qclp, Q-Design QDMC/QDM2, MACE 3/6 (à l'aide de bibliothèques QT), ALAC
  • Audio Ogg Vorbis
  • Audio VIVO (g723, Vivo Siren) (utilisant une DLL x86)
  • alaw/ulaw, (ms) gsm, pcm, * adpcm et autres anciens formats audio simples
1
Mansueli