HarmonyOS NEXT AI基础语音服务-文章播报

简介: 这是一篇关于基于AI文字转语音(TTS)服务的案例解析,展示了如何通过 `textToSpeech` 模块实现语音播报功能。代码中定义了一个名为 `CoreSpeechKit` 的组件,包含文本内容、TTS引擎初始化、播放控制及界面构建等功能。核心步骤包括引入必要模块、定义组件生命周期方法(如 `aboutToAppear` 和 `aboutToDisappear`)、设置播放逻辑以及构建UI界面。此案例适用于学习文字转语音技术的实际应用与开发流程。

案例描述

这是一个基于AI基础语音服务实现的文字语音播报案例
在这里插入图片描述

实现步骤:

1. 引入必要的模块

引入 textToSpeechpromptAction 模块,分别用于文字转语音和提示信息展示。

  import {
    textToSpeech } from '@kit.CoreSpeechKit'
  import {
    promptAction } from '@kit.ArkUI'

说明:textToSpeech 模块提供了文字转语音的功能,promptAction 模块用于在界面上显示提示信息。

2. 定义组件

使用 @Entry@ComponentV2 装饰器定义一个名为 CoreSpeechKit 的组件。

  @Entry
  @ComponentV2
  struct CoreSpeechKit {
   
    // 待播报的文本内容
    text: string = `
        北纬45度的三月,时光在这里打了个温柔的结。松花江畔的晨雾裹着细雪,将每根枝条都雕琢成剔透的琉璃,冰晶在枝头堆叠出千重瓣的玉兰花,风穿过枝桠时簌簌抖落的不是雪粒,分明是星辰坠入人间的碎屑。
        而此时江南的杏花正枕着暖风酿蜜,绯云般的花影漫过白墙黛瓦,连空气都沁着微醺的甜。季节的调色师悄悄把颜料盘一分为二——北国仍执着地续写冬的尾章,用冰棱作笔,在窗棂勾勒霜花;南疆已迫不及待地翻开春的扉页,让雨燕衔着柳色掠过水墨长巷。
        这相隔三千里的温差,在晨昏线两端织就两幅绸缎:北方是银丝绣的素锦,凛冽里裹着未尽的絮语;南方是蚕娘染的软罗,温润中漾开初生的呢喃。当哈尔滨的树挂迎着朝阳融化第一滴璀璨,杭州的玉兰恰好抖落肩头第三片月光,原来春天正踏着经纬线,把料峭与暄暖谱成天地间最动人的复调。
    `
    // 文字转语音引擎实例
    ttsEngine?: textToSpeech.TextToSpeechEngine

    // 本地状态,用于标记是否正在播放
    @Local isPlaying: boolean = false

    // 初始化文字转语音引擎
    async initTextToSpeechEngine() {
   
      if (canIUse('SystemCapability.AI.TextToSpeech')) {
   
        const params: textToSpeech.CreateEngineParams = {
   
          language: 'zh-CN',
          person: 0,
          online: 1
        }
        this.ttsEngine = await textToSpeech.createEngine(params)
      }
    }

    // 组件即将显示时调用
    aboutToAppear(): void {
   
      this.initTextToSpeechEngine()
    }

    // 组件即将消失时调用
    aboutToDisappear(): void {
   
      if (canIUse('SystemCapability.AI.TextToSpeech')) {
   
        this.ttsEngine?.stop()
        this.ttsEngine?.shutdown()
      }
    }

    // 播放语音
    play() {
   
      if (canIUse('SystemCapability.AI.TextToSpeech')) {
   
        if (this.ttsEngine?.isBusy()) {
   
          return promptAction.showToast({
    message: '正在播报...' })
        }
        const params: textToSpeech.SpeakParams = {
   
          requestId: '10000'
        }
        this.ttsEngine?.speak(this.text, params)
        this.isPlaying = true
      }
    }

    // 构建组件界面
    build() {
   
      Stack({
    alignContent: Alignment.BottomEnd }) {
   
        List() {
   
          ListItem() {
   
            Text(this.text)
              .lineHeight(32)
          }
        }
        .padding({
    left: 15, right: 15 })
        .height('100%')
        .width('100%')

        Row() {
   
          Image(this.isPlaying ? $r('sys.media.AI_playing') : $r('sys.media.AI_play'))
            .width(24)
            .onClick(() => this.play())
        }
        .borderRadius(24)
        .shadow({
   
          color: Color.Gray,
          offsetX: 5,
          offsetY: 5,
          radius: 15
        })
        .width(48)
        .aspectRatio(1)
        .justifyContent(FlexAlign.Center)
        .margin({
    right: 50, bottom: 50 })
      }
      .height('100%')
      .width('100%')
    }
  }

