Windows (от XP до Windows 7) для воспроизведения звука с python? - PullRequest
5 голосов
/ 01 апреля 2012

Кто-нибудь имеет опыт проигрывания аудио (прямо сейчас, в частности, mp3) с python, используя any libs?

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

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

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

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

Не работает (без звука, что так всегда)

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

1 Ответ

6 голосов
/ 05 апреля 2012

Я использовал PortAudio в паре проектов, которые являются бесплатной кроссплатформенной библиотекой с открытым исходным кодом , но никогда с 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()
...