Core Speech Kit(基础语音服务)

news2025/3/12 20:15:07

文章目录

    • 一、Core Speech Kit简介
      • 场景介绍
      • 约束与限制
    • 二、文本转语音
      • 1. 场景介绍
      • 2. 约束与限制
      • 3. 开发步骤
      • 4. 设置播报策略
        • 设置数字播报策略
        • 插入静音停顿
        • 指定汉字发音
      • 5. 开发实例
    • 三、语音识别
      • 约束与限制
      • 开发步骤
      • 开发实例

在这里插入图片描述
在这里插入图片描述


在这里插入图片描述

一、Core Speech Kit简介

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

场景介绍

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

约束与限制

AI能力 约束
文本转语音 1.支持的语种类型:中文。(简体中文、繁体中文、中文语境下的英文) 2. 支持的音色类型:聆小珊女声音色。3. 文本长度:不超过10000字符。
语音识别 1. 支持的语种类型:中文普通话。2. 支持的模型类型:离线。3. 语音时长:短语音模式不超过60s,长语音模式不超过8h。

在这里插入图片描述

二、文本转语音

Core Speech Kit支持将一篇不超过10000字符的中文文本(简体中文、繁体中文、数字、中文语境下的英文)合成为语音,并以聆小珊女声音色中文播报。

开发者可对播报的策略进行设置,包括单词播报、数字播报、静音停顿、汉字发音策略。

1. 场景介绍

手机/平板等设备在无网状态下,系统应用无障碍(屏幕朗读)接入文本转语音能力,为视障人士或不方便阅读场景提供播报能力。

2. 约束与限制

该能力当前不支持模拟器。

3. 开发步骤

  1. 在使用文本转语音时,将实现文本转语音相关的类添加至工程。
import {
    textToSpeech } from '@kit.CoreSpeechKit';
import {
    BusinessError } from '@kit.BasicServicesKit';
  1. 调用createEngine接口,创建textToSpeechEngine实例。
    createEngine接口提供了两种调用形式,当前以其中一种作为示例,其他方式可参考API参考。
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
};

// 调用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}.`);
  }
});
  1. 得到TextToSpeechEngine实例对象后,实例化SpeakParams对象、SpeakListener对象,并传入待合成及播报的文本originalText,调用speak接口进行播报。
// 设置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);
  1. (可选)当需要停止合成及播报时,可调用stop接口。
ttsEngine.stop();
  1. (可选)当需要查询文本转语音服务是否处于忙碌状态时,可调用isBusy接口。
ttsEngine.isBusy();
  1. (可选)当需要查询支持的语种音色信息时,可调用listVoices接口。
    listVoices接口提供了两种调用形式,当前以其中一种作为示例,其他方式可参考API参考。
// 在组件中声明并初始化字符串voiceInfo
@State voiceInfo: string = "";

// 设置查询相关参数
let voicesQuery: textToSpeech.VoiceQuery = {
   
  requestId: '12345678', // requestId在同一实例内仅能用一次,请勿重复设置
  online: 1
};
// 调用listVoices方法,以callback返回
ttsEngine.listVoices(voicesQuery, (err: BusinessError, voiceInfo: textToSpeech.VoiceInfo[]) => {
   
  if (!err) {
   
    // 接收目前支持的语种音色等信息
    this.voiceInfo = JSON.stringify(voiceInfo);
    console.info(`Succeeded in listing voices, voiceInfo is ${
   this.voiceInfo}`);
  } else {
   
    console.error(`Failed to list voices. Code: ${
   err.code}, message: ${
   err.message}`);
  }
});

4. 设置播报策略

由于不同场景下,模型自动判断所选择的播报策略可能与实际需求不同,此章节提供对于播报策略进行主动设置的方法。

说明
以下取值说明均为有效取值,若所使用的数值在有效取值之外则播报结果可能与预期不符,并产生错误的播报结果。

文本格式:[hN] (N=0/1/2)

N取值说明:

取值 说明
0 智能判断单词播放方式。默认值为0。
1 逐个字母进行播报。
2 以单词方式进行播报。

文本示例:

"hello[h1] world"

hello使用单词发音,world及后续单词将会逐个字母进行发音。

设置数字播报策略

格式:[nN] (N=0/1/2)

取值 说明
0 智能判断数字处理策略。默认值为0。
1 作为号码逐个数字播报。
2 作为数值播报。超过18位数字不支持,自动按逐个数字进行播报。

文本示例:

"[n2]123[n1]456[n0]"

其中,123将会按照数值播报,456则会按照号码播报,而后的文本中的数字,均会自动判断。

插入静音停顿

格式:[pN]

描述:N为无符号整数,单位为ms。

文本示例:

"你好[RZer]阅读者"

该句播报时,将会在“你好”后插入500ms的静音停顿。

指定汉字发音

汉字声调用后接一位数字1~5分别表示阴平、阳平、上声、去声和轻声5个声调。

格式:[=MN]

描述:M表示拼音,N表示声调。

取值 说明
1 阴平
2 阳平
3 上声
4 去声
5 轻声

文本示例:

"着[=zhuo2]手"

