Android【语音合成TTS】

Android语音合成

简单​到​不可想象🙂

文字转化为语音Android中TextToSpeech类的简单使用

学习使用,请勿传播

简介:😄

TTS是Text To Speech的缩写,即“从文本到语音”,是人机对话的一部分,让机器能够说话。

它是同时运用语言学和心理学的杰出之作,在内置芯片的支持之下,通过神经网络的设计,把文字智能地转化为自然语音流。TTS技术对文本文件进行实时转换,转换时间之短可以秒计算。在其特有智能语音控制器作用下,文本输出的语音音律流畅,使得听者在听取信息时感觉自然,毫无机器语音输出的冷漠与生涩感。TTS语音合成技术 即将覆盖国标一、二级汉字,具有英文接口,自动识别中、英文,支持中英文混读。所有声音采用真人普通话为标准发音,实现了120-150个汉字/分钟的快速语音合成,朗读速度达3-4个汉字/秒,使用户可以听到清晰悦耳的音质和连贯流畅的语调。现在有少部分MP3随身听具有了TTS功能。

TTS是语音合成应用的一种,它将储存于电脑中的文件,如帮助文件或者网页,转换成自然语音输出。TTS不仅能帮助有视觉障碍的人阅读计算机上的信息,更能增加文本文档的可读性。现在的TTS应用包括语音驱动的邮件以及声音敏感系统,并常与声音识别程序一起使用。

1、必须知道的部分

  1. TextToSpeech的功能:将文字快速转化为语音进行播放或者保存为音频文件
  2. android也可以实现把输入的文字朗读出来,使用到的是TextToSpeech,将一段文字转换为成语音,可根据需要合成出不同音色、语速和语调的声音,让机器像人一样开口说话。

  3. 目前只支持5种语言:English、 French 、 German 、 Italian 和 Spanish。

  4. TextToSpeech必须被实例化之后才能使用.实现TextToSpeech.OnInitListener方法来获取实例化结果的监听。当你已经使用完TextToSpeech实例之后, 应该调用shutdown()方法来释放TextToSpeech所使用的本地资源。

  5. 使用前需先安装第三方插件,例如本次使用了

    讯飞中文引擎支持.apk(百度上有,我也会上传到资源)

  6. 构造方法

    • //使用默认的引擎
      TextToSpeech(Context context, TextToSpeech.OnInitListener listener)
    • //使用指定的引擎
      TextToSpeech(Context context, TextToSpeech.OnInitListener listener, String engine)

2、TTS初始化常用方法

  • setLanguage设置语言,帮助文档里面写了有22种
  • TextToSpeech.LANG_MISSING_DATA:表示语言的数据丢失。
  • TextToSpeech.LANG_NOT_SUPPORTED:不支持
 		// 参数Context,TextToSpeech.OnInitListener
        mTextToSpeech = new TextToSpeech(this, this);
        // 设置音调,值越大声音越尖(女生),值越小则变成男声,1.0是常规
        mTextToSpeech.setPitch(1.0f);
        // 设置语速
        mTextToSpeech.setSpeechRate(0.5f);
		 // setLanguage设置语言
        int result = mTextToSpeech.setLanguage(Locale.CHINA);
		// 常用初始化方法
         if (result == TextToSpeech.LANG_MISSING_DATA
                            || result == TextToSpeech.LANG_NOT_SUPPORTED) {
                        Toast.makeText(this, "数据丢失或不支持", 
                                       Toast.LENGTH_SHORT).show();
                    }

3、初步实例

  1. 初始化(init)

    private void Speak() {
        mTextToSpeech=new TextToSpeech(this, new TextToSpeech.OnInitListener() {
    
            @Override
            public void onInit(int status) {
                if (status==TextToSpeech.SUCCESS) {
                    //设置朗读语言
                    int supported=mTextToSpeech.setLanguage(Locale.CHINA);
                    if ((supported!=TextToSpeech.LANG_AVAILABLE)&&(supported!=TextToSpeech.LANG_COUNTRY_AVAILABLE)) {
                        Toast.makeText(RFID_Reader.this, "不支持当前语言!", Toast.LENGTH_SHORT).show();
                    }
                }
    
            }
        });
    }
    
  2. 朗读

    mTextToSpeech.speak("本次消费"+tmp+"元", TextToSpeech.QUEUE_FLUSH, null);
    

注意:🌤

有时需配合Handler来进行逐步朗读,自己设定相关算法进行不重复朗读。

4、发现😩

使用TTS非常的简单,只需要用两行代码就能轻松搞定

// 初始化
TextToSpeech speak = new TextToSpeech(this,null);
// 使用
speak.speak("欢迎光临",TextToSpeech.QUEUE_FLUSH,null);

5、简单案例

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/test"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!\nThis is Suk!"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

MainActivity.java

package com.example.a4_4_voicedemo;

import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.speech.tts.TextToSpeech;
import android.view.View;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {
    private TextToSpeech textToSpeech;
    private TextToSpeech speak;
    private TextView txt;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        speak = new TextToSpeech(this,null);
        txt = findViewById(R.id.test);
        txt.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                speak.speak(txt.getText().toString()+",这里是TTS输出!",TextToSpeech.QUEUE_FLUSH,null);
            }
        });
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

吃橘子的季节呢

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值