Выбор формата хранения музыкальных образов

Образ музыкального диска может быть сделан в двух формах:

  • мультитрековый образ - каждый трек хранится в отдельном файле;
  • единый образ - имеется единый файл, к которому прилагается индексная таблица (cue файл), определяющая начало каждого трека.

В первом случае программа плеер последовательно воспроизводит каждый файл, вставляя между ними паузу, некоторой стандартной длины (от 0 до нескольких секунд). Во втором случае для каждого трека в индексной таблице указывается абсолютная позиция от начала трека и его название, плеер читает эту таблицу и обеспечивает точное позиционирование на начало каждого трека, при этом паузы между треками могут быть разными, их продолжительность определяется создателем диска. Мне представляется, что вторая форма более корректна, поскольку сохраняет авторское отношение к музыкальному материалу. Для большинства дисков популярной музыки пауза между треками составляет 2 секунды, а длительность трека около 2.5 минуты, это пошло еще с эпохи музыкальных автоматов (джук-бокс), когда за 1 монету (никель) исполнялась одна песенка, приблизительно одинаковой продолжительности. Но для некоторых дисков, например "Sgt. Pepper's Lonely Hearts Club Band" (The Beatles), паузы между треками принципиальны, еще большее значение паузы имеют при записи классических произведений, где пауза является частью партитуры, т.е. самого произведения. Основной формой хранения музыкальных образов в моей коллекции являются единые образы (75%-80%), но имеются и мультитрековые. Если по какой либо причине был сделан мультитрековый образ, то собирать его в единый образ совершенно бессмысленно, паузы между треками восстановить уже не возможно. Для мультитрековых дисков формируется m3u файл плей-листа, содержащий полный список файлов - треков, который позволяет программному проигрывателю воспринимать набор треков, как образ диска, для единых образов обязателен индексный cue-файл.

Существует много различных форматов хранения музыкальных образов, обеспечивающих сохранение сжатого звука без потерь (lossless). Но если говорить о различиях этих форматов, то речь может идти только о распространенности того или иного формата, степени сжатия, скорости декодирования и других технических вопросах, сам же аудиоматериал определяется только источником данных, а способ кодирования не принципиален и на качество звука влиять не может. В моем случае это CDDA диски - кодирование 16 бит, частота дискретизации 44,1 кГц, два канала - т.е. это характеристики файла формата WAV, хотя и это не совсем так, это скорее характеристики CDDA, сохраненного в wav файле, сам же wav формат позволяет хранить данные с самыми разными характеристиками. Сам wav файл не содержит информационных тэгов, т.е. собственно архив wav файлов должен сопровождаться внешней информационной базой, устанавливающей соответствие имени файла и сопроводительной информации. Поэтому использование его как формата хранения представляется сомнительным. Если исходный материал сделан из mp3 источника, то чем его не преобразовывай, и как его не храни - он таким и останется. По текущему состоянию можно выбирать из трех основных lossless форматов - ape (Monkey’s Audio), flac (Free Lossless Audio Codec), wv (WavPack), alac (Apple Lossless). Попробую обосновать выбор формата flac, хотя до последнего времени признаком хорошего тона был формат ape. Основные моменты определившие этот выбор:

  • стандартная поддержка формата большинством цифровых плееров;
  • универсальность формата, что обеспечивает экспортируемость на многие системы и платформы;
  • высокая степень сжатия (правда на 1%-2% хуже, чем у лучшего ape кодека);
  • мощная система тэгов (встроенной дополнительной информации), для тэгов используется система Vorbis-комментариев;
  • исходный код открыт и легко лицензирован;
  • декодирование очень нетребовательно к ресурсам процессора, что допускает аппаратную реализацию на компактных устройствах;
  • быстрое декодирование, независящее от уровня сжатия;
  • аппаратная поддержка (Cowon iAUDIO, Kenwood MusicKeg, Philips Streamium, Rio Karma и другие);
  • поддержка потоковости, т.е. может быть совмещено поблоковое воспроизведение и параллельная распаковка данных;
  • устойчивость к ошибкам, испорченные файлы могут быть частично восстановлены, хотя в некоторых случаях эта возможность может стать причиной искажения исходного материала, которое достаточно сложно определить.

Задача выбора метода кодировки образов коллекции преследует обеспечение стандартизации форм хранения аудиоданных и представления сопроводительной информации. Поэтому кроме выбора единого способа кодирования необходимо обеспечить единую систему представления дополнительной информации в тэгах flac файла. Вести информационное сопровождение можно непосредственно редактируя flac файлы, но это не удобно и оперативно при достаточно большом объеме коллекции. В моей системе хранения, основой информационной поддержки являются базы данных коллекции. Информация помещается в стандартные тэги формата VORBIS (мета-блок VORBIS_COMMENT - type: 4). Все тэги хранятся в текстовом виде.

В общем случае устанавливаются следующие тэги:

