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

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

前言

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

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