TextToSpeech文本转语音

该文章介绍了Android平台上的TextToSpeech类,用于实现文本转语音的功能。文章详细讲解了类中的关键方法,如setLanguage、setPitch和setSpeechRate,并提供了MainActivity的代码示例,展示如何初始化TextToSpeech对象、设置语言和音调、以及如何播放和停止语音。此外,还展示了如何记录朗读的音频。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一、TextToSpeech类中的常用方法

二、使用例子

MainActivity:

activity_main:

效果图:

一、TextToSpeech类中的常用方法

        TextToSpeech是一个Android平台提供的文本转语音功能,可以将文字快速地转换为语音播放。

方法名称功能
setLanguage(Locale)设置要输出的语言种类
setPitch(float x)设置语音的音调(范围0.5到2.0)
setSpeechRate(float)设置语音的速度(范围为0.1到2.0)
speak(CharSequence c,int i,Bundle b,String s)将文本转成语音并播放
stop()停止当前正在播放的语音
shutdown()释放资源

二、使用例子

MainActivity:

package com.example.tts;
import android.app.Activity;
import android.speech.tts.TextToSpeech;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import java.io.File;
import java.util.Locale;
public class MainActivity extends Activity implements View.OnClickListener {
    private TextToSpeech tts;
    private EditText editText;
    Button speak,record;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // 初始化TextToSpeech对象
        initToSpeech();
        // 初始化界面
        initView();
    }

    private void initView() {
        editText = (EditText) findViewById(R.id.text_ed);
        speak = findViewById(R.id.speak);
        speak.setOnClickListener(this);
        record = findViewById(R.id.record_voice);
        record.setOnClickListener(this);
    }

    private void initToSpeech() {
        tts = new TextToSpeech(this, new TextToSpeech.OnInitListener() {

            @Override
            public void onInit(int status) {
                // 如果装载TTS引擎成功
                if (status == TextToSpeech.SUCCESS) {
                    // 设置使用中文朗读
                    int result = tts.setLanguage(Locale.CHINA);
                    // 如果不支持所设置的语言
                    if (result != TextToSpeech.LANG_COUNTRY_AVAILABLE
                            && result != TextToSpeech.LANG_AVAILABLE) {
                        Toast.makeText(MainActivity.this,
                                "TTS暂时不支持这种语言的朗读!", Toast.LENGTH_LONG).show();
                    }
                }
            }
        });
        tts.setPitch(1.5f);
        // 设置语速
        tts.setSpeechRate(1.0f);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        // 关闭TextToSpeech对象
        if (tts != null) {
            tts.shutdown();
        }
    }


    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.record_voice:
                // 将朗读文本的音频记录到指定文件
                File f1=new File("/mnt/sdcard/sound.wav");
                //Android 5.0及以上
                tts.synthesizeToFile (editText.getText(), null, f1,"111");
                //Android 5.0 以下
                //tts.synthesizeToFile(editText.getText().toString(), null, "/mnt/sdcard/sound.wav");
                Toast.makeText(MainActivity.this, "声音记录成功!",
                        Toast.LENGTH_SHORT).show();
                break;
            case R.id.speak:
                // 执行朗读
                //Android 5.0及以上
//                tts.speak(editText.getText().toString(), TextToSpeech.QUEUE_FLUSH, null, "111");
                //Android 5.0 以下
                tts.speak(editText.getText().toString(), TextToSpeech.QUEUE_FLUSH, null);
                break;
        }
    }
}

activity_main:

<?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"
    tools:context=".MainActivity">
    <EditText
        android:id="@+id/text_ed"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>
    <LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    >
    <Button
        android:id="@+id/speak"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="朗读"
        />
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/record_voice"
            android:hint="11111"
            android:text="记录语音"/>
</LinearLayout>


</LinearLayout>

效果图:

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值