HarmonyOS Next 基础语音服务 Core Speech Kit的使用 原创

第一小趴菜
发布于 2024-12-2 12:54
浏览
1收藏

前言

Core Speech Kit(基础语音服务)集成了语音类基础AI能力,包括文本转语音(TextToSpeech)及语音识别(SpeechRecognizer)能力,便于用户与设备进行互动,实现将实时输入的语音与文本之间相互转换。

场景介绍

文本转语音:将一段不超过10000字符的文本合成为语音并进行播报。
语音识别:将一段音频信息(短语音模式不超过60s,长语音模式不超过8h)转换为文本,可以将pcm音频文件或者实时语音转换为文字。

Core Speech Kit有着以下几个功能的实现:
1.多模式语音识别:
实时转换:能够将语音实时转换为文字,并支持多种语言识别。
网络适应:既支持在线模式,也支持离线模式,确保在无网络环境下也能进行基本的语音识别。
2.自然语音合成:
文字转语音:将文字内容转换为自然流畅的语音输出。
多样化声音:提供多种声音选择,允许根据应用场景选择适合的语音风格。
3.智能唤醒功能:
关键词唤醒:实现语音助手的唤醒功能,支持用户自定义唤醒词。
高精度服务:提供高精度的唤醒机制,显著降低误唤醒的概率。
4.语音指令控制:
指令识别:能够识别并响应特定的语音指令,支持无触摸操作。
自定义指令库:允许用户根据需求创建自定义指令库,适应多样化的应用场景。
5.语言理解与上下文感知:
自然语言处理:提供强大的自然语言处理能力,准确理解用户意图。
上下文理解:支持上下文感知,提升语音交互的智能化水平和用户体验。
6.噪声抑制技术:
环境适应性:在嘈杂环境中进行语音处理,确保语音识别和合成的准确性不受干扰。
7。跨设备无缝交互:
多设备协同:支持在多个设备间进行语音交互,实现跨设备控制。
一致性体验:提升用户体验的一致性,无论是在手机、智能家居还是其他设备上。

以下是一个利用鸿蒙操作系统的Core Speech Kit开发的简易语音助手应用实例,它融合了语音识别与语音合成两大功能。该应用能够持续监听用户的语音指令,将其精准转换为文本内容,并随后通过语音合成技术,将处理后的文本信息以语音形式反馈给用户,实现流畅的语音交互体验。

import ohos.aafwk.ability.Ability;
import ohos.aafwk.content.Intent;
import ohos.eventhandler.EventHandler;
import ohos.eventhandler.EventRunner;
import ohos.speech.SpeechClient;
import ohos.speech.SpeechResult;
import ohos.speech.SpeechSynthesizer;
import ohos.speech.SpeechRecognizer;
import ohos.speech.listener.RecognitionListener;
import ohos.speech.listener.SynthesisListener;
 
public class VoiceAssistantAbility extends Ability {
 
    private SpeechRecognizer speechRecognizer;
    private SpeechSynthesizer speechSynthesizer;
    private EventHandler eventHandler;
 
    @Override
    public void onStart(Intent intent) {
        super.onStart(intent);
        // 初始化事件处理器,用于处理异步任务
        eventHandler = new EventHandler(EventRunner.getMainEventRunner());
        // 初始化语音识别器
        initSpeechRecognizer();
        // 初始化语音合成器
        initSpeechSynthesizer();
        // 开始监听用户的语音输入
        startListening();
    }
    private void initSpeechRecognizer() {
        // 创建语音识别客户端
        speechRecognizer = SpeechRecognizer.createSpeechRecognizer(this);
        // 设置语音识别的回调监听器
        speechRecognizer.setRecognitionListener(new RecognitionListener() {
            @Override
            public void onRecognizeStart() {
                // 语音识别开始时的回调
                showToast("语音识别开始...");
            }
            @Override
            public void onRecognizeEnd() {
                // 语音识别结束时的回调
                showToast("语音识别结束");
            }
            @Override
            public void onRecognizeResult(SpeechResult result) {
                // 处理语音识别结果
                String recognizedText = result.getText();
                showToast("识别结果: " + recognizedText);
                // 调用语音合成,将识别的文本转换为语音
                startSpeaking(recognizedText);
            }
            @Override
            public void onRecognizeError(int error) {
                // 处理语音识别错误
                showToast("识别错误: " + error);
            }
        });
    }
    private void initSpeechSynthesizer() {
        // 创建语音合成器
        speechSynthesizer = SpeechSynthesizer.createSpeechSynthesizer(this);
        // 设置语音合成的回调监听器
        speechSynthesizer.setSynthesisListener(new SynthesisListener() {
            @Override
            public void onSynthesizeStart() {
                // 语音合成开始时的回调
                showToast("语音合成开始...");
            }
            @Override
            public void onSynthesizeEnd() {
                // 语音合成结束时的回调
                showToast("语音合成结束");
            }
            @Override
            public void onSynthesizeError(int error) {
                // 处理语音合成错误
                showToast("合成错误: " + error);
            }
        });
    }
    private void startListening() {
        // 开始语音识别
        eventHandler.postTask(() -> speechRecognizer.startRecognizing());
    }
    private void startSpeaking(String text) {
        // 开始语音合成,将文本转换为语音
        eventHandler.postTask(() -> speechSynthesizer.startSpeaking(text));
    }
    private void showToast(String message) {
        // 显示提示信息
        getUITaskDispatcher().asyncDispatch(() -> {
            ToastDialog toastDialog = new ToastDialog(getContext());
            toastDialog.setText(message);
            toastDialog.show();
        });
    }
    @Override
    public void onStop() {
        super.onStop();
        // 释放语音识别器和合成器资源
        if (speechRecognizer != null) {
            speechRecognizer.release();
        }
        if (speechSynthesizer != null) {
            speechSynthesizer.release();
        }
    }
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.
  • 70.
  • 71.
  • 72.
  • 73.
  • 74.
  • 75.
  • 76.
  • 77.
  • 78.
  • 79.
  • 80.
  • 81.
  • 82.
  • 83.
  • 84.
  • 85.
  • 86.
  • 87.
  • 88.
  • 89.
  • 90.
  • 91.
  • 92.
  • 93.
  • 94.
  • 95.
  • 96.
  • 97.
  • 98.
  • 99.
  • 100.
  • 101.
  • 102.
  • 103.
  • 104.
  • 105.
  • 106.
  • 107.
  • 108.
  • 109.

©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
标签
已于2024-12-2 12:56:34修改
2
收藏 1
回复
举报
2
1


回复
    相关推荐