开发者

Speech to text from wav file Java

开发者 https://www.devze.com 2023-02-19 10:43 出处:网络
is it possible to recognize wav file from java is it possible with cloudgarden java speech api their is a sample code from cloudgarden example, any change is need for our own wav file

is it possible to recognize wav file from java is it possible with cloudgarden java speech api their is a sample code from cloudgarden example, any change is need for our own wav file the sample code is below

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);
        }
    }
}


Yes & no.

Yes. The Java Speech API provides hooks for plug-ins that either convert text to speech, or speech to text (speech recognition).

No. Unfortunately all the links to APIs listed on the plug-ins page for speech recognition, are either broken or lead to places that do not offer a plug-in (free or commercially). For a plug-in to do speech recognition in the Java Sound API, it seems as though you would need to write it yourself.

0

精彩评论

暂无评论...
验证码 换一张
取 消