最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解Android 語(yǔ)音播報(bào)實(shí)現(xiàn)方案(無(wú)SDK)

 更新時(shí)間:2017年11月29日 09:20:59   作者:姜康  
本篇文章主要介紹了詳解Android 語(yǔ)音播報(bào)實(shí)現(xiàn)方案(無(wú)SDK),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

本文介紹了詳解Android 語(yǔ)音播報(bào)實(shí)現(xiàn)方案(無(wú)SDK),分享給大家,具體如下:

功能描述

類(lèi)似支付寶收款時(shí)候的語(yǔ)音播報(bào)功能:當(dāng)別人掃描你的收款碼,你收到錢(qián)之后,就會(huì)聽(tīng)到“支付寶到賬12.55元”的語(yǔ)音播報(bào)。

要解決的問(wèn)題

1.播放單個(gè)語(yǔ)音文件

2.播放完單個(gè)語(yǔ)音文件之后立即播放下一條,這樣才能連續(xù)

3.當(dāng)多個(gè)完整的語(yǔ)音序列都需要播報(bào)時(shí)的處理(比如支付寶短時(shí)間內(nèi)收到多條收款推送)

實(shí)現(xiàn)思路

1、播放單個(gè)文件選擇MediaPlayer

首先創(chuàng)建一個(gè)MediaPlayer實(shí)例

MediaPlayer player = new MediaPlayer();

然后設(shè)置數(shù)據(jù)源,這里數(shù)據(jù)源從assets中獲取,當(dāng)然也可以將語(yǔ)音文件放在raw文件夾里

 fd = FileUtils.getAssetFileDescription(path);
 player.setDataSource(fd.getFileDescriptor(), fd.getStartOffset(),
              fd.getLength());

然后調(diào)用prepareAsync()方法,異步加載,并設(shè)置監(jiān)聽(tīng),加載完畢之后開(kāi)始播放(與prepare方法區(qū)別開(kāi)來(lái))

player.prepareAsync();
player.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
            @Override
            public void onPrepared(MediaPlayer mp) {
              mp.start();
            }
          });

2、由于播放的語(yǔ)音文件不止一個(gè),因此需要監(jiān)聽(tīng)播放完成的狀態(tài),在播放完成之后播放下一條語(yǔ)音

 player.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
            @Override
            public void onCompletion(MediaPlayer mp) {
              mp.reset();
              counter[0]++;
              if (counter[0] < list.size()) {
                try {
                  AssetFileDescriptor fileDescriptor = FileUtils.getAssetFileDescription(String.format("sound/tts_%s.mp3", list.get(counter[0])));
                  mp.setDataSource(fileDescriptor.getFileDescriptor(), fileDescriptor.getStartOffset(), fileDescriptor.getLength());
                  mp.prepare();
                } catch (IOException e) {
                  e.printStackTrace();
                  latch.countDown();
                }
              } else {
                mp.release();
                latch.countDown();
              }
            }
          });

3、短時(shí)間多次播報(bào)請(qǐng)求,開(kāi)采用同步方式進(jìn)行,一條播完播放下一條,這里采用synchronized + notifyAll() 實(shí)現(xiàn),當(dāng)然也可以用別的方法。

代碼封裝

功能代碼分為兩部分,一部分是語(yǔ)音序列組成的List,這里是VoiceTemplate;

一部分是播放的功能封裝,接收List,然后播放語(yǔ)音,這里叫做VoiceSpeaker;

詳細(xì)代碼見(jiàn)文末。

代碼使用

比如要播放“支付寶到賬十二點(diǎn)一三元”,代碼如下

final List<String> list = new VoiceTemplate()
        .prefix("success")
        .numString("12.13")
        .suffix("yuan")
        .gen();

VoiceSpeaker.getInstance().speak(list);

源碼

KTools

https://github.com/jiangkang/KTools/blob/master/app/src/main/java/com/jiangkang/ktools/audio/VoiceSpeaker.java

