Taglib читает теги ID3v2 из произвольного файла С++

Я пытаюсь использовать API TagLib C++ для чтения метаданных ID3v2 из произвольного аудиофайла. Этот файл не обязательно является файлом .mp3 и может относиться к другим распространенным аудиоформатам. У меня есть следующее:

std::string readId3v2Tag(std::string filePath, std::string tagName) {
    // read from file
    TagLib::FileRef f(filePath.c_str());
    if (!f.isNull() && f.file()) {
        // get tags from property map
        TagLib::PropertyMap tags = f.file()->properties();
        if (tags.find(tag) != tags.end()) {
            return std::string(tags[tag][0].toCString());
        }
    }
}

Однако, когда я ввожу имя кадра ID3v2, он ничего не возвращает. Я считаю, что это связано с тем, что карта f.file()->properties() содержит формат тегов TagLib. Я должен иметь доступ к кадрам ID3v2 по имени.

Мне сказали использовать класс ID3v2, однако я не вижу, как получить к нему доступ из файла, и у меня проблемы с чтением документации по API. Кто-нибудь знает как это сделать?


person gowron    schedule 19.07.2020    source источник


Ответы (1)


Всегда читайте руководство: в нем сказано не использовать подход file(). Также properties() не даст вам кадры тега ID3v2 — вы должны перебрать их все, чтобы увидеть их ключи и значения.

Вместо

Это довольно просто, если условия ясны: файл может иметь от нуля до нескольких тегов, где тег ID3v2 может иметь от одного до нескольких фреймов. Однако сам по себе файл также может иметь несколько свойств, не привязанных к тегам (например, продолжительность звука, битовая глубина...) — неудивительно, что ни одно из имен фреймов, которые вы ищете, for не будет отображаться в свойствах файла.

person AmigoJack    schedule 19.07.2020