You need to enable JavaScript to run this app.
文档中心
豆包语音

豆包语音

复制全文
下载 pdf
语音识别大模型
流式语音识别(Android)
复制全文
下载 pdf
流式语音识别(Android)
基于大模型流式语音识别接口,支持音频流式输入、识别结果流式输出,低时延,适用于实时语音识别场景,覆盖多语种与多方言,以下为面向开发者的Android SDK接入说明。​
SDK版本​
Android: com.bytedance.speechengine:speechengine_tob: 0.0.15.0​
​
// Speech Engine​
implementation 'com.bytedance.speechengine:speechengine_tob:0.0.15.0'​
// Net okhttp:4.9.1为默认依赖的网络库版本,若有其它版本需要,可引用相应okhttp版本​
implementation("com.squareup.okhttp3:okhttp:4.9.1")​
​
示例demo​
主要参考BigAsrActivity​
​
​
SpeechDemoAndroid.zip
​
​
兼容性​
​
类别​
兼容范围​
系统​
最低支持Android 4.4 以上版本,API LEVEL 19​
架构​
armeabi-v7a,arm64-v8a​
网络​
支持移动数据与 WiFi 两种网络环境​
​
AndroidManifest.xml 文件​
​
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />​
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />​
<uses-permission android:name="android.permission.RECORD_AUDIO" />​
<uses-permission android:name="android.permission.INTERNET" />​
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />​
​
混淆规则​
​
-keep class com.bytedance.speech.speechengine.SpeechEngineImpl {*;}​
​
调用流程​
初始化环境依赖​
创建语音对话 SDK 引擎实例前调用,完成网络环境等相关依赖配置。APP 生命周期内仅需执行一次。​
​
SpeechEngineGenerator.PrepareEnvironment(getApplicationContext(), getApplication());​
​
创建引擎实例​
​
SpeechEngine engine = SpeechEngineGenerator.getInstance();​
engine.createEngine();​
engine.setContext(getApplicationContext());​
​
参数配置​
必需配置​
​
//【必需配置】Engine Name​
mSpeechEngine.setOptionString(SpeechEngineDefines.PARAMS_KEY_ENGINE_NAME_STRING, SpeechEngineDefines.ASR_ENGINE);​
//【必需配置】鉴权相关,若采取新版控制台,则必需使用该配置。API Key 可以从 控制台>API Key管理 获取​
mSpeechEngine.setOptionString(SpeechEngineDefines.PARAMS_KEY_API_KEY_STRING, "your-api-key");​
//【必需配置】鉴权相关:Appid。旧版控制台的鉴权方式,详见旧版控制台鉴权参考​
engine.setOptionString(SpeechEngineDefines.PARAMS_KEY_APP_ID_STRING, "APPID");​
//【必需配置】鉴权相关:Token。旧版控制台的鉴权方式,详见旧版控制台鉴权参考​
engine.setOptionString(SpeechEngineDefines.PARAMS_KEY_APP_TOKEN_STRING, "ACCESS TOKEN");​
//【必需配置】识别服务域名​
mSpeechEngine.setOptionString(SpeechEngineDefines.PARAMS_KEY_ASR_ADDRESS_STRING, "wss://openspeech.bytedance.com");​
//【必需配置】识别服务URI​
mSpeechEngine.setOptionString(SpeechEngineDefines.PARAMS_KEY_ASR_URI_STRING, "");​
//【必需配置】语音识别大模型服务Resource id。可选值:volc.seedasr.sauc.duration:豆包流式语音识别模型2.0(小时版);volc.seedasr.sauc.concurrent:豆包流式语音识别模型2.0(并发版)​
mSpeechEngine.setOptionString(SpeechEngineDefines.PARAMS_KEY_RESOURCE_ID_STRING, "RESOURCE ID");​
//【必需配置】协议类型,BigAsr协议需设置为Seed​
mSpeechEngine.setOptionInt(SpeechEngineDefines.PARAMS_KEY_PROTOCOL_TYPE_INT, SpeechEngineDefines.PROTOCOL_TYPE_SEED);​
//【必需配置】配置音频来源​
mSpeechEngine.setOptionString(SpeechEngineDefines.PARAMS_KEY_RECORDER_TYPE_STRING, SpeechEngineDefines.RECORDER_TYPE_RECORDER);​
​
音频来源 ​
语音识别 SDK 支持以内置录音机、外部 PCM 音频流或音频文件作为输入,配置值分别为:​
  • SpeechEngineDefines.RECORDER_TYPE_RECORDER,内置录音机;​
  • SpeechEngineDefines.RECORDER_TYPE_STREAM,外部 PCM 音频流;​
  • SpeechEngineDefines.RECORDER_TYPE_FILE,PCM 格式的音频文件。​
