Android 文件转语音TTS输出(文字转语音)

5 篇文章 0 订阅
1 篇文章 0 订阅

一、介绍

目录

一、介绍

二、配置

三、使用

四、权限

五、补充


目前国内Android系统自带语音引擎基本上都是Pico TTS,Pico TTS不支持中文转语音播报。因为项目需要播放中文,引入科大讯飞引擎3.0.apk。

二、配置

下载好科大讯飞语音引擎3.0.apk(若是下载小爱,小度等其他引擎也可以),安装成功之后,进入系统设置—>语言输入法设置—>文字转语音(TTS)输出—>选择科大讯飞语音引擎(选择你下载的引擎)。

三、使用

代码很简单,注释很详细,废话不多说,直接上工具类。

package com.welbell.temperature.type.ui;

import android.content.Context;
import android.speech.tts.TextToSpeech;
import android.util.Log;

import java.util.Locale;

public class VoiceAnnouncements implements TextToSpeech.OnInitListener {

    private static final String TAG = VoiceAnnouncements.class.getName();
    public static VoiceAnnouncements mVoiceAnnouncements;
    private TextToSpeech mTextToSpeech;

    public static VoiceAnnouncements getInstance() {
        synchronized (VoiceAnnouncements.class) {
            if (mVoiceAnnouncements == null) {
                mVoiceAnnouncements = new VoiceAnnouncements();
            }
        }
        return mVoiceAnnouncements;
    }

    public void init(Context context) {
        mTextToSpeech = new TextToSpeech(context, this);
    }

    /**
     * 设置语音播放参数(设置-1将不起作用)
     *
     * @param pitch      音调
     * @param speechRate 语速
     */
    public void setParameter(float pitch, float speechRate) {
        if (mTextToSpeech == null) {
            return;
        }
        if (pitch != -1)
            //设置音调
            mTextToSpeech.setPitch(pitch);
        if (speechRate != -1)
            //设置语速,1.0为正常语速
            mTextToSpeech.setSpeechRate(speechRate);
    }

    /**
     * 设置播放内容
     * 播放语音前需要等初始化成功之后 
     * @param isCover 是否覆盖式播放
     * @param text  播放的内容
     */
    public void speak(boolean isCover,String text){
        if (isCover){
            mTextToSpeech.stop();
        }
        mTextToSpeech.speak(text, TextToSpeech.QUEUE_ADD, null);
    }

    /**
     * 回调函数
     * @param status
     */
    @Override
    public void onInit(int status) {
            //设置朗读语言
        int supported = mTextToSpeech.setLanguage(Locale.SIMPLIFIED_CHINESE);
        if ((supported != TextToSpeech.LANG_AVAILABLE) && (supported != TextToSpeech.LANG_COUNTRY_AVAILABLE)) {
            Log.e(TAG, "onInit: 不支持当前语言");
        }
    }
}

四、权限

TTS需要使用文件操作权限

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <!-- 外部存储读权限 -->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <!-- 外部存储写权限 -->

五、补充

第三方引擎APK,需要通过用户手动设置为默认TTS输出,否则不能使用。目前除了改framework层以外,Android上层没有办法修改第三方APK为默认的输出TTS应用。

 

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Android系统内置了文字转语音功能,可以通过调用系统提供的API实现。具体步骤如下: 1. 在AndroidManifest.xml文件中添加以下权限: ``` <uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.READ_PHONE_STATE"/> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.RECORD_AUDIO"/> <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/> <uses-permission android:name="android.permission.WRITE_SETTINGS"/> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> ``` 2. 在布局文件中添加一个TextView和一个Button: ``` <TextView android:id="@+id/tv_text" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Hello World!" /> <Button android:id="@+id/btn_speak" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Speak" /> ``` 3. 在Activity中实现以下代码: ``` private TextToSpeech mTTS; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mTTS = new TextToSpeech(this, new TextToSpeech.OnInitListener() { @Override public void onInit(int status) { if (status == TextToSpeech.SUCCESS) { int result = mTTS.setLanguage(Locale.US); if (result == TextToSpeech.LANG_MISSING_DATA || result == TextToSpeech.LANG_NOT_SUPPORTED) { Log.e("TTS", "Language not supported"); } else { findViewById(R.id.btn_speak).setEnabled(true); } } else { Log.e("TTS", "Initialization failed"); } } }); findViewById(R.id.btn_speak).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String text = ((TextView) findViewById(R.id.tv_text)).getText().toString(); mTTS.speak(text, TextToSpeech.QUEUE_FLUSH, null); } }); } @Override protected void onDestroy() { if (mTTS != null) { mTTS.stop(); mTTS.shutdown(); } super.onDestroy(); } ``` 在初始化TextToSpeech对象时,需要传入一个OnInitListener对象,用于判断TextToSpeech是否初始化成功。如果初始化成功,则设置语言为英文,否则输出日志。在Button的点击事件中,获取TextView的内容并调用TextToSpeech的speak方法将文字换为语音播放。 以上是简单的Android文字转语音实现方式,具体根据需求进行修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

丿末兮

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

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

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

打赏作者

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

抵扣说明:

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

余额充值