разбить изображение flac на треки - PullRequest
0 голосов
/ 04 сентября 2011

Это дополнительный вопрос к Расчет образцов Flac .

Реализую ли я смещение, сгенерированное этой формулой, с начала файла или после метаданных, с которых начинается поток ( здесь )?

Моя цель - программно разделить файл самостоятельно - в основном, в качестве учебного упражнения.Моя мысль состоит в том, что я запишу свой заголовок flac и блоки метаданных на основе значений, извлеченных из изображения, а затем фактической дорожки, которую я получу из основного изображения, используя мою таблицу запросов.

В настоящее время в моем коде я могу анализировать каждыйблок метаданных и конец, где начинаются кадры.

1 Ответ

1 голос
/ 04 сентября 2011

Предположим, вы пытаетесь декодировать, начиная с M:S.F = 3:45.30.75 кадров (секторов CDDA) в секунду и, очевидно, 60 минут в минуту.Чтобы преобразовать M: SF из вашего контрольного листа в значение смещения образца, я сначала вычислю количество секторов CDDA до желаемой начальной точки: (((60 * 3) + 45) * 75) + 30 = 16,905.Поскольку имеется 75 секторов в секунду, при условии, что аудио дискретизируется с частотой 44 100 Гц, в каждом секторе имеется 44,100 / 75 = 588 аудио выборок.Таким образом, желаемое смещение аудиосэмпла, с которого вы начнете декодировать, равно 588 * 16,905 = 9,940,140.

. Только что рассчитанное смещение является смещением в распакованные выборки PCM, а не в сжатый поток FLAC (или в байтах).Поэтому для каждого кадра FLAC рассчитайте количество отсчетов, которые он содержит, и продолжайте подсчет вашей позиции.Пропускайте кадры FLAC до тех пор, пока не найдете тот, который содержит исходный аудиосэмпл.В этот момент вы можете начать декодирование звука, отбрасывая любые сэмплы в кадре FLAC, которые вам не нужны.

FLAC также поддерживает блок SEEKTABLE, использование которого значительно ускорит (иизменить) процесс, который я только что описал.Если вы еще этого не сделали, вы можете посмотреть на реализацию эталонного декодера .

...