当前位置: 代码迷 >> J2SE >> JAVA作的语音识别
  详细解决方案

JAVA作的语音识别

热度:81   发布时间:2016-04-23 21:53:30.0
JAVA做的语音识别
我想用java实现一个 语音识别的软件。比如我说一句‘hello’,软件就会采集我说话的特征值,并记录下来,并输出相应值。当别人说‘hello’的时候,采集其特征值,并与我的比较,相同就通过,不同就继续输入。声音的采集主要通过麦克风实现。

------解决方案--------------------
声音识别是一个专门的技术,其实就是对声音波形的判断。如果你想用Java实现的话,那你必须先对Java的声音输入输出的操作有基本的了解。下面是一个简单的录音并输出的程序。录音的时候,每次读取数据是存放在buffer这个字节数组之中的,再把它输出。而你,是要识别的话,就是从这个数组中提取信息。那么这个数组的结构是什么样的呢。对这个程序而言,采用16位双声道录音,那么这个数组,每2位拼起来,是一个采样值,这个值即是声音的响度。将2个字节视为一个单位的话,由于是双声道,就是说,两个单位一组,一个是左声道,一个是右声道,交替录入的。

import java.io.*;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.SourceDataLine;
import javax.sound.sampled.DataLine;
import javax.sound.sampled.FloatControl;
import javax.sound.sampled.TargetDataLine;
public class RecordAndPlay {
    volatile int divider;
    public RecordAndPlay(){
        Play();
    }
    public static void main(String[] args) {
        new RecordAndPlay();
    }
    //播放音频文件
    public void Play() {

        try {
            AudioFormat audioFormat =
//                    new AudioFormat(AudioFormat.Encoding.PCM_SIGNED, 44100F,
//                    8, 1, 1, 44100F, false);
             new AudioFormat(AudioFormat.Encoding.PCM_SIGNED,44100F, 16, 2, 4,
             44100F, true);
            DataLine.Info info = new DataLine.Info(TargetDataLine.class,
                    audioFormat);
            TargetDataLine targetDataLine = (TargetDataLine) AudioSystem.getLine(info);
  相关解决方案