Was ich tun möchte, ist einfach
mp3 = read_mp3(mp3_filename)
audio_left = mp3.audio_channels[0]
wo audio_left rohe PCM-Audiodaten enthält.
Ich habe nach einen Sound mit Python abspielen gesucht, aber die meisten der vorgeschlagenen Module sind noch nicht auf Python 3 portiert. Wenn möglich, möchte ich vermeiden, dass Sie eine vollwertige Game-Entwickler-Bibliothek installieren müssen.
Ich bin ein Python-Anfänger und möchte Python 3 verwenden.
Am Ende habe ich einen mpg123-Subprozess verwendet, um die mp3-Datei in wav zu konvertieren, und dann verwende ich scipy.io.wavfile.read, um die wav-Datei zu lesen.
Um es einfacher zu machen, würde ich mit einigen Tools mp3 in wav konvertieren:
$ ffmpeg -i foo.mp3 -vn -acodec pcm_s16le -ac 1 -ar 44100 -f wav foo.wav
or
$ mpg123 -w foo.wav foo.mp3
Dann lesen Sie die WAV mit einer der Python-WAV-Bibliotheken . Ich würde PySoundFile empfehlen, da es mit den meisten generierten WAVs funktioniert und ohne Probleme installiert wird (im Gegensatz zu scikits.audiolab
).
Hinweis: Obwohl scipy.io.wavfile.read()
mir die Warnung "WavFileWarning: ungewohnte Formatbytes" gab, wurde die Datei auch richtig geladen.
Ich überlege, FFmpeg als Unterprozess zu verwenden. Es gibt einen Python-Wrapper namens pyffmpeg, aber ich hatte Schwierigkeiten, ihn auf meinem System zu installieren (OS X 10.7.3).
Sie können sich auch den Code für den Aufruf von FFmpeg als Unterprozess von Python ansehen: https://github.com/albertz/learn-midi/blob/master/decode.py
Kann mit pydub gemacht werden:
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)
Ich glaube, das Beste, um dies zu tun und das auch mit Python 3.x kompatibel ist, ist:
https://pypi.python.org/pypi/mplayer.py/
Ich empfehle Ihnen dringend, sich den Darwin M. Bautistas git oder google code anzusehen:
Und hier ist ein Beispiel von (wie von ihm bereitgestellt):
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 der unterstützten Audio-Codecs:
Sie könnten Librosa verwenden:
import librosa
y, sr = librosa.load('your_file.mp3')
Weitere Informationen: https://github.com/librosa/librosa