色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

鴻蒙語音播報懶人“看”書新法到底如何實現?

電子工程師 ? 來源:HarmonyOS開發者 ? 作者:HarmonyOS開發者 ? 2021-05-20 16:41 ? 次閱讀

現代社會節奏較快,人們看書可能不僅僅只用眼睛,有時候也會用耳朵來“聽書”,語音播報由此誕生,并通過人工智能語音識別引擎實現。HarmonyOS基于華為智慧引擎(HUAWEI HiAI Engine)中的語音識別引擎,向開發者提供人工智能應用層API,該技術提供將文本轉換為語音并進行播報的能力,可應用于以下兩種場景:

·實時語音交互

生成音頻信息用于語音交互,例如與智能音箱手機智能助手的交互,后臺會將回答的信息以音頻方式進行語音播報。

·超長文本播報

用于小說、新聞等較長文本的自動朗讀。

本期我們就為大家帶來超長文本播報場景下的基于AI語音播報能力的Codelab。當用戶輸入相關文本內容時,點擊“語音播放”按鈕,程序即對文本進行播報并同步記錄語音播報的耗時時長,并呈現在頁面上,是不是能滿足計時“聽書”的需求呢?讓我們一起來看看吧。

首先,讓我們梳理一遍開發要點:

1)UI頁面的構建

2)語音播報接口調用

3)計時器的創建

4)線程間通信處理機制的使用

請注意,由于需要時刻進行觀察,在邏輯代碼實現中我們會穿插HiLog日志打印,下面我們會逐一指出。

在正式開始敲代碼之前,開發者們需要先下載安裝Huawei DevEco Studio,如果對這個流程不甚熟悉,可以參照官網的教程來操作。Huawei DevEco Studio安裝指南:

https://developer.harmonyos.com/cn/docs/documentation/doc-guides/software_install-0000001053582415

【注意】本次Codelab針對的是步驟拆解和重點講解,限于篇幅原因不會展示完整代碼,開發者們可在文末【閱讀原文】中獲取完整代碼哦~

我們打開Huawei DevEco Studio,選擇Phone中的Empty Feature Ability(Java)模板工程,本次Codelab我們將在該模板下完成。有如下操作:

1.我們將在entrysrcmain esourcesaselayoutability_main.xml中構建UI頁面;

2.我們在entrysrcmain esourcesasegraphic目錄下新建background_button.xml文件用于實現“語音播報”按鈕的樣式優化;

3.文中的邏輯代碼我們將在 entrysrcmainjavacomexampleailistenersliceMainAbilitySlice.java文件中實現;讓我們馬上開始。

25ba4904-b567-11eb-bf61-12bb97331649.png

1)UI界面構建

縱觀這個頁面,主要分為以下幾個部分:

·標題

即“AI語音播報”這幾個字,這里我們使用Text組件。

·文本輸入框

可供用戶輸入想要播報的文本內容,最大不超過100,000個字符。為了便于大家理解,這里我們已經給大家準備了一段文本,我們使用TextField組件來完成。

·播報按鈕

此處展示的文本是“語音播報”,使用的是Button組件。值得注意的是,這里需要優化按鈕樣式,如添加陰影及優化其為膠囊按鈕,讓按鈕更為醒目美觀。

如前面提到的,我們將在background_button.xml文件中優化按鈕樣式,通過color 設置按鈕背景顏色,通過radius的半徑實現圓角, 代碼如下:

《?xml version=“1.0” encoding=“utf-8”?》 《shape xmlns:ohos=“http://schemas.huawei.com/res/ohos” ohos:shape=“rectangle”》 《corners ohos:radius=“40”/》 《solid ohos:color=“#e9e9e9”/》 《/shape》

·計時文本

用于顯示“播報耗時:0 s”文本,同樣使用Text組件完成。

2)語音播報接口調用

構建完了頁面,我們來到今天的重頭戲之一,也就是使用AI語音播報能力開發程序。語音播報(Text to Speech,以下簡稱TTS),提供將文本轉換為語音并進行播報的能力。

·語音播報官網資料

https://developer.harmonyos.com/cn/docs/documentation/doc-guides/ai-tts-overview-0000001050724400

這里我們主要分三個部分實現,創建TTS客戶端、TTS客戶端的初始化和調用相關方法對文本進行播報。下面我們來詳細看看各個接口如何調用。

1. TTS客戶端創建

調用void create接口創建TTS客戶端。

private void initTtsEngine() { TtsClient.getInstance().create(this, ttsListener); }

2.TTS客戶端的初始化

當TTS客戶端創建成功,即eventType取值

TtsEvent.CREATE_TTS_CLIENT_SUCCESS時,進行TTS客戶端的初始化。

