Android 语音播报之项目实战

TextToSpeech项目应用

文字转语音

从文本合成语音以立即播放或创建声音文件。即TextToSpeech(以下简称TTS)
TTS是语音合成应用的一种,它将储存于电脑中的文件,如帮助文件或者网页,转换成自然语音输出。
TTS不仅能帮助有视觉障碍的人阅读计算机上的信息,更能增加文本文档的可读性。现在的TTS应用包括语音驱动的邮件以及声音敏感系统,并常与声音识别程序一起使用。TextToSpeech必须再被实例化之后才能使用.实现TextToSpeech.OnInitListener方法来获取实例化结果的提醒。当你已经使用完TextToSpeech实例之后, 应该调用shutdown()方法来释放TextToSpeech所使用的本地资源。

官网简介

具体详情可以去参考 链接地址:TextToSpeech

Android 语音播报之项目实战
Android 语音播报之项目实战
Android 语音播报之项目实战
Android 语音播报之项目实战
Android 语音播报之项目实战
Android 语音播报之项目实战

; 项目前景

最近在项目应用到了 语音播报功能。由于近期业务中,物联网蓝牙连接设备过程中,光有 toast,客户感觉无感操作,故新增了语音播报功能。
语音广播的应用场景也很多,所以我们可以找到一个适合我们的。

[En]

There are also many application scenarios for voice broadcasting, so we can find one that suits us.

Android 语音播报之项目实战

项目实战

在这里我单独拉出来一个项目,供各位老板参考一下,共同学习!

Android 语音播报之项目实战
当初在遇到语音播报的时候,不知道应用哪个好,开发周期比较紧张,所以引用了 TextToSpeech,研发简单、简便。
在研发过程中,遇到了一个问题,第一次运行,语音播放是正常的。活动页面运行销毁后,语音播报异常,无法二次上报,目前该问题已得到解决。
[En]

In the process of research and development, encountered a problem, the first run, voice broadcast is normal. After the activity page is run and destroyed, the voice broadcast is abnormal and cannot be reported for the second time, and this problem has been solved.

具体代码如下:

/**
 * @author 拉莫帅
 * @date 2022/8/15
 * @address
 * @Desc 语音播报监听开始、结束
 */
public interface SpeakListener {
    void startSpeak(String text);

    void stopSpeak();
}
/**
 * @author 拉莫帅
 * @date 2022/8/15
 * @address
 * @Desc 语音播报工具类
 */
public class SpeechUtils extends UtteranceProgressListener implements SpeakListener, TextToSpeech.OnUtteranceCompletedListener{
    private Context mContext;
    private static SpeechUtils singleton;
    private TextToSpeech mTextToSpeech; // 系统语音播报类
    private boolean isSuccess = true;

    /**
     * 单例模式
     * @param context
     * @return
     */
    public static SpeechUtils getInstance(Context context) {
        if (singleton == null) {
            synchronized (SpeechUtils.class) {
                if (singleton == null) {
                    singleton = new SpeechUtils(context);
                }
            }
        }
        return singleton;
    }

    private SpeechUtils(Context context) {
        this.mContext = context.getApplicationContext();
        mTextToSpeech = new TextToSpeech(mContext, new TextToSpeech.OnInitListener() {
            @Override
            public void onInit(int i) {
                //系统语音初始化成功
                if (i == TextToSpeech.SUCCESS) {//操作成功
                    int result = mTextToSpeech.setLanguage(Locale.CHINA);
                    mTextToSpeech.setPitch(1.0f);// 设置音调,值越大声音越尖(女生),值越小则变成男声,1.0是常规
                    mTextToSpeech.setSpeechRate(1.0f);
                    mTextToSpeech.setOnUtteranceProgressListener(SpeechUtils.this);
                    mTextToSpeech.setOnUtteranceCompletedListener(SpeechUtils.this);

                    // TextToSpeech.LANG_MISSING_DATA:表示语言的数据丢失
                    // TextToSpeech.LANG_NOT_SUPPORTED:不支持
                    if (result == TextToSpeech.LANG_MISSING_DATA
                            || result == TextToSpeech.LANG_NOT_SUPPORTED) {
                        //系统不支持中文播报
                        isSuccess = false;
                    }
                }

            }
        });
    }

    /**
     * 开始播报
     * @param text
     */
    @SuppressLint("NewApi")
    @Override
    public void startSpeak(String text) {
        if (!isSuccess) {
            Toast.makeText(mContext, "系统不支持中文播报", Toast.LENGTH_SHORT).show();
            return;
        }

        if (mTextToSpeech != null) {
            // QUEUE_ADD:该模式下会把新的语音任务放到语音任务之后,等前面的语音任务执行完了才会执行新的语音任务。
            // QUEUE_FLUSH:该模式下在有新任务时候会清除当前语音任务,执行新的语音任务
            mTextToSpeech.speak(text,
                    TextToSpeech.QUEUE_ADD, null, null);
        }
    }

    /**
     * 结束播报
     */
    @Override
    public void stopSpeak() {
        if (mTextToSpeech != null) {
            mTextToSpeech.stop();
        }
    }

    /**
     * 语音播报完成回调
     * @param utteranceId
     */
    @Override
    public void onUtteranceCompleted(String utteranceId) {

    }

    @Override
    public void onStart(String utteranceId) {

    }

    @Override
    public void onDone(String utteranceId) {

    }

    @Override
    public void onError(String utteranceId) {

    }
}
/**
 * @author 拉莫帅
 * @date 2022/8/15
 * @address
 * @Desc 主功能(TTS)
 */
public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    private SpeechUtils speechUtils;
    private EditText editText;
    private ImageView speakButton;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        initView();
    }

    /**
     * 初始化控件
     */
    private void initView() {
        speechUtils = SpeechUtils.getInstance(MainActivity.this);
        editText = findViewById(R.id.editText);
        speakButton = findViewById(R.id.btn);
        speakButton.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.btn:
                String speakText = editText.getText().toString().trim();
                boolean empty = StrUtils.isEmpty(speakText);

                if (empty) {
                    //执行播报
                    speechUtils.startSpeak("请您输入要播报的内容");
                    Toast.makeText(MainActivity.this, "请您输入要播报的内容", Toast.LENGTH_SHORT).show();
                    return;
                } else {
                    speechUtils.startSpeak(speakText);
                    Toast.makeText(MainActivity.this, speakText, Toast.LENGTH_SHORT).show();
                }
                break;
        }
    }

    /**
     * 销毁
     */
    @Override
    protected void onDestroy() {
        super.onDestroy();

        //结束播报
        speechUtils.stopSpeak();
    }
}

真机调试

语音播报,本人应用多版本真机进行了测试,目前没有发现什么问题,欢迎大家来补充!
真机分别:红米手机、华为手机、华为平板、华为鸿蒙系统手机、vivo手机,以上机型实测有效。

真机版本如下:

Android 语音播报之项目实战

Android 语音播报之项目实战

今天拿朋友的Android 4、7小米平板真机调试,系统不支持中文播放

Android 语音播报之项目实战

; 结尾

欢迎各位领导光临我的寒舍,一起学习,留言洽谈。

[En]

Welcome all bosses to visit my humble house, study together and leave a message for discussion.

项目地址:Android 语音播报功能之项目实战

Android 语音播报之项目实战

Original: https://blog.csdn.net/chen_md/article/details/126425386
Author: 拉莫帅
Title: Android 语音播报之项目实战

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/525729/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球