Android 实现语音

来源:互联网 发布:牛头酋长wq二连优化 编辑:程序博客网 时间:2024/06/13 11:20
public class MyTextToSpeech implements TextToSpeech.OnInitListener {    /**     * 语音     */    private TextToSpeech mTextToSpeech;//TTS对象    private ConcurrentLinkedQueue mBufferedMessages;//消息队列    private boolean mIsReady;//标识符    private Context context;    private String text;    public MyTextToSpeech(Context context, String text) {        mBufferedMessages = new ConcurrentLinkedQueue();//实例化队列        mTextToSpeech = new TextToSpeech(context, this);//实例化TTS        this.context = context;        this.text = text;    }    @Override    public void onInit(int status) {        Log.i("TextToSpeechDemo", String.valueOf(status));        if (status == TextToSpeech.SUCCESS) {            int result = this.mTextToSpeech.setLanguage(Locale.CHINA);//设置识别语音为中文            if (result == TextToSpeech.LANG_MISSING_DATA                    || result == TextToSpeech.LANG_NOT_SUPPORTED) {                Vibrator vibrator = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE);                long l[] = {100, 500, 100, 500};                vibrator.vibrate(l, -1);                Toast.makeText(context, "数据丢失或不支持", Toast.LENGTH_SHORT).show();            }            synchronized (this) {                this.mIsReady = true;//设置标识符为true//                for (String bufferedMessage : this.mBufferedMessages) {//                    speakText(bufferedMessage);//读语音//                }                speakText(text);//读语音                this.mBufferedMessages.clear();//读完后清空队列            }        }    }    //释放资源    public void release() {        synchronized (this) {            this.mTextToSpeech.shutdown();            this.mIsReady = false;        }    }    //更新消息队列,或者读语音    public void notifyNewMessage(String lanaugh) {        String message = lanaugh;        synchronized (this) {            if (this.mIsReady) {                speakText(message);            } else {                this.mBufferedMessages.add(message);            }        }    }    //读语音处理    private void speakText(String message) {        Log.i("BloodPressureBluetooth1", message);        HashMap params = new HashMap();        params.put(TextToSpeech.Engine.KEY_PARAM_STREAM, "STREAM_NOTIFICATION");//设置播放类型(音频流类型)        this.mTextToSpeech.speak(message, TextToSpeech.QUEUE_ADD, params);//将这个发音任务添加当前任务之后        this.mTextToSpeech.playSilence(100, TextToSpeech.QUEUE_ADD, params);//间隔多长时间    }}