Возможно ли добавить пользовательские теги (например, «SongKey: Em») в mp3-файл, используя TagLib# libary?добавление пользовательского тега с использованием библиотеки тегов tagLib
ответ
Вы можете добавить пользовательские теги в 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
.