我正在写一个识别语音的程序。它的作用是从麦克风录制音频并使用Sphinx将其转换为文本。我的问题是我只想在用户说出某些内容时开始录制音频。
我通过从麦克风读取音频电平进行实验,并仅在电平高于特定值时进行录制。但它并没有那么有效。程序在检测到任何响亮的声音时开始录制。这是我用的代码
import audioop
import pyaudio as pa
import wav
class speech():
def __init__(self):
# soundtrack properties
self.format = pa.paInt16
self.rate = 16000
self.channel = 1
self.chunk = 1024
self.threshold = 150
self.file = 'audio.wav'
# intialise microphone stream
self.audio = pa.PyAudio()
self.stream = self.audio.open(format=self.format,
channels=self.channel,
rate=self.rate,
input=True,
frames_per_buffer=self.chunk)
def record(self)
while True:
data = self.stream.read(self.chunk)
rms = audioop.rms(data,2) #get input volume
if rms>self.threshold: #if input volume greater than threshold
break
# array to store frames
frames = []
# record upto silence only
while rms>threshold:
data = self.stream.read(self.chunk)
rms = audioop.rms(data,2)
frames.append(data)
print 'finished recording.... writing file....'
write_frames = wav.open(self.file, 'wb')
write_frames.setnchannels(self.channel)
write_frames.setsampwidth(self.audio.get_sample_size(self.format))
write_frames.setframerate(self.rate)
write_frames.writeframes(''.join(frames))
write_frames.close()
有没有办法在Python中区分人声和其他噪音?希望有人能找到我的解决方案。
答案 0 :(得分:5)
我认为你的问题是,目前你在没有识别语音的情况下进行录音,因此它没有辨别力 - 可识别的语音是在识别后产生有意义的结果的任何东西 - 所以捕获22.你可以通过寻找来简化问题用于打开关键字。你也可以过滤voice frequency range作为人耳和电话公司都做的,你可以看一下标记空间比例 - 我相信有一些出版物可以追溯到那个但是注意 - 它因语言而异语言。快速的谷歌可以提供非常丰富的信息。您还可以找到有趣的this文章。
答案 1 :(得分:2)
答案 2 :(得分:-1)