​
//【必须配置】默认使用系统内置录音机​
engine.setOptionString(SpeechEngineDefines.PARAMS_KEY_RECORDER_TYPE_STRING, SpeechEngineDefines.RECORDER_TYPE_RECORDER);​
​
​
//【可选配置】是否需要返回录音音量​
engine.setOptionBoolean(SpeechEngineDefines.PARAMS_KEY_ENABLE_GET_VOLUME_BOOL, mEnableGetVolume);​
​
设置最大录音时长,当达到设置的时间后,会发送音频结束包并等待asr结果​
​
//【可选配置】最大录音时长,默认60000ms,如果使用场景超过60s请修改该值,-1为不限制录音时长​
engine.setOptionInt(SpeechEngineDefines.PARAMS_KEY_VAD_MAX_SPEECH_DURATION_INT, 60000);​
​
可选配置​
​
//【可选配置】本地日志文件路径,SDK会在该路径文件夹下生成名为 speech_sdk.log 的日志文件,开发时设置,线上关闭。​
mSpeechEngine.setOptionString(SpeechEngineDefines.PARAMS_KEY_DEBUG_PATH_STRING, "已存在的文件夹路径,或者空字符串");​
//【可选配置】日志级别,开发时设置为 DEBUG,线上设置 WARN;​
mSpeechEngine.setOptionString(SpeechEngineDefines.PARAMS_KEY_LOG_LEVEL_STRING, SpeechEngineDefines.LOG_LEVEL_DEBUG);​
//【可选配置】User ID(用以辅助定位线上用户问题)​
mSpeechEngine.setOptionString(SpeechEngineDefines.PARAMS_KEY_UID_STRING, "YOUR_UID");​
//【可选配置】录音文件保存路径,如配置,SDK会将录音保存到该路径下,文件格式为 .wav​
mSpeechEngine.setOptionString(SpeechEngineDefines.PARAMS_KEY_ASR_REC_PATH_STRING, "your-debug-path");​
//【可选配置】在线请求的建连与接收超时,一般不需配置使用默认值即可,单位毫秒​
mSpeechEngine.setOptionInt(SpeechEngineDefines.PARAMS_KEY_ASR_CONN_TIMEOUT_INT, 3000);​
mSpeechEngine.setOptionInt(SpeechEngineDefines.PARAMS_KEY_ASR_RECV_TIMEOUT_INT, 5000);​
//【可选配置】在线请求断连后,重连次数,默认值为0,如果需要开启需要设置大于0的次数​
mSpeechEngine.setOptionInt(SpeechEngineDefines.PARAMS_KEY_ASR_MAX_RETRY_TIMES_INT, 0);​
//【可选配置】音频采样率,默认16000​
mSpeechEngine.setOptionInt(SpeechEngineDefines.PARAMS_KEY_SAMPLE_RATE_INT, 16000);​
//【可选配置】音频通道数,默认1,可选1或2​
mSpeechEngine.setOptionInt(SpeechEngineDefines.PARAMS_KEY_CHANNEL_NUM_INT, 1);​
//【可选配置】上传给服务的音频通道数,默认1,可选1或2,一般与PARAMS_KEY_CHANNEL_NUM_INT保持一致即可​
mSpeechEngine.setOptionInt(SpeechEngineDefines.PARAMS_KEY_UP_CHANNEL_NUM_INT, 1);​
//【可选配置】当音频来源为 RECORDER_TYPE_STREAM 时,如输入音频采样率不等于 16K,需启用 SDK 内部的重采样​
mSpeechEngine.setOptionBoolean(SpeechEngineDefines.PARAMS_KEY_ENABLE_RESAMPLER_BOOL, true);​
//【可选配置】将重采样所需的输入采样率设置为 APP 层输入的音频的实际采样率​
mSpeechEngine.setOptionInt(SpeechEngineDefines.PARAMS_KEY_CUSTOM_SAMPLE_RATE_INT, 自定义采样率);​
mSpeechEngine.setOptionInt(SpeechEngineDefines.PARAMS_KEY_CUSTOM_CHANNEL_INT, 自定义通道数);​
//【可选配置】控制是否返回录音音量,在 APP 需要显示音频波形时可以启用​
mSpeechEngine.setOptionBoolean(SpeechEngineDefines.PARAMS_KEY_ENABLE_GET_VOLUME_BOOL, false);​
//【可选配置】录音预设模式,设置为 VOICE_COMMUNICATION 可开启系统自带的回声消除(AEC)能力​
// 注意:该功能并非SDK提供的功能,效果取决于底层系统和硬件​
mSpeechEngine.setOptionInt(SpeechEngineDefines.PARAMS_KEY_RECORDER_PRESET_INT, SpeechEngineDefines.RECORDER_PRESET_VOICE_COMMUNICATION);​
//【可选配置】设置识别语种(audio层级参数),例如 zh-CN、en-US 等​
mSpeechEngine.setOptionString(SpeechEngineDefines.PARAMS_KEY_ASR_LANGUAGE_STRING, "zh-CN");​
//【可选配置】是否输出语音停顿、分句、分词信息(utterance信息),默认关闭​
// 注意:开启后,还需要在大模型ASR请求参数中设置 show_utterances 为 True 才会生效​
mSpeechEngine.setOptionBoolean(SpeechEngineDefines.PARAMS_KEY_ASR_SHOW_UTTER_BOOL, true);​
​
大模型ASR参数配置​
大模型ASR相关参数需要通过 PARAMS_KEY_ASR_REQ_PARAMS_STRING 配置传入,以下用设置VAD切句、热词表为例,其它参数同理(BigASR相关参数可参考:语音识别API文档)。​
​
// 配置大模型ASR请求参数:VAD切句参数 + 热词表 + 纠错词​
mSpeechEngine.setOptionString(SpeechEngineDefines.PARAMS_KEY_ASR_REQ_PARAMS_STRING,​
"{\"force_to_speech_time\":0, \"end_window_size\":800," +​
"\"corpus\":{\"boosting_table_id\":\"热词id\"}, " +​
"\"context\": \"{\\\"correct_words\\\": {\\\"deep seek\\\": \\\"DeepSeek\\\"}}\"}");​
​
注:若要输出语音停顿、分句、分词信息,需先设置 PARAMS_KEY_ASR_SHOW_UTTER_BOOL 为 true。​
初始化引擎实例​
初始化引擎对象并设置回调监听。​
​
// 初始化引擎实例​
int ret = mSpeechEngine.initEngine();​
if (ret != SpeechEngineDefines.ERR_NO_ERROR) {​
Log.e(SpeechDemoDefines.TAG, "初始化失败,返回值: " + ret);​
return;​
}​
mSpeechEngine.setListener(this);​
​
发送指令​
语音对话 SDK 通过发送指令接口 sendDirective 触发各种操作,需要注意不建议在 SDK 的回调线程中调用该接口。​
启动引擎​
启动引擎前调用SYNC_STOP指令,保证前一次请求结束。​
​
// 注意这里先调用同步停止,避免SDK内部异步线程带来的问题​
mSpeechEngine.sendDirective(SpeechEngineDefines.DIRECTIVE_SYNC_STOP_ENGINE, "");​
// 启动ASR引擎​
int ret = mSpeechEngine.sendDirective(SpeechEngineDefines.DIRECTIVE_START_ENGINE, "");​
if (ret == SpeechEngineDefines.ERR_REC_CHECK_ENVIRONMENT_FAILED) {​
Log.e(SpeechDemoDefines.TAG, "无录音权限");​
} else if (ret != SpeechEngineDefines.ERR_NO_ERROR) {​
Log.e(SpeechDemoDefines.TAG, "启动失败,返回值: " + ret);​
return;​
}​
​
注意:当音频来源为 RECORDER_TYPE_STREAM 时,启动引擎前需要自行启动 APP 层的录音机。当音频来源为 FILE 时,需要设置音频文件路径:​
​
// 使用音频文件识别时【必须配置】,否则【无需配置】​
String test_file_path = "your-debug-path"+ "/asr_rec_file.pcm";​
Log.d(SpeechDemoDefines.TAG, "输入的音频文件路径: " + test_file_path);​
mSpeechEngine.setOptionString(SpeechEngineDefines.PARAMS_KEY_RECORDER_FILE_STRING, test_file_path);​
​
结束音频输入-FinishTalking​
如果是按住说话模式,松手后调用 FinishTalking 结束音频输入,等待最终识别结果。​
​
// Directive:结束用户音频输入​
mSpeechEngine.sendDirective(SpeechEngineDefines.DIRECTIVE_FINISH_TALKING, "");​
​
停止引擎​
​
// 关闭引擎(异步)​
mSpeechEngine.sendDirective(SpeechEngineDefines.DIRECTIVE_STOP_ENGINE, "");​
​
回调接收返回数据​
启动引擎后,SDK会不断回调消息。​
​
@Override​
public void onSpeechMessage(int type, byte[] data, int len) {​
String stdData = new String(data);​
switch (type) {​
case SpeechEngineDefines.MESSAGE_TYPE_ENGINE_START:​
// Callback: 引擎启动成功回调​
Log.i(SpeechDemoDefines.TAG, "Callback: 引擎启动成功: data: " + stdData);​
break;​
case SpeechEngineDefines.MESSAGE_TYPE_ENGINE_STOP:​
// Callback: 引擎关闭回调​
Log.i(SpeechDemoDefines.TAG, "Callback: 引擎关闭: data: " + stdData);​
break;​
case SpeechEngineDefines.MESSAGE_TYPE_ENGINE_ERROR:​
// Callback: 错误信息回调​
Log.e(SpeechDemoDefines.TAG, "Callback: 错误信息: " + stdData);​
break;​
case SpeechEngineDefines.MESSAGE_TYPE_CONNECTION_CONNECTED:​
// Callback: 建连成功​
Log.i(SpeechDemoDefines.TAG, "Callback: 建连成功: data: " + stdData);​
break;​
case SpeechEngineDefines.MESSAGE_TYPE_PARTIAL_RESULT:​
// Callback: ASR 当前请求的部分结果回调​
Log.d(SpeechDemoDefines.TAG, "Callback: ASR 当前请求的部分结果: " + stdData);​
break;​
case SpeechEngineDefines.MESSAGE_TYPE_FINAL_RESULT:​
// Callback: ASR 当前请求最终结果回调​
Log.i(SpeechDemoDefines.TAG, "Callback: ASR 当前请求最终结果: " + stdData);​
break;​
case SpeechEngineDefines.MESSAGE_TYPE_VOLUME_LEVEL:​
// Callback: 录音音量回调​
Log.d(SpeechDemoDefines.TAG, "Callback: 录音音量");​
break;​
default:​
break;​
}​
}​
​
// Callback: 连接建立成功时服务端的logid回调,方便排查问题​
@Override​
public void onSpeechLogid(String logid) {​
Log.d(SpeechDemoDefines.TAG, "Callback: logid: " + logid);​
}​
​
回调消息说明​
​
消息类型​
说明​
MESSAGE_TYPE_ENGINE_START​
引擎启动成功回调​
MESSAGE_TYPE_ENGINE_STOP​
引擎关闭回调​
MESSAGE_TYPE_ENGINE_ERROR​
错误信息回调​
MESSAGE_TYPE_CONNECTION_CONNECTED​
建连成功回调​
MESSAGE_TYPE_PARTIAL_RESULT​
ASR 当前请求的部分结果回调(实时识别中)​
MESSAGE_TYPE_FINAL_RESULT​
ASR 当前请求最终结果回调​
MESSAGE_TYPE_VOLUME_LEVEL​
录音音量回调,需开启 PARAMS_KEY_ENABLE_GET_VOLUME_BOOL​
onSpeechLogid​
连接建立成功时服务端的logid回调,方便排查问题​
​
销毁引擎实例​
当不再需要语音识别后,建议对引擎实例进行销毁,释放内存资源。​
​
// 内部会执行SYNC_STOP,不可在回调线程中执行。​
mSpeechEngine.destroyEngine();​
mSpeechEngine = null;​
​
最近更新时间:2026.09.28 19:16:16
这个页面对您有帮助吗?
有用
有用
无用
无用