https://github.com/jiangkang/KTools/blob/master/app/src/main/java/com/jiangkang/ktools/audio/VoiceTemplate.java

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Android剪貼板用法詳解

    Android剪貼板用法詳解

    這篇文章主要介紹了Android剪貼板用法詳解,以實(shí)例的形式對(duì)Android中剪貼板的各類(lèi)傳值方法做了較為詳細(xì)的講述,需要的朋友可以參考下
    2014-10-10
  • Android圖片無(wú)限輪播的實(shí)現(xiàn)代碼

    Android圖片無(wú)限輪播的實(shí)現(xiàn)代碼

    這篇文章主要為大家詳細(xì)介紹了Android圖片無(wú)限輪播的實(shí)現(xiàn)代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-12-12
  • 詳解Flutter Widget

    詳解Flutter Widget

    本文主要講解了Flutter Widget,它是是描述 Flutter UI 的基本單元,需要進(jìn)一步了解的小伙伴可以參考一下這篇文章
    2021-08-08
  • android多行標(biāo)簽熱點(diǎn)示例

    android多行標(biāo)簽熱點(diǎn)示例

    這篇文章主要介紹了android多行標(biāo)簽熱點(diǎn)示例,需要的朋友可以參考下
    2014-04-04
  • Android listview多視圖嵌套多視圖

    Android listview多視圖嵌套多視圖

    這篇文章主要介紹了Android listview多視圖嵌套多視圖 的相關(guān)資料,需要的朋友可以參考下
    2016-02-02
  • Android線程的優(yōu)先級(jí)設(shè)置方法技巧

    Android線程的優(yōu)先級(jí)設(shè)置方法技巧

    對(duì)于Android平臺(tái)上的線程優(yōu)先級(jí)設(shè)置來(lái)說(shuō)可以處理很多并發(fā)線程的阻塞問(wèn)題,比如很多無(wú)關(guān)緊要的線程會(huì)占用大量的CPU時(shí)間,雖然通過(guò)了MultiThread來(lái)解決慢速I(mǎi)/O但是合理分配優(yōu)先級(jí)對(duì)于并發(fā)編程來(lái)說(shuō)十分重要
    2016-02-02
  • Flutter給控件實(shí)現(xiàn)鉆石般的微光特效

    Flutter給控件實(shí)現(xiàn)鉆石般的微光特效

    這篇文章主要給大家介紹了關(guān)于Flutter給控件實(shí)現(xiàn)鉆石般的微光特效的相關(guān)資料,實(shí)現(xiàn)的效果非常不錯(cuò),非常適合大家做開(kāi)發(fā)的時(shí)候參考,需要的朋友可以參考下
    2021-08-08
  • Android實(shí)現(xiàn)多級(jí)樹(shù)形選擇列表

    Android實(shí)現(xiàn)多級(jí)樹(shù)形選擇列表

    這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)多級(jí)樹(shù)形選擇列表,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-04-04
  • Android ContentProvider獲取手機(jī)聯(lián)系人實(shí)例

    Android ContentProvider獲取手機(jī)聯(lián)系人實(shí)例

    這篇文章主要介紹了Android ContentProvider獲取手機(jī)聯(lián)系人實(shí)例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-02-02
  • Android 啟動(dòng)另一個(gè)App/apk中的Activity實(shí)現(xiàn)代碼

    Android 啟動(dòng)另一個(gè)App/apk中的Activity實(shí)現(xiàn)代碼

    這篇文章主要介紹了Android 啟動(dòng)另一個(gè)App/apk中的Activity實(shí)現(xiàn)代碼的相關(guān)資料,需要的朋友可以參考下
    2017-04-04

最新評(píng)論

黄大仙区| 始兴县| 葫芦岛市| 平利县| 黎城县| 都兰县| 石首市| 上栗县| 崇信县| 中卫市| 溆浦县| 舟曲县| 资兴市| 托克托县| 安岳县| 河西区| 荣成市| 岳阳县| 突泉县| 永和县| 德州市| 梅州市| 广宁县| 阳新县| 缙云县| 阿拉善右旗| 新竹县| 阿坝县| 汉寿县| 秦皇岛市| 松溪县| 丰台区| 乌兰县| 涟源市| 乌拉特前旗| 铜山县| 西宁市| 化州市| 灵石县| 荥阳市| 谢通门县|