Разбить изображение flac на треки

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

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

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

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

1 ответ

Решение

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

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

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

Другие вопросы по тегам