本人是个爱听歌的人,听得也都是大杂烩,什么风格也有,blues、acg、、bossanova、流行、民歌啥的。以前一直在用网易云,后来版权大战搞得网易云版权少的可怜,歌单一半都是灰色的,无奈又去用了QQ,但是还是有各种缺点,后面又发现网易云可以自动匹配上传到云盘的歌,然后又转战网易云盘,从各种渠道下载mp3扔到云盘去,这样坚持了好一阵儿,但是后面云盘也开始检测版权,QQ微云云盘也差不多都这样,感觉丁磊是要彻底断我的后路,所以才萌生了想自己搭一个音乐云盘的想法.
既然有想法就开干,本来我是想在家里做内网穿透用家里的NAS做我的音乐云盘,但是家里没有公网IP,试了试FRP反代到云服务器,国外的云服务器速度实在不咋地,国内的阿里tx带宽费用又高的离谱,所以放弃了这个方案,最后找到了坚果云,主要是因为同步云盘的特性天然的就适合做这个,虽然空间不大,但倒是也不贵,上传和下载基本都是保持在5M/S左右,基本能满足我的需求了
![336d359a95d15d2230fefdecd92acd2d.png](https://i-blog.csdnimg.cn/blog_migrate/7f7ee8e3cf32fe1e50bd6700cad8022a.jpeg)
买了坚果云盘之后先传了10G的歌上去,然后开始考虑客户端
我平常工作和玩游戏都是用Windows,手机也都是Android,所以只需要找这两个客户端就够了,因为是利用同步云盘同步,所以我只需要本地离线播放器就可以,并且得能读取m3u之类的歌单列表,到时候可以把歌单也放到云盘里,这样就可以多端同步歌单了,然后最好是开源的,好定制一些功能
在github上翻了一大顿,找到了这个
digimezzo/dopamine-windowsgithub.com![4cb448ac40f143bd8c647060f5cdef8c.png](https://i-blog.csdnimg.cn/blog_migrate/00af34424910b407b7281c4446f83ab9.png)
![68883117a33e76264daa90f180638fbc.png](https://i-blog.csdnimg.cn/blog_migrate/44c5269a566aad2c9c3f0b865a93ecf7.jpeg)
长得也挺符合我的胃口的。。。。
用了一天后发现两个主要的问题
- 歌词虽然可以从网易云获取,但是大部分外语歌的歌词都只有一种,要么只有翻译要么只有原文
- 虽然可以导入m3u,但是导入之后会创建一个备份,修改也是修改的这个备份,所以无法同步
![d3597753f5fa63da780c32b84a0a04aa.png](https://i-blog.csdnimg.cn/blog_migrate/53575d0b8b891c5d538a88988587c396.jpeg)
无奈clone下他的源码开始修改这两个问题
![d5853ea90f44a4caa68f187a91259194.png](https://i-blog.csdnimg.cn/blog_migrate/b83a3beb675bf5b17b1a2efd1a42deca.jpeg)
用VS打开发现是WPF做的。。。
![170ba726d9a3ddb432caa997cbc82eea.png](https://i-blog.csdnimg.cn/blog_migrate/d24c018f62fb661ab7acff41efb18add.jpeg)
之前从来没有接触过WPF,不过程序基本都是一通百通的,所以慢慢搞,既然是歌词相关那就搜一下Lyric关键词
![c83a247b4b928434ffe808aad4ce65f4.png](https://i-blog.csdnimg.cn/blog_migrate/618b0924c2cf8b6f23384bf0a14655b0.jpeg)
找到了NeteaseLyricsAPI
![851e1c8106687e31758cb9999078daed.png](https://i-blog.csdnimg.cn/blog_migrate/583ece47a0b1954947b68ed7947045fc.jpeg)
看代码可以看到他是通过一个HTTP请求的网易云的api地址,这块先略过,看下面关键的歌词处理部分,resJson就是网易云返回的歌词数据,我调试看了一下,他实际上是返回了lyric和tlyric(translate)的,也就是说数据是有的,只是显示有点问题。
![1ef309d8f3aa5173458c8033b389426e.png](https://i-blog.csdnimg.cn/blog_migrate/5d7ca52ffef5715455b5a8a5e0c07d39.png)
看这个判断,如果有翻译歌词,就return翻译的歌词,没有翻译的话才return原来的歌词,知道逻辑就好改了。
在这把歌词处理一下。
![59ab849e2f3337ae77fa49a80598f014.png](https://i-blog.csdnimg.cn/blog_migrate/e35066b9b06678f06de3f97ceb4f5f8f.jpeg)
把两个语言的歌词合成一个返回。
好了看看效果
![f64c997e41c22b0acb3a36f940092e91.png](https://i-blog.csdnimg.cn/blog_migrate/80f7c33b5373e87b3cd86f075a56c307.jpeg)
好像有内味儿了。
接下来解决最重要的歌单同步问题,我本来打算把歌单也放到云盘,跟歌曲同一个父级目录,这样可以用相对路径来定位歌曲,但是这个app会导入之后自己备份一个歌单并且转成了绝对路径,那么要做的就是把他原来的歌单目录改成云盘同步的本地文件夹
搜一下playlist关键词
![58a91f355e16c561b8220b136132cf3c.png](https://i-blog.csdnimg.cn/blog_migrate/1eb068c616a194b87ede671101d7a74b.jpeg)
找到了这个貌似处理歌单的模块
![63316ced9016a6977445dc7003af412f.png](https://i-blog.csdnimg.cn/blog_migrate/710ed82f4cc4c2b9dd4ce3009af002eb.jpeg)
看函数命名找到了这个获取所有静态歌单的函数
他在PlayListFolder这个文件夹下查找所有的m3u文件然后返回
然后查找PlayListFolder赋值的地方找到了构造函数
![7b85d34ce23a1447472a842cb3ef7e07.png](https://i-blog.csdnimg.cn/blog_migrate/1ad6b67fd90b40d98b9e27734184251a.jpeg)
可以看到他是从系统的环境变量获取了 windows"我的音乐" 目录的路径
那么我只需要把这个路径改成我的云盘同步路径应该就可以了
![0dac92058b059bcdd10ca3ff85d34ffd.png](https://i-blog.csdnimg.cn/blog_migrate/cf7f98db89e50bc704958f7e44ada285.png)
先临时改改测试
![77e8c580af687b2c0ec67e3ea0c5874a.png](https://i-blog.csdnimg.cn/blog_migrate/ed88af459c5d9b99ebeaac08fe739f32.jpeg)
歌单都出来了,但是还发现一个问题
![28c73dd1bfb02dc3acee4b5598936946.png](https://i-blog.csdnimg.cn/blog_migrate/05de1352e74d247c3bc0b3c0c4f51911.jpeg)
我把另一首歌添加到了这个歌单,查看一下m3u文件
![f2abb15d91d15b87076595647ff29246.png](https://i-blog.csdnimg.cn/blog_migrate/cf67c4bfa49b6cee5f62eb05f6f67822.jpeg)
发现新添加的歌曲是采用绝对路径存储的,这样很不利于我们同步,所以我们要把他改成相对路径来存
![44ae680b9043ce44b709b88e395d55b8.png](https://i-blog.csdnimg.cn/blog_migrate/760541ee40f8ec4cadb84f7c6c57a08e.jpeg)
然后找到这个AddTracksToStaticPlaylist函数,添加歌曲到静态歌单都会走这个函数
![3d1314254a13a27d05c4e15797038338.png](https://i-blog.csdnimg.cn/blog_migrate/8ff4fd3111975a736ffd6a977acf5630.jpeg)
可以看到他直接WirteLine一个track.Path,这个Path实际上就是歌曲文件的绝对路径
给他做点小小的改动,加一个函数获取歌曲相对于歌单的路径给他写进去
![c74a722eff3b0d9a1122f4b0376e49fb.png](https://i-blog.csdnimg.cn/blog_migrate/46f45861638f08722b646f14598b0cfd.jpeg)
OK,看看效果
![48bf9c341b2dbda42cdd3fa6dfe50bb0.png](https://i-blog.csdnimg.cn/blog_migrate/3a4fcbe7584a7876d1855e26b89a27f9.jpeg)
成功了,剩下的就是把上面临时改的路径改成配置项或者别的什么了,这块略过
那么到这里PC端已经算是基本处理完成可以用了,当我修改歌单的时候,坚果云会自动同步到你其他的电脑上
![2efef6163156d8c9fa7b766b636b5de1.png](https://i-blog.csdnimg.cn/blog_migrate/1a6b14f73b92f18938f23526614dbca0.jpeg)
这样你其他电脑的Dopamine打开也会是同步过的列表。
Android的下回再说吧