在线 K 歌
Android
动态与公告
更新日志
场景概览
场景概述
功能介绍
体验 Demo
术语
快速开始
开通能力
跑通示例项目
接入指引
实现流程(基于 K 歌组件)
实现流程(基于底层能力)
前期准备
加入和离开 RTC 房间
实现独唱
实现NTP实时合唱
实现串行合唱
实现智能调度
实现聊天消息
音效混响
正版曲库
曲库介绍
集成曲库 SDK
版权音乐
歌词逐字逐行
歌曲评分
API 参考
错误码和状态码
K 歌组件的错误码和状态码
曲库的错误码和状态码

实现流程(基于 K 歌组件)

更新时间: 2023/02/21 15:40:35

K 歌组件包括了 UI Kit 以及 K 歌、演唱评分、逐字逐行歌词、点歌搜索、跳过前奏等能力,您只需要简单调用几个接口,就能为您的应用添加在线 K 歌业务。

注意事项

KTV 房间的保留时长最多为 24 小时,超过 24 小时,KTV Server会自动删除该房间。

开发环境要求

开发环境要求如下:

环境要求 说明
JDK 版本 1.8.0 及以上版本
Android API 版本 API 21、Android Studio 5.0 及以上版本
CPU架构 ARM 64、ARMV7
IDE Android Studio
其他 依赖 Androidx,不支持 support 库。

集成 NEKaraokeKit 组件

步骤1 集成 Karaoke 组件

  1. 若您需要创建新项目,在 Android Studio 里,在顶部菜单依次选择 File > New > New Project 新建工程,再依次选择 Phone and Tablet > Empty Activity,单击 Next
    image

    创建 Android 项目成功后,Android Studio 会自动开始同步 gradle, 您需要等同步成功后再进行下一步操作。

  2. 在项目对应模块的 build.gradle 中加入以下行,添加依赖。
    implementation 'com.netease.yunxin.kit.karaoke:karaokekit:x.x.x'
    
    其中,x.x.x 为 Karaoke 组件对应版本的版本号。
  3. 在项目对应的根目录的 build.gradle 中加入以下行。
    allprojects {
        repositories {
            mavenCentral()
        }
    }
    
    

步骤2 配置权限

app/src/main/AndroidManifest.xml 文件中添加类似如下代码,添加相应的设备权限。

//网络相关
<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_WIFI_STATE"/>
//防止通话过程中锁屏
<uses-permission android:name="android.permission.WAKE_LOCK"/>
//视频权限
<uses-permission android:name="android.permission.CAMERA"/>
//录音权限
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
//修改音频设置
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
//蓝牙权限
<uses-permission android:name="android.permission.BLUETOOTH"/>
//外置存储卡写入权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
//蓝牙 startBluetoothSco 会用到此权限
<uses-permission android:name="android.permission.BROADCAST_STICKY"/>
//获取设备信息
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>

//允许应用程序使用camera硬件资源
<uses-feature android:name="android.hardware.camera"/>
//自动对焦
<uses-feature android:name="android.hardware.camera.autofocus"/>
        ......//APP需要的其他设备权限


初始化组件

在调用 SDK 其他接口之前,您首先需要完成初始化操作。

  1. 配置初始化相关参数。

    Map<String, String> extras = new HashMap<String, String>(); // 预留扩展字段
    String appKey = "应用appKey"
    NEKaraokeKitConfig config = new NEKaraokeKitConfig(appKey, extras)
    

    应用appKey 请替换为您的应用对应的 App Key,获取方法请参见获取 App Key

  2. 调用 initialize 方法完成初始化操作。

    该接口无额外回调结果数据。

    NEKaraokeKit.getInstance().initialize(context, config, new NEKaraokeCallback<Unit>() {
                @Override
                public void onSuccess(@Nullable Unit unit) {
                    /// 成功
                }
    
                @Override
                public void onFailure(int code, @Nullable String msg) {
                    // 失败
                }
            });
    
    

登录鉴权

请求 SDK 进行登录鉴权,您只有完成 SDK 登录鉴权才可以创建 K 歌房间。

  1. 请在登录前先获取账号 ID 和 Token。账号信息由 K 歌服务器下发,App 通过业务服务器向 K 歌服务器获取,需要您自行实现相关业务逻辑。

    String accountId = "accountId";
    String accountToken = "accountToken";
    
  2. 调用 login 方法登录并进行回调处理。该接口无额外回调结果数据。

    NEKaraokeKit.getInstance().login(accountId,accountToken,new NEKaraokeCallback<Unit>() {
                        @Override
                        public void onSuccess(Unit unit) {
                            ALog.d(TAG, "Karaokekit login success");
                        }
    
                        @Override
                        public void onFailure(int code, String msg) {
                            ALog.d(TAG, "Karaokekit login failed code = " + code + ", msg = " + msg);
                        }
                    });
    
    

