gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 11:54:45 25 4
gpt4 key购买 nike

是否有可能从 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com