91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

鴻蒙語音播報(bào)懶人“看”書新法到底如何實(shí)現(xiàn)?

電子工程師 ? 來源:HarmonyOS開發(fā)者 ? 作者:HarmonyOS開發(fā)者 ? 2021-05-20 16:41 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

·實(shí)時(shí)語音交互

生成音頻信息用于語音交互,例如與智能音箱手機(jī)智能助手的交互,后臺(tái)會(huì)將回答的信息以音頻方式進(jìn)行語音播報(bào)。

·超長文本播報(bào)

用于小說、新聞等較長文本的自動(dòng)朗讀。

本期我們就為大家?guī)沓L文本播報(bào)場(chǎng)景下的基于AI語音播報(bào)能力的Codelab。當(dāng)用戶輸入相關(guān)文本內(nèi)容時(shí),點(diǎn)擊“語音播放”按鈕,程序即對(duì)文本進(jìn)行播報(bào)并同步記錄語音播報(bào)的耗時(shí)時(shí)長,并呈現(xiàn)在頁面上,是不是能滿足計(jì)時(shí)“聽書”的需求呢?讓我們一起來看看吧。

首先,讓我們梳理一遍開發(fā)要點(diǎn):

1)UI頁面的構(gòu)建

2)語音播報(bào)接口調(diào)用

3)計(jì)時(shí)器的創(chuàng)建

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

請(qǐng)注意,由于需要時(shí)刻進(jìn)行觀察,在邏輯代碼實(shí)現(xiàn)中我們會(huì)穿插HiLog日志打印,下面我們會(huì)逐一指出。

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

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

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

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

1.我們將在entrysrcmain esourcesaselayoutability_main.xml中構(gòu)建UI頁面;

2.我們?cè)趀ntrysrcmain esourcesasegraphic目錄下新建background_button.xml文件用于實(shí)現(xiàn)“語音播報(bào)”按鈕的樣式優(yōu)化;

3.文中的邏輯代碼我們將在 entrysrcmainjavacomexampleailistenersliceMainAbilitySlice.java文件中實(shí)現(xiàn);讓我們馬上開始。

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

1)UI界面構(gòu)建

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

·標(biāo)題

即“AI語音播報(bào)”這幾個(gè)字,這里我們使用Text組件。

·文本輸入框

可供用戶輸入想要播報(bào)的文本內(nèi)容,最大不超過100,000個(gè)字符。為了便于大家理解,這里我們已經(jīng)給大家準(zhǔn)備了一段文本,我們使用TextField組件來完成。

·播報(bào)按鈕

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

如前面提到的,我們將在background_button.xml文件中優(yōu)化按鈕樣式,通過color 設(shè)置按鈕背景顏色,通過radius的半徑實(shí)現(xiàn)圓角, 代碼如下:

《?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》

·計(jì)時(shí)文本

用于顯示“播報(bào)耗時(shí):0 s”文本,同樣使用Text組件完成。

2)語音播報(bào)接口調(diào)用

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

·語音播報(bào)官網(wǎng)資料

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

這里我們主要分三個(gè)部分實(shí)現(xiàn),創(chuàng)建TTS客戶端、TTS客戶端的初始化和調(diào)用相關(guān)方法對(duì)文本進(jìn)行播報(bào)。下面我們來詳細(xì)看看各個(gè)接口如何調(diào)用。

1. TTS客戶端創(chuàng)建

調(diào)用void create接口創(chuàng)建TTS客戶端。

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

2.TTS客戶端的初始化

當(dāng)TTS客戶端創(chuàng)建成功,即eventType取值

TtsEvent.CREATE_TTS_CLIENT_SUCCESS時(shí),進(jìn)行TTS客戶端的初始化。

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

同時(shí)我們引入HiLog日志打印,便于觀察相關(guān)情況。

3.調(diào)用相關(guān)方法對(duì)文本進(jìn)行播報(bào)

這里我們調(diào)用TtsClient.getInstance().speakText()方法對(duì)文本進(jìn)行播報(bào),同樣也引入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)計(jì)時(shí)器的創(chuàng)建

