背景音乐
更新时间: 2024/11/20 17:05:14
您可以在语聊房中集成曲库 SDK 。曲库 SDK 提供的数十万首正版歌曲资源,主播通过搜索或歌曲列表即可播放背景音乐,烘托房间气氛。本文介绍基于语聊房
功能介绍
语聊房的背景音乐集成了曲库 SDK,您只需调用少量 API 即可快速集成海量正版曲库,解决歌曲版权问题,为您的业务增长保驾护航。
曲库 SDK 包含数十万首版权歌曲,并实时更新,覆盖 70、80 劲歌金曲、 Y 时代流行音乐、Z 时代热门原创,完美匹配不同用户圈层。
前提条件
步骤1 初始化曲库 SDK
-
调用
NECopyrightedMedia.getInstance()
接口创建版权音乐对象。 示例代码如下:NECopyrightedMedia copyRight = NECopyrightedMedia.getInstance();
-
调用
NECopyrightedMedia.initialize
接口初始化组件。在调用 SDK 初始化接口之前,需要先为应用下的每一位用户生成user账号(account),同时获取对应的 Token。Token 鉴权相关步骤,请参考 曲库动态 Token 鉴权 即可,下文不再赘述。示例代码如下:
NECopyrightedMedia copyRight = NECopyrightedMedia.getInstance(); HashMap<String, Object> extras = new HashMap<>(); copyRight.initialize( context, appkey, token, user, //请传入您的应用账号体系中的账号ID,用于数据统计 extras, new NECopyrightedMedia.Callback<Unit>() { @Override public void success(@Nullable Unit info) { Toast.makeText( context, "init CopyrightedMedia success", Toast.LENGTH_LONG) .show(); } @Override public void error(int code, @Nullable String msg) { Toast.makeText( context, "init CopyrightedMedia fail", Toast.LENGTH_LONG) .show(); } } );
-
调用
NECopyrightedMedia.setSongScene
接口,指定音乐场景为听歌的场景(TYPE_LISTENING_TO_MUSIC)。版权曲库支持听歌场景和 K 歌场景,您需要在初始化曲库 SDK 时指定对应的场景。
// 设置听歌场景 NECopyrightedMedia.getInstance().setSongScene(SongScene.TYPE_LISTENING_TO_MUSIC);
-
调用
NECopyrightedMedia.setEventHandler
接口注册事件通知回调。当您的曲库 Token 过期时,会触发
onTokenExpired
回调。此时,您需要参见曲库动态 Token 鉴权生成新的 Token,并调用renewToken
更新 Token 后才能继续调用 NECopyrightedMedia SDK 的API。示例代码如下:
NECopyrightedMedia.getInstance().setEventHandler(new NECopyrightedEventHandler() { @Override public void onTokenExpired() { // token过期监听回调 } });
-
调用
NECopyrightedMedia.renewToken
接口更新Token。示例代码如下:
NECopyrightedMedia.getInstance().renewToken(token);
初始化操作完毕,如果能正常调用以下接口,表示初始化成功。
步骤2 获取歌曲列表
房主可以通过搜索、请求歌曲列表、榜单三种方式获取歌曲。
-
通过搜索获取歌曲
调用
NECopyrightedMedia.searchSong
接口获取搜索的歌曲列表和歌曲的song ID。参数 类型 描述 keyword String 搜索的关键字。 channel Int 版权渠道,默认不传则包含所有签约渠道。 - 1:网易云音乐
- 2: 咪咕
pageNum Int 页码。 默认值为 0。 pageSize Int 每页显示的行数,默认值为 20。 callback Callback 回调 -
通过请求歌曲列表获得歌曲
调用
NECopyrightedMedia.getSongList
接口获取歌曲列表和歌曲的song ID。 -
通过榜单获取歌曲
调用
getHotSongList
接口获取推荐歌单的歌曲 song ID。
示例代码如下:
// 搜索歌曲
NECopyrightedMedia.getInstance().searchSong("keyword", null, 1, 20, new NECopyrightedMedia.Callback<List<NECopyrightedSong>>() {
@Override
public void success(@Nullable List<NECopyrightedSong> info) {
}
@Override
public void error(int code, @Nullable String msg) {
}
});
// 获取歌曲列表
NECopyrightedMedia.getInstance().getSongList(null, null, 1, 20, new NECopyrightedMedia.Callback<List<NECopyrightedSong>>() {
@Override
public void success(@Nullable List<NECopyrightedSong> info) {
}
@Override
public void error(int code, @Nullable String msg) {
}
});
// 获取热门歌曲列表
NECopyrightedMedia.getInstance().getHotSongList(NECopyrightedHotType.HOTTYPE_DEFAULT, NECopyrightedHotDimension.HOTDIMENSION_APPLICATION, null, 1, 20, new NECopyrightedMedia.Callback<List<NECopyrightedHotSong>>() {
@Override
public void success(@Nullable List<NECopyrightedHotSong> info) {
}
@Override
public void error(int code, @Nullable String msg) {
}
});
步骤3 点歌并下载歌曲
调用 NECopyrightedMedia.preloadSong
接口预加载歌曲,包括原唱、歌词和MIDI。
示例代码如下:
NECopyrightedMedia.getInstance().preloadSong(songId, channel, new NESongPreloadCallback() {
@Override
public void onPreloadStart(String songId, int channel) {
}
@Override
public void onPreloadProgress(String songId, int channel, float progress) {
}
@Override
public void onPreloadComplete(String songId, int channel, int errorCode, String msg) {
}
});
步骤4 房主播放歌曲
房主调用 playEffect
接口播放歌曲。
NERtcCreateAudioEffectOption neRtcCreateAudioEffectOption = new NERtcCreateAudioEffectOption();
neRtcCreateAudioEffectOption.path="";// 音乐文件路径
neRtcCreateAudioEffectOption.loopCount=1;
neRtcCreateAudioEffectOption.sendEnabled=true;
neRtcCreateAudioEffectOption.sendVolume=100;
neRtcCreateAudioEffectOption.playbackEnabled=true;
neRtcCreateAudioEffectOption.playbackVolume=100;
neRtcCreateAudioEffectOption.startTimestamp=30;//主播播放进度
neRtcCreateAudioEffectOption.progressInterval=100;
neRtcCreateAudioEffectOption.sendWithAudioType= NERtcAudioStreamType.kNERtcAudioStreamTypeMain;
NERtcEx.getInstance().playEffect(effectId,neRtcCreateAudioEffectOption);
进阶功能
暂停或恢复歌曲播放
// 暂停歌曲播放
NERtcEx.getInstance().pauseEffect(effectId);
// 恢复歌曲播放
NERtcEx.getInstance().resumeEffect(effectId);
切歌
// 停止播放上一首歌
NERtcEx.getInstance().stopEffect(effectId);
// 播放下一首歌
NERtcCreateAudioEffectOption neRtcCreateAudioEffectOption = new NERtcCreateAudioEffectOption();
neRtcCreateAudioEffectOption.path="";// 音乐文件路径
neRtcCreateAudioEffectOption.loopCount=1;
neRtcCreateAudioEffectOption.sendEnabled=true;
neRtcCreateAudioEffectOption.sendVolume=100;
neRtcCreateAudioEffectOption.playbackEnabled=true;
neRtcCreateAudioEffectOption.playbackVolume=100;
neRtcCreateAudioEffectOption.startTimestamp=0;
neRtcCreateAudioEffectOption.progressInterval=100;
neRtcCreateAudioEffectOption.sendWithAudioType= NERtcAudioStreamType.kNERtcAudioStreamTypeSub;
NERtcEx.getInstance().playEffect(effectId,neRtcCreateAudioEffectOption);