Воспроизведение звука в Windows (от XP до Windows 7) с помощью Python?

У кого-нибудь есть опыт воспроизведения аудио (прямо сейчас, в частности, mp3) с помощью python с использованием любых библиотек?

Подробности:

Используется в приложении wxPython (да, я пробовал wx.media.MediaCtrl)

Хорошо, вот что я пробовал.

пробовал код вроде http://www.daniweb.com/software-development/python/code/216465/play-mp3-files-via-pythons-win32com-support

Не работает (без звука вообще)

пробовал wxPython MediaCtrl: иногда работает, но в последнее время работает только воспроизведение файлов, URL-адреса воспроизводятся в течение пары секунд, а затем нет звука (но трек продолжает работать, я знаю, что файл загружается полностью, поэтому это не носитель, который не загружается). Я смог исправить это с помощью перезапуска, затем он немного работал, затем сломался, попытался перезапустить снова, и на этот раз это не исправило, однако другой проигрыватель, который использует API Windows Media (приложение C # .NET), работает нормально, и поэтому делает Windows Media Player. Так что это какая-то ошибка в библиотеках wxWidgets, я думаю

попытался использовать mplayer, например: http://www.blog.pythonlibrary.org/2010/07/24/wxpython-creating-a-simple-media-player/ основные проблемы mplayer не любит устанавливать свойства, поэтому я не могу делать паузу, потому что если я это сделаю, я не смогу вернуть состояние в режим воспроизведения (см. код, который я использую здесь http://paste.pocoo.org/show/574269/)

В Linux я использовал gstreamer, работает после некоторых головных болей (хотя все еще есть свои проблемы), MacOS X еще не тестировался, но я собираюсь попробовать quicktime и wx.media.MediaCtrl, надеясь, что это сработает)


person Zimm3r    schedule 31.03.2012    source источник


Ответы (1)


Я использовал PortAudio в нескольких проектах, что является свободным кроссплатформенным открытым -source-audio, но никогда с python. Не волнуйтесь, для этого есть привязки:

PyAudio предоставляет привязки Python для PortAudio.

""" Play a WAVE file. """

import pyaudio
import wave
import sys

chunk = 1024

if len(sys.argv) < 2:
    print "Plays a wave file.\n\n" +\
          "Usage: %s filename.wav" % sys.argv[0]
    sys.exit(-1)

wf = wave.open(sys.argv[1], 'rb')

p = pyaudio.PyAudio()

# open stream
stream = p.open(format =
                p.get_format_from_width(wf.getsampwidth()),
                channels = wf.getnchannels(),
                rate = wf.getframerate(),
                output = True)

# read data
data = wf.readframes(chunk)

# play stream
while data != '':
    stream.write(data)
    data = wf.readframes(chunk)

stream.close()
p.terminate()
person karlphillip    schedule 05.04.2012
comment
Ну, я проверил, что это было не совсем то, что я искал, поэтому спасибо за помощь и все такое. Наслаждайтесь наградой :) - person Zimm3r; 21.04.2012