说明:

  • text 存储待播报的文本内容。
  • ttsEngine 是文字转语音引擎的实例。
  • isPlaying 用于标记是否正在播放语音。
  • initTextToSpeechEngine 方法用于初始化文字转语音引擎。
  • aboutToAppear 方法在组件即将显示时调用,初始化引擎。
  • aboutToDisappear 方法在组件即将消失时调用,停止并关闭引擎。
  • play 方法用于播放语音,若引擎正在忙碌则显示提示信息。
  • build 方法构建组件的界面,包括显示文本的列表和播放按钮。

总结梳理:

核心点

  • 使用 textToSpeech 模块实现文字转语音功能。
  • 在组件生命周期方法中初始化和关闭引擎。
  • 通过 isPlaying 状态控制播放按钮的显示。

    完整代码

    import {
          textToSpeech } from '@kit.CoreSpeechKit'
    import {
          promptAction } from '@kit.ArkUI'
    
    @Entry
    @ComponentV2
    struct CoreSpeechKit {
         
    text: string = `
        北纬45度的三月,时光在这里打了个温柔的结。松花江畔的晨雾裹着细雪,将每根枝条都雕琢成剔透的琉璃,冰晶在枝头堆叠出千重瓣的玉兰花,风穿过枝桠时簌簌抖落的不是雪粒,分明是星辰坠入人间的碎屑。
        而此时江南的杏花正枕着暖风酿蜜,绯云般的花影漫过白墙黛瓦,连空气都沁着微醺的甜。季节的调色师悄悄把颜料盘一分为二——北国仍执着地续写冬的尾章,用冰棱作笔,在窗棂勾勒霜花;南疆已迫不及待地翻开春的扉页,让雨燕衔着柳色掠过水墨长巷。
        这相隔三千里的温差,在晨昏线两端织就两幅绸缎:北方是银丝绣的素锦,凛冽里裹着未尽的絮语;南方是蚕娘染的软罗,温润中漾开初生的呢喃。当哈尔滨的树挂迎着朝阳融化第一滴璀璨,杭州的玉兰恰好抖落肩头第三片月光,原来春天正踏着经纬线,把料峭与暄暖谱成天地间最动人的复调。
    `
    ttsEngine?: textToSpeech.TextToSpeechEngine
    
    @Local isPlaying: boolean = false
    
    async initTextToSpeechEngine() {
         
      if (canIUse('SystemCapability.AI.TextToSpeech')) {
         
        const params: textToSpeech.CreateEngineParams = {
         
          language: 'zh-CN',
          person: 0,
          online: 1
        }
        this.ttsEngine = await textToSpeech.createEngine(params)
      }
    }
    
    aboutToAppear(): void {
         
      this.initTextToSpeechEngine()
    }
    
    aboutToDisappear(): void {
         
      if (canIUse('SystemCapability.AI.TextToSpeech')) {
         
        this.ttsEngine?.stop()
        this.ttsEngine?.shutdown()
      }
    }
    
    play() {
         
      if (canIUse('SystemCapability.AI.TextToSpeech')) {
         
        if (this.ttsEngine?.isBusy()) {
         
          return promptAction.showToast({
          message: '正在播报...' })
        }
        const params: textToSpeech.SpeakParams = {
         
          requestId: '10000'
        }
        this.ttsEngine?.speak(this.text, params)
        this.isPlaying = true
      }
    }
    
    build() {
         
      Stack({
          alignContent: Alignment.BottomEnd }) {
         
        List() {
         
          ListItem() {
         
            Text(this.text)
              .lineHeight(32)
          }
        }
        .padding({
          left: 15, right: 15 })
        .height('100%')
        .width('100%')
    
        Row() {
         
          Image(this.isPlaying ? $r('sys.media.AI_playing') : $r('sys.media.AI_play'))
            .width(24)
            .onClick(() => this.play())
        }
        .borderRadius(24)
        .shadow({
         
          color: Color.Gray,
          offsetX: 5,
          offsetY: 5,
          radius: 15
        })
        .width(48)
        .aspectRatio(1)
        .justifyContent(FlexAlign.Center)
        .margin({
          right: 50, bottom: 50 })
      }
      .height('100%')
      .width('100%')
    }
    }
    
