首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >正在删除id3标签

正在删除id3标签
EN

Stack Overflow用户
提问于 2013-04-11 03:41:02
回答 2查看 955关注 0票数 1

我需要从一个mp3文件中删除所有的id3标记。我已经尝试过了:

代码语言:javascript
复制
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标签。我想在计算标签的大小时有问题,但我不知道是什么问题?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-04-11 04:15:22

您的代码只处理文件开头的ID3v2标记。如果您的MP3文件同时包含两种类型的ID3 - ID3v1和ID3v2 -则需要删除这两种类型。

ID3v1标签放在文件的末尾,长度固定。它们实际上更容易剥离-它们总是文件的最后128个字节,并以文本"TAG“开头。

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

票数 0
EN

Stack Overflow用户

发布于 2015-08-04 05:18:09

我最近不得不这样做,并且不想使用库。下面是一段代码:

代码语言:javascript
复制
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());
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15934933

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档