HarmonyOS开发-系统AI能力-语音转文字

部署运行你感兴趣的模型镜像

HarmonyOS中语音转文字

前言

在鸿蒙应用开发中,往往会用到语音播报,语音转文字等功能,那么华为HarmonyOS系统集成了基础语音服务的sdk(Core Speech Kit),这个能力由HarmonyOS系统提供,是一个本地的语音服务能力,需要注意的是,这个能力仅支持HarmonyOS,OpenHarmony系统中是没有的,那么下面我们就对这个能力进行讲解,本文主要讲文本转语音的使用方法

介绍

本文主要介绍华为HarmonyOS基础语音服务(Core Speech Kit)中文本转语音的功能开发顺序,通过对Core Speech Kit的使用,开发者可对播报的策略进行设置,包括单词播报、数字播报、静音停顿、汉字发音策略。

  • 支持的语种类型:中文、英文。(简体中文、繁体中文、中文语境下的英文)
  • 支持的音色类型:聆小珊女声音色、英语(美国)劳拉女声音色、凌飞哲男声音色。

开发步骤:

第一步需要引入对应的工具类

import { textToSpeech } from '@kit.CoreSpeechKit';

第二步创建文字转语音引擎,并且设置对应的引擎参数,引擎参数列表下面我也列出来了

let ttsEngine: textToSpeech.TextToSpeechEngine;
// 设置创建引擎参数
let extraParam: Record<string, Object> = {"style": 'interaction-broadcast', "locate": 'CN', "name": 'EngineName'};
let initParamsInfo: textToSpeech.CreateEngineParams = {
  language: 'zh-CN',
  person: 0,
  online: 1,
  extraParams: extraParam
};

语音引擎参数

名称类型只读可选说明
languagestring语种,当前支持中文、英文。中文推荐使用“zh-CN”格式,兼容“zh_CN”格式。英文推荐使用“en-US”格式,兼容“en_US”格式。
onlinenumber模式。0为在线,目前不支持;1为离线,当前仅支持离线模式。
personnumber音色。中文:13为聆小珊女声音色(推荐使用13,同时支持0);21为凌飞哲男声音色(需下载)。英文:8为英语(美国)劳拉女声音色(需下载)。
extraParamsRecord<string, Object>- <‘style’, string> 风格。

可选,不设置时默认为“interaction-broadcast”,当前仅支持“interaction-broadcast”。interaction-broadcast:广播风格。

- <‘locate’, string> 区域信息。

可选,不设置时默认为“CN”,当前仅支持“CN”。CN:中国。

- <‘name’, string> 引擎名称。

可选,引擎名称,不可以是随机数,不设置时默认为空,当前支持多应用、多实例,同一个设备上所有应用一共最多支持3个实例。

- <‘isBackStage’, boolean> 是否支持后台播报。

可选,不设置时默认不支持后台播报。设置’isBackStage’: true时,TTS支持后台播报。

第三步调用createEngine方法,创建引擎

textToSpeech.createEngine(initParamsInfo, (err: BusinessError, textToSpeechEngine: textToSpeech.TextToSpeechEngine) => {
  if (!err) {
    console.info('Succeeded in creating engine');
    // 接收创建引擎的实例
    ttsEngine = textToSpeechEngine;
  } else {
    console.error(`Failed to create engine. Code: ${err.code}, message: ${err.message}.`);
  }
});

第四步,我们创建一个语音播报监听的回调对象

// 设置speak的回调信息
let speakListener: textToSpeech.SpeakListener = {
  // 开始播报回调
  onStart(requestId: string, response: textToSpeech.StartResponse) {
    console.info(`onStart, requestId: ${requestId} response: ${JSON.stringify(response)}`);
  },
  // 合成完成及播报完成回调
  onComplete(requestId: string, response: textToSpeech.CompleteResponse) {
    console.info(`onComplete, requestId: ${requestId} response: ${JSON.stringify(response)}`);
  },
  // 停止播报回调
  onStop(requestId: string, response: textToSpeech.StopResponse) {
    console.info(`onStop, requestId: ${requestId} response: ${JSON.stringify(response)}`);
  },
  // 返回音频流
  onData(requestId: string, audio: ArrayBuffer, response: textToSpeech.SynthesisResponse) {
    console.info(`onData, requestId: ${requestId} sequence: ${JSON.stringify(response)} audio: ${JSON.stringify(audio)}`);
  },
  // 错误回调
  onError(requestId: string, errorCode: number, errorMessage: string) {
    console.error(`onError, requestId: ${requestId} errorCode: ${errorCode} errorMessage: ${errorMessage}`);
  }
};

