2012-02-26 9 views
20

Những gì tôi muốn làm chỉ đơn giản làđọc MP3 bằng Python 3

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

nơi audio_left sẽ chứa dữ liệu âm thanh PCM thô.

Tôi đang xem Play a Sound with Python, nhưng hầu hết các mô-đun được đề xuất chưa được chuyển sang Python 3. Nếu có thể, tôi muốn tránh phải cài đặt một thư viện dev trò chơi chính thức.

Tôi là một người mới bắt đầu Python hoàn chỉnh, vì vậy tôi muốn bắt đầu sử dụng Python 3.

+0

Bạn có muốn kênh trái chỉ vì một lý do đặc biệt, hoặc làm bạn chỉ muốn âm thanh nói chung – Daenyth

+0

@Daenyth, tôi chỉ muốn có một tín hiệu đơn âm, vì vậy nếu tôi có thể có mp3.audio. toMono(), thậm chí tốt hơn :) –

+0

Bạn có thể muốn xem tại đây: http://stackoverflow.com/questions/8064784/mono-playback-of-mp3s-in-python-or-c – Daenyth

Trả lời

4

tôi đã kết thúc bằng một tiến trình con mpg123 xmms để chuyển đổi mp3 sang wav, và sau đó tôi sử dụng scipy.io. wavfile.read để đọc tệp wav.

5

Tôi đang xem xét sử dụng FFmpeg làm quy trình con. Có một trình bao bọc Python được gọi là pyffmpeg, nhưng tôi đã gặp khó khăn khi cài đặt nó trên hệ thống của mình (OS X 10.7.3).

Bạn cũng có thể muốn nhìn vào mã ở đây để gọi FFmpeg như một tiến trình con từ Python: https://github.com/albertz/learn-midi/blob/master/decode.py

8

Để làm cho nó dễ dàng hơn tôi muốn chuyển đổi với một số công cụ mp3 sang wav, một trong hai:

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

Sau đó đọc WAV với one of the python WAV libraries. Tôi muốn giới thiệu PySoundFile vì nó hoạt động với hầu hết các WAV được tạo đúng và được cài đặt mà không có vấn đề (như trái ngược với scikits.audiolab).

Lưu ý: Mặc dù scipy.io.wavfile.read() cho tôi cảnh báo "WavFileWarning: Không quen thuộc với byte định dạng", nó cũng đã tải tệp đúng cách.

1

Tôi tin rằng tốt nhất để làm điều này và đó cũng là tương thích với Python 3.x là:

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

Tôi rất khuyên bạn nên nhìn vào Darwin M. Bautista của git hoặc google code:

Và đây là một ví dụ từ (theo quy định của anh ta):

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

Danh sách các codec âm thanh hỗ trợ:

  • MPEG lớp 1, 2, và 3 (MP3) audio
  • AC3/A52, E-AC3, DTS (Dolby Digital) âm thanh (phần mềm hoặc SP/DIF)
  • AAC (MPEG-4 audio)
  • WMA (DivX audio) v1, v2
  • WMA 9 (WMAv3), Voxware âm thanh, ACELP.vv ròng (sử dụng x86 DLL)
  • RealAudio: COOK, SIPRO, ATRAC3 (sử dụng thư viện Bất động)
  • RealAudio: DNET và codec cũ
  • QuickTime: Qclp, Q-Thiết kế QDMC/QDM2, MACE 3/6 (sử dụng QT thư viện), ALAC
  • Ogg Vorbis audio
  • VIVO âm thanh (G723, Vivo Siren) (sử dụng x86 DLL)
  • alaw/ulaw, (ms) gsm, pcm, * ADPCM và khác đơn giản định dạng âm thanh cũ
+0

Bạn có thể đưa ra một ví dụ mã giải quyết vấn đề trong câu hỏi không? Tức là, mã trích xuất dữ liệu PCM từ một tệp đầu vào sẵn sàng để phân tích thêm? – detly

+0

Thực ra, điều này có vẻ như nó không đáp ứng yêu cầu "không có yêu cầu xử lý con". Nó chỉ kết thúc một quá trình MPlayer, nó trông giống như 'mplayer', và tôi nghi ngờ rằng nó sẽ khá mỏng manh trên Windows. – detly

1

Có thể d một với 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)