本Codelab將以秒為單位對(duì)AI語音播報(bào)速度進(jìn)行計(jì)時(shí),故而我們需要一個(gè)計(jì)時(shí)器。在HarmonyOS中,我們通過計(jì)時(shí)器Timer和計(jì)時(shí)器任務(wù)TimerTask類來實(shí)現(xiàn)。這里使用到的是構(gòu)建和取消兩種方法,比較簡單。大家可以通過官網(wǎng)資料進(jìn)一步了解。

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

·TimerTask

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

同樣我們使用HiLog日志打印來觀察文本語音播報(bào)的開始和結(jié)束。

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

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

然而在實(shí)際項(xiàng)目中,開發(fā)者可能面臨許多耗時(shí)的操作,比如說下載文件、查詢數(shù)據(jù)庫,具體到本Codelab,就是語音播報(bào)功能和計(jì)時(shí)器功能,這些復(fù)雜的操作會(huì)阻塞 UI線程,導(dǎo)致界面無響應(yīng),帶來非常不好的用戶體驗(yàn)。

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

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

每一個(gè)EventHandler和指定的EventRunner所創(chuàng)建的新線程綁定,并且該新線程內(nèi)部有一個(gè)事件隊(duì)列。EventHandler可以投遞指定的InnerEvent事件或Runnable任務(wù)到這個(gè)事件隊(duì)列。

EventRunner從事件隊(duì)列里循環(huán)地取出事件:

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

2)如果取出的事件是Runnable任務(wù),將在EventRunner所在線程執(zhí)行Runnable的run回調(diào)。

·線程間通信開發(fā)概述

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

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

@Override public void onSpeechStart(String utteranceId) { // 開始計(jì)時(shí) 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); } }

此時(shí)取出的事件是Runnable,需要將Runnable任務(wù)投遞到新的線程,在EventRunner所在線程執(zhí)行Runnable的run回調(diào),并按照優(yōu)先級(jí)和延時(shí)進(jìn)行處理,。這里是同步更新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, “播報(bào)耗時(shí):” + Integer.toString(time) + “ s”); timeText.setText(“播報(bào)耗時(shí):” + Integer.toString(time) + “ s”); } }, 0); break; default: break; } } };

至此,我們已經(jīng)完成本次Codelab的所有關(guān)鍵步驟。

通過這個(gè)Codelab,大家可以學(xué)習(xí)到AI語音播報(bào)、線程間通信和計(jì)時(shí)器的使用方法。

編輯:jq

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • JAVA
    +關(guān)注

    關(guān)注

    20

    文章

    3002

    瀏覽量

    116497
  • AI
    AI
    +關(guān)注

    關(guān)注

    91

    文章

    39990

    瀏覽量

    301622
  • 語音播報(bào)
    +關(guān)注

    關(guān)注

    1

    文章

    40

    瀏覽量

    15127
  • 鴻蒙
    +關(guān)注

    關(guān)注

    60

    文章

    2969

    瀏覽量

    45970
  • HarmonyOS
    +關(guān)注

    關(guān)注

    80

    文章

    2155

    瀏覽量

    36098
  • OpenHarmony
    +關(guān)注

    關(guān)注

    33

    文章

    3957

    瀏覽量

    21148

原文標(biāo)題:【Codelab】懶人“看”書新法—鴻蒙語音播報(bào),到底如何實(shí)現(xiàn)?

