【问题标题】:How to get voice amplitude from pocketsphinx如何从pocketsphinx获取语音幅度
【发布时间】:2015-12-08 12:49:47
【问题描述】:

当有人说话时,我正在使用 pocketsphinx 来识别 android 应用程序中的单词。我想实现功能以返回pocketsphinx记录的声音的最大幅度。如果我说任何单词,我需要得到一个声音级别作为回报(无论是从解码器识别还是不识别单词)。 我做了什么:我查看了pocketsphinx的代码-->源文件中当前注释的SpeechRecognizer:

 /*              while (!interrupted()
                && ((timeoutSamples == NO_TIMEOUT) || (remainingSamples > 0))) {
            int nread = recorder.read(buffer, 0, buffer.length);

            if (-1 == nread) {
                throw new RuntimeException("error reading audio buffer");
            } else if (nread > 0) {
                decoder.processRaw(buffer, nread, false, false);

                int max = 0;
                for (int i = 0; i < nread; i++) {
                    max = Math.max(max, Math.abs(buffer[i]));
                }....

我似乎是从缓冲区计算这个最大值我如何从完整的记录中计算出来。有人可以给我提示吗?

【问题讨论】:

    标签: cmusphinx pocketsphinx pocketsphinx-android


    【解决方案1】:

    就是这样,只需将 max 设置为 SpeechRecognizer 类的字段,不要每次都初始化它,而只是在开始识别时:

    class SpeechRecognizer() {
    
         double maxLevel;
    
         void startRecognition() {
             maxLevel = 0.0;
         }
    
         ....         
            @Override
            public void run() {
                    decoder.processRaw(buffer, nread, false, false);
    
                    double level = 0;
                    for (int i = 0; i < nread; i++) {
                        level += buffer[i] * buffer[i];
                    }
                    level = sqrt(level / nread);
                    if (maxLevel < level)
                        maxLevel = level
          ....
    
    }
    

    在这里,我建议您使用均方根 (RMS) 而不是简单的最大值,因为它是对最大幅度的更稳定估计,它可以抵抗简单的振幅突发,例如点击。

    从每个缓冲区返回带有结果的 RMS 并在应用程序内部而不是在识别器内部更新 maxLevel 也是一个好主意。

    【讨论】:

    • 这就是我用来从语音识别器类计算噪声水平并发送回我的服务的方式(无法在下面的代码中形成):double sum = 0,amplitudeDb = 0; for (int i = 0; i 0) { 最终双幅值 = sum / nread;振幅Db = (int) Math.sqrt(振幅); } mainHandler.post(new AmplitudeEvent(amplitudeDb));
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多