2015-12-29 2 views

ответ

8

Вы можете добавить пользовательские теги в MP3, записав данные в пользовательских (частных) кадрах.

Но сначала:

Вы должны переключиться на ID3v2, если вы используете ID3v1. Любая версия ID3v2 будет делать, но версия, совместимая с большинством вещей is ID3v2.3.

Требуемое с помощью директив:

using System.Text; 
using TagLib; 
using TagLib.Id3v2; 

Создание Частные Frames:

File f = File.Create("<YourMP3.mp3>"); // Remember to change this... 
TagLib.Id3v2.Tag t = (TagLib.Id3v2.Tag)f.GetTag(TagTypes.Id3v2); // You can add a true parameter to the GetTag function if the file doesn't already have a tag. 
PrivateFrame p = PrivateFrame.Get(t, "CustomKey", true); 
p.PrivateData = System.Text.Encoding.Unicode.GetBytes("Sample Value"); 
f.Save(); // This is optional. 

В приведенном выше коде:

  • Изменить "<YourMP3.mp3>" на пути к вашему MP3файл.
  • Изменить "CustomKey" на имя, которое вы хотите, чтобы ключ был.
  • Измените "Sample Value" на любые данные, которые вы хотите сохранить.
  • Вы можете опустить последнюю строку, если у вас есть собственный способ сохранения.

Чтение Private Frames:

File f = File.Create("<YourMP3.mp3>"); 
TagLib.Id3v2.Tag t = (TagLib.Id3v2.Tag)f.GetTag(TagTypes.Id3v2); 
PrivateFrame p = PrivateFrame.Get(t, "CustomKey", false); // This is important. Note that the third parameter is false. 
string data = Encoding.Unicode.GetString(p.PrivateData.Data); 

В приведенном выше коде:

  • Изменить "<YourMP3.mp3>" на пути к файлу MP3.
  • Изменить "CustomKey" на имя, которое вы хотите, чтобы ключ был.

Разница между чтением и записью является третьим булевым параметром функции PrivateFrame.Get(). Во время чтения вы проходите false, а во время записи вы проходите true.

Дополнительная информация:

С byte[] можно записать на кадры, а не только текст, но и практически любой тип объекта может быть сохранен в тегах, при условии, что вы правильно преобразовать (и обратное преобразование при чтении) данные.

Для преобразования любого объекта в byte[] см. this answer, который использует для этого Binary Formatter.