logo
当前页

进阶功能


本文介绍如何使用 KTV 场景的进阶功能。

前提条件

在使用以下“进阶功能”之前,请先实现 点歌 功能。

实现歌词与歌曲进度的同步

ZEGO 提供了 “逐行获取歌词” 的形式:

逐行歌词是指歌词按照句子来分割,一句一句展示。用户可以调用 getLrcLyric 接口,传入歌曲的 song_id 获取逐行歌词。

获取歌词

逐行获取歌词,歌词信息有每行歌词的开始与结束时间,用户可以先调用 setProgressInterval 接口设置合适播放进度回调间隔。ZEGO Express SDK 会以该时间间隔,通过 onMediaPlayerPlayingProgress 接口给出播放进度,用户可以在回调中调用获取歌词的方法获取当前时间点的歌词。具体回调的信息参考 获取歌曲与歌词资源接口说明

Untitled
// 设置 mediaplayer 代理
mediaPlayer->setEventHandler(eventHandler);
1
Copied!
Untitled
public void onMediaPlayerPlayingProgress(IZegoMediaPlayer* mediaPlayer, unsigned long long millisecond) override {
    // 在歌曲播放的过程中,不断调用获取歌词的方法获取当前时间对应的歌词,并展示
    
    /** 歌曲的 songID */
    std::string songID = ;
    /** 版权方,其对应的枚举值信息,请联系 ZEGO 商务咨询*/
    ZegoCopyrightedMusicVendorID vendorID = ;  
    // 一次性获取逐行歌词
    copyrightedMusic->getLrcLyric(songID, vendorID, [=](int errorCode, std::string lyrics) {

    });

};
1
Copied!

分享歌曲

注意

不同版权方对应的歌曲资源有效时长不同(详情请咨询 ZEGO 商务人员),调用 getSharedResource 接口获取其他用户分享的资源时,如果返回了 1017050 错误码,表示资源已失效。

此时,需要有用户重新调用 requestResource 接口获取资源并进行分享,其他用户重新调用 getSharedResource 接口获取对应的歌曲资源。

点歌用户点完歌曲后,其他用户可以调用 getSharedResource 获取对应的歌曲资源,接口回调的信息参考 获取歌曲与歌词资源接口说明

获取成功后,可参考 点歌 - 下载歌曲 获取歌曲资源。

Untitled
/** 点歌用户分享的歌曲资源对应的 songID */
ZegoCopyrightedMusicGetSharedConfig config;
config.songID = ;
config.vendorID = ;

/** 点歌用户分享的歌曲资源对应的资源类型 */
ZegoCopyrightedMusicResourceType resourceType = ZegoCopyrightedMusicResourceSong;

copyrightedMusic->getSharedResource(config, resourceType, [=](int errorCode, std::string resource) {
        if (errorCode == 0) {
                // 歌曲资源获取成功,可进行下载歌曲等操作
        } else {
                // 失败
        }
});
1
Copied!

伴奏/原唱切换

在需要切换伴奏/原唱的场景下,要求伴奏资源有原唱和伴奏双音轨。

在点伴奏的结果回调 ZegoCopyrightedMusicRequestResourceCallbackZegoCopyrightedMusicGetSharedResourceCallback 中,“has_original” 字段会告知用户该资源是否有原唱,详细信息参考 获取歌曲与歌词资源接口说明

若该资源有原唱,开发者可以调用 setAudioTrackIndex 进行伴奏/原唱切换:

  • 0 表示伴奏;
  • 1 表示原唱。
Untitled
/** 播放器 */
IZegoMediaPlayer* mediaPlayer = ;
/** 伴奏音轨 */
mediaPlayer->setAudioTrackIndex(ZEGO_COPYRIGHTED_MUSIC_AUDIO_TRACK_INDEX_ACCOMPANIMENT);
/** 原唱音轨 */
mediaPlayer->setAudioTrackIndex(ZEGO_COPYRIGHTED_MUSIC_AUDIO_TRACK_INDEX_ORIGINAL_SONG);
1
Copied!

销毁版权音乐对象

当需要调用 destroyCopyrightedMusic 销毁版权音乐对象时,需在反初始化 SDK 接口 destroyEngine 之前。

Untitled
// 先销毁 copyrightedMusic
engine->destroyCopyrightedMusic(copyrightedMusic);

// 再销毁 ZegoExpressEngine
ZegoExpressSDK::destroyEngine(engine, nullptr);
engine = nullptr;
1
Copied!

Previous

点歌

Next

发送扩展请求接口说明