2014-10-21 4 views
2

내 노트북의 오디오 입력 (내 Macbook의 내장 마이크)에서 Arduino로 볼륨 데이터를 가능한 한 조금 지연시켜 보내고 싶습니다.Arduino에서 PyAudio의 볼륨 레벨 얻기

PyAudio를 사용하여 오디오 입력을 캡처하는 것이 어렵지는 않지만 대부분의 예제에서는 오디오 판독 값을 wav 또는 다른 파일 형식으로 저장합니다. 볼륨을 PyAudio로 읽는 중 직접 볼륨을 측정하거나, 파일에 저장하고 파일을 분석해야합니까? 볼륨 이상의 오디오에서 다른 데이터는 신경 쓰지 않습니다.

매우 감사드립니다.

+0

이 질문은 어떻게 arduino와 관련이 있습니까? – ahaltindis

+0

랩톱 마이크의 오디오 볼륨을 직렬 포트를 통해 Arduino에 보내고 싶었습니다. – John

+0

알 겠어.하지만 질문에 arduino 나 시리얼 포트에 관한 것은 아무것도 없다. 귀하의 질문은 파이썬과 pyaudio에 관한 것입니다. – ahaltindis

답변

4

볼륨을 실시간으로 읽을 수 있습니다. 이렇게하려면 레코딩을 설정하고 데이터를 저장하지 말고 처리하십시오. 여기에서는 파이썬의 포함 된 audioop 모듈을 사용하여 각 청크의 RMS 값을 구합니다. (이 예는 audioop.rms을 포함하는 PyAudio 웹 페이지의 레코드 데모 단지 수정입니다.) 물론

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

감사합니다! 결국 같은 코드베이스를 사용하고 적응했습니다. @ 톰 10 – John