记录完成后,尝试让侦听循环继续

时间:2017-04-08 13:31:13

标签: python python-2.7 audio raspberry-pi pyaudio

使用此页面中的代码Python record audio on detected sound

import pyaudio
import math
import struct
import wave



#Assuming Energy threshold upper than 30 dB
Threshold = 30

SHORT_NORMALIZE = (1.0/32768.0)
chunk = 1024
FORMAT = pyaudio.paInt16
CHANNELS = 1
RATE = 16000
swidth = 2
Max_Seconds = 10
TimeoutSignal=((RATE / chunk * Max_Seconds) + 2)
silence = True
FileNameTmp = '/home/Recodings/2013/8/23/12-33.wav'
Time=0
all =[]

def GetStream(chunk):
    return stream.read(chunk)



def rms(frame):
        count = len(frame)/swidth
        format = "%dh"%(count)
        shorts = struct.unpack( format, frame )

        sum_squares = 0.0
        for sample in shorts:
            n = sample * SHORT_NORMALIZE
            sum_squares += n*n
        rms = math.pow(sum_squares/count,0.5);

        return rms * 1000



def WriteSpeech(WriteData):
    stream.stop_stream()
    stream.close()
    p.terminate()
    wf = wave.open(FileNameTmp, 'wb')
    wf.setnchannels(CHANNELS)
    wf.setsampwidth(p.get_sample_size(FORMAT))
    wf.setframerate(RATE)
    wf.writeframes(WriteData)
    wf.close()



def KeepRecord(TimeoutSignal, LastBlock):


    all.append(LastBlock)
    for i in range(0, TimeoutSignal):
        try:
            data = GetStream(chunk)
        except:
            continue
        #I chage here (new Ident)
        all.append(data)

    print "end record after timeout";
    data = ''.join(all)
    print "write to File";
    WriteSpeech(data)
    silence = True
    Time=0
   listen(silence,Time)     

def listen(silence,Time):
    print "waiting for Speech"
   while silence:

        try:

            input = GetStream(chunk)

        except:

            continue


        rms_value = rms(input)

        if (rms_value > Threshold):

            silence=False

            LastBlock=input

            print "hello ederwander I'm Recording...."
            KeepRecord(TimeoutSignal, LastBlock)

        Time = Time + 1

        if (Time > TimeoutSignal):
            print "Time Out No Speech Detected"
            sys.exit()






p = pyaudio.PyAudio()

stream = p.open(format = FORMAT,
    channels = CHANNELS,
    rate = RATE,
    input = True,
    output = True,
    frames_per_buffer = chunk)




listen(silence,Time)

我可以成功录制一个音频样本。

然而,在第二个循环中,它到达print "waiting for Speech",然后CPU达到100%并且整个事情都会挂起。

有什么想法吗?

(我假设while循环是某种方式的问题..但这可能是一个红色的鲱鱼)

0 个答案:

没有答案