Разбить изображение 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
блок, использование которого значительно ускорит (и изменит) процесс, который я только что описал. Если вы еще этого не сделали, вы можете посмотреть на реализацию эталонного декодера.