Pyaudio:如何检查音量

时间:2014-09-16 12:11:53

标签: controls volume pyaudio

我目前正在python中开发一个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))

我想查看音量来得到这样的东西:

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

这样我就可以避免发送无用的数据和备用连接/提高性能。 (另外,我正在寻找某种压缩,但我想我将不得不在另一个主题中提出这个问题。)

1 个答案:

答案 0 :(得分:3)

可以使用root mean square (RMS)完成。

使用python构建自己的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:

data = stream.read(CHUNK)
rms = audioop.rms(data,2)

现在,如果您愿意,可以将rms转换为decibel比例decibel = 20 * log10(rms)