Android 自带的TTS离线语音合成

由于最近项目需要使用到语音合成,使用过百度语音和科大讯飞语音但是这两个开发包比较大,也可能要钱。突然间看到了TTS语音感觉语音还不错。但是有一个缺点,Android自带的TTS不支持中文语音。

一、怎么看支不支持中文语音

设置——》语言和输入法——》右边有一个文字转语音(TTS)输出点击进去就可以看到默认语言,如果不支持就会显示不支持中文语音。所以需要我们下载引擎。引擎下地址https://blog.csdn.net/yingchengyou/article/details/79591954,把引擎下载安装之后要设置那里改成安装的引擎。

二、实现TTS引擎监听接口

public class TTSListener implements TextToSpeech.OnInitListener {
    @Override
    public void onInit(int i) {
        if (i == TextToSpeech.SUCCESS) {
            Log.i(TAG, "onInit: TTS引擎初始化成功");
        } else{
            Log.i(TAG, "onInit: TTS引擎初始化失败");
        }
    }
}

三、进行TTS初始化

这里为了方便使用所以我在Application进行初始化

public class MyApplication extends Application {

    //tts语音播放
    public static TextToSpeech mSpeech = null;

    @Override
    public void onCreate() {
        super.onCreate();
        mSpeech = new TextToSpeech(getApplicationContext(), new TTSListener());
    }
}

四、语音合成

mSpeech.setLanguage(Locale.CHINESE);这个方法调用可以设置语音,显示使用的是中文

mSpeech.setSpeechRate(voice_speed);这个方法调用时设置语音速度,值越大声音越快

mSpeech.setPitch(voice_pitch);这个方法是设置音调的搞定,值越大音调越高甚至成为男声

**
 * tts语音播放
 */
public class SpeechUtil {
    //语速
    public static float voice_speed=0.8f;
    //音调
    public static float voice_pitch=0.9f;

    public synchronized static void openAudioFile(TextToSpeech mSpeech, String content) {
        mSpeech.setLanguage(Locale.CHINESE);
        mSpeech.setSpeechRate(voice_speed);
        mSpeech.setPitch(voice_pitch);
        /**
         * queueMode用于指定发音队列模式,有两个参数:
         * TextToSpeech.QUEUE_FLUSH:该模式下在有新任务时候会清除当前语音任务,执行新的语音任务
         * TextToSpeech.QUEUE_ADD:该模式下会把新的语音任务放到语音任务之后,等前面的语音任务执行完了才会执行新的语音任务
         */
//        mSpeech.speak(content, TextToSpeech.QUEUE_FLUSH, null);
        mSpeech.speak(content, TextToSpeech.QUEUE_ADD, null);
       
    }
}

五、进行简单的测试调用

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        findViewById(R.id.text_view).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                SpeechUtil.openAudioFile(MyApplication.mSpeech,"你好,欢迎光临!");
            }
        });
    }
}

你可能感兴趣的:(Android)