4

我正在编写一个识别语音的程序。它的作用是从麦克风录制音频并使用 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 中区分人声和其他噪音?希望有人能找到我的解决方案。

4

3 回答 3

5

我认为您的问题是,目前您正在尝试在不识别语音的情况下进行录制,因此它没有区别-可识别的语音是在识别后会产生有意义的结果的任何东西-因此请注意22。您可以通过寻找开口来简化问题关键词。您还可以像人耳和电话公司一样过滤语音频率范围,您可以查看标记空间比率 - 我相信不久前有一些出版物,但请注意 - 它因语言而异. 快速谷歌可以提供非常丰富的信息。您可能还会发现这篇文章很有趣。

于 2013-08-02T05:22:03.193 回答
2

我认为您正在寻找的是VAD(语音活动检测)。VAD 可用于 ASR 的语音预处理。这是一些用于实现 VAD链接的开源项目。愿它帮助你。

于 2013-08-04T08:28:28.947 回答
1

这是一个使用 VAD 库的示例脚本。 https://github.com/wiseman/py-webrtcvad/blob/master/example.py

于 2018-04-15T09:12:07.273 回答