将PCM数据与先前通过麦克风输入的数据相匹配或用作单词识别



我正在开发一个从pcm数据中识别语音的应用程序。目前我正在打印pcm缓冲区。

int N = AudioRecord.getMinBufferSize(8000,AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT);
recorder = new AudioRecord(AudioSource.MIC, 8000, AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT, N*10);
track = new AudioTrack(AudioManager.STREAM_MUSIC, 8000, 
                    AudioFormat.CHANNEL_OUT_MONO, AudioFormat.ENCODING_PCM_16BIT,     N*10, AudioTrack.MODE_STREAM);
            recorder.startRecording();
            /*
             * Loops until something outside of this thread stops it.
             * Reads the data from the recorder and writes it to the audio track f
             */
            while(!stopped)
            { 
                //Log.i("Map", "Writing new data to buffer");
                short[] buffer = buffers[ix++ % buffers.length];
                N = recorder.read(buffer,0,buffer.length);
                for(int i = 0; i < buffer.length; i ++) {
                    System.out.println(String.valueOf(buffer[i]));
                }
            }

我想1)让pcm数据与之前的pcm数据匹配,或者2)让它被识别为一个单词。例如如果我在麦克风内说"你好",它会将pcm数据转换为单词hello,我可以根据这个单词进行处理,或者如果我在两个单独的缓冲区中记录了一个"你好"和一个"世界",然后再次说"你好",它可以确定我重复了"你好"而不是世界。请帮忙。

Android内置了语音识别功能。但是,我认为它不支持录制的PCM数据。要使用它,我相信,您必须直接接受语音输入。看见http://android-developers.blogspot.com/2010/03/speech-input-api-for-android.html开始。

如果你必须记录数据,你可以使用其他服务来进行语音识别。有关一些选择的介绍,请参阅https://stackoverflow.com/a/6351055/90236.

如果你只是在玩(而不是制作一个生产应用程序),你也可以尝试使用Chrome使用的谷歌语音识别服务。您必须从PCM转换为FLAC。请参阅Google';s语音搜索语音识别服务

如果您想在不进行识别的情况下比较PCM缓冲区,信号处理是一个深入而有趣的领域。对不起,我太生疏了,不能在这方面给任何建议。