“着”字将读作“zhuó”。

5. 开发实例

点击按钮,播报一段文本

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

let ttsEngine: textToSpeech.TextToSpeechEngine;
@Entry
@Component
struct Index {
   
  @State createCount: number = 0;
  @State result: boolean = false;
  @State voiceInfo: string = "";
  @State text: string = "";
  @State textContent: string = "";
  @State utteranceId: string = "123456";
  @State originalText: string = "\n\t\t千里之行始于足下;\n\t\t" +
    "生命在于运动。\n\t\t";
  @State illegalText: string = "";

  build() {
   
    Column() {
   
      Scroll() {
   
        Column() {
   
          TextArea({
    placeholder: 'Please enter tts original text', text: `${
   this.originalText}` })
            .margin(20)
            .focusable(false)
            .border({
    width: 5, color: 0x317AE7, radius: 10, style: BorderStyle.Dotted })
            .onChange((value: string) => {
   
              this.originalText = value;
              console.info(`original text: ${
   this.originalText}`);
            })

          Button() {
   
            Text("CreateEngineByCallback")
              .fontColor(Color.White)
              .fontSize(20)
          }
          .type(ButtonType.Capsule)
          .backgroundColor("#0x317AE7")
          .width("80%")
          .height(50)
          .margin(10)
          .onClick(() => {
   
            this.createCount++;
            console.info(`CreateTtsEngine:createCount:${
   this.createCount}`);
            this.createByCallback();
          })

          Button() {
   
            Text("speak")
              .fontColor(Color.White)
              .fontSize(20)
          }
          .type(ButtonType.Capsule)
          .backgroundColor("#0x317AE7")
          .width("80%")
          .height(50)
          .margin(10)
          .onClick(() => {
   
            this.createCount++;
            this.speak();
          })

          Button() {
   
            Text("listVoicesCallback")
              .fontColor(Color.White)
              .fontSize(20)
          }
          .type(ButtonType.Capsule)
          .backgroundColor("#0x317AE7")
          .width("80%")
          .<

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2311614.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

配置 Thunderbird 以使用 QQ 邮箱

配置 Thunderbird 以使用 QQ 邮箱 本片文章的操作系统为 windws 10 &#xff0c;thunder bird 客户端版本为 128.7.1esr(64位)。注意到其他文章的图片中 thunder bird 的 ui 界面和我这个不一样&#xff0c;导致看起来不太方便&#xff0c;所以这里写一篇博客。不同版本的 thu…

如何使用MyBatis进行多表查询

前言 在实际开发中&#xff0c;对数据库的操作通常会涉及多张表&#xff0c;MyBatis提供了关联映射&#xff0c;这些关联映射可以很好地处理表与表&#xff0c;对象与对象之间的的关联关系。 一对一查询 步骤&#xff1a; 先确定表的一对一关系确定好实体类&#xff0c;添加关…

第六课:数据存储三剑客:CSV/JSON/MySQL

在Python的数据存储与处理领域&#xff0c;CSV、JSON和MySQL被广大开发者誉为“数据存储三剑客”。它们各自在不同的场景下发挥着重要作用&#xff0c;无论是简单的数据交换、轻量级的数据存储&#xff0c;还是复杂的关系型数据库管理&#xff0c;都能找到它们的身影。本文将详…

Python通过SSH隧道访问数据库

本文介绍通过sshtunnel类库建立SSH隧道&#xff0c;使用paramiko通过SSH来访问数据库。 实现了两种建立SSH方式&#xff1a;公私钥验证、密码验证。 公私钥可读本地&#xff0c;也可读取Aws S3上的私钥文件。 本质上就是在本机建立SSH隧道&#xff0c;然后将访问DB转发到本地SS…

Aws batch task 无法拉取ECR 镜像unable to pull secrets or registry auth 问题排查

AWS batch task使用了自定义镜像&#xff0c;在提作业后出现错误 具体错误是ResourceInitializationError: unable to pull secrets or registry auth: The task cannot pull registry auth from Amazon ECR: There is a connection issue between the task and Amazon ECR. C…

立即释放 Mac 空间!Duplicate File Finder 8 重复文件高速清理工具

Duplicate File Finder 专业的 Mac 重复文件清理工具。查找并删除重复的文件、文件夹&#xff0c;甚至相似的照片。 不要让无用的文件占用磁盘上的宝贵空间。 整理你的 Mac。用最好的重复文件查找器来管理你的文件集合。 扫描任何磁盘或文件夹 主文件夹、照片/音乐库、外部磁…

快速掌握EasyOCR应用实战指南

EasyOCR 是一个开源的、支持多语言&#xff08;28种&#xff09;和多文档格式&#xff08;PDF/PNG/JPG/TIFF等&#xff09;的 OCR&#xff08;光学字符识别&#xff09;工具库&#xff0c;由 Hugging Face 团队维护。其目标是简化 OCR 的开发流程&#xff0c;提供易用、高性能的…

ubuntu22.04本地部署OpenWebUI

一、简介 Open WebUI 是一个可扩展、功能丰富且用户友好的自托管 AI 平台&#xff0c;旨在完全离线运行。它支持各种 LLM 运行器&#xff0c;如 Ollama 和 OpenAI 兼容的 API&#xff0c;并内置了 RAG 推理引擎&#xff0c;使其成为强大的 AI 部署解决方案。 二、安装 方法 …

JavaScript(最后一个元素的索引就是数组的长度减 1)array.length - 1

在不同的编程语言中&#xff0c;表示数组中最后一个元素的方法略有不同&#xff0c;但基本思路都是利用数组的长度或索引来实现。 以下是一些常见编程语言中获取数组最后一个元素的方法&#xff1a; 1. JavaScript: 使用 array.length - 1 索引: 这是最常见和传统的方法。Java…

【Linux系统编程】初识系统编程

目录 一、什么是系统编程1. 系统编程的定义2. 系统编程的特点3. 系统编程的应用领域4. 系统编程的核心概念5. 系统编程的工具和技术 二、操作系统四大基本功能1. 进程管理&#xff08;Process Management&#xff09;2. 内存管理&#xff08;Memory Management&#xff09;3. 文…

Python-列表和元组

列表 列表是什么, 元组是什么 编程中, 经常需要使用变量, 来保存/表示数据. 如果代码中需要表示的数据个数比较少, 我们直接创建多个变量即可. 但是有的时候, 代码中需要表示的数据特别多, 甚至也不知道要表示多少个数据. 这个时候, 就需要用到列表. 列表是一种让程序猿在代…

ISA-95(S95)标准详解

目录 1. 什么是ISA-95&#xff1f; 2. 为什么需要ISA-95&#xff1f; 3. ISA-95模型结构 3.1 功能层次&#xff08;Purdue CIM模型&#xff09; 3.2 信息流模型 3.3 控制功能模型 3.4 生产活动定义&#xff08;Part 3&#xff09; 4. ISA-95与ISA-88&#xff08;S88&am…

透视京东物流财报:一个长期主义的产业样本

“企业的使命不是预测未来&#xff0c;而是创造未来。但创造的前提是理解什么值得坚守百年。” 从某种角度来说&#xff0c;京东物流恰在成为当下国内研究长期主义的一个样本。这些亮眼的财报数据背后&#xff0c;对应的不仅是向上的业务增长本身&#xff0c;其中更需要被看见…

时序数据库 TDengine 化工新签约:存储降本一半,查询提速十倍

化工行业在数字化转型过程中面临数据接入复杂、实时性要求高、系统集成难度大等诸多挑战。福州力川数码科技有限公司科技依托深厚的行业积累&#xff0c;精准聚焦行业痛点&#xff0c;并携手 TDengine 提供高效解决方案。通过应用 TDengine&#xff0c;力川科技助力化工企业实现…

Networking Based ISAC Hardware Testbed and Performance Evaluation

文章目录 Applications and Challenges of Networked SensingCooperation Mechanism in Networked SensingChallenges and Key Enabling Technologies 5G NR Frame Structure Based ISAC ApproachSignals Available for Radio SensingMulti-Dimensiona Resource Optimization S…

【音视频】ffplay简单过滤器

一、ffplay简单过滤器 视频旋转&#xff1a;借助transpose滤镜 ffplay -i 1.mp4 -vf transpose1这里选择不同的数字是不同的方向&#xff1a; 视频翻转&#xff1a;借助hflip/vflip实现水平和垂直翻转&#xff1a; 水平翻转 ffplay 1.mp4 -vf hflip垂直翻转 ffplay 1.mp4 …

力扣HOT100之哈希:1. 两数之和

这道题之前刷代码随想录的时候已经刷过好几遍了&#xff0c;看到就直接秒了。这道题主要是通过unordered_map<int, int>来建立哈希表&#xff0c;其中键用来保存向量中的元素&#xff0c;而对应的值则为元素的下标。遍历整个向量&#xff0c;当遍历到nums[i]时&#xff0…

TON基金会确认冠名赞助2025香港Web3嘉年华,并将于4月8日重磅呈现“TON生态日”

近日&#xff0c;由万向区块链实验室与HashKey Group联合推出的Web3年度盛典——2025香港Web3嘉年华正式宣布&#xff0c;TON基金会确认成为本届嘉年华的冠名赞助商&#xff0c;并将于4月8日在主会场特别举办“TON生态日”专题Side Event&#xff0c;集中展现TON生态的最新技术…

Raspberry pi4 realsense图像发送和自动启动服务

测试realsense安装&#xff1a; import pyrealsense2 as rs import numpy as np import cv2def main():# 配置RealSense管道pipeline rs.pipeline()config rs.config()# 启用RGB和彩色深度流config.enable_stream(rs.stream.color, 640, 480, rs.format.bgr8, 30)config.ena…

Git - 补充工作中常用的一些命令

Git - 补充工作中常用的一些命令 1 一些场景1.1 场景11.2 场景21.3 场景31.4 场景41.5 场景51.6 场景61.7 场景71.8 场景81.9 场景91.10 场景101.11 场景111.12 场景121.13 场景131.14 场景141.15 场景15 2 git cherry-pick \<commit-hash\> 和 git checkout branch \-\-…