Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Programming / GameProg / RPG_Programming_2ed.pdf
Скачиваний:
250
Добавлен:
12.02.2016
Размер:
12.06 Mб
Скачать

Глава 4 Воспроизведение звуков и музыки с DirectX Audio и DirectShow

Музыка укрощает диких зверей, и найдется комбинация звуков и музыки, которая успокоит нас. Да и вообще, разве можно получить удовольствие от игры без звука? Можете ли вы представить себе современный боевик, такой как «Матрица», в виде немого кино! Никаких громких взрывов, звуков ударов пуль и разговоров актеров — нет всего того, что делает кино полностью мультимедйным окружением.

Ваша игра заслуживает того же уровня качества, что и фильмы, которые вы смотрите, включая музыку и звуковые эффекты. Вы сможете сделать все это с помощью DirectX Audio и DirectShow — дуэтом мультимедйных компонентов Microsoft DirectX.

В этой главе вы узнаете о следующих вещах:

Основные свойства звука.

Цифровые форматы для звуков и музыки.

Как использовать DirectX Audio в ваших проектах.

Как воспроизводить звуки, используя DirectSound.

Как заставить DirectMusic петь.

Как воспроизводить MP3, используя DirectShow.

Основы звука

Издает ли шум дерево, которое падает в лесу, где его никто не может услышать? Хотя часто этот вопрос считают провокационным, он имеет смысл. Звук — это просто волны идущие через среду, такую как воздух. С практической точки зрения, эти волны ничто, пока они не достигнут уха и не воздействуют на барабанную перепонку, воспроизводя звук.

Большинство природных звуков представляют собой «чистую» волну, для которой вы можете ясно видеть шаблон, которому она следует.

netlib.narod.ru

193

Глава 4. Воспроизведение звуков и музыки с DirectX Audio и Direct Show

Синусоидальная волна (sine wave) — это хороший пример «чистой» волны; ее спады и подъемы чередуются по постоянному шаблону. Другие волны, такие как голос человека, более сложны — спады и подъемы чередуются очень быстро, не следуя какому-либо шаблону. На рис. 4.1 показаны две различных звуковых волны.

Рис. 4.1. Звуковые волны могут иметь простую, чистую форму или могут быть очень сложными

У каждого звука есть уникальные свойства, такие как амплитуда (уровень громкости) и частота. Вы можете в течение времени записывать свойства звуков, чтобы сохранить их в цифровой форме и потом воспроизвести.

Кроме того, вы можете использовать эти звуки музыки, например, для того, чтобы играть композиции на вашем компьютере. Записав звуки, скажем, фортепьяно и скрипки, вы можете практически неотличимо воспроизводить реальные песни. Вообразите, что кто-то играет пьесу Моцарта, и нельзя отличить — реальный это оркестр или его компьютерный двойник!

Цифровая звукозапись

Основы цифровой записи и воспроизведения звуков не слишком сложны для понимания. В общем случае вы берете звук, скажем, продолжительностью в две секунды, и исследуете звуковую волну от начала до конца с определенной периодичностью (частотой выборки или частотой дискретизации, sampling rate), которая измеряется в Герцах (Гц).

Скажем, вы хотите выполнить запись двухсекундного звука с частотой дискретизации 11 025 Гц, значит звук будет разделен на 22 050 фрагментов (по 11 025 фрагментов в секунде). Эти фрагменты называются выборками (samples). Для каждой выборки вы определяете амплитуду звуковой волны в месте нахождения выборки, измеряя таким образом уровень громкости в определенный момент времени. Вы записываете полученное значение и переходите к следующей выборке. Записав уровень громкости для каждой выборки волны, вы получите цифровое представление звука.

На рис. 4.2 показана звуковая волна, разбитая на несколько выборок. При оцифровке звук теряет свою «волновую» форму. Оцифрованная волна не сохраняет форму оригинальной волны, поскольку для точного воссоздания оригинальной волны количества выборок недостаточно.

194

netlib.narod.ru

Джим Адамс

Рис. 4.2. Оригинальная волна на рисунке слева разбивается на несколько выборок. Вы используете эти выборки для создания цифрового представления звука, показанного на рисунке справа

Ясно, что чем выше частота дискретизации, использовавшаяся при захвате звуковой волны, тем точнее вы можете воссоздать исходный звук. «Какая частота дискретизации лучше» спрашиваете вы? У меня нет точного ответа для вас, это зависит от необходимого вам уровня качества, и обычно используются значения 8 000 Гц, 11 025 Гц, 22 050 Гц и 44 100 Гц. Последнее значение используется при записи музыки на компакт-диски и, предполагается, что оно обеспечивает наилучшее качество.

Следующая вещь, которую необходимо понимать — хранение (storage). Захватывая выборку из волны вы получаете число, величина которого представляет амплитуду. Вы можете выбрать, хранить ли это значение как 8- разрядное, или как 16-разрядное. Это означает, что вы можете сохранять 256 уровней при использовании 8-разрядной выборки, или 65 536 уровней при использовании 16-разрядной выборки.

Выбирайте большее значение, чтобы у вас было больше уровней для репликации. 8-разрядные выборки должны использоваться только для низкокачественных звуков. Всегда старайтесь использовать 16-разрядный звук; даже несмотря на то, что его размер в два раза больше — он того стоит.

И, наконец, вы должны решить сколько каналов использовать. Стереофонические звуки (те, которые по-разному звучат с левой и с правой сторон) используют два канала. Монофонические звуки используют только один канал; следовательно со всех сторон слышен один и тот же звук.

Вы можете хранить цифровые звуки различными способами и использовать для них различные методы шифрования и сжатия. Я обычно храню их в несжатом формате волновых файлов Windows (.WAV), потому что это наиболее популярный (и лучше всего поддерживаемый) способ хранения звука.

netlib.narod.ru

195

Соседние файлы в папке GameProg