聊天
来源:互联网 发布:nginx check module 编辑:程序博客网 时间:2024/04/28 04:53
先看效果:
代码实现:
1.先下载sdk,然后进行解压,放到对应的文件夹中,
2.写一个语音工具类:
AudioUtils:
package com.example.administrator.liujie;import android.content.Context;import android.os.Bundle;import android.util.Log;import com.iflytek.cloud.InitListener;import com.iflytek.cloud.SpeechConstant;import com.iflytek.cloud.SpeechError;import com.iflytek.cloud.SpeechSynthesizer;import com.iflytek.cloud.SynthesizerListener;/** * Created by Administrator on 2017/12/1. */public class AudioUtils { private static AudioUtils audioUtils; private SpeechSynthesizer mySynthesizer; private AudioUtils() { } /** * 描述:单例 */ public static AudioUtils getInstance() { if (audioUtils == null) { synchronized (AudioUtils.class) { if (audioUtils == null) { audioUtils = new AudioUtils(); } } } return audioUtils; } private InitListener myInitListener = new InitListener() { @Override public void onInit(int code) { Log.d("mySynthesiezer:", "InitListener init() code = " + code); } }; /** * 描述:初始化语音配置 */ public void init(Context context) { //处理语音合成关键类 mySynthesizer = SpeechSynthesizer.createSynthesizer(context, myInitListener); //设置发音人 mySynthesizer.setParameter(SpeechConstant.VOICE_NAME, "xiaoyan"); //设置音调 mySynthesizer.setParameter(SpeechConstant.PITCH, "50"); //设置音量 mySynthesizer.setParameter(SpeechConstant.VOLUME, "50"); } /** * 描述:根据传入的文本转换音频并播放 */ public void speakText(final String content) { int code = mySynthesizer.startSpeaking(content, new SynthesizerListener() { //开始播放 @Override public void onSpeakBegin() { } //缓冲进度回调 @Override public void onBufferProgress(int i, int i1, int i2, String s) { } //暂停播放 @Override public void onSpeakPaused() { } //恢复播放回调接口 @Override public void onSpeakResumed() { } //播放进度回调 @Override public void onSpeakProgress(int i, int i1, int i2) { } //会话结束回调接口 @Override public void onCompleted(SpeechError speechError) { } @Override public void onEvent(int i, int i1, int i2, Bundle bundle) { } }); }}3.MainActivity:
package com.example.administrator.liujie;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.view.View;import android.widget.Button;import android.widget.EditText;import android.widget.Toast;import com.iflytek.cloud.RecognizerResult;import com.iflytek.cloud.SpeechConstant;import com.iflytek.cloud.SpeechError;import com.iflytek.cloud.SpeechUtility;import com.iflytek.cloud.ui.RecognizerDialog;import com.iflytek.cloud.ui.RecognizerDialogListener;import org.json.JSONArray;import org.json.JSONObject;import org.json.JSONTokener;public class MainActivity extends AppCompatActivity implements View.OnClickListener { private Button btn_click; private Button btn_open; private EditText mResultText; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); btn_click = (Button) findViewById(R.id.btn_click); btn_open = (Button) findViewById(R.id.btn_open); mResultText = ((EditText) findViewById(R.id.result)); SpeechUtility.createUtility(this, SpeechConstant.APPID + "= 5a20e5b4"); btn_click.setOnClickListener(this); btn_open.setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.btn_click: btnVoice(); break; case R.id.btn_open: AudioUtils.getInstance().init(MainActivity.this); //初始化语音对象 String s = mResultText.getText().toString(); AudioUtils.getInstance().speakText(s); //播放语音 break; } } //TODO 开始说话: private void btnVoice() { RecognizerDialog dialog = new RecognizerDialog(this, null); dialog.setParameter(SpeechConstant.LANGUAGE, "zh_cn"); dialog.setParameter(SpeechConstant.ACCENT, "mandarin"); dialog.setListener(new RecognizerDialogListener() { @Override public void onResult(RecognizerResult recognizerResult, boolean b) { printResult(recognizerResult); } @Override public void onError(SpeechError speechError) { } }); dialog.show(); Toast.makeText(this, "请开始说话", Toast.LENGTH_SHORT).show(); } //回调结果: private void printResult(RecognizerResult results) { String text = parseIatResult(results.getResultString()); // 自动填写地址 mResultText.append(text); } public static String parseIatResult(String json) { StringBuffer ret = new StringBuffer(); try { JSONTokener tokener = new JSONTokener(json); JSONObject joResult = new JSONObject(tokener); JSONArray words = joResult.getJSONArray("ws"); for (int i = 0; i < words.length(); i++) { // 转写结果词,默认使用第一个结果 JSONArray items = words.getJSONObject(i).getJSONArray("cw"); JSONObject obj = items.getJSONObject(0); ret.append(obj.getString("w")); } } catch (Exception e) { e.printStackTrace(); } return ret.toString(); }}4.activity_main:
<?xml version="1.0" encoding="utf-8"?><RelativeLayout 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="com.example.administrator.liujie.MainActivity"> <Button android:id="@+id/btn_click" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="点击打开语音识别" /> <EditText android:id="@+id/result" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@id/btn_click" android:hint="此处显示你所录下的内容" /> <Button android:id="@+id/btn_open" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/result" android:text="播放语音" /></RelativeLayout>5.权限:
<uses-permission android:name="android.permission.RECORD_AUDIO" /><uses-permission android:name="android.permission.INTERNET" /><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /><uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /><uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" /><uses-permission android:name="android.permission.READ_PHONE_STATE" /><uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /><uses-permission android:name="android.permission.READ_CONTACTS" /><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.CAMERA" />6.效果就实现了。本人写了好几次才写对。
阅读全文
0 0
- 聊天
- 聊天
- 聊天
- 聊天
- 聊天
- 聊天
- 聊天
- 聊天
- 聊天
- 聊天
- 聊天
- 聊天
- 聊天
- 聊天
- 聊天
- 聊天
- 聊天
- Java聊天--聊天界面
- unity shader-UV平移,旋转,缩放
- 算法训练 和为T
- PADS 导出BOM
- 171201 逆向-JarvisOJ(软件密码破解-2)
- Android 从apk中“偷”资源(反编译)
- 聊天
- Android进阶-View系列(三)-Android绘图机制与处理技巧(下)
- 集合ArrayList,LinkedList,Vector的区别
- 配置监听--当该类实现ServletContextListener,会导致spring的@resource不能用,解决方法
- Lua笔记-关于lua table的C API
- 树状数组 ( Binary Indexed Tree,BIT,二分索引树 )
- 计算机网络体系之混合模型之数据链路层
- Google神秘实验室里,诞生了哪些有趣玩意儿?
- Linux动态库生成与使用指南