with waves sound reproduce play python audio platform-independent

waves - Reproducir un sonido con Python



reproduce audio python (10)

Esta pregunta ya tiene una respuesta aquí:

¿Cuál es la forma más fácil de reproducir un archivo de sonido (.wav) en Python? Por más fácil me refiero a la mayoría de las plataformas independientes y que requieren menos dependencias. Pygame es sin duda una opción, pero parece excesivo para el sonido.


Acabo de lanzar una envoltura de python simple alrededor de sox que reproducirá un sonido con Python. Es muy fácil de instalar ya que necesita Python 2.6 o superior, sox (binarios fáciles de obtener para la mayoría de las arquitecturas) y el contenedor ( https://github.com/standarddeviant/sound4python ). Si no tiene sox, vaya aquí: http://sourceforge.net/projects/sox/files/sox/

Podrías reproducir audio con él de la siguiente manera:

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

Tenga en cuenta que las únicas partes realmente involucradas en la reproducción de audio son solo estas:

from sound4python import sound ... sound(a)


Definitivamente use Pyglet para esto. Es una especie de paquete grande, pero es puro python sin módulos de extensión. Eso definitivamente será el más fácil para la implementación. También tiene un gran formato y compatibilidad con códecs.

import pyglet music = pyglet.resource.media(''music.mp3'') music.play() pyglet.app.run()


Después de que el comando play () agregue un retraso de, digamos, 10 segundos o más, funcionará

import pygame import time pygame.init() pygame.mixer.music.load("test.wav") pygame.mixer.music.play() time.sleep(10)

Esto también reproduce archivos .mp3.


El ejemplo de sonido de pyMedia hace precisamente eso . Esto debería ser todo lo que necesitas.

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 )


Esto parece ridículo y exagerado, pero siempre puedes usar Windows (o el sistema operativo que prefieras) para administrar el sonido por ti.

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

Simple, sin extensiones, algo lento y travieso, pero funcionando.


Me gusta pygame, y el siguiente comando debería funcionar:

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

pero no funciona en ninguna de mis computadoras, y hay ayuda limitada sobre el tema. editar: Descubrí por qué el sonido de pygame no funciona para mí, no está cargando la mayoría de los sonidos correctamente, el atributo ''longitud'' es ~ 0.0002 cuando los cargo. tal vez cargarlos usando algo que no sea mygame hará que se enmascare de manera más general.

con pyglet obtengo un error de recurso no encontrado Usando el ejemplo anterior, combino las rutas relativas y completas a los archivos.

el uso de pyglet.media.load() lugar de pyglet.resource.media() me permite cargar los archivos.

pero sound.play() solo reproduce la primera fracción de un segundo del archivo, a menos que ejecute pyglet.app.run() que bloquea todo lo demás ...


Para Windows, puede usar winsound. Está construido en

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

Debería poder usar ossaudiodev para 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()

(Crédito para ossaudiodev: Bill Dandreta http://mail.python.org/pipermail/python-list/2004-October/288905.html )


Para el usuario de Linux, si se necesita manipulación de datos pcm de bajo nivel, pruebe el módulo alsaaudio . Hay un ejemplo playwav.py dentro del paquete también.


wxPython tiene soporte para reproducir archivos wav en Windows y Unix; no estoy seguro si esto incluye Mac. Sin embargo, solo admite archivos wav por lo que puedo decir, no es compatible con otros formatos comunes como mp3 u ogg.


Snack Sound Toolkit puede reproducir archivos wav, au y mp3.

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