欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android实现自动朗读功能(TTS)

程序员文章站 2022-03-19 09:46:51
前言: android提供了自动朗读支持。可以对指定文本内容进行朗读,从而发生声音;还允许把文本对应的音频录制成音频文件,方便以后播放。android的自动朗读主要通过texttospeech来完成,...

前言: android提供了自动朗读支持。可以对指定文本内容进行朗读,从而发生声音;还允许把文本对应的音频录制成音频文件,方便以后播放。android的自动朗读主要通过texttospeech来完成,构造器如:texttospeech(context context, texttospeech.oninitlistennet listener);当创建texttospeech对象时,必须先提供一个oninitlistener监听器——负责监听texttospeech的初始化结果。

效果图如下:

Android实现自动朗读功能(TTS)

使用texttospeech的步骤如下:

1、创建texttospeech对象,创建时传入oninitlistener监听器监听示范创建成功。
2、设置texttospeech所使用语言国家选项,通过返回值判断tts是否支持该语言、国家选项。
3、调用speak()或synthesizetofile方法。
4、关闭tts,回收资源。

布局文件:

<?xml version="1.0" encoding="utf-8"?>
<linearlayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <edittext
        android:id="@+id/input_text"
        android:layout_margintop="20dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

    <linearlayout
        android:layout_margintop="10dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <button
            android:id="@+id/speech"
            android:text="speech"
            android:layout_width="wrap_content"
            android:layout_weight="1"
            android:layout_height="wrap_content"/>

        <button
            android:id="@+id/record"
            android:text="record"
            android:layout_weight="1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>

    </linearlayout>

</linearlayout>

activity文件

public class speechactivity extends appcompatactivity {

    private edittext input;
    private button speech,record;

    private texttospeech texttospeech;

    @override
    protected void oncreate(bundle savedinstancestate) {
        super.oncreate(savedinstancestate);
        setcontentview(r.layout.activity_speech);

        texttospeech = new texttospeech(this, new texttospeech.oninitlistener() {
            @override
            public void oninit(int status) {
                if (status == texttospeech.success) {
                    int result = texttospeech.setlanguage(locale.china);
                    if (result != texttospeech.lang_country_available
                            && result != texttospeech.lang_available){
                        toast.maketext(speechactivity.this, "tts暂时不支持这种语音的朗读!",
                                toast.length_short).show();
                    }
                }
            }
        });

        input = (edittext) findviewbyid(r.id.input_text);
        speech = (button) findviewbyid(r.id.speech);
        record = (button) findviewbyid(r.id.record);

        speech.setonclicklistener(new view.onclicklistener() {
            @override
            public void onclick(view view) {
                texttospeech.speak(input.gettext().tostring(),
                        texttospeech.queue_add, null);
            }
        });

        record.setonclicklistener(new view.onclicklistener() {
            @override
            public void onclick(view view) {
                string inputtext = input.gettext().tostring();
                hashmap<string, string> myhashrender = new hashmap<>();
                myhashrender.put(texttospeech.engine.key_param_utterance_id, inputtext);
                texttospeech.synthesizetofile(inputtext, myhashrender,
                        "/mnt/sdcard/my_recorder_audios/sound.wav");
                toast.maketext(speechactivity.this, "声音记录成功。", toast.length_short).show();
            }
        });
    }

    @override
    protected void ondestroy() {
        if (texttospeech != null)
            texttospeech.shutdown();
        super.ondestroy();
    }
}

这里我们使用的是中文,int result = texttospeech.setlanguage(locale.china);你也可以根据自己的需求更改为其他支持的语言。

最后在androidmanifest.xml中加入权限:

<uses-permission android:name="android.permission.write_external_storage"/>
    <uses-permission android:name="android.permission.read_external_storage"/>

总结:通过使用android提供的tts,我们可以对指定文本内容进行朗读,从而发生声音;还允许把文本对应的音频录制成音频文件,保存到本地。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。