美文网首页程序员首页投稿程序员多媒体技术
Android仿酷狗动感歌词(支持翻译和音译歌词)显示效果

Android仿酷狗动感歌词(支持翻译和音译歌词)显示效果

作者: 只有一条尾巴的猫 | 来源:发表于2018-03-04 00:31 被阅读419次

    引言

    该开源依赖库是乐乐音乐播放器里的一个歌词模块功能,现在把该功能模块独立出来进行优化,并弄成了一个开源依赖库,其它音乐播放器项目只要引用该库并调用接口,便可轻松实现与乐乐音乐播放器一样的动感歌词显示效果,其项目地址如下:乐乐音乐播放器

    实现功能

    歌词解析和生成

    • 支持krc、ksc、lrc歌词格式

    • hrc歌词:乐乐音乐播放器自定义的动感歌词格式,如需制作歌词(支持动感歌词、翻译歌词和音译歌词制作),可点击链接查看:Hrc歌词制作器(乐乐音乐播放器PC版)

    • 歌词格式可自行扩展和相互转换

    双行歌词

    • 不支持lrc格式歌词的显示

    • 支持动感歌词、翻译歌词和音译歌词的显示

    • 歌词颜色渐变方面,主要是参考酷狗PC版桌面歌词的颜色【蓝-白-蓝】

    • 支持歌词字体大小、字体包、颜色、歌词换行等功能

    多行歌词

    • 支持lrc、krc和hrc等动感歌词的显示

    • 支持动感歌词、翻译歌词和音译歌词的显示

    • 歌词颜色透明度渐变、歌词平滑移动、歌词快进

    • 支持歌词字体、颜色、歌词换行等功能

    • 动感歌词的翻译歌词,可分为lrc和动感(默认)两种方式绘画显示

    预览图

    主界面

    Android仿酷狗动感歌词(支持翻译和音译歌词)显示效果

    歌词文件读取并预览

    image

    双行歌词-动感歌词

    image

    双行歌词-音译歌词

    image

    双行歌词-翻译歌词

    wlWCzSr.png

    多行歌词-lrc歌词

    image

    多行歌词-动感歌词

    image

    多行歌词-音译歌词

    image

    多行歌词-翻译歌词

    image

    多行歌词-快进

    image

    实现思路

    歌词解析器和生成器

    翻译歌词和音译歌词构建

    翻译歌词和音译歌词里的字时间,只要从原始的歌词里面的字时间集合里重构,由于翻译歌词的字数和原始歌词不一定对应,所以翻译歌词每个字的渐变时间,为该行歌词时长除于字总数的平均值。具体可参考:浅谈动感歌词-歌词补充篇

    动感歌词渐变效果

    API:canvas.clipRect

    双行歌词上下颜色渐变

    API:LinearGradient,目前设置了上下颜色渐变,颜色是平均分布。

    歌词刷新优化

    • 注意:从Handler.postDelayed(Runnable, 0)到Runnable里面的执行是有消耗时间的。

    • 旧版思路:乐乐音乐之前是通过线程每隔100ms便通过发送广播将歌曲的播放进度发给歌词类,让它去刷新歌词的内容,从而达到歌词与歌曲对应的效果,不过这几天优化的时候发现,每隔100ms更新并通过handler进行刷新时,其实还需要考虑handler从发送到执行请求时,所消耗的时间已经不止100ms,加上广播过于频繁,这应该就是乐乐音乐的歌词在渐变的时候不太流畅的原因。

    • 现在思路:乐乐音乐播放器加载完成歌词后,需要从player中将当前歌曲的播放进度(playProgress)传给歌词,之后歌词类便操作这个播放进度值(playProgress)去刷新界面,这里的思路是:每隔1ms,播放进度(playProgress)便要添加1ms。由于handler每次从发送到执行时,需要消耗时间,这里我直接使用该消耗时间作为播放进度的增加值,对歌词界面进行刷新,从而达到歌词与歌曲对应的效果。

    • 个人感觉,如果想歌词更新流畅,用C来实现,效果应该会比较好

    • 类似的,歌曲的进度条显示也可以使用该种方法。

    源码

    具体的代码和调用Demo,可到源码地址处查看:
    Android仿酷狗动感歌词(支持翻译和音译歌词)显示效果

    传送门

    扩展

    • 歌词格式转换器

    • 歌词文件生成视频

    最后

    如果有问题,可到github上面留言。

    相关文章

      网友评论

      本文标题:Android仿酷狗动感歌词(支持翻译和音译歌词)显示效果

      本文链接:https://www.haomeiwen.com/subject/fozxfftx.html