java - 从wav文件Java语音到文本

标签 java speech-recognition speech-to-text

是否有可能从 java 中识别 wav 文件是否有可能使用 cloudgarden java speech api 它们是来自 cloudgarden 示例的示例代码,我们自己的 wav 文件需要进行任何更改 示例代码如下

import javax.speech.*;
import javax.speech.recognition.*;
import java.io.*;
import com.cloudgarden.audio.*;
import com.cloudgarden.speech.*;
import com.cloudgarden.speech.userinterface.SpeechEngineChooser;

/**
 * Tests running a dictation grammar against input from a wave file.
 */

public class DictationFromFile {
    static Recognizer rec = null;

    static DictationGrammar dictation;

    public static void main(String[] args) {
        try {

            RecognizerModeDesc desc = new RecognizerModeDesc(null, Boolean.TRUE);
            SpeechEngineChooser chooser = null;

            try {
                chooser = SpeechEngineChooser.getRecognizerDialog(desc);
                chooser.show();
            }
            catch (NoClassDefFoundError e) {
                System.out.println("Swing classes not found - continuing anyway");
            }
            if (chooser != null)
                desc = chooser.getRecognizerModeDesc();

            rec = Central.createRecognizer(desc);
            rec.addEngineListener(new TestEngineListener());

            System.out.println("STARTING TEST");

            RecognizerAudioAdapter raud = new TestAudioListener();
            CGAudioManager audioMan = (CGAudioManager) rec.getAudioManager();
            audioMan.addAudioListener(raud);

            audioMan.addTransferListener(new TransferListener() {
                public void bytesTransferred(TransferEvent evt) {
                    System.out.println("transferred " + evt.getLength());
                }
            });

            rec.allocate();
            rec.waitEngineState(Recognizer.ALLOCATED);

            dictation = rec.getDictationGrammar("dictation");
            dictation.setEnabled(true);
            // Set the TestResultListener to play back the audio and deallocate after one
            // recognition.
            dictation.addResultListener(new TestResultListener(rec, 1, true));
            RecognizerProperties props = rec.getRecognizerProperties();
            // Retain audio so it can be played back later (see TestResultListener)
            props.setResultAudioProvided(true);
            props.setNumResultAlternatives(4);

            System.out.println("Using engine " + rec.getEngineModeDesc());
            SpeakerManager speakerManager = rec.getSpeakerManager();
            if (chooser != null) {
                SpeakerProfile prof = chooser.getSpeakerProfile();
                speakerManager.setCurrentSpeaker(prof);
            }
            else {
                SpeakerProfile[] profs = speakerManager.listKnownSpeakers();
                speakerManager.setCurrentSpeaker(profs[0]);
            }

            System.out.println("Current Profile is " + speakerManager.getCurrentSpeaker());

            AudioFileSource source = new AudioFileSource(new File("resources\\hello_world.wav"));

            System.out.println("file fmt=" + source.getAudioFormat());
            System.out.println("rec fmt=" + audioMan.getAudioFormat());

            // convert to the recognizer audio format
            new AudioFormatConverter(source, audioMan, true);

            // need to use an AudioConverter as above - the following line used
            // in place of the above line will throw an Exception if the AudioManager
            // and source have different AudioFormats
            // audioMan.setSource(source);

            rec.commitChanges();
            rec.requestFocus();
            rec.waitEngineState(rec.LISTENING);

            source.startSending();
            System.out.println("sending");

            source.drain();
            System.out.println("drained");

            // deallocate after 10 seconds - in case nothing was recognized
            Thread killThread = new Thread() {
                public void run() {
                    try {
                        sleep(10000);
                        System.out.println("Given up waiting for an Accepted Result");
                        System.out.println("disabling dictation after audio data finished");
                        dictation.setEnabled(false);
                        if (!rec.testEngineState(rec.DEALLOCATED)
                            && !rec.testEngineState(rec.DEALLOCATING_RESOURCES)) {
                            rec.commitChanges();
                            rec.waitEngineState(rec.LISTENING);
                            sleep(5000);
                        }
                        System.out.println("Forcing finalize\n");
                        // forceFinalize causes a RESULT_ACCEPTED event to be sent, and
                        // the TestResultListener will deallocate the recognizer
                        rec.forceFinalize(true);
                        System.out.println("Forced finalize\n");
                        rec.deallocate();
                        System.out.println("deallocating\n");
                    }
                    catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            };
            killThread.start();

            rec.waitEngineState(Recognizer.DEALLOCATED);
            // one recognition and the TestResultListener deallocates

            System.out.println("All done");

        }
        catch (Exception e) {
            e.printStackTrace(System.out);
        }
        catch (Error e1) {
            e1.printStackTrace(System.out);
        }
        finally {
            try {
                rec.deallocate();
            }
            catch (Exception e2) {
                e2.printStackTrace(System.out);
            }
            System.exit(0);
        }
    }
}

最佳答案

是与否。

是的。 Java 语音 API 为将文本转换为语音或将语音转换为文本(语音识别)的插件提供 Hook 。

没有。不幸的是,语音识别插件页面上列出的所有 API 链接要么已损坏,要么指向不提供插件的地方(免费商业).对于在 Java Sound API 中进行语音识别的插件,似乎需要您自己编写。

关于java - 从wav文件Java语音到文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5429642/

相关文章:

java - 在Java中实现多重继承

tensorflow - 浏览器中的离线语音识别

android - 使用音频文件进行语音识别?

java - Sphinx4 的 SphinxTrain 的示例配置/属性 xml 文件

java - 使用 Mockito 模拟结果集

java - Spring 是否确保 Closeable bean 以正确的顺序关闭?

java - 录音时检测静音

python - 如何比较不完全匹配的字符串

java - 使用 Yahoo Finance API 检索股票行情

javascript - Google Chrome 语音转文本 API JavaScript 连续不起作用?