我正在开发一个用于识别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,我可以按照单词处理,或者如果我在两个单独的缓冲区中记录'hello'和'world',然后说'hello'再次,它可以确定我重复'你好'而不是世界。请帮忙。
答案 0 :(得分:0)
如果您必须拥有录制的数据,则可以使用其他服务进行语音识别。有关某些选项的介绍,请参阅https://stackoverflow.com/a/6351055/90236。
如果您只是在玩(而不是制作制作应用),您还可以尝试使用Google服务进行Chrome使用的语音识别。您必须从PCM转换为FLAC。见Google's voice search speech recognition service
如果您想在不进行识别的情况下比较PCM缓冲区,信号处理是一个深刻且有趣的领域。对不起,我太生疏了,不能在那个领域给出任何建议。