声网歌词组件支持在歌曲播放时同步显示 LRC 或 XML 格式的歌词,同时支持将演唱者和歌曲原唱的音调进行对比,并实时将匹配度以动画和分数的方式呈现在界面上。
本文介绍如何在项目中集成并使用声网歌词组件。
在使用歌词组件前,请确保你已在项目中集成声网视频 SDK v4.x,并实现在线 K 歌功能,详见客户端实现。
/Gradle Scripts/build.gradle(Project: <projectname>)
中添加如下代码,将 JitPack 添加到仓库列表中:
all projects {
repositories {
...
maven { url 'https://www.jitpack.io' }
}
}
/Gradle Scripts/build.gradle(Module: <projectname>.app)
中,添加如下代码,将歌词组件集成到你的项目中:...
dependencies {
...
implementation 'com.github.AgoraIO-Community:lrcview-android:1.0.13'
}
在项目的 Activity 中,声明和初始化歌词组件对象。示例代码如下:
public class LiveActivity extends RtcBaseActivity {
private LrcView mLrcView;
@Override
protected void onCreate(Bundle savedInstanceState) {
...
mLrcView = findViewById(R.id.lrc_view);
...
}
}
参考如下歌词组件 API 使用时序见,实现歌词显示及同步功能:
按照如下步骤,实现歌词组件评分功能:
调用声网 SDK 的 enableAudioVolumeIndication
方法开启歌唱评分功能,通过监听 onAudioVolumeIndication
回调获取本地用户的人声音调(voicePitch
),并传入歌词组件。详见评分功能。
设置歌词组件的评分相关的回调监听。
public interface OnActionListener {
// 原唱标准音调回调,详见 API 参考
void onOriginalPitch(double pitch, int totalCount);
// 评分回调,详见 API 参考
void onScore(double score, double cumulativeScore, double totalScore);
}
在项目的 Activity 中,自定义歌词组件的界面元素。示例代码如下:
<io.agora.lrcview.LrcView
android:id="@+id/lrcView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingStart="10dp"
android:paddingTop="20dp"
android:paddingEnd="10dp"
android:paddingBottom="20dp"
// 当前行歌词颜色
app:lrcCurrentTextColor="@color/ktv_lrc_highligh"
// 歌词行间距
app:lrcDividerHeight="20dp"
// 无歌词情况下的默认文字
app:lrcLabel="暂无歌词"
// 非当前行歌词颜色
app:lrcNormalTextColor="@color/ktv_lrc_nomal"
// 非当前行歌词字体大小
app:lrcNormalTextSize="16sp"
// 歌词对齐方式
app:lrcTextGravity="center"
// 当前行歌词字体大小
app:lrcTextSize="26sp"
// 评分初始分数,默认为 0
app:lrcDefaultScore="0"
// 歌词是否支持拖动
app:lrcEnableDrag="true"
// 是否显示歌唱分数
app:lrcScore="true"
/>
歌词组件的核心 API 如下:
API | 实现功能 |
---|---|
setActionListener |
订阅 OnActionListener 回调事件。OnActionListener 为 lrcview 控件回调类,包括:歌词加载完成回调、进度改变回调、开始拖动歌词回调、结束拖动歌词回调。 |
setTotalDuration |
设置歌词总时长,单位毫秒。必须与歌曲时长一致。 |
loadLrc(mainLrcText, secondLrcText) |
加载本地歌词文件。mainLrcText 是中文歌词对象,secondLrcText 是英文歌词对象。mainLrcText 或 secondLrcText 设置为 null。 |
onLoadLrcCompleted |
歌词文件加载完成回调。 |
setEnableDrag |
设置是否允许上下拖动歌词。 |
updateTime |
根据当前歌曲播放进度更新歌词进度,单位为毫秒。 |
hasLrc |
获取歌词文件状态。 |
reset |
重置内部状态,清空已经加载的歌词。 |
onOriginalPitch |
原唱标准音调回调。你可以通过该回调自行实现评分逻辑。包含如下参数:pitch :当前歌词音调对应的 pitch 值,每个音调回调一次。totalCount :整个 XML 歌词的 pitch 个数,用于计算平均分。 |
onScore |
评分回调。每句歌词(sentence)结束时触发该回调。你可以通过该回调自行实现分数计算。包含如下参数:score :当前句分数,范围为 [40,100]。cumulativeScore :当前累计分数。totalScore :歌曲总分数 = 初始分数(默认为 0 分) + 歌词句段数量 * 100 当开启评分回调后, 歌词可拖动功能默认失效。 |
声网在 GitHub 上提供歌词组件开源的示例项目供你参考。