MP3-файлы по своей природе не доступны для поиска.Они не содержат меток времени.Это просто серия кадров MPEG, одна за другой.Это делает это сложно.Существует два метода поиска MP3, каждый из которых имеет некоторые компромиссы.
Самый распространенный (и самый быстрый) метод - считывание битрейта из заголовка первого кадра (или, возможно, среднего битрейта из первых нескольких кадров).заголовки), возможно, 128к.Затем возьмите длину в байтах всего файла, разделите ее на этот битрейт, чтобы оценить длительность файла.Затем позвольте пользователю искать в файле.Если они ищут 1:00
в файле 2:00
, разделите размер файла в байтах до отметки 50% и «иголку» в поток.Читайте файл, пока не появится слово синхронизации для следующего заголовка кадра, а затем начните декодирование.
Как вы можете себе представить, этот метод не точен.В лучшем случае вы будете в среднем в половине кадра от цели.С размерами кадра 576 образцов, это довольно точно.Тем не менее, существуют проблемы с вычислением точки падения иглы в первую очередь.Наиболее распространенная проблема заключается в том, что теги ID3 и такие добавляют размер файла, отбрасывая расчеты размера.Более серьезная проблема - файл с переменным битрейтом (VBR).Если у вас есть музыка, закодированная с помощью VBR, и начало дорожки беззвучно или иным образом легко кодируется, начало может быть 32 кбит / с, тогда как одна секунда может быть 320 кбит / с.10-кратная ошибка в расчете длительности файла!
Второй метод - декодировать весь файл в необработанные сэмплы PCM.Это означает, что вы можете гарантировать поиск с точностью до выборки, но вы должны декодировать по крайней мере до точки поиска.Если вы хотите установить правильное время для полной дорожки, вы должны декодировать весь файл.Около 20 лет назад это было мучительно медленно.Поиск трека займет почти столько же времени, сколько и прослушивание трека до той точки, к которой вы стремились!В наши дни для коротких файлов вы, вероятно, можете декодировать их так быстро, что это не имеет большого значения.
TL; DR;Если вам необходим поиск с точностью до выборки, сначала декодируйте файлы, прежде чем помещать их в проигрыватель, но сначала поймите снижение производительности, прежде чем принять решение об этом компромиссе.