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