формат MP3 файла состоит из кадров. Каждый кадр начинается с одиннадцати бит "1", а также с нескольких байтов метаданных, контролирующих скорость передачи данных и определяющих некоторые другие атрибуты. Каждый кадр независим, он был разработан таким образом, чтобы поддерживать потоковую передачу.
кадры могут иметь CRC-проверку на ошибки. Это необязательно.
операционная система, скорее всего, повторит чтение, если она столкнется с плохими секторами на компакт-диске (оборудование CD имеет свою собственную проверку ошибок mechansim перед MP3 encoder даже ничего не видит). Предполагая, что декодер не работает с буфером, декодер не получит новых данных во время этого процесса и должен будет остановиться. Если операционная система не может прочитать данные, она может сообщить об ошибке в операционную систему, которая в конечном итоге будет сообщена процессу размещения MP3-кодировщика. Зависит от программного обеспечения, что именно здесь происходит.
несколько возможных вещей могут произойти, если данные с компакт-диска читаются неправильно и по-прежнему делает это декодер (это, вероятно, не произойдет на ПК, но может в стерео или других не-PC устройств):
MP3-декодер ищет эти одиннадцать бит, чтобы найти начало кадра - если он не найдет их, он, вероятно, прекратит декодирование до следующего кадра.
Если данные заголовка плохие, он может воспроизводить кадр с неправильным битрейтом, так как байт, указывающий, какой битрейт может быть неправильным.
Если заголовок Бит CRC установлен, и CRC не совпадает, декодер, вероятно, выбросит кадр и не сыграет его. Большинство mp3 файлов не имеют КПР бит.
Если полезная нагрузка (данные после заголовка) неверна, MP3-декодер попытается воспроизвести ее.
задача декодера состоит в том, чтобы взять сжатые данные и генерировать несжатые данные для передачи на "верхний" уровень. Этот верхний уровень фактически использует несжатые данные для управления аудиоустройством. Я рискну предположить, что большинство кодеров/аудио драйверов имеют буфер-с настраиваемым размером - где MP3-декодер может создать некоторые данные для аудио драйвера и разрешить повторную попытку чтения.
Так, во всяком случае, если декодер остановился, потому что он не получает данные, верхний уровень фактически вождения аудио может сделать любой из ниже:
- верхний уровень выводит тишину. Вы услышите перерыв в аудио.
- декодер прекращает заполнение аудио буфер, но верхний уровень продолжает играть то, что есть. Аудио буферы, как правило," круговые", что означает, что они не обнулены, но постоянно перезаписываются новыми данными. Вы услышите пропуск, который является частью предыдущего воспроизведения звука.
- верхний уровень умный и пытается интерполировать то, что "должно" быть там. Я не думаю, что это очень распространено.
Если дешифратор выводит наружу плохие данные, то вы услышите static или хлопаете в звуковой.
ссылка.