实现在线 KTV

步骤1 房主创建房间。

在已经完成 SDK 登录鉴权的状态下,创建并开始一个K歌的房间。

String roomName = "房间名称"
String nick = “昵称”
int seatCount = 7
NEKaraokeSongMode mode = NEKaraokeSongMode.INTELLIGENCE 
NECreateKaraokeParams params = new NECreateKaraokeParams(roomName,nick,seatCount,mode,null);
NECreateKaraokeOptions options = new NECreateKaraokeOptions();
NEKaraokeKit.getInstance().createRoom(params, options, new NEKaraokeCallback<NEKaraokeRoomInfo>() {
            @Override
            public void onSuccess(@Nullable NEKaraokeRoomInfo roomInfo) {
                KaraokeLog.i(TAG, "createRoom success");
                // roomInfo: 房间相关信息
            }

            @Override
            public void onError(int code, @Nullable String msg) {
                ALog.i(TAG, "createRoom failed code = " + code + " msg = " + msg);
            }
        });

NECreateKaraokeParams 的相关参数如下表所示。

参数 是否必选 类型 描述
title String 房间名称
nick String 昵称
seatCount int 麦位个数
singMode NEKaraokeSongMode 默认为 INTELLIGENCE
  • INTELLIGENCE 智能合唱
  • SERIAL_CHORUS 串行合唱
  • REAL_TIME_CHORUS 实时合唱
  • SOLO 独唱
extraData String 预留扩展字段

步骤2 加入房间。

String roomUuid = "roomUuid"
String nick = "昵称"
NEKaraokeRole role = NEKaraokeRole.AUDIENCE
long liveRecordId = 123
String extra = ""
NEJoinKaraokeParams params = new NEJoinKaraokeParams(roomUuid, nick, role, liveRecordId, extra);
        NEJoinKaraokeOptions options = new NEJoinKaraokeOptions();
        NEKaraokeKit.getInstance().joinRoom(params, options, new NEKaraokeCallbackWrapper<NEKaraokeRoomInfo>() {

            @Override
            public void onSuccess(@Nullable NEKaraokeRoomInfo roomInfo) {
                KaraokeLog.i(TAG, "joinRoom success");
                /// roomInfo 房间信息
            }

            @Override
            public void onError(int code, @Nullable String msg) {
                KaraokeLog.e(TAG, "joinRoom failed code = " + code + " msg = " + msg);
                
            }
        });

NEJoinKaraokeParams 的相关参数如下表所示。

参数 是否必选 类型 描述
roomUuid String 房间Id
nick String 昵称
role NEKaraokeRole
  • HOST房主,创建者
  • AUDIENCE 观众
liveRecordId long K歌房间id
extraData String 预留扩展字段

步骤3 上麦

  1. 观众申请上麦。

    NEKaraokeKit.getInstance().requestSeat(new NEKaraokeCallback<Unit>() {
    
                @Override
                public void onSuccess(@Nullable Unit unit) {
                    /// 申请成功
                }
    
                @Override
                public void onError(int code, @Nullable String msg) {
                    /// 申请失败
                }
            });
    
  2. 房主同意上麦。

    String account = “”
    NEKaraokeKit.getInstance().approveRequestSeat(account, new NEKaraokeCallback<Unit>() {
                @Override
                public void onSuccess(@Nullable Unit unit) {
                    /// 操作成功
                }
    
                @Override
                public void onFailure(int code, @Nullable String msg) {
                    /// 操作失败
                }
            });
    
  3. (可选)观众取消上麦。

    NEKaraokeKit.getInstance().cancelRequestSeat(new NEKaraokeCallback<Unit>() {
    
                @Override
                public void onSuccess(@Nullable Unit unit) {
                    /// 操作成功
                }
    
                @Override
                public void onError(int code, @Nullable String msg) {
                    /// 操作失败
                }
            });
    
  4. 查看麦位信息。

    NEKaraokeKit.getInstance().getSeatInfo(new NEKaraokeCallback<NEKaraokeSeatInfo>() {
    
                @Override
                public void onSuccess(@Nullable NEKaraokeSeatInfo seatInfo) {
                    /// seatInfo 麦位信息
                }
                @Override
                public void onFailure(int code, @Nullable String msg) {
                    KaraokeLog.e(TAG, "getSeatInfo failed code = " + code + " msg = " + msg);
                }
            });
    

