1.1. 修订记录
版本 | 日期 | 修改记录 | 修改人 |
---|---|---|---|
V1.2.48 | 20171224 | 初始版本 | randychen |
V1.2.52 | 20180326 | 语义理解与语音合成 | randychen |
V1.2.60 | 20190313 | 为2.0版语音增加热词功能 | Luke |
V1.2.74 | 20231010 | 更新jdbase版本,新增分区设置,语音设置 | yin |
1.2. 概述
SDK包含以下功能模块
- 获取主机推荐歌单
- 获取主机本地音乐和扫描本地场景文件夹
- 语音合成和拦截语义自行处理
- 获取主机接受的485数据与主机发送485数据
- 主机模式切换
- 双音源机器支持分区设置
集成可以根据自己的需求选择功能
1.3. 交互图
1.4. 公共接入配置
1.4.1. 下载demo
百度网盘下载链接: 链接: https://pan.baidu.com/s/179xcJ6HirWoDVofAcsJN5A 密码: 3vix
路径:JdRelease/jd_music_and_voice_open_sdk
demo需安装并运行于背景音乐主机中,安装完成后重启机器。
1.4.2. 导入核心包
将demo内部两个核心包导入:jdbase-release.aar 和 jdmusic-release-X.X.XX.aar 导入项目
repositories{
flatDir{
dirs'libs'
}
}
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
compile(name: 'jdbase-release', ext: 'aar')
compile(name: 'jdmusic-release-X.X.XX', ext: 'aar')
}
1.4.3. 添加权限
在AndroidManifest.xml中添加如下权限
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
1.4.4. 初始化
public class App extends Application{
@Override
public void onCreate() {
super.onCreate();
JdPlayPresenter.getInstance().init(this);
}
}
1.5. 基于开放SDK接入
1.5.1. 关键类说明
类 | 说明 |
---|---|
JdRecommendMusicPresenter | 获取主机推荐音乐 |
JdPlayPresenter | 播放控制与播放状态监听 |
JdLocalMusicPresenter | 获取主机本地歌曲列表,扫描场景歌曲文件夹 |
JdVoicePresenter | 语音合成和语义识别 |
TTS | 语音合成实体类 |
1.5.2. 关键类接口使用说明
TTS
public class TTS {
//不操作
public static final int TYPE_NONE = 0;
//进入识别
public static final int TYPE_ASR = 1;
//进入唤醒
public static final int TYPE_WAKE_UP = 2;
//TTS 内容
private String tts;
//是否打断当前播放的
private boolean canInterrupt;
//TTS类型
private int ttsType;
}
JdRecommendMusicPresenter
回调函数
public interface IRecommendCallBack {
void onQuerySceneMusic(List<JDMusicChannel> var1);
}
void onQuerySceneMusic(List<JDMusicChannel> var1)
参数
* var1 主机推荐音乐集合
主要方法
void querySceneMusic()
查询主机推荐音乐集合
JdPlayPresenter
回调函数
public interface IPlayCallBack {
void onProgress(int var1, int var2);
void onSongChange(EglSong var1);
void onPlayStatus(int var1);
void onListModeChange(String var1);
void onPlaylist(List<JdSong> var1);
void onPlaylistPosition(int var1);
}
public interface I485DataCallBack {
void onReceiverData(String var1);
}
void onProgress(int var1, int var2)
参数
* var1 Progress
* var2 Max_Progress
void onSongChange(EglSong var1)
参数
* var1 改变后的歌曲
void onPlayStatus(int var1)
参数
* var1 播放状态
void onListModeChange(String var1)
参数
* var1 改变后的mode
void onPlaylist(List<JdSong> var1)
参数
* var1 歌曲集合
void onPlaylistPosition(int var1)
参数
* var1 播放歌曲在歌曲集合中的位置
void onReceiverData(String var1)
参数
* var1 485收到的数据
主要方法
void queryMediaInfo()
查询当前歌曲状态
void queryPlayList(final JdCallBack var1)
获取播放列表
参数
* var1 获取播放列表成功与失败的回调
void clearPlayList(final JdCallBack var1)
清空播放列表
参数
* var1 清空播放列表成功与失败的回调
void deletePlayListByPos(int var1, final JdCallBack var2)
删除播放列表指定位置的歌曲
参数
* var1 删除播放列表指定位置
* var2 删除播放列表指定位置的歌曲成功与失败的回调
void editPlaylist(final String var1, final JdCallBack var2)
编辑播放列表歌曲
参数
* var1 编辑播放列表歌曲指定位置
* var2 编辑播放列表歌曲成功与失败的回调
void refreshListAndPos(JdPlayList var1)
刷新播放列表和播放位置
参数
* var1 播放列表
void clearMediaData()
清空数据
void updatePlaylistPosition(EglSong var1)
更新播放位置
参数
* var1 歌曲
void togglePlay()
播放状态切换
void play()
播放
void pause()
暂停
void next()
下一首
void prev()
上一首
void switchListMode()
切换播放mode
String queryListMode()
* 查询播放mode
void seekTo(long var1)
改变播放进度
参数
* var1 进度值
void release()
释放资源
void playLocalSceneMusic(int var1, int var2)
根据位置编号播放
参数
* var1 编号位置
* var2 歌曲位置
void playLocalSceneMusic(String var1, String var2)
根据文件标识码播放 md5
参数
* var1 文件标识码
* var2 歌曲md5
void playSceneMusic(List<JDMusicChannel> var1, String var2)
播放场景推荐列表指定歌曲
参数
* var1 场景推荐列表集合
* var2 场景id
void playSceneMusic(JDMusicChannel var1)
播放推荐歌单
参数
* var1 推荐歌单
void playMusic(EglSong var1)
播放单首音乐
参数
* var1 歌曲
void playMusicByIndex(List<EglSong> var1, int var2)
播放播放列表指定位置歌曲
参数
* var1 播放列表
* var2 播放列表指定位置
void playOnlineMusic(BCategory var1)
播放在线音乐
参数
* var1 播放歌曲类型
void playSongByIndex(int var1)
播放指定位置歌曲
参数
* var1 指定位置
void playTTS(String var1, boolean var2) 此方法已过时
播放TTS
参数
* var1 播放文本
* var2 是否打断当前播放的TTS
void playTTS(String var1) 此方法已过时
播放TTS
参数
* var1 播放文本
void playTTS(TTS var1)
播放TTS
参数
* var1 播放TTS 类型数据
void send485Data(String var1)
发送485控制指令
参数
* var1 485控制指令
void set485ReceiverListener(I485DataCallBack callBack)
设置485数据接受回调
参数
* callBack I485DataCallBack 回调接口
void enableSmartDeviceGrammar(boolean var1)
禁用本地语法
参数
* var1是否禁用
void switchDeviceMode(String var1)
切换模式接口
参数
* var1模式
void setChannelSync(String var1)
设置同播分区
参数
* var1 "1":同播,"0":分区
void setChannel(String var1)
切换分区
参数
* var1 "1":1分区,"2":2分区
void getChannelSync()
获取当前状态是同播还是分区
结果:"1":同播,"0":分区
void getChannel()
获取当前分区
结果:"1":1分区,"2":2分区
void setChannelVolume(String var1, boolean var2)
设置分区音量
参数
* var1 分区 "1":1分区,"2":2分区
* var2 音量 范围"0-10"
void getChannelOneVolume()
获取1分区音量
结果:音量 范围"0-10"
void getChannelOneVolume()
获取2分区音量
结果:音量 范围"0-10"
public interface IChannelVolumeCallBack {
void onChannelVolume(String channel,String volume);
}
音量回调
void wakeUp(String wakeUpTip)
主动唤醒
调用后,屏主机会处于唤醒状态,可以直接进行语控。
* wakeUpTip 传入播报文本,调用后会先播报,在处于唤醒状态
void setSpeed(String speed)
设置TTS播报语速
* speed 取值0.5-2.0,0.5语速最快,2.0语速最慢
JdLocalMusicPresenter
回调函数
public interface ILocalMusicCallBack {
void onGetSdSongsSuccess(List<EglSong> var1);
void onQueryLocalSceneMusic(List<LocalSceneMusic> var1);
}
void onGetSdSongsSuccess(List<EglSong> var1)
参数
* var1 Sd歌曲集合
void onQueryLocalSceneMusic(List<LocalSceneMusic> var1)
参数
* var1 本地场景歌曲集合
主要方法
void querySdCardSongs()
查询sdcard歌曲
void queryLocalSceneMusic()
查询本地场景歌曲
JdVoicePresenter
回调函数
public interface IVoiceCallBack {
boolean onAsrResult(String var1, VoiceExeBack var2);
void onVoiceState(int var1);
interface VoiceExeBack{
@Deprecated
void onSuccess(String var1);
@Deprecated
void onFail(String var1);
void onSuccess(TTS var1);
void onFail(TTS var1);
}
}
boolean onAsrResult(String var1, VoiceExeBack var2)
参数
* var1 识别内容
* var2 拦截语义处理成功或者失败后回调 (处理完成后通过 VoiceExeBack 的onSuccess(TTS tts) 或者 onFail(TTS tts) 返回自行处理需要播放的TTS)
返回值
* true 拦截语义自己处理
* false 不拦截交给主机处理
注意,有两种情况下背景音乐会处理语义
1. onAsrResult返回false时
2. onAsrResult返回true时, VoiceExeBack最终回调是onFail(TTS tts)
void onVoiceState(int var1)
参数
* var1 voice_state 状态回调 状态对应如下:
//语音对话开始
public static final int VOICE_STATE_SESSION_START = 10001;
//识别开始录音
public static final int VOICE_STATE_ASR_START_SPEECH = 10003;
//识别录音结束
public static final int VOICE_STATE_ASR_END_SPEECH = 10004;
//开始语义识别
public static final int VOICE_STATE_ASR_RECOGNITION = 10005;
//语音对话结束
public static final int VOICE_STATE_SESSION_END = 10008;
//TTS 播放开始
public static final int VOICE_STATE_TTS_START = 10006;
//TTS 播放结束
public static final int VOICE_STATE_TTS_FINISH = 10007;
主要方法
void setIVoiceCallBack(IVoiceCallBack callBack)
设置语音处理回调
参数
* callBack 回调方法
热词添加
拦截语音获取语义时,某些不好识别的设备名或场景名,可以设置热词,防止语控时识别不到。具体添加可以查看demo中JdVoiceFragment 注意修改完编译安装到背景主机上时,需要重启下主机