soundfile reproduce play libreria python audio

play - reproduce audio python



Reproduce audio con Python (19)

Tu mejor opción es probablemente usar pygame / SDL . Es una biblioteca externa, pero tiene un gran soporte en todas las plataformas.

pygame.mixer.init() pygame.mixer.music.load("file.mp3") pygame.mixer.music.play()

Puede encontrar documentación más específica sobre el soporte del mezclador de audio en la documentación de pygame.mixer.music

¿Cómo puedo reproducir audio (sería como un sonido de 1 segundo) de un script de Python?

Sería mejor si fuera independiente de la plataforma, pero primero debe funcionar en una Mac.

Sé que podría ejecutar el comando afplay file.mp3 desde Python, pero ¿es posible hacerlo en Python sin formato? También sería mejor si no dependiera de bibliotecas externas.


No puedes hacer esto sin una biblioteca no estándar.

Para usuarios de Windows que terminan en este hilo, intente con pythonwin . PyGame tiene algo de soporte de sonido. Para audio de juegos acelerado por hardware, probablemente necesite llamar a OpenAL o similar a través de ctypes.


Puede encontrar información sobre audio Python aquí: http://wiki.python.org/moin/Audio/

No parece que pueda reproducir archivos .mp3 sin bibliotecas externas. Puede convertir su archivo .mp3 a .wav u otro formato, o usar una biblioteca como PyMedia .


Pyglet tiene la capacidad de reproducir audio a través de una biblioteca externa llamada AVbin . Pyglet es un contenedor de tipos de llamadas de sistema nativas en cada plataforma que admite. Desafortunadamente, no creo que nada en la biblioteca estándar reproduzca el audio.


Si necesita una biblioteca de audio portátil de Python, pruebe PyAudio . Ciertamente tiene un puerto mac.

En cuanto a los archivos mp3: ciertamente es posible en Python "en bruto", solo me temo que tendrías que codificar todo tú mismo :). Si puede permitirse una biblioteca externa, he encontrado una muestra de PyAudio - PyLame aquí.



Si está en OSX, puede usar el módulo "os" o "subproceso", etc. para llamar al comando OSX "play". Desde el shell OSX, parece que

jugar "bah.wav"

Comienza a jugar en aproximadamente medio segundo en mi máquina.


VLC tiene algunas buenas conexiones de python aquí, para mí esto funcionó mejor que pyglet, al menos en Mac OS:

https://wiki.videolan.org/Python_bindings

Pero sí confía en la aplicación VLC, desafortunadamente


Es posible reproducir audio en OS X sin bibliotecas de terceros utilizando un análogo del siguiente código. Los datos de audio sin formato se pueden ingresar con wave_wave.writeframes. Este código extrae 4 segundos de audio del archivo de entrada.

import wave import io from AppKit import NSSound wave_output = io.BytesIO() wave_shell = wave.open(wave_output, mode="wb") file_path = ''SINE.WAV'' input_audio = wave.open(file_path) input_audio_frames = input_audio.readframes(input_audio.getnframes()) wave_shell.setnchannels(input_audio.getnchannels()) wave_shell.setsampwidth(input_audio.getsampwidth()) wave_shell.setframerate(input_audio.getframerate()) seconds_multiplier = input_audio.getnchannels() * input_audio.getsampwidth() * input_audio.getframerate() wave_shell.writeframes(input_audio_frames[second_multiplier:second_multiplier*5]) wave_shell.close() wave_output.seek(0) wave_data = wave_output.read() audio_stream = NSSound.alloc() audio_stream.initWithData_(wave_data) audio_stream.play()


En pydub recientemente hemos optado por usar ffplay (a través de subproceso) desde el conjunto de herramientas ffmpeg, que internamente usa SDL.

Funciona para nuestros propósitos, principalmente para facilitar la prueba de los resultados del código pydub en modo interactivo, pero tiene sus desventajas, como hacer que aparezca un nuevo programa en el dock de mac.

He vinculado la implementación anterior, pero sigue una versión simplificada:

import subprocess def play(audio_file_path): subprocess.call(["ffplay", "-nodisp", "-autoexit", audio_file_path])

El -nodisp evita que ffplay muestre una nueva ventana, y el indicador -autoexit hace que ffplay salga y devuelva un código de estado cuando el archivo de audio se termina de reproducir.

editar : pydub ahora usa pyaudio para la reproducción cuando está instalado y regresa a ffplay para evitar los inconvenientes que mencioné. El enlace de arriba muestra esa implementación también.


Simplemente puede hacerlo con la ayuda de CVLC. Lo hice de esta manera:

import os os.popen2("cvlc /home/maulo/selfProject/task.mp3 --play-and-exit")

