def record(self):
"""Records from the microphone and returns the data as an array of signed shorts."""
print("Wait in silence to begin recording; wait in silence to terminate")
import pyaudio
p = pyaudio.PyAudio()
stream = p.open(format=pyaudio.paFloat32, channels=1, rate=self.sample_rate, input=True, output=True,
frames_per_buffer=self.chunk_size)
silent_chunk_count = 0
has_recording_started = False
is_first_chunk = False
chunks = []
while True:
chunk_as_array = array.array('f', stream.read(self.chunk_size))
# drop first, as it is often loud noise
if not is_first_chunk:
is_first_chunk = True
continue
if byteorder == 'big':
chunk_as_array.byteswap()
chunk = numpy.array(chunk_as_array)
chunks.append(chunk)
silent = self._is_silent(chunk)
print("Silent: " + str(silent))
if has_recording_started:
if silent:
silent_chunk_count += 1
if silent_chunk_count * self.chunk_size > self.silence_until_terminate_in_s * self.sample_rate:
break
else:
silent_chunk_count = 0
elif not silent:
has_recording_started = True
stream.stop_stream()
stream.close()
print("Stopped recording.")
p.terminate()
return self._normalize(self._trim_silence(concatenate(chunks)))
评论列表
文章目录