Read MP3 in Python 3

前端 未结 7 1185
面向向阳花
面向向阳花 2020-12-15 03:46

What I want to do is simply

mp3 = read_mp3(mp3_filename)
audio_left = mp3.audio_channels[0]

where audio_left will contain raw PCM audio dat

相关标签:
7条回答
  • 2020-12-15 04:14

    I believe that the best to do this and that is also compatible with Python 3.x is:

    https://pypi.python.org/pypi/mplayer.py/

    I highly recommend that you look at Darwin M. Bautista's git or google code:

    And here is an example from (as provided by him):

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

    List of supported audio codecs:

    • MPEG layer 1, 2, and 3 (MP3) audio
    • AC3/A52, E-AC3, DTS (Dolby Digital) audio (software or SP/DIF)
    • AAC (MPEG-4 audio)
    • WMA (DivX Audio) v1, v2
    • WMA 9 (WMAv3), Voxware audio, ACELP.net etc (using x86 DLLs)
    • RealAudio: COOK, SIPRO, ATRAC3 (using Real libraries)
    • RealAudio: DNET and older codecs
    • QuickTime: Qclp, Q-Design QDMC/QDM2, MACE 3/6 (using QT libraries), ALAC
    • Ogg Vorbis audio
    • VIVO audio (g723, Vivo Siren) (using x86 DLL)
    • alaw/ulaw, (ms)gsm, pcm, *adpcm and other simple old audio formats
    0 讨论(0)
  • 2020-12-15 04:20

    To make it easier I'd convert with some tools mp3 to wav, either:

    $ ffmpeg -i foo.mp3 -vn -acodec pcm_s16le -ac 1 -ar 44100 -f wav foo.wav
    or
    $ mpg123 -w foo.wav foo.mp3
    

    Then read the WAV with one of the python WAV libraries. I'd recommend PySoundFile because it works with most generated WAV correctly and installed without issue (as opposed to scikits.audiolab).

    Note: Even though scipy.io.wavfile.read() gave me a "WavFileWarning: Unfamiliar format bytes" warning, it also loaded the file properly.

    0 讨论(0)
  • 2020-12-15 04:23

    I ended up using an mpg123 subprocess to convert the mp3 to wav, and then I use scipy.io.wavfile.read to read the wav file.

    0 讨论(0)
  • 2020-12-15 04:26

    Can be done with 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)
    
    0 讨论(0)
  • 2020-12-15 04:29

    You could use librosa:

    import librosa
    y, sr = librosa.load('your_file.mp3')
    

    Further information: https://github.com/librosa/librosa

    0 讨论(0)
  • 2020-12-15 04:30

    I am considering using FFmpeg as a subprocess. There is a Python wrapper called pyffmpeg, but I had difficulty installing it on my system (OS X 10.7.3).

    You may also want to look at the code here for calling FFmpeg as a subprocess from Python: https://github.com/albertz/learn-midi/blob/master/decode.py

    0 讨论(0)
提交回复
热议问题