1

如果这个问题已经在这个网站的某个地方得到了回答,请原谅我,但是当我搜索它时我没有找到任何东西。我使用 taglib-sharp 为 C# 中的 .mp3 文件编写了 ID3v1/2 标记编辑器,并且 taglib-sharp 将轨道编号视为 uint 编号。根据id3.org

'Track number/Position in set' 框架是一个数字字符串,其中包含音频文件在其原始录音中的顺序号。这可以用一个“/”字符和一个包含原始录音上轨道/元素总数的数字字符串进行扩展。例如“4/9”。

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

另外,附带问题:taglib 似乎不支持某些标签,特别是 URL、Orig。艺术家、出版商和编码。知道如何处理这些吗?

4

2 回答 2

3

更新:由于此答案最初是编写的,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");
于 2013-04-08T05:05:20.920 回答
-1

不,您不能将 a 保存string到 aintuint不先转换它。为什么不uint根据您正在使用的库将值 3 保存为 a 并使用以下内容:

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

显示它?

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

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

于 2013-01-15T04:33:29.700 回答