TextToSpeech文本转语音,从开始说话到结束的监听

最近需要做一些文本转语音的东西,然后自己查找了 各种方法 。然后自己整理了下。TTS文字转语音,Google原生的不支持中文,如果我们需要他支持中文,那么需要添加相关语音引擎。安装好了之后,在手机设置里面设置使用即可。一般使用的都是科大讯飞的语音引擎。

 

在init方法里面初始化TTP:
/**
 * 初始化语音播放
 */
textToSpeech=new TextToSpeech(this, new TextToSpeech.OnInitListener() {
    @Override
    public void onInit(int status) {
        if (status==TextToSpeech.SUCCESS){
            //设置音调,1.0是常规
            textToSpeech.setPitch(1.0f);
            //设定语速,默认1.0正常语速
            textToSpeech.setSpeechRate(1.0f);
            int result=textToSpeech.setLanguage(Locale.CHINESE);
            if (result==TextToSpeech.LANG_MISSING_DATA || result==TextToSpeech.LANG_NOT_SUPPORTED){
                Log.e("tiwolf", "onInit: 数据丢失或者不支持");
            }
        }
    }
});textToSpeech.setOnUtteranceProgressListener(new TtsProgress());

使用:

private void speakOut(){
    if (textToSpeech!=null && !textToSpeech.isSpeaking()){
        textToSpeech.speak(editText.getText().toString(),TextToSpeech.QUEUE_FLUSH,null,"");
    }
}

使用UtteranceProgressListener来检测这句话是否已经说完

private class TtsProgress extends UtteranceProgressListener{

        @Override
        public void onStart(String s) {
//            Log.e(TAG, "======onStart: 开始" );
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    //在主界面操作
                }
            });

        }

        @Override
        public void onDone(String s) {
//            Log.e(TAG, "======onDone: 结束" );
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    //在主界面操作
                }
            });

        }

        @Override
        public void onError(String s) {
//            Log.e(TAG, "======onError: 错误" );
        }
    }

 

 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
### 回答1: Speech-to-Text自动语音识别可以使用Java代码实现。下面是一个简单的例子,使用Google Cloud Speech API: ``` import com.google.cloud.speech.v1.RecognitionAudio; import com.google.cloud.speech.v1.RecognitionConfig; import com.google.cloud.speech.v1.RecognitionConfig.AudioEncoding; import com.google.cloud.speech.v1.RecognizeResponse; import com.google.cloud.speech.v1.SpeechClient; import com.google.cloud.speech.v1.SpeechRecognitionAlternative; import com.google.protobuf.ByteString; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.List; public class SpeechToText { public static void main(String... args) throws Exception { // Instantiates a client try (SpeechClient speechClient = SpeechClient.create()) { // The path to the audio file to transcribe String fileName = "path/to/audio.wav"; // Reads the audio file into memory Path path = Paths.get(fileName); byte[] data = Files.readAllBytes(path); ByteString audioBytes = ByteString.copyFrom(data); // Builds the sync recognize request RecognitionConfig config = RecognitionConfig.newBuilder() .setEncoding(AudioEncoding.LINEAR16) .setSampleRateHertz(16000) .setLanguageCode("zh-CN") .build(); RecognitionAudio audio = RecognitionAudio.newBuilder() .setContent(audioBytes) .build(); // Performs speech recognition on the audio file RecognizeResponse response = speechClient.recognize(config, audio); List<SpeechRecognitionAlternative> alternatives = response.getResultsList().get(0).getAlternativesList(); // Prints the transcription of each alternative for (SpeechRecognitionAlternative alternative : alternatives) { System.out.printf("Transcription: %s%n", alternative.getTranscript()); } } } } ``` 该代码使用Google Cloud Speech API对音频文件进行语音识别,并输出识别结果。请注意,需要设置Google Cloud API Key才能使用该API。 ### 回答2: 要实现Speech-to-Text自动语音识别方法,我们可以使用Java编写代码来实现。以下是一种可能的实现方法: 首先,我们需要导入Java中的相关库,如Java Speech API(JSAPI)和相关的语音识别库。可以通过以下代码导入库: ```java import javax.speech.*; import javax.speech.recognition.*; ``` 接下来,我们需要创建一个语音识别引擎,并加载相关的语法文件。可以通过以下代码实现: ```java Recognizer recognizer = Central.createRecognizer(new EngineModeDesc(Locale.ENGLISH)); recognizer.allocate(); File grammarFile = new File("grammar.gram"); // 语法文件路径 URL grammarURL = grammarFile.toURI().toURL(); Grammar grammar = recognizer.loadGrammarFromURL(grammarURL); ``` 然后,我们可以定义一个监听器,以便在识别到语音时进行相应的处理。可以通过以下代码定义监听器: ```java recognizer.addResultListener(new ResultAdapter() { public void resultAccepted(ResultEvent evt) { try { Result result = (Result)evt.getSource(); FinalRuleResult finalResult = (FinalRuleResult)result; String spokenText = finalResult.getBestFinalResultNoFiller(); // 处理识别到的文本 // ... System.out.println("识别结果:" + spokenText); } catch (Exception e) { e.printStackTrace(); } } }); ``` 最后,我们可以启动语音识别引擎,并开始录音以进行语音识别。可以通过以下代码实现: ```java recognizer.commitChanges(); recognizer.requestFocus(); recognizer.resume(); ``` 以上代码片段只是一个简单的示例,实际的实现可能会更加复杂,可以根据具体需求进行相应的扩展和改进。另外,还需要注意的是,该实现方法可能需要使用额外的语音识别库或服务来实现自动语音识别的功能。 ### 回答3: 实现Speech-to-Text自动语音识别方法的Java代码主要依赖于音频处理库和语音识别API。下面是一个简单的示例代码,以使用百度语音识别API为例。 首先,需要引入百度语音API的Java SDK及相关的依赖库。可以在百度开放平台下载并导入到项目中。 ```java import com.baidu.aip.speech.AipSpeech; import org.json.JSONObject; import java.io.File; import java.io.FileInputStream; import java.io.IOException; public class SpeechToText { public static final String APP_ID = "your_app_id"; public static final String API_KEY = "your_api_key"; public static final String SECRET_KEY = "your_secret_key"; public static void main(String[] args) throws IOException { // 初始化语音识别客户端 AipSpeech client = new AipSpeech(APP_ID, API_KEY, SECRET_KEY); // 设置音频输入流 File audioFile = new File("path_to_audio_file"); FileInputStream audioInputStream = new FileInputStream(audioFile); byte[] audioBytes = new byte[(int) audioFile.length()]; audioInputStream.read(audioBytes); // 调用语音识别API JSONObject result = client.asr(audioBytes, "pcm", 16000, null); if (result.getInt("err_no") == 0) { String text = result.getJSONArray("result").getString(0); System.out.println("识别结果:" + text); } else { System.out.println("识别失败:" + result.getString("err_msg")); } // 关闭音频输入流 audioInputStream.close(); } } ``` 在代码中,首先需要将自己在百度开放平台上创建的应用的APP_ID、API_KEY和SECRET_KEY替换成真实的值。然后,设置音频输入流,可以通过文件读取或者实时音频流的方式获取音频数据。最后,调用语音识别API,获取返回的识别结果。 请注意,以上是一个简单的示例代码,具体实现可能因使用的语音识别API和音频处理库而有所差异。另外,还需要对代码进行异常处理以及参数的校验等操作,以保证代码的稳定性和功能完整性。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

tiwolf_li

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值