删除id3标签

时间:2013-04-10 19:41:02

标签: c# id3

我需要删除mp3文件中的所有id3标签。我试过这个:

byte[] a = System.IO.File.ReadAllBytes("X.mp3");
int x = 0;
int b=3;
for (int i = 6; i <= 9; i++)
{
   x += (a[i] << (b * 7));
   b--;
}
byte[] r = new byte[a.Length-x];
for (int i = x; i < a.Length; i++)
{
   r[i-x] = a[i];
}
System.IO.File.WriteAllBytes("X.mp3", r);

但它不会删除所有id3标签。 我认为在计算标签大小时存在问题,但我不知道出了什么问题?

2 个答案:

答案 0 :(得分:0)

您的代码仅在文件开头处理ID3v2标记。如果你的MP3文件有两种类型的ID3 - ID3v1和ID3v2 - 你需要删除它们。

ID3v1标签位于文件的末尾,并且是固定长度的。它们实际上更容易剥离 - 它们始终是文件的最后128个字节,并以文本“TAG”开头。

使用预先存在的库来处理MP3文件可能会更好。其中之一就是开源库taglib-sharp。它可以操作两种类型的ID3标签,以及执行各种其他任务。

答案 1 :(得分:0)

我最近不得不这样做,并且不想使用图书馆。这是一个片段:

var mp3 = File.ReadAllBytes("x.mp3");

int skip = 0;
if (Encoding.ASCII.GetString(mp3, 0, 3) == "ID3")
    skip = 7 + BitConverter.ToInt32(mp3.Skip(6).Take(4).Reverse().ToArray(), 0);

int take = mp3.Length - skip;
if (Encoding.ASCII.GetString(mp3, mp3.Length - 128, 3) == "TAG")
    take -= 128;

File.WriteAllBytes("stripped.mp3", mp3.Skip(skip).Take(take).ToArray());