Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторна робота Звук.doc
Скачиваний:
4
Добавлен:
09.09.2019
Размер:
89.09 Кб
Скачать

Чанк формат (Format Chunk)

Чанк Формат («fmt») описує фундаментальні параметри даних, частоту вибірки, розрядність даних і число каналів цифрового звукозапису.

 

ID = array[1..4] of Char;

ChankFormat = Record

 chunkID  : ID;

  chunkSize   : Integer;

 

  wFormatTag   : SmallInt;

  wChannels  : Word;

  dwSamplesPerSec  : Cardinal;

  dwAvgBytesPerSec : Cardinal;

  wBlockAlign  : Word;

  wBitsPerSample  : Word;

end;

ChankFormat – може мати і додаткові поля, тому не можна ігнорувати поле chunkSize – що визначає розмір запису  мінус 8 битий (поля chunkID і chunkSize).

Значення chunkedID завжди рівне “fmt “. Звукові дані можуть зберігається без стиснення, тоді вибірки зберігаються як було описано в розділі Елементи вибірок і фрейми. У разі формату із стисненням розміри вибірок можуть відрізнятися від розрядності звукових даних. На наявність стиснення указує поле wFormatTag. В цьому випадку його значення wFormatTag відрізняється від одиниці. Крім того в ChankFormat з'являться декілька полий ті, що ідентифікують метод стиснення.

- Перше додаткове поле (типа Word) визначає довжину додаткового блоку(після цього поля).

-Далі слідує спеціальний чанк (Fact chunk) що містить змінну типа Cardinal, що визначає розмір всіх аудіо даних (у нестислому ввиде). Розмір задається у вибірках.

  Якщо ніяке стиснення не використовується (тобто, wFormatTag = 1), то після ChankFormat немає додаткових службових полів.

Поле wChannels містить число звукових каналів. Значення 1 указує на моно звучання, значення 2 стерео,4 чотири канали звуку і т.д. Реальні дані зберігаються в чанке даних (Data Chunk), який буде описаний пізнішим.

-У полі dwSamplesPerSec записана частота дискретизації, тобто зберігається частота вибірок в секунду (тобто, Герц). Існують три стандарти MPC - 11025, 22050, і 44100 ГЦ, хоча допускається використання інших частот.

- Поле dwAvgBytesPerSec указує, скільки байтів програються кожну секунду. dwAvgBytesPerSec може використовуватися додатком для оцінки розміру буфера, необхідного для розміщення звукових даних, щоб належним чином відтворювати звук без проблем пов'язаних з перериванням відтворення звуку. Його значення повинне бути рівне результату твору dwSamplesPerSec * wBlockAlign закругленого у велику сторону. Для монофонічного сигналу з дискретністю 8 битий чисельне значення швидкості співпадає із значенням частоти дискретизації. Для стереофонічного сигналу з дискретністю 8 битий вона в два рази вище. Точне значення можна підрахувати по формулі:

nAvgBytesPerSec = (nChannels * nSamplesPerSec * wBitsPerSample) / 8

- У полі wBlockAlign знаходиться вирівнювання блоку в байтах, яке підраховується по формулі: wChannels * (wBitsPerSample div 8) закругленому у велику сторону. По суті, wBlockAlign - розмір фреймів в байтів. (т.о. фрейм для 16-бітової вибірки рівний 2 байтом, фрейм для 16-бітової стерео вибірки 4 байти. І т.д).

  У кожному звуковому файлі може бути не більш за один чанка формат.

 

Чанк даних (Data Chunk)

Чанк даних містить фрейми звукових даних (всі канали звукових даних).Рассмотрим структуру

 DataChunk = Record

  chunkID  : ID;

  chunkSize  : Integer;

  waveformData : array of byte;

end;

 

-Значення ID завжди рівне ‘data’.

- chunkSize - число байтів в чанке мінус 8 байт (поля ID і chunkSize) крім того, не враховуються байти вирівнювання структури. Пам'ятаєте, що опис даних зберігається в чанке формату. Все вищеперелічене відноситься тільки до нестислого формату.

-Масив waveformData містить власне вибірки, порядок їх проходження і вирівнювання описано в розділі вибірки і фрейми. Число фреймів можна обчислити, розділивши значення chunkSize на wBlockAlign чанка формату.

Чанк даних є необхідною частиною будь-якого звукового файлу.  У одному файлі може бути присутнім тільки один чанк даних.