成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

HarmonyOS AI基礎技術賦能之語音播報

開發 OpenHarmony
在實際應用開發中,時不時的會遇到AI領域相關的一些技術,本節主要詳細講述一下語音播報技術,語音播報可能涉及的領域,如:實時語音交互、超長文本播報等。

[[425058]]

想了解更多內容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術社區

https://harmonyos.51cto.com

引言

在實際應用開發中,時不時的會遇到AI領域相關的一些技術,本節主要詳細講述一下語音播報技術,語音播報可能涉及的領域,如:實時語音交互、超長文本播報等。對于HarmonyOS開發者而言,也需要了解和掌握HarmonyOS AI領域相關技術能力。

功能介紹

語音播報主要是基于華為智慧引擎(HUAWEI HiAI Engine)中的語音播報引擎,向開發者提供人工智能應用層API。該技術提供將文本轉換為語音并進行播報的能力。

指南

1、創建與TTS服務的連接。context為應用上下文信息,應為ohos.aafwk.ability.Ability或ohos.aafwk.ability.AbilitySlice的實例或子類實例。

  1. private static final TtsListener ttsListener = new TtsListener() { 
  2.         @Override 
  3.         public void onEvent(int eventType, PacMap pacMap) { 
  4.             // Log.info("onEvent:" + eventType); 
  5.             if (eventType == TtsEvent.CREATE_TTS_CLIENT_SUCCESS) { 
  6.                 // Log.info("TTS Client create success"); 
  7.             } 
  8.         } 
  9.         @Override 
  10.         public void onStart(String utteranceId) { 
  11.             // Log.info(utteranceId + " audio synthesis begins"); 
  12.         } 
  13.         @Override 
  14.         public void onProgress(String utteranceId, byte[] audioData, int progress) { 
  15.             // Log.info(utteranceId + " audio synthesis progress:" + progress); 
  16.         } 
  17.         @Override 
  18.         public void onFinish(String utteranceId) { 
  19.             // Log.info(utteranceId + " audio synthesis completed"); 
  20.         } 
  21.         @Override 
  22.         public void onSpeechStart(String utteranceId) { 
  23.             // Log.info(utteranceId + " begins to speech"); 
  24.         } 
  25.         @Override 
  26.         public void onSpeechProgressChanged(String utteranceId, int progress) { 
  27.             // Log.info(utteranceId + " speech progress:" + progress); 
  28.         } 
  29.         @Override 
  30.         public void onSpeechFinish(String utteranceId) { 
  31.             // Log.info(utteranceId + " speech completed"); 
  32.         } 
  33.         @Override 
  34.         public void onError(String utteranceId, String errorMessage) { 
  35.             // Log.info(utteranceId + " errorMessage: " + errorMessage); 
  36.         } 
  37. }; 
  38. TtsClient.getInstance().create(context, ttsListener); 

2、在TTS接口創建成功后初始化TTS引擎

  1. TtsParams ttsParams = new TtsParams(); 
  2. ttsParams.setDeviceId("deviceId"); 
  3. boolean initResult = TtsClient.getInstance().init(ttsParams); 

3、初始化TTS引擎成功后調用音頻轉換并播放接口

  1. if (initResult) { 
  2.  TtsClient.getInstance().speakText("歡迎使用語音播報!"null); 

4、使用完成后銷毀TTS客戶端

  1. TtsClient.getInstance().destroy(); 

示例代碼

1、xml布局

  1. <?xml version="1.0" encoding="utf-8"?> 
  2. <DirectionalLayout 
  3.   xmlns:ohos="http://schemas.huawei.com/res/ohos" 
  4.   ohos:height="match_parent" 
  5.   ohos:width="match_parent" 
  6.   ohos:orientation="vertical"
  7.     <Text 
  8.       ohos:height="match_content" 
  9.       ohos:width="match_content" 
  10.       ohos:margin="15vp" 
  11.       ohos:text="AI語音播報" 
  12.       ohos:text_size="23fp" 
  13.       ohos:top_margin="40vp"/> 
  14.     <TextField 
  15.       ohos:id="$+id:text" 
  16.       ohos:height="300vp" 
  17.       ohos:width="match_content" 
  18.       ohos:layout_alignment="horizontal_center" 
  19.       ohos:left_margin="20vp" 
  20.       ohos:multiple_lines="true" 
  21.       ohos:right_margin="20vp" 
  22.       ohos:text="某軟件公司是中國領先的軟件與信息技術服務商,企業數字轉型可信賴合作伙伴。公司2001年成立于北京,立足中國,服務全球市場。經過18年發展,目前公司在全球43個城市設有90多個分支機構26個全球交付中心,員工總數近60000人。該軟件公司擁有深厚的行業積累和領先的技術實力,可以為客戶提供端到端的數字化產品和服務,包括數字化咨詢與解決方案、云智能與基礎設施、軟件與技術服務和數字化運營等;在10余個重要行業服務超過1000家國內外客戶,其中世界500強企業客戶超過110家,為各領域客戶創造價值。" 
  23.       ohos:text_size="50" 
  24.       ohos:top_margin="20vp" 
  25.       /> 
  26.     <DirectionalLayout 
  27.       xmlns:ohos="http://schemas.huawei.com/res/ohos" 
  28.       ohos:height="match_parent" 
  29.       ohos:width="match_parent" 
  30.       ohos:orientation="horizontal"
  31.         <Button 
  32.           ohos:id="$+id:read_btn" 
  33.           ohos:height="35vp" 
  34.           ohos:width="80vp" 
  35.           ohos:background_element="$graphic:background_button" 
  36.           ohos:margin="15vp" 
  37.           ohos:text="語音播報" 
  38.           ohos:text_size="16fp"/> 
  39.         <Text 
  40.           ohos:id="$+id:time" 
  41.           ohos:height="35vp" 
  42.           ohos:width="150vp" 
  43.           ohos:margin="15vp" 
  44.           ohos:text="播報耗時:0 s" 
  45.           ohos:text_size="16fp"/> 
  46.     </DirectionalLayout> 
  47. </DirectionalLayout> 

 2、案例代碼

  1. package com.isoftstone.tts.slice; 
  2.  
  3. import com.isoftstone.tts.ResourceTable; 
  4. import ohos.aafwk.ability.AbilitySlice; 
  5. import ohos.aafwk.content.Intent; 
  6. import ohos.agp.components.Button; 
  7. import ohos.agp.components.Component; 
  8. import ohos.agp.components.Text; 
  9. import ohos.agp.components.TextField; 
  10. import ohos.ai.tts.TtsClient; 
  11. import ohos.ai.tts.TtsListener; 
  12. import ohos.ai.tts.TtsParams; 
  13. import ohos.ai.tts.constants.TtsEvent; 
  14. import ohos.eventhandler.EventHandler; 
  15. import ohos.eventhandler.EventRunner; 
  16. import ohos.eventhandler.InnerEvent; 
  17. import ohos.hiviewdfx.HiLog; 
  18. import ohos.hiviewdfx.HiLogLabel; 
  19. import ohos.utils.PacMap; 
  20. import java.util.Timer; 
  21. import java.util.TimerTask; 
  22. import java.util.UUID; 
  23.  
  24. public class MainAbilitySlice extends AbilitySlice { 
  25.     private static final HiLogLabel LABEL_LOG = new HiLogLabel(3, 0xD001100, "MainAbilitySlice"); 
  26.     private TextField infoText; 
  27.     private Text timeText; 
  28.     private boolean initItsResult; 
  29.     private static final int EVENT_MSG_TIME_COUNT = 0x1000002; 
  30.     private int time = 0; 
  31.     private Timer timer = null
  32.     private TimerTask timerTask = null
  33.  
  34.     private EventHandler handler = new EventHandler(EventRunner.current()) { 
  35.         @Override 
  36.         protected void processEvent(InnerEvent event) { 
  37.             switch (event.eventId) { 
  38.                 case EVENT_MSG_TIME_COUNT: 
  39.                     getUITaskDispatcher().delayDispatch(() -> { 
  40.                         time = time + 1; 
  41.                         HiLog.info(LABEL_LOG, "播報耗時:" + time + " s"); 
  42.                         timeText.setText("播報耗時:" + time + " s"); 
  43.                     }, 0); 
  44.                     break; 
  45.                 default
  46.                     break; 
  47.             } 
  48.         } 
  49.     }; 
  50.  
  51.     @Override 
  52.     public void onStart(Intent intent) { 
  53.         super.onStart(intent); 
  54.         super.setUIContent(ResourceTable.Layout_ability_main); 
  55.         initView(); 
  56.         initTtsEngine(); 
  57.     } 
  58.  
  59.     private void initView() { 
  60.         infoText = (TextField) findComponentById(ResourceTable.Id_text); 
  61.         Button readBtn = (Button) findComponentById(ResourceTable.Id_read_btn); 
  62.         timeText = (Text) findComponentById(ResourceTable.Id_time); 
  63.         readBtn.setClickedListener(this::readText); 
  64.     } 
  65.  
  66.     private void initTtsEngine() { 
  67.         TtsClient.getInstance().create(this, ttsListener); 
  68.     } 
  69.  
  70.     private void readText(Component component) { 
  71.         if (initItsResult) { 
  72.             TtsParams ttsParams = new TtsParams(); 
  73.             ttsParams.setSpeed(0);//語速0~15越大越快 
  74.             TtsClient.getInstance().setParams(ttsParams); 
  75.             HiLog.info(LABEL_LOG, "initItsResult is true, speakText"); 
  76.             TtsClient.getInstance().speakText(infoText.getText(), null); 
  77.         } else { 
  78.             HiLog.error(LABEL_LOG, "initItsResult is false"); 
  79.         } 
  80.     } 
  81.  
  82.     private TtsListener ttsListener = new TtsListener() { 
  83.         @Override 
  84.         public void onEvent(int eventType, PacMap pacMap) { 
  85.             HiLog.info(LABEL_LOG, "onEvent..."); 
  86.             // 定義TTS客戶端創建成功的回調函數 
  87.             if (eventType == TtsEvent.CREATE_TTS_CLIENT_SUCCESS) { 
  88.                 TtsParams ttsParams = new TtsParams(); 
  89.                 ttsParams.setDeviceId(UUID.randomUUID().toString()); 
  90.                 initItsResult = TtsClient.getInstance().init(ttsParams); 
  91.             } 
  92.         } 
  93.         @Override 
  94.         public void onStart(String utteranceId) { 
  95.             HiLog.info(LABEL_LOG, "onStart..."); 
  96.         } 
  97.         @Override 
  98.         public void onProgress(String utteranceId, byte[] audioData, int progress) { 
  99.         } 
  100.         @Override 
  101.         public void onFinish(String utteranceId) { 
  102.             HiLog.info(LABEL_LOG, "onFinish..."); 
  103.         } 
  104.         @Override 
  105.         public void onError(String s, String s1) { 
  106.             HiLog.info(LABEL_LOG, "onError..."); 
  107.         } 
  108.         @Override 
  109.         public void onSpeechStart(String utteranceId) { 
  110.             // 開始計時 
  111.             HiLog.info(LABEL_LOG, "onSpeechStart..."); 
  112.             if (timer == null && timerTask == null) { 
  113.                 timer = new Timer(); 
  114.                 timerTask = new TimerTask() { 
  115.                     public void run() { 
  116.                         handler.sendEvent(EVENT_MSG_TIME_COUNT); 
  117.                     } 
  118.                 }; 
  119.                 timer.schedule(timerTask, 0, 1000); 
  120.             } 
  121.         } 
  122.         @Override 
  123.         public void onSpeechProgressChanged(String utteranceId, int progress) { 
  124.         } 
  125.         @Override 
  126.         public void onSpeechFinish(String utteranceId) { 
  127.             // 結束計時 
  128.             HiLog.info(LABEL_LOG, "onSpeechFinish..."); 
  129.             timer.cancel(); 
  130.             time = 0; 
  131.             timer = null
  132.             timerTask = null
  133.         } 
  134.     }; 

實現效果:

HarmonyOS AI基礎技術賦能之語音播報-鴻蒙HarmonyOS技術社區

想了解更多內容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術社區

https://harmonyos.51cto.com

 

責任編輯:jianghua 來源: 鴻蒙社區
相關推薦

2021-08-26 09:50:06

鴻蒙HarmonyOS應用

2021-09-13 15:14:01

鴻蒙HarmonyOS應用

2021-08-31 14:58:52

鴻蒙HarmonyOS應用

2021-09-03 15:27:17

鴻蒙HarmonyOS應用

2021-12-24 10:34:11

鴻蒙HarmonyOS應用

2021-01-14 15:07:33

人工智能游戲網絡

2022-02-17 17:19:31

鴻蒙語音識別語音播報

2021-08-27 09:57:18

鴻蒙HarmonyOS應用

2018-09-18 11:47:17

2020-12-14 09:23:16

人工智能教育機器人

2020-04-27 10:39:19

人工智能技術語音識別

2023-05-26 01:01:06

AI幻燈片人工智能

2021-06-24 13:20:29

人工智能AI

2021-07-14 17:25:59

AI/網絡/體驗至上

2022-08-25 13:19:31

5G人工智能無線技術
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 午夜免费网站 | 亚洲女优在线播放 | 播放一级毛片 | 欧美一区二区视频 | 中文一区 | 黄色欧美 | 夫妻午夜影院 | 精品国产99| av天天澡天天爽天天av | 成人精品国产一区二区4080 | 亚洲二区视频 | 日本一区二区电影 | 青青草原精品99久久精品66 | av日韩精品| 精品久久久久久久久久久久 | 免费一级毛片 | 嫩草视频在线看 | 亚洲精品久久嫩草网站秘色 | 国产线视频精品免费观看视频 | 亚洲一区免费在线 | 久久精品成人一区 | 国产美女高潮 | 色综合中文 | 狠狠干美女| 久久精品99久久 | 国产在线a| 一区二区三区视频在线观看 | 久久99精品久久久久久 | 精品国产乱码久久久久久闺蜜 | 欧美日韩在线精品 | 国产精品区二区三区日本 | 国产美女网站 | 国产激情在线看 | 伊人二区 | 国产三级一区二区三区 | 日韩成人中文字幕 | 国产精品美女久久久久aⅴ国产馆 | 成人精品国产一区二区4080 | 亚洲福利av | 久久久久久成人 | 三级在线视频 |