Воспроизведение звука с помощью Python

Какой самый простой способ воспроизведения звукового файла (.wav) в Python? Проще всего я имею в виду как большинство независимых от платформы, так и требующих наименьших зависимостей. pygame - это, конечно, вариант, но кажется, что он просто затмевает звук.

Ответ 2

В Windows вы можете использовать winsound. Он построен в

import winsound

winsound.PlaySound('sound.wav', winsound.SND_FILENAME)

Вы можете использовать ossaudiodev для linux:

from wave import open as waveOpen
from ossaudiodev import open as ossOpen
s = waveOpen('tada.wav','rb')
(nc,sw,fr,nf,comptype, compname) = s.getparams( )
dsp = ossOpen('/dev/dsp','w')
try:
  from ossaudiodev import AFMT_S16_NE
except ImportError:
  from sys import byteorder
  if byteorder == "little":
    AFMT_S16_NE = ossaudiodev.AFMT_S16_LE
  else:
    AFMT_S16_NE = ossaudiodev.AFMT_S16_BE
dsp.setparameters(AFMT_S16_NE, nc, fr)
data = s.readframes(nf)
s.close()
dsp.write(data)
dsp.close()

(Кредит для ossaudiodev: Bill Dandreta http://mail.python.org/pipermail/python-list/2004-October/288905.html)

Ответ 3

Это кажется смешным и далеким, но вы всегда можете использовать Windows (или любую другую ОС, которая вам нравится) для управления звуком для вас!

import os
os.system("start C:/thepathyouwant/file")

Простые, никаких расширений, несколько медленные и сумасшедшие, но работающие.

Ответ 4

Определенно используйте Pyglet. Это своего рода большой пакет, но это чистый питон без модулей расширения. Это, безусловно, будет проще всего для развертывания. Он также получил отличный формат и поддержку кодеков.

import pyglet

music = pyglet.resource.media('music.mp3')
music.play()

pyglet.app.run()

Ответ 5

После того, как команда play() добавит задержку в 10 секунд или около того, она будет работать

import pygame

import time

pygame.init()

pygame.mixer.music.load("test.wav")

pygame.mixer.music.play()

time.sleep(10)

Это также воспроизводит файлы .mp3.

Ответ 6

Пример звука pyMedia делает только это. Это должно быть все, что вам нужно.

import time, wave, pymedia.audio.sound as sound
f= wave.open( 'YOUR FILE NAME', 'rb' )
sampleRate= f.getframerate()
channels= f.getnchannels()
format= sound.AFMT_S16_LE
snd= sound.Output( sampleRate, channels, format )
s= f.readframes( 300000 )
snd.play( s )

Ответ 7

Мне нравится pygame, и команда ниже должна работать:

pygame.init()
pygame.mixer.Sound('sound.wav').play()

но он не работает ни на одном из моих компьютеров, и есть ограниченная помощь по этому вопросу. edit: Я понял, почему звук pygame не работает для меня, он не загружает большинство звуков правильно, атрибут "length" равен ~ 0,0002 при загрузке. возможно, погрузка их с использованием чего-то другого, кроме mygame, приведет к более уклонению.

с pyglet. Я получаю сообщение об ошибке, не найденной ресурсом. Используя вышеприведенный пример, смешайте как относительные, так и полные пути к файлам.

используя pyglet.media.load() вместо pyglet.resource.media() позволяет мне загружать файлы.

но sound.play() воспроизводит только первую часть секунды файла, если я не запустил pyglet.app.run(), который блокирует все остальное...

Ответ 8

wxPython поддерживает воспроизведение wav файлов в Windows и Unix - я не уверен, включает ли это Mac. Однако он поддерживает только файлы wav, насколько я могу судить, - он не поддерживает другие распространенные форматы, такие как mp3 или ogg.

Ответ 9

Я только что выпустил простую оболочку python вокруг sox, которая будет воспроизводить звук с Python. Он очень прост в установке, поскольку вам нужен Python 2.6 или выше, sox (легко получить двоичные файлы для большинства архитектур) и оболочку (https://github.com/standarddeviant/sound4python), Если у вас нет sox, перейдите сюда: http://sourceforge.net/projects/sox/files/sox/

Вы будете воспроизводить аудио с помощью:

from sound4python import sound
import random
a = []
for idx in xrange(1*16000):
    a.append(random.randint(-16384,16384))
sound(a)

Имейте в виду, что единственными частями, фактически задействованными в воспроизведении звука, являются только следующие:

from sound4python import sound
...
sound(a)    

Ответ 10

Для пользователя Linux, если требуется обработка данных с низким уровнем pcm, попробуйте alsaaudio модуль. Внутри пакета также есть пример playwav.py.