Формат файла MP3 состоит из кадров. Каждый кадр начинается с одиннадцати «1» битов, а также пары байтов метаданных, управляющих скоростью передачи битов и определяющих некоторые другие атрибуты. Каждый кадр независим, он был разработан таким образом, чтобы поддерживать потоковую передачу.
Кадры могут иметь CRC - проверка ошибок. Это необязательно.
Скорее всего, операционная система повторит чтение, если обнаружит поврежденные сектора на компакт-диске (аппаратное обеспечение компакт-диска имеет собственный механизм проверки ошибок, прежде чем кодировщик MP3 вообще что-либо увидит). Предполагая, что декодер не работает из буфера, декодер не получит новые данные во время этого процесса и должен будет остановиться. Если операционная система не может прочитать данные, она может сообщить об ошибке операционной системе, которая в конечном итоге будет сообщена процессу, принимающему кодировщик MP3. От программного обеспечения зависит, что именно здесь происходит.
Пара возможных вещей может произойти, если данные с компакт-диска читаются неправильно и все еще поступают в декодер (это, вероятно, не произойдет на ПК, но может произойти в автомобильной стереосистеме или другом устройстве, не являющемся ПК):
MP3-декодер ищет эти одиннадцать бит, чтобы найти начало кадра - если он не находит их, он, вероятно, прекратит декодирование до следующего кадра.
Если данные заголовка плохие, он может воспроизвести кадр с неправильной скоростью передачи битов, поскольку байт указывает, какая скорость передачи может быть неправильной.
Если бит CRC заголовка установлен и CRC не совпадает, декодер, вероятно, выбросит кадр и не воспроизведет его. В большинстве файлов MP3 бит CRC не установлен.
Если полезная нагрузка (данные после заголовка) неверна, MP3-декодер попытается воспроизвести ее.
Работа декодера состоит в том, чтобы брать сжатые данные и генерировать несжатые данные для передачи на «верхний» уровень. Этот верхний уровень фактически использует несжатые данные для управления аудиоустройством. Я бы рискнул предположить, что большинство настроек кодировщиков / аудиодрайверов имеют буфер - с настраиваемым размером - где декодер MP3 может собирать некоторые данные для аудиодрайвера и разрешать повторные попытки чтения.
Итак, в любом случае, если декодер остановился из-за того, что не получает данные, верхний уровень, фактически управляющий звуком, может выполнить любое из следующих действий:
- Верхний уровень выводит тишину. Вы услышите перерыв в аудио.
- Декодер прекращает заполнять данные в аудиобуфере, но верхний уровень продолжает воспроизводить то, что есть. Аудио буферы, как правило, "круговые", что означает, что они не обнуляются, а постоянно перезаписываются новыми данными. Вы услышите пропуск, который является частью предыдущего воспроизведения звука.
- Верхний уровень умный и пытается интерполировать то, что «должно» быть там. Я не думаю, что это очень распространено.
Если декодер выводит неверные данные, вы услышите статический звук или треск в аудио.
Ссылка .