/home/maulo/selfProject/task.mp3. Esta es la ubicación de mi archivo mp3. con la ayuda de "--play-and-exit" podrá volver a reproducir el sonido sin finalizar el proceso de vlc.


Eche un vistazo a Simpleaudio , que es una biblioteca relativamente reciente y liviana para este propósito:

> pip install simpleaudio

Entonces:

import simpleaudio as sa wave_obj = sa.WaveObject.from_wave_file("path/to/file.wav") play_obj = wave_obj.play() play_obj.wait_done()

Asegúrese de utilizar archivos PCM de 16 bits sin comprimir.


Coloque esto en la parte superior de su secuencia de comandos python que está escribiendo:

import subprocess Si el archivo wav se encuentra en el directorio de la secuencia de comandos python:

f = ''./mySound.wav'' subprocess.Popen([''aplay'',''-q'',f) Si el archivo wav NO se encuentra en el directorio de la secuencia de comandos python:

f = ''mySound.wav'' subprocess.Popen([''aplay'',''-q'', ''wav/'' + f) Si quieres aprender más acerca de aplay:

man aplay


Perdón por la respuesta tardía, pero creo que este es un buen lugar para anunciar mi biblioteca ...

AFAIK, la biblioteca estándar tiene solo un módulo para reproducir audio: ossaudiodev . Lamentablemente, esto solo funciona en Linux y FreeBSD.

ACTUALIZACIÓN: También hay winsound , pero obviamente esto también es específico de la plataforma.

Para algo más independiente de la plataforma, necesitarás usar una biblioteca externa.

Mi recomendación es el módulo de dispositivo de sonido (pero cuidado, soy el autor).

El paquete incluye la biblioteca de PortAudio precompilada para Mac OS X y Windows, y se puede instalar fácilmente con:

pip install sounddevice --user

Puede reproducir el sonido de las matrices NumPy, pero también puede usar memorias intermedias simples de Python (si NumPy no está disponible).

Para reproducir una matriz NumPy, eso es todo lo que necesita (suponiendo que los datos de audio tengan una frecuencia de muestreo de 44100 Hz):

import sounddevice as sd sd.play(myarray, 44100)

Para más detalles, eche un vistazo a la documentación .

No puede leer / escribir archivos de sonido, necesitará una biblioteca separada para eso.


También en OSX - desde SO , usando el comando de afplay de OSX:

import subprocess subprocess.call(["afplay", "path/to/audio/file"])


La respuesta de Aaron parece ser aproximadamente 10 veces más complicada de lo necesario. Simplemente hazlo si solo necesitas una respuesta que funcione en OS X:

from AppKit import NSSound sound = NSSound.alloc() sound.initWithContentsOfFile_byReference_(''/path/to/file.wav'', True) sound.play()

Una cosa ... esto regresa inmediatamente. Por lo tanto, es posible que también desee hacer esto, si desea que la llamada se bloquee hasta que el sonido termine de reproducirse.

from time import sleep sleep(sound.duration())

Editar: tomé esta función y la combiné con variantes para Windows y Linux. El resultado es un módulo python, multiplataforma puro sin dependencias llamado playsound . Lo he subido a pypi.

pip install playsound

Entonces ejecútelo así:

from playsound import playsound playsound(''/path/to/file.wav'', block = False)

Los archivos MP3 también funcionan en OS X. WAV debería funcionar en todas las plataformas. No sé qué otras combinaciones de plataforma / formato de archivo funcionan o no, todavía no las he probado.


Este es el mejor y más fácil que he encontrado. Admite Linux / pulseaudio, Mac / coreaudio y Windows / WASAPI.

import soundfile as sf import soundcard as sc default_speaker = sc.default_speaker() samples, samplerate = sf.read(''bell.wav'') default_speaker.play(samples, samplerate=samplerate)

Consulte https://github.com/bastibe/PySoundFile y https://github.com/bastibe/SoundCard para ver muchas otras características útiles.


Pruebe PySoundCard que usa PortAudio para la reproducción que está disponible en muchas plataformas. Además, reconoce dispositivos de sonido "profesionales" con muchos canales.

Aquí un pequeño ejemplo del archivo Léame:

from pysoundcard import Stream """Loop back five seconds of audio data.""" fs = 44100 blocksize = 16 s = Stream(samplerate=fs, blocksize=blocksize) s.start() for n in range(int(fs*5/blocksize)): s.write(s.read(blocksize)) s.stop()


Pruebe playsound, que es un módulo de función única de Pure Python, multiplataforma, sin dependencias para reproducir sonidos.

Instalar a través de pip:

$ pip install playsound

Una vez que haya instalado, puede usarlo así:

from playsound import playsound playsound(''/path/to/a/sound/file/you/want/to/play.mp3'')