ARTIST=Основные исполнители – тег может иметь множественное значение
ALBUM=Название альбома – название альбома по базе описания коллекции
TITLE=Название трека – только для потрековых образов
DATE=yyyy – год издания
TRACKNUMBER=nn – номер трека, только для потрековых образов
TOTALTRACKS=nn– количество треков на диске
TOTALDISCS=nn – количество дисков, только для многодисковых боксов
DISCNUMBER=nn – номер диска, только для многодисковых боксов
PUBLISHER=Издатель – компания звукозаписи и zip-код диска, если он имеется
GENRE=Название общего стиля – название стиля по универсальному классификатору, например, jazz, blues, classics, rock
STYLE=Название собственного стиля – название стиля по собственному классификатору, например, Jazz (Small Orchestra - Bop), Classics (Modern Classics/SU
COMMENT=ссылка на описание диска – ссылка на описание диска на сайте mymusicbase.ru
REPLAYGAIN_REFERENCE_LOUDNESS=nn.n dB – теги ReplayGain (+ 4 обязательных тэга)
REPLAYGAIN_TRACK_PEAK=nn.nnnnn
REPLAYGAIN_TRACK_GAIN=-nn.nn dB
REPLAYGAIN_ALBUM_PEAK=nn.nnnnn
REPLAYGAIN_ALBUM_GAIN=-nn.nn dB
CUESHEET=Индексная таблица CUE – индексная таблица в текстовом виде, только для единых образов

Тэги не нужные для данного типа образа пропускаются. Тэги могут иметь множественное значение, например тэг ARTIST может быть использован несколько раз, в первом случае он содержит имя основного исполнителя, а все последующие - имена основных соисполнителей. Для единых образов в тэги VORBIS_COMMENT добавляется индексная таблица (имя поля - CUESHEET), кроме текстового тэга в flac файл вставляются мета-блоки CUESHEET (type: 5) и SEEKTABLE (type: 3) (содержит точки ссылок для индексов таблицы CUE). Кроме мета-блока CUESHEET для единых образов добавляется блок PICTURE (type: 6) с картинкой cover.jpg. Для мультитрековых образов картинка cover.jpg не встраивается в flac файл, при проигрывании плеером используется картинка, лежащая в той же папке, что и flac файлы с зарезервированным именем - cover.jpg (для различных плееров зарезервированное имя может быть разным, например для WinAmp это folder.jpg). У меня используются картинки размером около 250х250 пикселей. При вставке CUESHEET в flac файл исходная индексная таблица, хранящаяся в файле имя_папки.cue преобразовывается, и принимаются только значения следующих полей:

FILE ... WAVE
TRACK
TITLE - только для названий треков, название альбома и автор альбома берутся из тэгов ARTIST и ALBUBM из VORBIS_COMMENT.
INDEX 01 - в соответствии с требованием metaflac, индекс первого трека всегда устанавливается в значение 00:00:00

Мета-блок SEEKTABLE - это необязательный блок для хранения точек поиска. В потоке FLAC можно найти любой сэмпл и без этой таблицы, однако задержка может быть непредсказуемой, так как битрейт в потоке может существенно меняться. С помощью таблицы точек поиска пауза может быть существенно сокращена. Каждая точка занимает 18 байтов, поэтому для быстрого поиска с точностью до 1% необходимо всего 2кб. В потоке может быть только одни блок SEEKTABLE, но в нем может быть любое количество точек поиска. Он формируется автоматически при создании ссылок в мета-блоке CUESHEET. Например, в мета-блоке SEEKTABLE формируется точка перехода вида:
.....
  point 1: sample_number=14994432, stream_offset=30359497, frame_samples=4608
.....
а в мета-блоке CUESHEET формируется ссылка вида:
.....
  track[1]
  offset: 14995764
  number: 2
  ISRC:
  type: AUDIO
  pre-emphasis: false
  number of index points: 1
    index[0]
      offset: 0
      number: 1

.....
При этом точность позиционирования в пределах размера фрейма. В общем случае при создании мета-блока CUESHEET таблица SEEKTABLE дополняется новыми точками перехода, и так происходит многократно, поэтому при создании flac образа старая таблица SEEKTABLE удаляется и вместо нее создается новая таблица. Может быть данный подход не очень корректен, поскольку по мере проигрывания образа могут понадобиться и другие точки, но в любом случае это скорее вопрос к программе проигрывателя, нежели к формату flac файла. Пока мне не удалось найти информацию о том, как используется таблица точек перехода программами проигрывателями WinAmp или foobar2000.

Теги ReplayGain позволяют определить пиковый уровень записи при помощи ReplayGain Scanner, сохранить его в flac файле, и потом при прослушивании, выровняить уровень громкости различных треков по этому значению. Плеер при проигрывании считывает эти теги и занижает уровень громкости всей записи (именно всей — чтобы не менять баланс громкости между отдельными участками) так, что пик оказывается на максимальном уровне. Данный подход можно рассматривать, как некоторый достаточно корректный метод нормализации громкости аудио записи. Тэги ReplayGain добавляются командой --add-replay-gain файла пакетной обработки. Тэги ReplayGain необязательны и могут быть использованы по желанию через настройки плеера.

При проверке значений тэгов в flac файлах и сравнении их значений с данными музыкальной базы выполняется чтение данных из flac файла (используются собственные модули разбора метаданных), если данные не совпадают, то удаляются все тэги VORBIS и вставляются новые данные, при помощи стандартной программы metaflac.exe.

Вставка тэгов и мета-блока CUESHEET выполняется через промежуточные текстовые файлы teg.txt и cue.txt, при этом кириллица корректно преобразуется в формат UTF-8, используемый в flac файле. При чтении flac файла выполняется обратное преобразование. Также выполняется корректная обработка файлов с именами, использующими символы кириллицы, т.е. имена таких файлов переводятся в формат UTF-8 и только после этого используются при вызове flac.exe и metaflac.exe.

Формат flac файла позволяет использовать кроме тегов VORBIS популярные тэги формата ID3v2 и ID3v1 (в основном они используются в mp3 файлах). Блоки ID3v2 могут быть вставлены в начале файла, перед ключевым словом fLaC, а блок ID3v1, вставляется в конец файла. В моем архиве образов эти форматы тегов не используются (если не считать нескольких папок с образами в mp3 формате).

вернуться

 

          Последние изменения в документе сделаны 26/10/16 17:09

Главная страница проекта:
My Music Base