Я хочу иметь отпечаток пальца / guid для файла звуковой дорожки без добавления какой-либо новой информации в метаданные файла.Этот отпечаток может не быть абсолютно уникальным, но он должен быть настолько уникальным, насколько это возможно, имея в виду, что он должен вычисляться быстрее, чем хэш всех аудиоданных.
При условии, что свойства звука (метаданные) доступны только для чтения, у меня естьприйти к следующему решению:
- Прочитать все аудио свойства трека.
- Создать хеш из этих свойств.
Этодовольно низкая вероятность того, что две дорожки будут иметь одинаковые аудио свойства и не будут одинаковыми, поэтому мне все равно значение всех этих свойств.Я просто хочу получить необработанные байты всех аудио свойств независимо от формата файла.
Я хотел бы иметь что-то вроде:
TagLib::ByteVector getRawAudioProperties(TagLib::FileRef track)
{
if (track.isNull())
return {};
if (const auto metaData = f.audioProperties())
return metaData->GetRawBytes();
return {};
}
Очевидно, что taglib не предоставляет такой методкак GetRawBytes
.Я могу делать то, что хочу, вручную обрабатывая все свойства всех подклассов TagLib::AudioProperties
+ моей собственной сериализации.
Есть ли лучший способ сделать то, что я хочу?