Чтение входного звукового сигнала с помощью Python
Мне нужно получить звуковой сигнал от микрофона, подключенного к разъему, и использовать данные для немедленной обработки в Python.
Обработка и последующие шаги понятны. Я теряюсь только в получении сигнала от программы.
Количество каналов не имеет значения, достаточно одного. Я не собираюсь воспроизводить звук обратно, так что не должно быть никакой необходимости в ASIO на звуковой карте.
Мой вопрос: как я могу захватить Jack audio с Python?
(Было бы здорово, если бы был пакет, ну документированы и ниши примеров : -).
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