Android 语音播报,语音识别demo

该功能是基于百度智能云实现的根据文字进行语音播报。

 

1、首先到百度智能云创建语音应用

https://console.bce.baidu.com/ai/

 

 填写包名创建百度语音应用,获取AppID,API Key,Secret Key

 

2、导入资源文件。语音jar,assets语音库,jni系统文件

 

 3、创建工具类

 

4、activity初始化语音引擎

protected String appId = "20729771";

protected String appKey = "6SSdraj9RFUKyAmf36DcpYy3";

protected String secretKey = "dmqQYTXsPUmWwgSQU06vj2plHKTAdaF3";
protected TtsMode ttsMode = TtsMode.MIX;

protected MySyntherizer synthesizer;
SpeechSynthesizerListener listener;
protected String offlineVoice = OfflineResource.VOICE_MALE;

在Application的onCreate方法里面初始化

 

Map<String, String> params = getParams();
InitConfig initConfig = new InitConfig(appId, appKey, secretKey, ttsMode, params, listener);

synthesizer = new MySyntherizer(this,initConfig,null);

 

开始播报内容

 

synthesizer.speak(str1);

 

demo链接:https://download.youkuaiyun.com/download/meixi_android/11193641

在线回复bug:QQ1085220040

附:切换声音类型dialog

AlertDialog.Builder builder = new AlertDialog.Builder(SynthActivity.this, android.R.style.Theme_Holo_Light_Dialog);
builder.setTitle("引擎空闲时切换");
final Map<String, String> map = new LinkedHashMap<>(4);
map.put("离线女声", OfflineResource.VOICE_FEMALE);
map.put("离线男声", OfflineResource.VOICE_MALE);
map.put("离线度逍遥", OfflineResource.VOICE_DUXY);
map.put("离线度丫丫", OfflineResource.VOICE_DUYY);
final String[] keysTemp = new String[4];
final String[] keys = map.keySet().toArray(keysTemp);
builder.setItems(keys, new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
        loadModel(map.get(keys[which]));
        Log.i("lgq","....."+map.get(keys[which]));
    }
});
builder.show();

 

 方法二:

说明:只适用安卓6,0以上设备

两个工具方法,即可实现语音播报

public interface TTS {
    void playText(String playText);

    void stopSpeak();
}
public class SystemTTS extends UtteranceProgressListener implements TTS, TextToSpeech.OnUtteranceCompletedListener {
    private Context mContext;
    private static SystemTTS singleton;
    private TextToSpeech textToSpeech; // 系统语音播报类
    private boolean isSuccess = true;

    public static SystemTTS getInstance(Context context) {
        if (singleton == null) {
            synchronized (SystemTTS.class) {
                if (singleton == null) {
                    singleton = new SystemTTS(context);
                }
            }
        }
        return singleton;
    }

    private SystemTTS(Context context) {
        this.mContext = context.getApplicationContext();
        textToSpeech = new TextToSpeech(mContext, new TextToSpeech.OnInitListener() {
            @Override
            public void onInit(int i) {
                //系统语音初始化成功
                if (i == TextToSpeech.SUCCESS) {
                    int result = textToSpeech.setLanguage(Locale.CHINA);
                    textToSpeech.setPitch(1.0f);// 设置音调,值越大声音越尖(女生),值越小则变成男声,1.0是常规
                    textToSpeech.setSpeechRate(1.0f);
                    textToSpeech.setOnUtteranceProgressListener(SystemTTS.this);
                    textToSpeech.setOnUtteranceCompletedListener(SystemTTS.this);
                    if (result == TextToSpeech.LANG_MISSING_DATA
                            || result == TextToSpeech.LANG_NOT_SUPPORTED) {
                        //系统不支持中文播报
                        isSuccess = false;
                    }
                }

            }
        });
    }

    public void playText(String playText) {
        if (!isSuccess) {
            Toast.makeText(mContext, "系统不支持中文播报", Toast.LENGTH_SHORT).show();
            return;
        }
        if (textToSpeech != null) {
            textToSpeech.speak(playText,
                    TextToSpeech.QUEUE_ADD, null, null);
        }
    }

    public void stopSpeak() {
        if (textToSpeech != null) {
            textToSpeech.stop();
        }
    }

//    public boolean isSpeaking() {
//        if (textToSpeech.isSpeaking()) {
//            return true;
//        }
//        return false;
//    }


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

    }

    @Override
    public void onStart(String utteranceId) {

    }

    @Override
    public void onDone(String utteranceId) {
    }

    @Override
    public void onError(String utteranceId) {

    }
}

 调用播报:

SystemTTS systemTTS = SystemTTS.getInstance(MainActivity.this);
systemTTS.playText("支付宝到账一百万");

 

语音识别 实现

语音识别比较简单,只需要引入百度的代码库即可实现

实现效果

 

 百度语音识别demo:https://download.youkuaiyun.com/download/meixi_android/15512732

在线语音播报bug交流:扣1085220040 

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值