Closed OpportunityLiu closed 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😁
我猜并没有任何特殊的地方,真的就只是用 /
分隔而已
行,我放到里面一看便知
确实是用了一个 /
来分割,那我就直接把 /
当作分隔符好了
两边有空格的,单独的/不是分隔符,不然歌手名称就不能有/了不是
嗯,这个我肯定要考虑的,等我周末写一下
看来空格并不重要,M$真的认为歌手名字有 /
就是活该
这也太粗糙了🤣
又试了一下,看来公认的是多条记录
我觉得只有资源浏览器里是自动按 /
分割的,foobar 和 MP3tag 都是原样显示
Foobar,注意左栏,还有列表视图和详细信息不同,说明理解了多条记录
Mp3Tag,详细视图分为多条记录,编辑框和列表显示为\\
分隔
系统属性,正确支持
最后本软件其实也是理解这种做法的,可惜艺术家没分开
嗯,这首歌的 tag 的歌手里面,是写入了多条记录的。
我的软件用的 tag 读取库是 TagLib.sharp
, 它读取 tag 的时候,歌手就是一个数组,前面那个 翼をください
的歌手数组只有一个元素,用 /
分割了,而 Beauty as the beast
这首歌,歌手数组有多个元素,我的软件已经处理了这种情况,艺术家显示的时候用 ,
排列,编辑标签的对话框里则是用的 ;
。
所以目前的问题是:
/
分开,把它当成多个歌手就好了;歌曲a
由 歌手a
歌手b
演唱,要既能在 歌手a
的页面看见 歌曲a
,也能在 歌手b
的页面看见 歌曲a
对吗?
实际的分隔符是\0
http://id3.org/id3v2.4.0-structure
主要还是 2,1的话是M$自己整的幺蛾子,支持了的话可能真的有名字里有 /
的艺术家莫名中枪
/
存起来就是真的一个普通字符
妥👌
刚才提交了一次
我找几个文件测试一下,要是没问题就更新了
独唱曲目和合唱曲目被分开了
还有,在没有指定专辑艺术家的情况下,默认的专辑艺术家自动拥有了整张专辑
啊,了解了。这个解决起来不太好办,可能还得把专辑的存储方法作调整,我还是要到周末有空了才能改改。最近有些忙😥
星期天的更新初步解决了一些问题,你看看有没有其他问题。专辑的信息可能要重新更新一下才能有效果,就是加几首歌到文件夹里面,让应用触发刷新数据库的操作
显示多个歌手的问题还在,不过同一个歌手点进去的曲目列表都是全的。
第二个问题倒是解决了
仔细一看犯了一个低级错误,我还奇怪明明处理了重复的情况为什么还是有重复,请见 4e4273
专辑艺术家名字重复
没有参与的专辑显示在了艺术家的页面下,用的字符串匹配?
专辑重复这个可能是我更新专辑的方法有问题,fix album duplicate 改成这样了。
艺术家的话就是用的字符串匹配,目前没找到更好的方法(我也很烦这里,感觉一直不对(*  ̄︿ ̄), 这个艺术家页面是把所有(表演者、专辑艺术家)含有这个名字的歌曲和专辑都找出来,实现方法见 SQLOperator.cs。
另外我还发现时长全是0,是不是文件读取有问题?
时长0是windows的bug,用Windows.Storage.Search
底下的API操作就能得到正确的结果,用StorageItemContentProperties.GetMusicPropertiesAsync()
结果就全是错的
"SELECT * FROM ALBUM WHERE ALBUMARTISTS LIKE '{value}, %' OR ALBUMARTISTS LIKE '%, {value}, %' OR ALBUMARTISTS LIKE '%, {value}' OR ALBUMARTISTS = '{value}' "
还是会有问题,如果分隔符是 '\0'
这样的非显示字符的话这样就是对的了,但现在 ','
在 value
里也有可能出现。
而且你的 SQLEscaping(string)
也有问题吧
分隔符我用的是$|$,这样应该就是 "SELECT * FROM ALBUM WHERE ALBUMARTISTS LIKE '{value}$|$%' OR ALBUMARTISTS LIKE '%$|${value}$|$%' OR ALBUMARTISTS LIKE '%$|${value}' OR ALBUMARTISTS = '{value}' "
估计行
那个SQLEscaping(string)
我是乱写的,我曾经搜索过 没找到,看它工作没问题 就放那没动了,我试试你这个
我其实更好奇的是为啥不用EF,自己写SQL太酸爽了
=操作应该是 value.Replace("'","''")
LIKE 操作应该是 value.Replace("'","''").Replace("[","[[]").Replace("%","[%]").Replace("_","[_]")
所以最后一个还是直接写 ALBUMARTISTS LIKE '{value}'
方便点
开始写的时候我不知道有EF……,然后用了 SQLite-net,而且数据库部分也是很早就写完了,也没有动力去改了……,可能某个惬意的午后会重写一下😂
这个Feature现在运行良好,应该没什么问题了
不对啊,专辑艺术家名字重复的问题还在?
They are separated by
/
(sequence ofspace + slash + space
)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.