第五步 设置回调,播报参数,调用播报功能

// 设置回调
ttsEngine.setListener(speakListener);
let originalText: string = 'Hello HarmonyOS';
// 设置播报相关参数
let extraParam: Record<string, Object> = {"queueMode": 0, "speed": 1, "volume": 2, "pitch": 1, "languageContext": 'zh-CN',  
"audioType": "pcm", "soundChannel": 3, "playType": 1 };
let speakParams: textToSpeech.SpeakParams = {
  requestId: '123456', // requestId在同一实例内仅能用一次,请勿重复设置
  extraParams: extraParam
};
// 调用播报方法
// 开发者可以通过修改speakParams主动设置播报策略
ttsEngine.speak(originalText, speakParams);

至此,我们整个文字转语音功能就完成了

以下为完成代码示例,代码可以直接复制运行

import { textToSpeech } from '@kit.CoreSpeechKit';
import { BusinessError } from '@kit.BasicServicesKit';


let extraParam: Record<string, Object> = {"style": 'interaction-broadcast', "locate": 'CN', "name": 'EngineName'};
let ttsEngine: textToSpeech.TextToSpeechEngine;
// 设置创建引擎参数

let initParamsInfo: textToSpeech.CreateEngineParams = {
  language: 'zh-CN',
  person: 0,
  online: 1,
  extraParams: extraParam
};

textToSpeech.createEngine(initParamsInfo, (err: BusinessError, textToSpeechEngine: textToSpeech.TextToSpeechEngine) => {
  if (!err) {
    console.info('Succeeded in creating engine');
    // 接收创建引擎的实例
    ttsEngine = textToSpeechEngine;
  } else {
    console.error(`Failed to create engine. Code: ${err.code}, message: ${err.message}.`);
  }
});

// 设置speak的回调信息
let speakListener: textToSpeech.SpeakListener = {
  // 开始播报回调
  onStart(requestId: string, response: textToSpeech.StartResponse) {
    console.info(`onStart, requestId: ${requestId} response: ${JSON.stringify(response)}`);
  },
  // 合成完成及播报完成回调
  onComplete(requestId: string, response: textToSpeech.CompleteResponse) {
    console.info(`onComplete, requestId: ${requestId} response: ${JSON.stringify(response)}`);
  },
  // 停止播报回调
  onStop(requestId: string, response: textToSpeech.StopResponse) {
    console.info(`onStop, requestId: ${requestId} response: ${JSON.stringify(response)}`);
  },
  // 返回音频流
  onData(requestId: string, audio: ArrayBuffer, response: textToSpeech.SynthesisResponse) {
    console.info(`onData, requestId: ${requestId} sequence: ${JSON.stringify(response)} audio: ${JSON.stringify(audio)}`);
  },
  // 错误回调
  onError(requestId: string, errorCode: number, errorMessage: string) {
    console.error(`onError, requestId: ${requestId} errorCode: ${errorCode} errorMessage: ${errorMessage}`);
  }
};
let originalText: string = '恭喜啊,你已经完成了文字转语音的功能';
// 设置播报相关参数

let speakParams: textToSpeech.SpeakParams = {
  requestId: '123456', // requestId在同一实例内仅能用一次,请勿重复设置
  extraParams: extraParam
};

@Entry
@Component
struct Index{

  build() {
    Column(){
      Button("播放").onClick(()=>{
        ttsEngine.setListener(speakListener);
        ttsEngine.speak(originalText, speakParams);
      })
    }
  }
}

欢迎大家跟我一起学习鸿蒙开发知识,加入我的班级,参与HarmonyOS赋能资源丰富度建设(第四期)-夏文强,获得HarmonyOS应用开发者认证 每月对前200名学员进行激励,活动期间共计激励1000名

华为开发者学堂

您可能感兴趣的与本文相关的镜像

GPT-SoVITS

GPT-SoVITS

AI应用

GPT-SoVITS 是一个开源的文本到语音(TTS)和语音转换模型,它结合了 GPT 的生成能力和 SoVITS 的语音转换技术。该项目以其强大的声音克隆能力而闻名,仅需少量语音样本(如5秒)即可实现高质量的即时语音合成,也可通过更长的音频(如1分钟)进行微调以获得更逼真的效果

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

夏文强

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

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

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

打赏作者

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

抵扣说明:

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

余额充值