public void onEvent(int eventType, PacMap pacMap) { HiLog.info(LABEL_LOG, “onEvent.。?!保? // 定義TTS客戶端創建成功的回調函數 if (eventType == TtsEvent.CREATE_TTS_CLIENT_SUCCESS) { TtsParams ttsParams = new TtsParams(); ttsParams.setDeviceId(UUID.randomUUID().toString()); initItsResult = TtsClient.getInstance().init(ttsParams); } }

同時我們引入HiLog日志打印,便于觀察相關情況。

3.調用相關方法對文本進行播報

這里我們調用TtsClient.getInstance().speakText()方法對文本進行播報,同樣也引入HiLog日志打印用于觀察初始化是否成功。

private void readText(Component component) { if (initItsResult) { HiLog.info(LABEL_LOG, “initItsResult is true, speakText”); TtsClient.getInstance().speakText(infoText.getText(), null); } else { HiLog.error(LABEL_LOG, “initItsResult is false”); } }

3)計時器的創建

本Codelab將以秒為單位對AI語音播報速度進行計時,故而我們需要一個計時器。在HarmonyOS中,我們通過計時器Timer和計時器任務TimerTask類來實現。這里使用到的是構建和取消兩種方法,比較簡單。大家可以通過官網資料進一步了解。

·Timerhttps://developer.harmonyos.com/cn/docs/documentation/doc-references/timer-0000001054358579

·TimerTask

https://developer.harmonyos.com/cn/docs/documentation/doc-references/timertask-0000001054558601

同樣我們使用HiLog日志打印來觀察文本語音播報的開始和結束。

4)線程間通信處理機制的使用

接下來我們將提到本Codelab另外一個重頭戲——線程間通信處理機制的使用。在啟動應用時,系統會為該應用創建一個稱為“主線程”的執行線程。該線程隨著應用創建或消失,是應用的核心線程。具體到本Codelab,UI界面的顯示和更新等操作,就是更新播報耗時的界面,是在主線程上進行的,因此主線程也稱為UI線程。示例中分配的是9015,如圖所示:

然而在實際項目中,開發者可能面臨許多耗時的操作,比如說下載文件、查詢數據庫,具體到本Codelab,就是語音播報功能和計時器功能,這些復雜的操作會阻塞 UI線程,導致界面無響應,帶來非常不好的用戶體驗。

因此,我們需要將這些耗時操作放到子線程中,避免阻塞主線程,比如在示例中,我們把AI語音播報放在子線程9275中執行:

但同時,我們又需要把操作的結果數據反饋給UI線程,這個時候就必須引入線程間通信處理機制。因此,HarmonyOS 給Java應用開發提供了EventHandler機制,可以通過EventRunner創建新線程,將耗時的操作放到新線程上執行。這樣既不阻塞原來的線程,任務又可以得到合理的處理。

每一個EventHandler和指定的EventRunner所創建的新線程綁定,并且該新線程內部有一個事件隊列。EventHandler可以投遞指定的InnerEvent事件或Runnable任務到這個事件隊列。

EventRunner從事件隊列里循環地取出事件:

1)如果取出的事件是InnerEvent事件,將在EventRunner所在線程執行processEvent回調;

2)如果取出的事件是Runnable任務,將在EventRunner所在線程執行Runnable的run回調。

·線程間通信開發概述

https://developer.harmonyos.com/cn/docs/documentation/doc-guides/inter-thread-overview-0000000000038958

在本例中,開始發音的時候發送EVENT_MSG_TIME_COUNT事件,此時程序開始計時并更新UI頁面,示例代碼如下所示:

