亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Android 實現(xiàn)云知聲版離線語音合成

 更新時間:2022年06月07日 08:45:25   作者:? 靈魂的沉浮?  ?  
這篇文章主要介紹了Android 實現(xiàn)云知聲版離線語音合成,目前云知聲提供免費的離線TTS,功能也比較簡單,合成的語音也比較生硬,如果對合成的語音要求不高的話可以考慮接入。具體合成需要的小伙伴可以參考下面文章內(nèi)容

簡介

科大訊飛:合成速度快,準(zhǔn)確度高,模型多。但問題也是相當(dāng)明顯,只有在線合成是免費的,離線則是一筆不小的開銷。

百度:是專門為他的導(dǎo)航做的一套,性能相對也還可以,但是他只支持離在線混合模式,默認(rèn)是在wifi情況下是使用在線模式,4g或無網(wǎng)絡(luò)情況下使用離線模式。

云知聲:則可以實現(xiàn)完全的離線合成模式,相比于前兩個,性能可能沒那沒完美,不過對合成的語音要求不高的應(yīng)用來說,可以考慮接入,缺點就是模型比較少。

在線合成和離線合成(合成速度)

在線合成必須將數(shù)據(jù)傳到第三方平臺,調(diào)用他們的服務(wù)接口進(jìn)行合成,這中間牽扯到網(wǎng)絡(luò)狀況,在網(wǎng)絡(luò)良好的情況下,合成速度和離線模式?jīng)]有太大的差別,但是有時候服務(wù)器也會來開個小差,無法保證網(wǎng)絡(luò)一直都是暢通無阻的。在線模式雖然不太穩(wěn)定,但是不需要把模型和合成底層代碼放在本地,離線合成雖然穩(wěn)定快速,但是apk體積增加的有點小夸張。

云知聲的解決辦法:把語音合成模型放在服務(wù)器后端,你要使用的時候下載到本地。

集成方法

注冊云知聲開發(fā)者,創(chuàng)建應(yīng)用,下載離線語音合成sdk,里面就兩個文件。

將這里面的所有東西都拷貝到你的項目的對應(yīng)的libs下(比如app目錄下的libs)

在app模塊的 build.gradle的defaultConfig括號下加上

        ndk {
            abiFilters 'armeabi'
        }
        sourceSets {
            main {
                jniLibs.srcDirs = ['libs']
            }
        }

截圖如下:

在AndroidManifest.xml設(shè)置所需要的權(quán)限

    <!-- 網(wǎng)絡(luò)權(quán)限 -->
    <uses-permission android:name="android.permission.INTERNET"/>
    <!-- sd卡獲得寫的權(quán)限 -->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <!-- 獲取網(wǎng)絡(luò)狀態(tài) -->
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <!-- 獲取WiFi狀態(tài) -->
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
    <!-- 改變網(wǎng)絡(luò)狀態(tài) -->
    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>
    <!-- 改變WiFi狀態(tài) -->
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
    <!--喚醒鎖定-->
    <uses-permission android:name="android.permission.WAKE_LOCK"/>
    <!--清除應(yīng)用緩存-->
    <uses-permission android:name="android.permission.RECORD_AUDIO"/>
    <!--麥克風(fēng)權(quán)限組-->
    <uses-permission android:name="android.permission.READ_CALENDAR"/>
    <!-- 允許應(yīng)用寫(非讀)用戶的外部存儲器 -->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <!--允許讀取電話的狀態(tài)-->
    <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
    <!--允許應(yīng)用讀取用戶的聯(lián)系人數(shù)據(jù)-->
    <uses-permission android:name="android.permission.READ_CONTACTS"/>
    <!--允許使用電源鎖定管理以使進(jìn)程休眠或屏幕變暗-->
    <uses-permission android:name="android.permission.WAKE_LOCK" />

為了方便使用我這里將云知聲語音合成做了進(jìn)一步的封裝,以方便調(diào)用,以下是示例,方便大家進(jìn)行參考

import android.content.Context;
import android.media.AudioManager;
import android.util.Log;

import cn.yunzhisheng.tts.offline.TTSPlayerListener;
import cn.yunzhisheng.tts.offline.basic.ITTSControl;
import cn.yunzhisheng.tts.offline.basic.TTSFactory;
import cn.yunzhisheng.tts.offline.common.USCError;

/**
 * 云知聲離線語音封裝類
 */
public class SpeechUtilOffline implements TTSPlayerListener {
    public static final String TAG ="SpeechUtilOffline";
    public static final String appKey = "_appKey_";
    private ITTSControl ittsControl;
    private Context context;
    public SpeechUtilOffline(Context context) {
        this.context = context;
        init();
    }

    /**
     * 初始化引擎
     */
    private void init() {
        // 初始化語音合成對象
        ittsControl = TTSFactory.createTTSControl(context, appKey);
        // 設(shè)置回調(diào)監(jiān)聽
        ittsControl.setTTSListener(this);
        // 設(shè)置音頻流
        ittsControl.setStreamType(AudioManager.STREAM_MUSIC);
        // 設(shè)置播報語速,播報語速,數(shù)值范圍 0.1~2.5 默認(rèn)為 1.0
        ittsControl.setVoiceSpeed(2.5f);
        // 設(shè)置播報音高,調(diào)節(jié)音高,數(shù)值范圍 0.9~1.1 默認(rèn)為 1.0
        ittsControl.setVoicePitch(1.1f);
        // 初始化合成引擎
        ittsControl.init();
    }

    /**
     * 停止播放
     */
    public void stop(){
        ittsControl.stop();
    }

    /**
     * 播放
     */
    public void play(String content) {
        ittsControl.play(content);
    }

    /**
     * 開始緩沖回調(diào)
     */
    @Override
    public void onBuffer() {
        Log.i(TAG, "onBuffer");
    }

    /**
     * 開始播放回調(diào)
     */
    @Override
    public void onPlayBegin() {
        Log.i(TAG, "onPlayBegin");
    }

    /**
     * 取消播放回調(diào)
     */
    @Override
    public void onCancel() {
        Log.i(TAG, "onCancel");
    }

    /**
     * 語音合成錯誤回調(diào)
     */
    @Override
    public void onError(USCError uscError) {
        Log.i(TAG, "onError");
    }

    /**
     * 播放完成回調(diào)
     */
    @Override
    public void onPlayEnd() {
        Log.i(TAG, "onPlayEnd");
        ittsControl.stop();
    }

    /**
     * 初始化成功回調(diào)
     */
    @Override
    public void onInitFinish() {
        Log.i(TAG, "onInitFinish");
    }
}

使用方法

SpeechUtilOffline speechUtilOffline = new SpeechUtilOffline(this);
speechUtilOffline.play("此處是需要播放的文本內(nèi)容")

總結(jié)

在集成的時候遇到過很多bug,比如模型文件放在不正確的地方會導(dǎo)致沒有聲音,模型文件不完整的時候回導(dǎo)致程序崩潰,發(fā)音不是預(yù)期的效果等等,還有一些參數(shù)的設(shè)置,具體參數(shù)還是得看官方的開發(fā)文檔。

到此這篇關(guān)于Android 實現(xiàn)云知聲版離線語音合成的文章就介紹到這了,更多相關(guān)Android 語音合成內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論