文章出處:【微信號(hào):HarmonyOS_Dev,微信公眾號(hào):HarmonyOS開發(fā)者】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    4路TTS語音播報(bào)控制器:聯(lián)動(dòng)控制,音頻定時(shí)播放

    4路TTS語音播報(bào)控制器是一種能夠?qū)⑽谋拘畔⑥D(zhuǎn)換為語音并進(jìn)行播報(bào)的電子設(shè)備,具備4路相關(guān)控制功能。 通過語音合成技術(shù),將輸入的文字自動(dòng)合成為
    的頭像 發(fā)表于 10-31 15:44 ?498次閱讀

    語音報(bào)警器:TTS語音播報(bào),云平臺(tái)邏輯自控

    TTS語音播報(bào)報(bào)警器是一種集成了傳統(tǒng)報(bào)警器和TTS(文本轉(zhuǎn)語音)技術(shù)的智能設(shè)備。清晰、準(zhǔn)確地用人類語言播報(bào)報(bào)警原因、位置、狀態(tài)等具體信息。 工作原理 文本
    的頭像 發(fā)表于 10-29 16:31 ?776次閱讀

    傳感類語音提示器語音播報(bào)芯片最佳適配方案WT2003H

    在智能安防、節(jié)能控制、無障礙設(shè)施等領(lǐng)域,人體感應(yīng)提示器正逐漸成為剛需。WT2003H語音播報(bào)芯片憑借低功耗、高集成度、強(qiáng)兼容性的特性,與熱釋電、微波雷達(dá)、紅外傳感器實(shí)現(xiàn)深度協(xié)同,為終端設(shè)備賦予精準(zhǔn)
    的頭像 發(fā)表于 10-22 17:42 ?578次閱讀
    傳感類<b class='flag-5'>語音</b>提示器<b class='flag-5'>語音</b><b class='flag-5'>播報(bào)</b>芯片最佳適配方案WT2003H

    語音播報(bào)芯片:讓產(chǎn)品“開口說話”的秘密

    不知道大家發(fā)現(xiàn)沒有,在我們的日常生活當(dāng)中,其實(shí)有很多會(huì)“說話”的產(chǎn)品,比如我們?nèi)粘rT行電動(dòng)自行車,在沒電的時(shí)候它會(huì)通過語音播報(bào)提醒你“電量低請(qǐng)及時(shí)充電”。在便利店或者很多餐飲商家付款的時(shí)候,都會(huì)有一
    的頭像 發(fā)表于 09-28 09:28 ?625次閱讀
    <b class='flag-5'>語音</b><b class='flag-5'>播報(bào)</b>芯片:讓產(chǎn)品“開口說話”的秘密

    廣州唯創(chuàng)電子混音IC播報(bào)語音芯片:革新音頻應(yīng)用的新力量

    多音頻源智能混音,開啟音頻交互新紀(jì)元在智能化浪潮席卷各行各業(yè)的今天,音頻處理技術(shù)正經(jīng)歷著革命性的變革。傳統(tǒng)的單一路徑語音播放已無法滿足日益復(fù)雜的應(yīng)用場(chǎng)景需求,混音播報(bào)語音芯片應(yīng)運(yùn)而生,成為推動(dòng)音頻
    的頭像 發(fā)表于 09-24 09:25 ?588次閱讀
    廣州唯創(chuàng)電子混音IC<b class='flag-5'>播報(bào)</b><b class='flag-5'>語音</b>芯片:革新音頻應(yīng)用的新力量

    革新電梯語音播報(bào)體驗(yàn):廣州唯創(chuàng)WTN6170-8S語音芯片應(yīng)用解析

    在現(xiàn)代都市生活中,電梯是連接人們與各個(gè)樓層的重要工具。其運(yùn)行的安全性、舒適性與便捷性直接關(guān)系到用戶的體驗(yàn)。作為電梯系統(tǒng)中的“聲音向?qū)А保?b class='flag-5'>語音播報(bào)器承擔(dān)著傳遞運(yùn)行狀態(tài)、抵達(dá)樓層等關(guān)鍵信息的職責(zé)。然而
    的頭像 發(fā)表于 09-05 09:06 ?715次閱讀
    革新電梯<b class='flag-5'>語音</b><b class='flag-5'>播報(bào)</b>體驗(yàn):廣州唯創(chuàng)WTN6170-8S<b class='flag-5'>語音</b>芯片應(yīng)用解析

    基于開源鴻蒙語音識(shí)別及語音合成應(yīng)用開發(fā)樣例

    本期內(nèi)容由AI Model SIG提供,介紹了在開源鴻蒙中,利用sherpa_onnx開源三方庫進(jìn)行ASR語音識(shí)別與TTS語音合成應(yīng)用開發(fā)的流程。
    的頭像 發(fā)表于 08-25 14:26 ?4148次閱讀
    基于開源<b class='flag-5'>鴻蒙</b>的<b class='flag-5'>語音</b>識(shí)別及<b class='flag-5'>語音</b>合成應(yīng)用開發(fā)樣例

    TTS文字合成語音芯片的使用場(chǎng)景

    TTS文字合成語音播報(bào)芯片的使用場(chǎng)景非常廣泛,可以適用于各行各業(yè),主要應(yīng)用于復(fù)雜的語音播報(bào)場(chǎng)景,下面小編帶大家一起來了解一下。 傳統(tǒng)的語音
    的頭像 發(fā)表于 08-22 17:11 ?1020次閱讀

    一顆TTS語音芯給產(chǎn)品增加智能語音播報(bào)能力

    一顆TTS語音芯片給產(chǎn)品增加智能語音播報(bào)能力 傳統(tǒng)語音播報(bào)芯片可以設(shè)置一些固定的語音片段或者內(nèi)容
    的頭像 發(fā)表于 08-14 16:33 ?755次閱讀

    網(wǎng)絡(luò)語音控制器 智能自控語音播報(bào)

    網(wǎng)絡(luò)語音控制器(NetworkVoiceController)是一種通過有線/無線網(wǎng)絡(luò)接收指令,實(shí)現(xiàn)遠(yuǎn)程語音播報(bào)、對(duì)講或聲光告警的智能設(shè)備。其應(yīng)用場(chǎng)景極為廣泛,幾乎覆蓋所有需要“遠(yuǎn)程聲
    的頭像 發(fā)表于 08-13 15:21 ?903次閱讀

    語音輸出模塊是什么?自控語音播報(bào)

    語音輸出模塊(VoiceOutputModule)是一種將數(shù)字信號(hào)或文本信息轉(zhuǎn)換為人類可聽語音的硬件/軟件組件。相當(dāng)于設(shè)備的“嘴巴”,讓機(jī)器能夠通過聲音與人進(jìn)行交互。 一、工作原理 1.輸入接收
    的頭像 發(fā)表于 08-13 15:20 ?960次閱讀

    從開發(fā)工程師視角TTS語音合成芯片

    從開發(fā)工程師視角TTS語音合成芯片 在語音交互領(lǐng)域,TTS 語音合成芯片作為關(guān)鍵角色,正不斷革新著人機(jī)對(duì)話的體驗(yàn)。從開發(fā)工程師角度深入剖析,TTS
    的頭像 發(fā)表于 08-13 14:52 ?845次閱讀

    芯知識(shí)|語音芯片IC技術(shù)解析:優(yōu)化數(shù)字組合播報(bào)間隔的解決方案

    一、語音芯片的核心作用與應(yīng)用場(chǎng)景語音芯片作為智能設(shè)備交互的重要載體,廣泛滲透于工業(yè)控制、智能家居、公共服務(wù)等領(lǐng)域。廣州唯創(chuàng)電子推出的語音芯片系列產(chǎn)品,憑借其高集成度和靈活的可編程特性,在數(shù)字
    的頭像 發(fā)表于 05-12 09:04 ?713次閱讀
    芯知識(shí)|<b class='flag-5'>語音</b>芯片IC技術(shù)解析:優(yōu)化數(shù)字組合<b class='flag-5'>播報(bào)</b>間隔的解決方案

    便攜式制氧機(jī)語音升級(jí)方案:OTP8腳WTN6040芯片實(shí)現(xiàn)多語言狀態(tài)播報(bào)

    低功耗語音芯片的制氧機(jī)方案,可通過實(shí)時(shí)語音播報(bào)操作指引、狀態(tài)反饋及異常告警,顯著降低使用門檻、提升設(shè)備安全性,并支持個(gè)性化語音內(nèi)容定制,從而在家庭護(hù)理場(chǎng)景中
    的頭像 發(fā)表于 04-28 10:45 ?524次閱讀

    【CW32模塊使用】語音合成播報(bào)模塊

    。SYN6288E 通過異步串 口(UART)通訊方式,接收待合成的文本數(shù)據(jù),實(shí)現(xiàn)文本到語音(或 TTS 語音)的轉(zhuǎn)換。
    的頭像 發(fā)表于 03-29 17:25 ?1227次閱讀
    【CW32模塊使用】<b class='flag-5'>語音</b>合成<b class='flag-5'>播報(bào)</b>模塊