在C#中将ID3v2轨道号写为字符串的好方法?

时间:2013-01-15 03:10:03

标签: c# id3 taglib-sharp id3v2

如果这个问题已在本网站的某个地方得到解答,请原谅我,但在搜索时我没有找到任何内容。我使用taglib-sharp在C#中为.mp3文件编写了一个ID3v1 / 2标签编辑器,而taglib-sharp将轨道号视为uint数字。根据{{​​3}}:

  

“轨道编号/位置集合”框架是一个数字字符串   包含原始音频文件的订单号   记录。这可以用“/”字符和数字扩展   包含原始曲目/元素总数的字符串   记录。例如。 “4/9”。

我个人不使用“/”,但我倾向于写“03”而不是“3”。是否有一种简单的方法可以将轨道号直接写为字符串,而不是通过uint?

另外,附带问题:taglib似乎不支持某些标签,特别是URL,Orig。艺术家,出版商和编码。关于如何处理这些问题的任何想法?

2 个答案:

答案 0 :(得分:1)

TagLib#中的Track字段是标签字段的各种标记规范的通用近似和简化。对于ID3v2标签,假设TRCK字段由一个或两个由斜杠分隔的数字字符串组成,并按照规范将它们转换为数字。

那就是说,它是一个文本字段,你可以用它做任何你想做的事情。您只需要访问文本框架即可读取或写入。

通过Id3v2.Tag.SetTextFrame

轻松写作
Id3v2.Tag tag = (Id3v2.Tag)file.GetTag(TagTypes.Id3v2, true); // Get or create ID3v2 tag.
tag.SetTextFrame(FrameType.TRCK, "03"); // Add or update TRCK frame.

阅读有点困难,因为GetTextAsString和GetTextAsArray便捷方法是私有的。 (我责怪没有好的作者。)幸运的是,这些方法非常轻巧,阅读如下。

Id3v2.Tag tag = (Id3v2.Tag)file.GetTag(TagTypes.Id3v2, false);
if (tag != null) {

    TextInformationFrame trackFrame = TextInformationFrame.Get (tag, FrameType.TRCK, false);
    if (trackFrame != null) {
        string [] text = trackFrame.Text;

        // Do something.
    }
}

答案 1 :(得分:0)

如果不先将string intuint放入uintuint track = 3; string strTrack = track.ToString("00"); ,我就无法将其保存到{{1}}或{{1}}。为什么不按照您使用的库将{3}保存为{{1}}并使用以下内容:

{{1}}

显示它?

如果许可证允许,您仍然可以修改库以满足您的需求。

我过去很快就看过taglib sharp,它远远不支持标签中的所有现有帧。它仅支持最常见的帧。对于其他的,我认为你可以使用某种默认类,但我不记得这个名字。否则你仍然可以自己去扩展库,除非有其他可用的库,我不知道。