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

Лабораторна робота №7. Генерація звукових файлів.

Мета роботи: Вивчити формати звукових файлів та навчитися генерувати музичні файли.

Короткі теоретичні відомості

Формати звукових файлів

Існують різні формати звукових файлів. Розглянемо деякі з них. Перш за все, це звукові формати WAVE, AU і AIFF, Ці формати можуть містити власне звук. Іноді вони можуть містити також стислі звукові дані, проте оформлені в стандартному форматі, причому для їх відтворення в системі повинні бути встановлені відповідні модулі. Звукові файли займають зазвичай великий об'єм (навіть у стислому вигляді). Тому дуже часто вживають також музичні файли у форматі MIDI. MIDI-файли не містять власне звукової інформації. Вони містять тільки набір команд типу клавішу ДО першої октави натиснути через 2 секунди після початку, відпустити ще через 0.5 секунди (звичайно, це дуже примітивний опис MIDI-команди, але в цілому дає уявлення про те, що це таке). Ці команди виконуються синтезатором, вбудованим в звукову карту користувача (або зовнішнім модулем, якщо такий є). Тому якість звучання, почута користувачем, сильно залежить від устаткування, що є у нього. Проте файли, написані для стандарту GM (General MIDI) зазвичай звучать дуже схоже на всіх синтезаторах, що підтримують його, а його підтримують практично всі сучасні звукові карти.

Оскільки набір МIDI-команд займає набагато менший об'єм, чим звукова інформація, МIDI-файли завантажуються набагато швидшим.

Формат wav-файлу

Дані, що мають відношення до мультимедіа (звук, відео і т. п.) зберігаються у файлах в так званому RIFF-форматі (Resource Interchange File Format - формат файлу для обміну ресурсами). Як wav-файли, що містять звук,, так і avi-файли, що містять відеоінформацію, мають формат RIFF.

Файл у форматі RIFF містить вкладені фрагменти (chunk's ). Зовнішній фрагмент складається із заголовка і області даних (рис.1).

Мал. 1 Фрагмент "RIFF"

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

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

Відмітимо, що формат RIFF не описує формат даних. Практично файл у форматі RIFF може містити будь-які дані для мультимедіа, причому формат даних залежить від типу даних.

Область, позначена на рис.1 як "Дані", може містити усередині себе інші фрагменти. Для файлу, в якому зберігаються звукові дані (wav-файл), ця область містить ідентифікатор даних "WAVE", фрагмент формату звукових даних "fmt " (три символи "fmt" і пропуск на кінці), а також фрагмент звукових даних (мал. 2). Файл може додатково містити фрагменти інших типів, тому не слід думати, що заголовок wav-файлу має фіксований формат. Наприклад, у файлі може бути присутнім фрагмент "LIST" або "INFO", що містить інформацію про права копіювання і іншу додаткову інформацію.

Мал. 2 Формат wav-файлу

Область, позначена на мал. 2 як "Формат даних", описує звукові дані.

Структура файлу

Wav файл є набір з численних чанков різного типу. Найважливішим чанком є чанк формату (Format chunk – «fmt»), який містить важливі параметри звукових даних, наприклад частоту вибірки. Іншим важливим чанком є чанк даних (Data chunk), який і визначає форму аудіо сигналу. Присутність інших додаткових чанков (optional chunks) не обов'язково.

Всі додатки використовуючі wav файли повинні уміти читати обов'язкові чанки, і уміти вибірково ігнорувати додаткові чанки. Програми, призначені для копіювання wav файлів повинні копіювати все чанки, навіть ті які він не може інтерпретувати. Порядок проходження чанков різного типу може бути довільним. Виключення складає чанк формату, який повинен передувати  чанку даних.

Розглянемо схему простого wav файлу

__________________________

| RIFF WAVE Chunk     |

|  groupID  = 'RIFF' |

| FileSize : Cardinal; |

|  riffType = 'WAVE'  |

|    __________________    |

|  | Format Chunk  |  |

|  |  ckID = 'fmt '  |  |

|   |__________________|   |

|    __________________    |

|  | Sound Data Chunk |  |

|  |  ckID = 'data'  |  |

|   |__________________|   |

|__________________________|