stark81/my_yesplaymusic

[bug]本地歌曲扫描只扫描出部分歌曲

Closed this issue · 13 comments

XXQJDR commented

反馈 bug 需要的信息

客户端、win11 22H2、控制台无错误

bug 详情

本地歌曲119首,一开始扫描出109首,发现部分歌未扫描成功是因为格式原因,将格式转换后,进入程序,发现本地歌曲未更新,于是点击设置中“清空本地歌曲信息”,并重新设置“本地歌曲扫描路径”后,发现只扫描出10首。在采取多个措施后仍然是10首,并且10首歌是固定的。

已采取措施

  • 在控制台利用resetApp()重置
  • 重装软件
  • ctrl + R刷新
  • 以管理员运行软件

理论上 resetApp()并刷新后会把所有数据都清空的,这时候重新启动程序后设置本地路径应该就可以了呢。

如果还是只有10首歌的话:

  1. 在设置里,使用“导出本地歌曲信息”功能,导出一个“localMusic.json”文件。随后用vs code等编辑器或者其他文本编辑器打开它,然后使用编辑器的搜索功能,搜索:"delete": true, 然后替换成:"delete": false,
  2. 编辑之后保存,然后清空本地歌曲信息,然后使用“导入本地歌曲信息”功能重新导入。如果不出意外的话这时候应该都会显示了。
  3. 如果前两步操作下来还是不正常的话,可以考虑先把本地歌曲的文件夹改个名,比如从d:/xxxx/音乐 改成d:/xxxx/Music 之类的,然后修改扫描路径。

这个现象出现的原因在于:

  1. 由于之前没有网易云本地歌曲的接口,所以本地歌曲是通过搜索的方式来进行匹配的,但过于频繁的搜索会被网易云封掉,所以每次匹配之后都会暂停10秒左右;
  2. 我自己的本地歌曲有500多首,所以匹配时间会很长。因此我并不希望用户修改扫描路径后就把之前已经匹配好的歌曲信息舍弃,所以只是做了隐藏。应该是在隐藏这里出现了bug。。。
XXQJDR commented

理论上 resetApp()并刷新后会把所有数据都清空的,这时候重新启动程序后设置本地路径应该就可以了呢。

如果还是只有10首歌的话:

  1. 在设置里,使用“导出本地歌曲信息”功能,导出一个“localMusic.json”文件。随后用vs code等编辑器或者其他文本编辑器打开它,然后使用编辑器的搜索功能,搜索:"delete": true, 然后替换成:"delete": false,
  2. 编辑之后保存,然后清空本地歌曲信息,然后使用“导入本地歌曲信息”功能重新导入。如果不出意外的话这时候应该都会显示了。
  3. 如果前两步操作下来还是不正常的话,可以考虑先把本地歌曲的文件夹改个名,比如从d:/xxxx/音乐 改成d:/xxxx/Music 之类的,然后修改扫描路径。

这个现象出现的原因在于:

  1. 由于之前没有网易云本地歌曲的接口,所以本地歌曲是通过搜索的方式来进行匹配的,但过于频繁的搜索会被网易云封掉,所以每次匹配之后都会暂停10秒左右;
  2. 我自己的本地歌曲有500多首,所以匹配时间会很长。因此我并不希望用户修改扫描路径后就把之前已经匹配好的歌曲信息舍弃,所以只是做了隐藏。应该是在隐藏这里出现了bug。。。

您好!采取了您上述的解决方案后,问题依旧存在。还得麻烦您看看。。

  1. 导出本地歌曲信息后,利用vs code的搜索功能,发现“localMusic.json”文件中并没有"delete": true。而且json文件中"songs"数组字段中只包含10个对象。
  2. 我本地歌曲路径不包含中文,不过我仍尝试了将歌曲文件复制到了另一位置,仍然还是不行,只有10首。
  3. 我发现,那10首歌是我本地文件中的前10首;另外,本地文件中包含歌曲文件和歌词文件,不知道歌词文件对扫描有影响吗?

那应该是音乐格式的问题,目前写的扫描格式是:mp3|flac|alac|m4a|aac|wav,你看看你那些不显示的音乐格式是什么

XXQJDR commented

那应该是音乐格式的问题,目前写的扫描格式是:mp3|flac|alac|m4a|aac|wav,你看看你那些不显示的音乐格式是什么

  • 我的音乐格式全部是flac,第一次都能成功扫描,“清空本地歌曲信息”后就只能扫描出前10首了
  • 不能被扫描出的歌曲在本地也能正常播放

那应该是音乐格式的问题,目前写的扫描格式是:mp3|flac|alac|m4a|aac|wav,你看看你那些不显示的音乐格式是什么

  • 我的音乐格式全部是flac,第一次都能成功扫描,“清空本地歌曲信息”后就只能扫描出前10首了
  • 不能被扫描出的歌曲在本地也能正常播放

那我大概知道了,你把刚刚的localMusic.json打开,搜索:“show": false,把它改成true,然后重新导入一下应该就好了。。

现在应该可以了吧。。。"delete": true是针对移除歌曲的,“show": false是针对修改了本地歌曲扫描路径的

XXQJDR commented

现在应该可以了吧。。。"delete": true是针对移除歌曲的,“show": false是针对修改了本地歌曲扫描路径的

也不行,因为使用了resetApp(),所以本地没有缓存了,扫描本地文件后只扫描出10首,所以只有那10首的缓存,即"localMusic.json"文件中也只有10首歌的数据

XXQJDR commented

我又尝试从不能成功识别的文件中选出14个来测试,发现有的识别成功,有的识别失败

XXQJDR commented
  • 我的想法是,不是音乐没有显示,而是根本就没有识别成功
  • 有一些音乐在119首音乐文件所在目录下不能识别成功,将它复制到另一目录下却又能识别成功

主要是我没法复现,我刚刚也试了一下先清除本地歌曲信息,然后重新设置扫描路径,我都能正常扫描显示咧。。
你再试一下清除,然后重新设置扫描路径,然后在【本地音乐】那里,直到左上方那里的的“最近添加的音乐”数量不再变化时,重新导出本地歌曲信息,用vs code打开看看有多少首

XXQJDR commented

主要是我没法复现,我刚刚也试了一下先清除本地歌曲信息,然后重新设置扫描路径,我都能正常扫描显示咧。。 你再试一下清除,然后重新设置扫描路径,然后在【本地音乐】那里,直到左上方那里的的“最近添加的音乐”数量不再变化时,重新导出本地歌曲信息,用vs code打开看看有多少首

我知道问题了,因为有10首歌本身是.ogg格式的,我把它们转化成了.flac格式的,程序在扫描时是识别失败后应该抛异常了,扫描程序就结束了,所以就只有前面的几首。

那应该是用来解析的音乐库本身不支持ogg,我只在文件后缀那里做了匹配拦截,就没有去捕获异常了。我之后修复测试一下

XXQJDR commented

那应该是用来解析的音乐库本身不支持ogg,我只在文件后缀那里做了匹配拦截,就没有去捕获异常了。我之后修复测试一下

麻烦大佬了