Lecture du signal sonore d'entrée en utilisant Python
j'ai besoin d'obtenir un signal sonore à partir d'un jack-micro connecté et utiliser les données pour un traitement immédiat en Python.
le traitement et les étapes subséquentes sont clairs. Je ne suis perdu qu'en recevant le signal du programme. Le nombre de canaux est sans importance, un seul suffit. Je ne vais pas jouer le son en arrière donc il ne devrait pas être nécessaire pour ASIO sur la carte son.
ma question Est: Comment puis-je capturer Jack audio à partir de Python? (Il serait bien si il y avait un paquet, bien documenté et niches exemples :-).
4 réponses
Avez-vous essayé pyaudio?
Pour installer: python-m pip install pyaudio
Exemple d'enregistrement, sur le site officiel:
"""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()
cet exemple fonctionne sur mon ordinateur portable avec Python 2.7.11 (et 3.5.1) sous Windows 8.1, pyaudio 0.2.9.
avez-vous l'intention d'obtenir l'audio du microphone en morceaux ou en streaming? Les deux cas , sounddevice peuvent être employés.
vous pouvez installer le module python en utilisantpip install sounddevice --user
veuillez consulter le site officiel pour les détails de L'API.
sounddevice enregistrera l'audio de votre microphone portable (entrée audio standard) et jouera sur haut-parleur ou casque (sortie audio standard). Vous pouvez utiliser l'objet sound pour de plus amples traitement.
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"
Voici la sortie : Python 2.7.9 (par défaut, Dec 10 2014, 12:24:55) [MSC v. 1500 32 bit (Intel)] sur win32 Tapez "copyright"," credits "ou" license () " pour plus d'informations. ================================ REDÉMARRER ===================
Enregistrement Audio
Enregistrement Audio terminé, lecture Audio
La Lecture De L'Audio Complet
je voudrais examiner à l'aide de pysox
Vous pouvez obtenir pysox paquet depuis PyPI.
si l'exigence est Jack, vous pouvez utiliser PyJack, qui est la liaison Python pour Jack.
de plus, le code source a un exemple pour ce que vous voulez faire, c'est-à-dire capturer l'audio. Voir le fichier capture.py
vous devez considérer que pour éviter de manquer un bloc, vous devez appeler jack.process
tous les 500 *(buffer_size/sample_rate)
millisecondes.
jack.process
lancer des exceptions lorsque vous manquez les blocs audio (jack.InputSyncError
et jack.OutputSyncError
).