2014-09-16 3 views
1

현재 파이썬에서 클라이언트 - 서버로 작동하는 VOIP 도구를 개발 중입니다.Pyaudio : 볼륨 확인 방법

CHUNK = 1024 
    p = pyaudio.PyAudio() 
    stream = p.open(format = pyaudio.paInt16, 
      channels = 1, 
      rate = 44100, 
      input = True, 
      frames_per_buffer = CHUNK) 

    while 1: 
     self.conn.sendVoice(stream.read(CHUNK)) 

내가 좋아하는 것 : 내 문제는 소리가없는 경우에도 다음과 같이 내가 현재 (물론이 때 아무도 대화를하거나, 데이터뿐만 아니라 전송되는 소음이없는)을 Pyaudio 입력 스트림을 보내고있다이다 다음과 같이 볼륨을 확인하여 볼륨을 확인하십시오.

data = stream.read(CHUNK) 
    if data.volume > 20%: 
     self.conn.sendVoice(data) 

이 방법을 사용하면 쓸모없는 데이터를 보내고 여분의 연결/성능을 향상시킬 수 있습니다. (또한, 나는 어떤 종류의 압축을 찾고 있는데, 나는 다른 주제에서 그것을 요구할 것임).

답변

3

root mean square (RMS)을 사용하여 수행 할 수 있습니다. 파이썬을 사용하여 자신의 RMS 기능을 구축 할 수

한 가지 방법은 다음과 같습니다

def rms(data): 
    count = len(data)/2 
    format = "%dh"%(count) 
    shorts = struct.unpack(format, data) 
    sum_squares = 0.0 
    for sample in shorts: 
     n = sample * (1.0/32768) 
     sum_squares += n*n 
    return math.sqrt(sum_squares/count) 

또 다른 선택이 실효를 찾을 수 audioop을 사용할 수 있습니다 :

지금 당신은 당신이 rms decibel에 변환 할 수 원하는 경우
data = stream.read(CHUNK) 
rms = audioop.rms(data,2) 

눈금 decibel = 20 * log10(rms)