@Override public void onSpeechStart(String utteranceId) { // 開始計時 HiLog.info(LABEL_LOG, “onSpeechStart.。?!保? if (timer == null && timerTask == null) { timer = new Timer(); timerTask = new TimerTask() { public void run() { handler.sendEvent(EVENT_MSG_TIME_COUNT); } }; timer.schedule(timerTask, 0, 1000); } }

此時取出的事件是Runnable,需要將Runnable任務投遞到新的線程,在EventRunner所在線程執行Runnable的run回調,并按照優先級和延時進行處理,。這里是同步更新UI頁面,代碼如下所示:

private EventHandler handler = new EventHandler(EventRunner.current()) { @Override protected void processEvent(InnerEvent event) { switch (event.eventId) { case EVENT_MSG_TIME_COUNT: getUITaskDispatcher().delayDispatch(new Runnable() { @Override public void run() { time = time + 1; HiLog.info(LABEL_LOG, “播報耗時:” + Integer.toString(time) + “ s”); timeText.setText(“播報耗時:” + Integer.toString(time) + “ s”); } }, 0); break; default: break; } } };

至此,我們已經完成本次Codelab的所有關鍵步驟。

通過這個Codelab,大家可以學習到AI語音播報、線程間通信和計時器的使用方法。

編輯:jq

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • JAVA
    +關注

    關注

    19

    文章

    2970

    瀏覽量

    104805
  • AI
    AI
    +關注

    關注

    87

    文章

    30985

    瀏覽量

    269275
  • 語音播報
    +關注

    關注

    1

    文章

    28

    瀏覽量

    14546
  • 鴻蒙
    +關注

    關注

    57

    文章

    2362

    瀏覽量

    42881
  • HarmonyOS
    +關注

    關注

    79

    文章

    1977

    瀏覽量

    30254
  • OpenHarmony
    +關注

    關注

    25

    文章

    3724

    瀏覽量

    16366

原文標題:【Codelab】懶人“看”書新法—鴻蒙語音播報,到底如何實現?

文章出處:【微信號:HarmonyOS_Dev,微信公眾號:HarmonyOS開發者】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    云打印機基于唯創知音語音播報+TTS(語音合成)+離在線識別技術的五大語音方案

    AUTUMN前言當下打印機使用越來越廣泛,品種也日益增多,從企業到商家到用戶,不同的客戶群體都有不同的需求。就拿語音播報來說,早先的打印機只做簡單的文本打印功能,不帶語音播報提示,后來
    的頭像 發表于 12-31 17:34 ?74次閱讀
    云打印機基于唯創知音<b class='flag-5'>語音</b><b class='flag-5'>播報</b>+TTS(<b class='flag-5'>語音</b>合成)+離在線識別技術的五大<b class='flag-5'>語音</b>方案

    高效電梯語音播報:基于復旦微FM33LF016的DAC音頻方案

    目前,電梯語音播報常用的音頻輸出技術包括PWM(脈沖寬度調制)和DAC(數字-模擬轉換器)。相比PWM,DAC技術通過將數字音頻信號轉換為模擬信號,提供更高的音質和更低的失真度。無論是在嘈雜
    的頭像 發表于 12-27 16:33 ?57次閱讀
    高效電梯<b class='flag-5'>語音</b><b class='flag-5'>播報</b>:基于復旦微FM33LF016的DAC音頻方案

    Flash語音芯片豆漿機語音播報方案——NV128H平臺更換語音內容

    智能豆漿機迎合健康便捷需求,NV128H芯片提供語音播報,支持自主更新語音、大存儲流暢播報、高音質低功耗,具有寬廣供電、簡潔電路、多種音頻輸出及穩定數據保留等特性。
    的頭像 發表于 12-20 13:47 ?152次閱讀

    高性能語音播報芯片九芯NV256H優勢

    隨著科技的飛速發展,語音播報技術在各行各業中的應用越來越廣泛,從智能家居,家用家電,再到醫療器械、安防報警等,語音播報無處不在,也越來越受大眾的追捧;廣州九芯電子新推出了一款高性能芯片
    的頭像 發表于 12-12 11:45 ?130次閱讀
    高性能<b class='flag-5'>語音</b><b class='flag-5'>播報</b>芯片九芯NV256H優勢

    電子鎖語音芯片方案,低功耗語音播報ic,NV256H

    隨著科技的不斷發展,電子鎖已成為現代社會中,安全性和便利性并存的必備設備。如何為電子鎖行業增添智能化、人性化的功能已成為行業內的熱門話題。在這個迅速發展的市場中,廣州九芯電子推出了一款低功耗語音播報
    的頭像 發表于 12-06 01:01 ?115次閱讀
    電子鎖<b class='flag-5'>語音</b>芯片方案,低功耗<b class='flag-5'>語音</b><b class='flag-5'>播報</b>ic,NV256H

    N9300-S16語音芯片:提升電梯播報體驗,實現導航聲音播報提示

    隨著科技的不斷進步與人們日常生活緊密相關的電梯行業也迎來了智能化升級的新篇章。N9300語音芯片,作為這一變革中的重要一環,正以其卓越的性能和多樣化的功能,顯著提升著電梯播報體驗,讓每一次乘坐都變得
    的頭像 發表于 10-31 08:02 ?220次閱讀
    N9300-S16<b class='flag-5'>語音</b>芯片:提升電梯<b class='flag-5'>播報</b>體驗,<b class='flag-5'>實現</b>導航聲音<b class='flag-5'>播報</b>提示

    N9300-S16語音芯片:提升電梯播報體驗,實現導航聲音播報提示

    N9300語音芯片提升電梯播報體驗,支持多語言播報,音質純凈,控制靈活,廣泛應用于公共場所語音導航,推動智能化發展。
    的頭像 發表于 10-30 13:10 ?183次閱讀
    N9300-S16<b class='flag-5'>語音</b>芯片:提升電梯<b class='flag-5'>播報</b>體驗,<b class='flag-5'>實現</b>導航聲音<b class='flag-5'>播報</b>提示

    電動輪椅語音播報方案開發

    按鍵或旋鈕操作,用戶在使用過程中需要時刻關注顯示屏或指示燈來了解輪椅的狀態,這不僅增加了操作的復雜性,還可能導致安全隱患。為了提升用戶體驗,我們引入了WT588F02B-8S-B2語音播報方案,通過
    的頭像 發表于 10-15 15:27 ?194次閱讀

    輸入文字轉化語音

    一、介紹 基于鴻蒙Next模擬一個輸入用戶文字,轉化成語音播報效果二、場景需求 輔助功能:為視障人士提供幫助:將文字內容轉化為語音,使視覺障礙用戶能夠獲取信息。 教育與學習:語言學習:
    發表于 08-28 10:54

    收款機TTS語音芯片新方案:WT3000T8,雙語合成流暢,字庫解碼多樣!

    不同播報要求下語音占用大量資源空間的問題??梢?b class='flag-5'>實現低成本低功耗的文本轉語音,支持中英文兩種功能,實現播報
    的頭像 發表于 06-26 11:17 ?671次閱讀
    收款機TTS<b class='flag-5'>語音</b>芯片新方案:WT3000T8,雙語合成流暢,字庫解碼多樣!

    基于STM32單片機的語音播報體溫計設計

    語音播報體溫計系統包括溫度采集模塊,語音播放模塊,顯示模塊,其中核心 CPU采用單片機 STM32,STM32在電子行業運用廣泛。溫度采集模塊使用 MLX90614紅外傳感器采集體溫數據,語音
    的頭像 發表于 06-24 14:31 ?1447次閱讀
    基于STM32單片機的<b class='flag-5'>語音</b><b class='flag-5'>播報</b>體溫計設計

    鴻蒙開發就業前景到底怎么樣?

    鴻蒙, 作為華為自主研發的基于微內核的下一代操作系統,正在逐漸走進人們的視野 。隨著鴻蒙系統的不斷發展和完善,越來越多的人開始關注鴻蒙開發這一領域,想要了解學習鴻蒙開發的就業前景如何。
    發表于 05-09 17:37

    環境監測系統置入WT588F02B-8s語音芯片:實現智能語音播報,共創綠色生態環境

    隨著科技的飛速發展,環境監測系統已經成為守護綠水青山的重要工具。而在這個系統中,WT588F02B-8s語音芯片的加入,更為我們帶來了前所未有的智能語音播報體驗。今天,就讓我們一起探討一下這一創新設計的功能需求,優勢,及
    的頭像 發表于 05-09 10:12 ?326次閱讀
    環境監測系統置入WT588F02B-8s<b class='flag-5'>語音</b>芯片:<b class='flag-5'>實現</b>智能<b class='flag-5'>語音</b><b class='flag-5'>播報</b>,共創綠色生態環境

    基于唯創語音芯片的三大煙霧報警器語音方案

    在智能設備與物聯網(IoT)技術的飛速發展中,語音播報功能的重要性日益凸顯,已成為提升用戶體驗、實現人機交互的關鍵一環。本文將深入探討三種創新性語音
    的頭像 發表于 04-12 15:08 ?432次閱讀
    基于唯創<b class='flag-5'>語音</b>芯片的三大煙霧報警器<b class='flag-5'>語音</b>方案
    主站蜘蛛池模板: bl被教练啪到哭H玉势| 极品内射少妇精品无码视频| 恋夜影视列表免费安卓手机版| 一区二区三区高清视频| 看黄色片子| 超碰99热在线精品视频| 午夜深情在线观看免费| 精子射到丝袜上图| 99热这里只有精品| 文中字幕一区二区三区视频播放 | 色琪琪久久热在线| 国产一区二区不卡老阿姨| 中国大陆一级毛片免费| 琪琪的色原网站| 国产免费久久精品国产传媒| 在线观看亚洲AV无码每日更新| 欧美午夜理伦三级在线观看| 国产精品乱人无码伦AV在线A| 在线a亚洲视频| 肉奴隷 赤坂丽在线播放| 黑人干亚洲人| xxxx69动漫| 亚洲日本香蕉视频观看视频| 欧美疯狂做受xxxxx喷水| 国产免费久久爱久久啪| 8050午夜二级一片| 武汉美女洗澡| 欧美丰满少妇久久无码精品| 黄色大片久久| 被窝伦理电影午夜| 亚洲中文久久精品AV无码| 亲胸吻胸添奶头GIF动态图免费| 国产色青青视频在线观看| 99re久久热在线播放8| 亚洲国产在线视频中文字| 欧美成人无码视频午夜福利 | 国产高清在线观看视频| 69精品人妻一区二区三区蜜桃| 天美传媒色情原创精品| 久热在线这里只有精品7| 国产片MV在线观看|