Воспроизвести звук с Python

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

10 ответов

Решение

Snack Sound Toolkit может воспроизводить файлы wav, au и mp3.

s = Sound() 
s.read('sound.wav') 
s.play()

Для 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: Билл Дандрета http://mail.python.org/pipermail/python-list/2004-October/288905.html)

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

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

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

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

import pyglet

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

pyglet.app.run()

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

import pygame

import time

pygame.init()

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

pygame.mixer.music.play()

time.sleep(10)

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

Звуковой пример 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 )

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

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

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

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

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

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

Я только что выпустил простую оболочку 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)    

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

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

Другие вопросы по тегам