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 :-).

18
demandé sur gpoo 2016-02-11 19:22:19

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.

26
répondu alr 2016-02-14 14:04:00

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 utilisant

pip 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

12
répondu Anil_M 2016-02-19 20:07:34

je voudrais examiner à l'aide de pysox

Vous pouvez obtenir pysox paquet depuis PyPI.

3
répondu wrkyle 2016-02-19 01:46:01

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).

2
répondu gpoo 2016-02-19 01:55:44