步骤4 播放音乐并体验 K 歌

  1. 开始播放。

    String originPath = "原唱文件地址"
    String accompanyPath = “伴奏文件地址”
    int volumn = 50 // 播放音量
    String anchorAccount = “主唱用户账号”
    String chorusAccount = “合唱用户账号”
    long startTimeStamp = 3000 // 延迟多少秒开始播放
    boolean anchor = true // 当前paly用户是否为主唱
    NEKaraokeSongMode mode ; // 唱歌模式
    NEKaraokeKit.getInstance().playMusic(originPath,accompanyPath,volumn,anchorAccount,chorusAccount,startTimeStamp,anchor,mode)
    
    参数 是否必选 类型 描述
    originPath String 原唱文件地址,绝对路径
    accompanyPath String 伴奏文件地址,绝对路径
    volumn int 音量,取值范围:0 ~ 100 。数值越大,音量越大
    anchorAccount String 请输入主唱的 accountId
    chorusAccount String 请输入合唱者的 accountId
    startTimeStamp long 单位:ms,默认值:3000
    anchor boolean
    • true:是主唱
    • false:非主唱
    NEKaraokeSongMode mode NEKaraokeSongMode
    • SOLO // 独唱
    • REAL_TIME_CHORUS // 实时合唱.
    • SERIAL_CHORUS // 串行合唱
    • INTELLIGENCE, // 智能模式 或根据主唱副唱当下环境智能选择串行合唱还是实时合唱 默认为INTELLIGENCE
  2. 停止播放。

    NEKaraokeKit.getInstance().stopSong(new NEKaraokeCallback<Unit>() {
                    @Override
                    public void onSuccess(@Nullable Unit unit) {
                        /// 停止 播放成功
                    }
    
                    @Override
                    public void onFailure(int code, @Nullable String msg) {
                        /// 停止失败
                    }
                });
    
    

步骤5 发送和接收礼物

  1. 观众调用 NEKaraokeKit.sendGift 接口发送礼物。参数说明如下表所示。

    参数 是否必选 类型 描述
    gift int 礼物 ID
    NEKaraokeKit.getInstance().sendGift(giftId, new NEKaraokeCallback<Unit>() {
    
                    @Override
                    public void onSuccess(@Nullable Unit unit) {
                        /// 发送礼物成功
                    }
    
                    @Override
                    public void onFailure(int code, @Nullable String msg) {
                        /// 失败
                    }
                })
    
    
  2. 接收礼物。

    通过注册 NEKaraokeListener 监听,在回调方法onReceiveGift 接收礼物相关信息。

    NEKaraokeKit.getInstance().addKaraokeListener(new NEKaraokeListener(){
    
    @Override
    public void  onReceiveGift(NEKaraokeGiftModel rewardMsg){
        /// 接收礼物
    }
    .......
    
    });
    

步骤6 发送和接收文字聊天消息

  1. 调用 NEKaraokeKit.sendTextMessage 接口发送聊天消息。

    String msg = “消息”
    NEKaraokeKit.getInstance().sendTextMessage(msg, new NEKaraokeCallback<Unit>() {
    
                    @Override
                    public void onSuccess(Unit unit) {
                        ///  发送消息成功
                    }
    
                    @Override
                    public void onError(int code, String msg) {
                        KaraokeLog.d(TAG, "sendTextMessage failed code = " + code + " msg = " + msg);
                    }
                });
    
    
  2. 调用 NEKaraokeListener 接口,通过 onReceiveTextMessage 回调方法接收聊天消息。

    NEKaraokeKit.getInstance().addKaraokeListener(new NEKaraokeListener(){
    
    @Override
    public void  onReceiveTextMessage(message: NEKaraokeChatTextMessage){
        /// 文本消息
    }
    .......
    
    });
    

步骤7 离开房间。

NEKaraokeKit.getInstance().leaveRoom(new NEKaraokeCallback<Unit>() {
                @Override
                public void onSuccess(@Nullable Unit unit) {
                    KaraokeLog.i(TAG, "leaveRoom success");
                }

                @Override
                public void onFailure(int code, @Nullable String msg) {
                    KaraokeLog.e(TAG, "leaveRoom failed code = " + code + " msg = " + msg);
                }
            });

步骤8 结束房间。

只有房主有该权限。

NEKaraokeKit.getInstance().endRoom(new NEKaraokeCallback<Unit>() {

                @Override
                public void onSuccess(@Nullable Unit unit) {
                    KaraokeLog.i(TAG, "endRoom success");
                }

                @Override
                public void onFailure(int code, @Nullable String msg) {
                    KaraokeLog.e(TAG, "endRoom failed code = " + code + " msg = " + msg);
                }
            });
此文档是否对你有帮助?
有帮助
我要吐槽
  • 注意事项
  • 开发环境要求
  • 集成 NEKaraokeKit 组件
  • 步骤1 集成 Karaoke 组件
  • 步骤2 配置权限
  • 初始化组件
  • 登录鉴权
  • 实现在线 KTV
  • 步骤1 房主创建房间。
  • 步骤2 加入房间。
  • 步骤3 上麦
  • 步骤4 播放音乐并体验 K 歌
  • 步骤5 发送和接收礼物
  • 步骤6 发送和接收文字聊天消息
  • 步骤7 离开房间。
  • 步骤8 结束房间。