reproducir - Lectura de la señal de sonido de entrada usando Python
reproducir audio en python (4)
Necesito obtener una señal de sonido de un micrófono conectado a un conector y usar los datos para el procesamiento inmediato en Python.
El procesamiento y los pasos posteriores son claros. Estoy perdido solo en obtener la señal del programa. El número de canales es irrelevante, uno es suficiente. No voy a reproducir el sonido, por lo que no debería haber necesidad de ASIO en la tarjeta de sonido.
Mi pregunta es: ¿cómo puedo capturar el audio de Jack desde Python? (Sería fantástico si hubiera un paquete, ejemplos bien documentados y nichos :-).
¿Está planeando obtener audio de micrófono en piezas o transmisión? En cualquier caso, el sounddevice puede ser empleado.
Puedes instalar el módulo python usando
pip install sounddevice --user
Por favor, consulte el sitio oficial para obtener detalles de la API.
El dispositivo de sonido grabará el audio del micrófono de su computadora portátil (entrada de audio estándar) y lo reproducirá en el altavoz o los auriculares (salida de audio estándar). Puede utilizar el objeto de sonido para su posterior procesamiento.
import sounddevice as sd
import numpy as np
import scipy.io.wavfile as wav
fs=44100
duration = 5 # seconds
myrecording = sd.rec(duration * fs, samplerate=fs, channels=2,dtype=''float64'')
print "Recording Audio"
sd.wait()
print "Audio recording complete , Play Audio"
sd.play(myrecording, fs)
sd.wait()
print "Play Audio Complete"
Aquí está la salida: Python 2.7.9 (predeterminado, 10 de diciembre de 2014, 12:24:55) [MSC v.1500 32 bit (Intel)] en win32 Escriba "copyright", "credits" o "license ()" para más información. ================================ RESTART ================= ==
Grabación de audio
Grabación de audio completa, reproducir audio
Reproducir audio completo
¿Has probado pyaudio ?
Para instalar: python -m pip install pyaudio
Ejemplo de grabación, desde la web oficial:
"""PyAudio example: Record a few seconds of audio and save to a WAVE file."""
import pyaudio
import wave
CHUNK = 1024
FORMAT = pyaudio.paInt16
CHANNELS = 2
RATE = 44100
RECORD_SECONDS = 5
WAVE_OUTPUT_FILENAME = "output.wav"
p = pyaudio.PyAudio()
stream = p.open(format=FORMAT,
channels=CHANNELS,
rate=RATE,
input=True,
frames_per_buffer=CHUNK)
print("* recording")
frames = []
for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)):
data = stream.read(CHUNK)
frames.append(data)
print("* done recording")
stream.stop_stream()
stream.close()
p.terminate()
wf = wave.open(WAVE_OUTPUT_FILENAME, ''wb'')
wf.setnchannels(CHANNELS)
wf.setsampwidth(p.get_sample_size(FORMAT))
wf.setframerate(RATE)
wf.writeframes(b''''.join(frames))
wf.close()
Este ejemplo funciona en mi computadora portátil con Python 2.7.11 (y 3.5.1) en Windows 8.1, pyaudio 0.2.9.
Consideraría usar pysox , los enlaces de python para libsox.
Puedes obtener el paquete pysox desde PyPI.
Si el requisito es Jack , entonces es posible que desee utilizar PyJack , que es el enlace de Python para Jack.
Además, el código fuente tiene un ejemplo de lo que desea hacer, es decir, capturar audio. Ver el archivo capture.py
Debe considerar que para evitar perder un bloque, debe llamar a jack.process
cada 500 *(buffer_size/sample_rate)
milisegundos. jack.process
lanza excepciones cuando pierde los bloques de audio ( jack.InputSyncError
y jack.OutputSyncError
).