2014-10-21 2 views
2

Я хочу передать данные о громкости с аудиовхода моего ноутбука (только встроенный микрофон в моем Macbook) в Arduino с максимально возможной задержкой.Получение уровней громкости от PyAudio для использования в Arduino

Я вижу, что записать аудио вход с помощью PyAudio не сложно, но большинство примеров для этого модуля сохраняют звуковые показания в формате wav или в другом формате. Могу ли я просто непосредственно измерить том, когда я его читаю в PyAudio, или мне нужно сохранить его в файл и проанализировать этот файл? Мне не нужны никакие другие данные в аудио за пределами тома.

Большое значение.

+0

Как этот вопрос связан с ардуино? – ahaltindis

+0

Я хотел отправить громкость звука с микрофона моего ноутбука через последовательный порт на мой Arduino. – John

+0

Я получил это, но в вашем вопросе нет ничего об ардуино или последовательном порту. Ваш вопрос касается только python и pyaudio. – ahaltindis

ответ

4

Вы можете читать в объеме в реальном времени. Для этого настройте запись, но не сохраняйте данные, просто обработайте ее. Здесь я получаю RMS-значение каждого фрагмента с помощью встроенного аудио-модуля Python. (Этот пример является лишь модификацией записи демо в веб-странице PyAudio включить audioop.rms.)

import pyaudio 
import wave 
import audioop 

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) 

for i in range(0, int(RATE/CHUNK * RECORD_SECONDS)): 
    data = stream.read(CHUNK) 
    rms = audioop.rms(data, 2) # here's where you calculate the volume 

stream.stop_stream() 
stream.close() 
p.terminate() 

Конечно, если вам не нравится RMS, audioop имеет другие меры объема.

+0

Спасибо! Я закончил тем, что использовал и адаптировал эту же кодовую базу. @ tom10 – John