xiaosu-zhu / Aurora.Music

Aurora Music
MIT License
165 stars 24 forks source link

Add support for metadata of multiple artists #3

Closed OpportunityLiu closed 6 years ago

OpportunityLiu commented 6 years ago

They are separated by / (sequence of space + slash + space)

image Meta data shown by system, foobar200, MP3Tag and Groove. System handles this correctly, Groove ignores artists other than the first one. Other 2 apps doesn't handle this.

xiaosu-zhu commented 6 years ago

hi, I think it's easy to handle this case, and I'll check for it as soon as possible. And for dev, could you please share that audio file to me? I can then find how to support it. Thank you!

BTW, do you speak Chinese? If you find it is more convenience, just speak Chinese😁

OpportunityLiu commented 6 years ago

翼をください.zip

OpportunityLiu commented 6 years ago

我猜并没有任何特殊的地方,真的就只是用 / 分隔而已

xiaosu-zhu commented 6 years ago

行,我放到里面一看便知

xiaosu-zhu commented 6 years ago

确实是用了一个 / 来分割,那我就直接把 / 当作分隔符好了

OpportunityLiu commented 6 years ago

两边有空格的,单独的/不是分隔符,不然歌手名称就不能有/了不是

xiaosu-zhu commented 6 years ago

嗯,这个我肯定要考虑的,等我周末写一下

OpportunityLiu commented 6 years ago

image image

看来空格并不重要,M$真的认为歌手名字有 / 就是活该

xiaosu-zhu commented 6 years ago

这也太粗糙了🤣

OpportunityLiu commented 6 years ago

image 又试了一下,看来公认的是多条记录

xiaosu-zhu commented 6 years ago

我觉得只有资源浏览器里是自动按 / 分割的,foobar 和 MP3tag 都是原样显示

OpportunityLiu commented 6 years ago

多条记录是正确的

image Foobar,注意左栏,还有列表视图和详细信息不同,说明理解了多条记录 image Mp3Tag,详细视图分为多条记录,编辑框和列表显示为\\分隔 image 系统属性,正确支持 image image 最后本软件其实也是理解这种做法的,可惜艺术家没分开

xiaosu-zhu commented 6 years ago

嗯,这首歌的 tag 的歌手里面,是写入了多条记录的。

我的软件用的 tag 读取库是 TagLib.sharp, 它读取 tag 的时候,歌手就是一个数组,前面那个 翼をください 的歌手数组只有一个元素,用 / 分割了,而 Beauty as the beast 这首歌,歌手数组有多个元素,我的软件已经处理了这种情况,艺术家显示的时候用 排列,编辑标签的对话框里则是用的 ;

所以目前的问题是:

  1. tag 里面歌手只有一行,还用了 / 分开,把它当成多个歌手就好了;
  2. tag 里面歌手有多个,要把他们分开,比如 歌曲a歌手a 歌手b 演唱,要既能在 歌手a 的页面看见 歌曲a,也能在 歌手b 的页面看见 歌曲a

对吗?

OpportunityLiu commented 6 years ago

image 实际的分隔符是\0 http://id3.org/id3v2.4.0-structure

OpportunityLiu commented 6 years ago

主要还是 2,1的话是M$自己整的幺蛾子,支持了的话可能真的有名字里有 / 的艺术家莫名中枪 image /存起来就是真的一个普通字符

xiaosu-zhu commented 6 years ago

妥👌

xiaosu-zhu commented 6 years ago

刚才提交了一次

我找几个文件测试一下,要是没问题就更新了

OpportunityLiu commented 6 years ago

image 独唱曲目和合唱曲目被分开了

image image 还有,在没有指定专辑艺术家的情况下,默认的专辑艺术家自动拥有了整张专辑

xiaosu-zhu commented 6 years ago

啊,了解了。这个解决起来不太好办,可能还得把专辑的存储方法作调整,我还是要到周末有空了才能改改。最近有些忙😥

xiaosu-zhu commented 6 years ago

星期天的更新初步解决了一些问题,你看看有没有其他问题。专辑的信息可能要重新更新一下才能有效果,就是加几首歌到文件夹里面,让应用触发刷新数据库的操作

OpportunityLiu commented 6 years ago

image 显示多个歌手的问题还在,不过同一个歌手点进去的曲目列表都是全的。

第二个问题倒是解决了 image

xiaosu-zhu commented 6 years ago

仔细一看犯了一个低级错误,我还奇怪明明处理了重复的情况为什么还是有重复,请见 4e4273

OpportunityLiu commented 6 years ago

image 专辑艺术家名字重复

image image 没有参与的专辑显示在了艺术家的页面下,用的字符串匹配?

xiaosu-zhu commented 6 years ago

专辑重复这个可能是我更新专辑的方法有问题,fix album duplicate 改成这样了。

艺术家的话就是用的字符串匹配,目前没找到更好的方法(我也很烦这里,感觉一直不对(*  ̄︿ ̄), 这个艺术家页面是把所有(表演者、专辑艺术家)含有这个名字的歌曲和专辑都找出来,实现方法见 SQLOperator.cs

另外我还发现时长全是0,是不是文件读取有问题?

OpportunityLiu commented 6 years ago

时长0是windows的bug,用Windows.Storage.Search底下的API操作就能得到正确的结果,用StorageItemContentProperties.GetMusicPropertiesAsync()结果就全是错的

OpportunityLiu commented 6 years ago

"SELECT * FROM ALBUM WHERE ALBUMARTISTS LIKE '{value}, %' OR ALBUMARTISTS LIKE '%, {value}, %' OR ALBUMARTISTS LIKE '%, {value}' OR ALBUMARTISTS = '{value}' " 还是会有问题,如果分隔符是 '\0' 这样的非显示字符的话这样就是对的了,但现在 ','value 里也有可能出现。

OpportunityLiu commented 6 years ago

而且你的 SQLEscaping(string) 也有问题吧

image

xiaosu-zhu commented 6 years ago

分隔符我用的是$|$,这样应该就是 "SELECT * FROM ALBUM WHERE ALBUMARTISTS LIKE '{value}$|$%' OR ALBUMARTISTS LIKE '%$|${value}$|$%' OR ALBUMARTISTS LIKE '%$|${value}' OR ALBUMARTISTS = '{value}' " 估计行

那个SQLEscaping(string)我是乱写的,我曾经搜索过 没找到,看它工作没问题 就放那没动了,我试试你这个

OpportunityLiu commented 6 years ago

我其实更好奇的是为啥不用EF,自己写SQL太酸爽了

OpportunityLiu commented 6 years ago

=操作应该是 value.Replace("'","''") LIKE 操作应该是 value.Replace("'","''").Replace("[","[[]").Replace("%","[%]").Replace("_","[_]")

所以最后一个还是直接写 ALBUMARTISTS LIKE '{value}' 方便点

xiaosu-zhu commented 6 years ago

开始写的时候我不知道有EF……,然后用了 SQLite-net,而且数据库部分也是很早就写完了,也没有动力去改了……,可能某个惬意的午后会重写一下😂

OpportunityLiu commented 6 years ago

这个Feature现在运行良好,应该没什么问题了

OpportunityLiu commented 6 years ago

image 不对啊,专辑艺术家名字重复的问题还在?