相关文章
|
10天前
|
人工智能 自然语言处理 开发者
HarmonyOS NEXT~鸿蒙开发利器:CodeGenie AI辅助编程工具全面解析
鸿蒙开发迎来新利器!DevEco CodeGenie 是华为推出的 AI 辅助编程工具,专为 HarmonyOS NEXT 开发者设计。它具备智能代码生成(支持 ArkTS 和 C++)、精准知识问答以及万能卡片生成三大核心功能,大幅提升编码效率。通过与 DeepSeek 深度整合,CodeGenie 实现流畅的问答体验,帮助开发者解决技术难题。无论是新手还是资深开发者,都能从中受益,享受更智能高效的开发过程。快来体验吧!
52 5
|
1月前
|
人工智能 JavaScript API
【HarmonyOS NEXT+AI】问答03:找不到DevEco Studio Cangjie Plugin下载链接?
本文针对学员在“HarmonyOS NEXT+AI大模型打造智能助手APP(仓颉版)”课程中提出的问题进行解答:为何无法在华为开发者社区官网找到DevEco Studio Cangjie Plugin下载链接。文中详细介绍了Cangjie Plugin的功能及获取方式,包括STS和Canary版本的申请流程,并提供了学习仓颉编程语言的资源与建议。对于普通开发者,STS版本是当前首选;同时,通过课程与官方教程,可快速掌握仓颉语言核心语法及API,助力开发HarmonyOS NEXT AI智能助手应用。
55 3
【HarmonyOS NEXT+AI】问答03:找不到DevEco Studio Cangjie Plugin下载链接?
|
11天前
|
存储 人工智能 测试技术
HarmonyOS Next~HarmonyOS应用测试全流程解析:从一级类目上架到二级类目专项测试
本文深入解析HarmonyOS应用测试全流程,涵盖从一级类目通用测试到二级类目专项测试的技术方案。针对兼容性、性能、安全测试及分布式能力验证等关键环节,提供详细实践指导与代码示例。同时,结合典型案例分析常见问题及优化策略,帮助开发者满足华为严苛的质量标准,顺利上架应用。文章强调测试在开发中的核心地位,助力打造高品质HarmonyOS应用。
38 2
|
21天前
|
安全 Linux 测试技术
对鸿蒙 Next 系统“成熟论”的深度剖析-优雅草卓伊凡
对鸿蒙 Next 系统“成熟论”的深度剖析-优雅草卓伊凡
53 10
对鸿蒙 Next 系统“成熟论”的深度剖析-优雅草卓伊凡
|
21天前
|
人工智能 安全 物联网
解析 OpenHarmony、HarmonyOS 与 HarmonyOS Next:优雅草卓伊凡的观点
解析 OpenHarmony、HarmonyOS 与 HarmonyOS Next:优雅草卓伊凡的观点
65 4
解析 OpenHarmony、HarmonyOS 与 HarmonyOS Next:优雅草卓伊凡的观点
|
20天前
|
人工智能 JavaScript 前端开发
【HarmonyOS NEXT+AI】问答04:仓颉编程语言适合毕业设计吗?
本文探讨了仓颉编程语言是否适合用于毕业设计的问题。仓颉编程语言虽小众,但具备独特性与创新性,可开发鸿蒙应用及AI大模型应用,具有前瞻性。其语法与主流语言类似,易于上手,且有丰富课程支持学习。若时间充裕并结合相关主题,使用仓颉语言能让毕业设计在答辩中脱颖而出。同时,文章还介绍了毕业设计答辩的时间安排,帮助学生合理规划。
39 3
【HarmonyOS NEXT+AI】问答04:仓颉编程语言适合毕业设计吗?
|
18天前
|
网络协议 Java 开发工具
全平台开源即时通讯IM框架MobileIMSDK:7端+TCP/UDP/WebSocket协议,鸿蒙NEXT端已发布,5.7K Stars
全平台开源即时通讯IM框架MobileIMSDK:7端+TCP/UDP/WebSocket协议,鸿蒙NEXT端已发布,5.7K Stars
65 1
|
12天前
|
开发框架 人工智能 大数据
HarmonyOS Next~HarmonyOS SDK应用服务:开发者的全新技术生态
本文深入解析了HarmonyOS SDK应用服务的技术架构与开发优势,涵盖其分布式服务框架、核心特性和开发流程。HarmonyOS凭借统一开发框架、高效跨设备协同及低延迟系统服务,为开发者提供全新技术生态。未来,随着生态完善,SDK将在智能设备场景支持、AI与大数据集成等方面持续演进,助力开发者释放创新潜力。
41 0
|
1月前
|
缓存 开发工具 开发者
鸿蒙NEXT开发App相关工具类(ArkTs)
这段代码展示了一个名为鸿蒙NEXT开发 `AppUtil` 的工具类,主要用于管理鸿蒙应用的上下文、窗口、状态栏、导航栏等配置。它提供了多种功能,例如设置灰阶模式、颜色模式、字体类型、屏幕亮度、窗口属性等,并支持获取应用包信息(如版本号、包名等)。该工具类需在 UIAbility 的 `onWindowStageCreate` 方法中初始化,以便缓存全局变量。代码由鸿蒙布道师编写,适用于鸿蒙系统应用开发,帮助开发者更便捷地管理和配置应用界面及系统属性。
鸿蒙NEXT开发App相关工具类(ArkTs)
|
25天前
|
安全 前端开发 Android开发
拥抱国产化:转转APP的鸿蒙NEXT端开发尝鲜之旅
本文将要分享的是转转APP在开发全新鸿蒙NEXT端所遇到的一些问题,对比了鸿蒙开发和 Android、iOS 的不同,总结了这次开发过程中的一些经验等等。希望能带给你启发。
41 0