Подтвердить что ты не робот

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

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

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

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

4b9b3361

Ответ 1

Вы пробовали 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.

Ответ 2

Планируете ли вы получать звук с микрофона на куски или потоковое вещание? В любом случае можно использовать 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 (по умолчанию, 10 декабря 2014, 12:24:55) [MSC v.1500 32 бит (Intel)] на win32 Введите "авторские права", "кредиты" или "лицензия()" для получения дополнительной информации. =========================== RESTART ==================================================================== ==

Запись аудио
  Запись звука завершена, воспроизведение аудио
  Воспроизведение аудио завершено

Ответ 3

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

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

Ответ 4

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

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

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