在c#中以字符串形式编写ID3v2曲目号的好方法

本文关键字:曲目 ID3v2 方法 字符串 | 更新日期: 2023-09-27 17:53:00

如果这个问题已经在这个网站的某个地方回答了,请原谅我,但是当我搜索它时没有找到任何东西。我使用taglib-sharp在c#中为.mp3文件编写了一个ID3v1/2标签编辑器,taglib-sharp将曲目编号视为单位数字。根据id3.org:

'Track number/Position in set'帧是一个数字字符串包含音频文件在其原件上的顺序号录音。这可以用一个"/"字符和一个数字进行扩展包含原始曲目/元素总数的字符串录音。如。"4/9"。

我个人不使用"/",但我倾向于写"03"而不是"3"。是否有一种简单的方法可以直接将曲目编号作为字符串写入标签,而不是通过int?

另外,附带问题:taglib似乎不支持某些标签,特别是URL, origin。美工,出版商和编码。知道怎么处理这些吗?

在c#中以字符串形式编写ID3v2曲目号的好方法

UPDATE:因为这个答案是最初写的,所以GetTextAsString是公开的。

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

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

通过Id3v2.Tag.SetTextFrame写作很容易:

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

由于TRCK是一个单字符串文本框架,它可以类似地使用Id3v2.Tag.GetTextAsString:

读取
var tag = (Id3v2.Tag)file.GetTag(TagTypes.Id3v2, false);
var trackNumber = tag?.GetTextAsString("TRCK");

不,你不能将string保存为intuint而不先将其强制转换。为什么不根据你使用的库将值3保存为uint,并使用如下代码:

uint track = 3;
string strTrack = track.ToString("00");

显示它?

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

我在过去快速浏览了一下taglib sharp,它远远不能支持标签中的所有现有框架。它只支持最常见的帧。对于其他的,我认为有一些默认类可以使用,但我不记得名字了。否则,您仍然可以自己去扩展库,除非有其他可用的此类库,我不知道。