удаление тега id3

79
8

Мне нужно удалить все теги id3 из mp3 файла. Я пробовал это:

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. Я думаю, что есть проблема при расчете размера тега, но я не знаю, что не так?

спросил(а) 2021-01-19T16:52:09+03:00 9 месяцев назад
1
Решение
129

Ваш код обрабатывает только теги ID3v2 в начале файла. Если ваш MP3 файл имеет оба типа ID3 - ID3v1 и ID3v2 - вам нужно будет удалить оба.

Теги ID3v1 размещаются в конце файла и фиксируются. На самом деле их было бы проще снять - они всегда являются последними 128 байтами файла и начинаются с текста "TAG".

Вам может быть лучше, если использовать уже существующую библиотеку для работы с файлами MP3; одна из них - библиотека с открытым исходным кодом, taglib-sharp. Он может управлять обоими типами тегов ID3, а также выполнять множество других задач.

ответил(а) 2021-01-19T16:52:09+03:00 9 месяцев назад
46

Я должен был сделать это недавно и не хотел использовать библиотеку. Вот фрагмент:


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());

ответил(а) 2021-01-19T16:52:09+03:00 9 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема