Чтение входного звукового сигнала с помощью Python



Мне нужно получить звуковой сигнал от микрофона, подключенного к разъему, и использовать данные для немедленной обработки в Python.



Обработка и последующие шаги понятны. Я теряюсь только в получении сигнала от программы.
Количество каналов не имеет значения, достаточно одного. Я не собираюсь воспроизводить звук обратно, так что не должно быть никакой необходимости в ASIO на звуковой карте.



Мой вопрос: как я могу захватить Jack audio с Python?
(Было бы здорово, если бы был пакет, ну документированы и ниши примеров : -).

1524   4  

4 ответов:

Вы пробовали pyaudio ?
Для установки: python-m pip install pyaudio
Пример записи с официального сайта:

    """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()

Этот пример работает на моем ноутбуке с Python 2.7.11 (и 3.5.1) в Windows 8.1, pyaudio 0.2.9.

Планируете ли вы получать аудио с микрофона по частям или потоковым способом? В любом случае, sounddevice может быть использован.

Вы можете установить модуль python с помощью
pip install sounddevice --user

Пожалуйста, обратитесь к официальному сайту для получения подробной информации об API.

Sounddevice будет записывать звук с микрофона вашего ноутбука (стандартный аудиовход) и воспроизводить его на динамике или наушниках (стандартный аудиовыход). Вы можете использовать звуковой объект для дальнейшей обработки.
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"

Вот Выход : Python 2.7.9 (по умолчанию, Dec 10 2014, 12:24:55) [MSC V. 1500 32 bit (Intel) ] на win32 Введите "copyright"," credits "или" license () " для получения дополнительной информации. ================================ Перезапуск ===================

Запись Аудио
Аудиозапись завершена, воспроизведение аудио
Воспроизведение Аудио Полностью

Я бы рассмотрел использование pysox, привязки python для libsox.

Вы можете получить пакет pysox от PyPI.

Если требуется Jack , то вы можете использовать PyJack , который является привязкой Python для Jack.

Кроме того, в исходном коде есть пример того, что вы хотите сделать, то есть захватить аудио. Смотрите файл capture.py

Вы должны учитывать, что, чтобы не пропустить блок, вы должны вызывать jack.process каждые 500 *(buffer_size/sample_rate) миллисекунды. jack.process выдавать исключения, когда вы пропускаете звуковые блоки (jack.InputSyncError и jack.OutputSyncError).

Comments

    Ничего не найдено.