Python Pyaudio录制x秒,同时输入通过树形文件夹
我有一个Python函数,当它检测到噪音时,当声音比树桩大时,就开始录制,但我需要它只录制一段特定的时间(例如两秒),但我不知道如何做。我试过利用时间睡觉,但没用。我怎么做?这是我的职责:Python Pyaudio录制x秒,同时输入通过树形文件夹,python,python-2.7,pyaudio,Python,Python 2.7,Pyaudio,我有一个Python函数,当它检测到噪音时,当声音比树桩大时,就开始录制,但我需要它只录制一段特定的时间(例如两秒),但我不知道如何做。我试过利用时间睡觉,但没用。我怎么做?这是我的职责: def stt(language, threshold=THRESHOLD, num_phrases=-1): """ Listens to Microphone, extracts phrases from it and sends it to Google's TTS servi
def stt(language, threshold=THRESHOLD, num_phrases=-1):
"""
Listens to Microphone, extracts phrases from it and sends it to
Google's TTS service and returns response. a "phrase" is sound
surrounded by silence (according to threshold). num_phrases controls
how many phrases to process before finishing the listening process
(-1 for infinite).
"""
#Open stream
p = pyaudio.PyAudio()
stream = p.open(format=FORMAT,
channels=CHANNELS,
rate=RATE,
input=True,
frames_per_buffer=CHUNK)
print "* Listening mic. "
audio2send = []
cur_data = '' # current chunk of audio data
rel = RATE/CHUNK
slid_win = deque(maxlen=SILENCE_LIMIT * rel)
#Prepend audio from 0.5 seconds before noise was detected
prev_audio = deque(maxlen=PREV_AUDIO * rel)
started = False
n = num_phrases
response = []
while (num_phrases == -1 or n > 0):
cur_data = stream.read(CHUNK)
slid_win.append(math.sqrt(abs(audioop.avg(cur_data, 4))))
#print slid_win[-1]
if(sum([x > THRESHOLD for x in slid_win]) > 0):
if(not started):
print "Starting record of phrase"
started = True
audio2send.append(cur_data)
elif (started is True):
print "Finished"
# The limit was reached, finish capture and deliver.
filename = save_speech(list(prev_audio) + audio2send, p)
# Send file to Google and get response
r = stt_google_wav(filename, language)
if num_phrases == -1:
print r
else:
response.append(r)
# Remove temp file. Comment line to review.
os.remove(filename)
# Reset all
started = False
slid_win = deque(maxlen=SILENCE_LIMIT * rel)
prev_audio = deque(maxlen=0.5 * rel)
audio2send = []
n -= 1
print "Listening ..."
else:
prev_audio.append(cur_data)
print "* Done recording"
stream.close()
p.terminate()
return response
非常感谢