Краснодар

+7 952  830 72 85

Москва

+7 495 134 25 57

Краснодар

+7 952  830 72 85

Москва

+7 495 134 25 57

Программирование звука для игр

Программирование звука — тема довольно непростая. Мы не будем рассматривать сложную обработку звука; для базового уровня достаточно обеспечить воспроизведение музыки и звуковых эффектов, загруженных из файлов практически так же, как растровые изображения в графическом модуле.

Физика звука

Звук – это волна (поток волн), движение молекул, которое передается далее и в итоге гаснет. Кроме того, волны могут взаимодействовать друг с другом — накладываться, усиливая или погашая друг друга. Комбинируясь, волны создают разные тона и мелодии, которые мы воспринимаем как музыку. Громкость звука зависит от количества энергии, передаваемой по волне.

Запись и воспроизведение

Теоретически запись и воспроизведение звука в теории – этот фиксирование количества энергии, которое передается конкретной точке молекулами звуковых волн, а затем принуждение их к движению, как при записи.

На практике запись звука происходит за счет мембраны микрофона, которая преобразует удары молекул в какой-либо вид сигнала. Далее сигнал обрабатывается и сохраняется аналоговым или цифровым методом.

Во время цифровой записи измеряется и сохраняется состояние мембраны (прогиб внутрь или наружу, так называемые сэмплы) за дискретный временной такт. Данный процесс называется сэмплированием, а число сэмплов, полученных в единицу времени (секунду) – частотой дискретизации (герцы, Гц). Соответственно, чем больше сэмплов зафиксировано в секунду, тем качественнее запись. Так, например, частота звука, воспроизводимого с компакт-дисков, равна 44 100 Гц (44,1 КГц).

Но качество звука определяется не только частотой дискретизации. Также важен способ хранения положений мембраны (внутрь или наружу), что определяется положительным или отрицательным числом. Число может храниться как целое 8, 16 или 32-битное число со знаком, а также как 32-битное (или даже 64-битное) число с плавающей точкой. У каждого типа своя точность. Максимальное и минимальное значения соответствуют максимальному отклонению мембраны от исходного положения в обе стороны – амплитуда, которая обозначает громкость звука.

Для записи «плоского» монозвука (одноканального) достаточно одного микрофона. Используя 2 и более микрофона, можно измерять звуковые волны в разных точках пространства (например, слева и справа от источника) и получать объемный стереозвук. Правда, запись будет включать в 2 раза больше звуковых сэмплов. Естественно, воспроизведение также должно вестись из двух динамиков – только так можно услышать пространственный компонент записи. Воспроизведение, по сути – это тот же самый процесс, что и запись, с точностью до наоборот.

Качество звука и компрессия

Один и тот же аудиоролик можно записать с разной частотой дискретизации и числом битов на сэмпл. Естественно, чем выше требования к качеству звука, тем тяжелее записанный файл и больше занимаемое им дисковое пространство. В поисках компромисса были изобретены сложные психоакустические алгоритмы компрессии, которые анализируют исходные записи и сжимают их. При этом оригинальная запись теряет некоторые несущественные части.

Перед воспроизведением сжатой аудиозаписи звуковой картой ее прочитывают и декомпрессируют.

А что на практике?

Фрагменты музыка в игре не загружаются заранее в память, а воспроизводятся на лету. Но для коротких звуковых эффектов, которые регулярно повторяются (выстрелы, удары, взрывы, междометия), потоковое воспроизведение не подходит. И так как короткие звуки занимают в памяти мало места, их можно загрузить туда, чтобы воспроизводить по необходимости.

Итак, для игры нужно:

  • загружать аудиофайлы для потокового воспроизведения из памяти;

  • управлять воспроизведением потокового звука;

  • управлять воспроизведением звука, полностью загруженного в память.

Все это транслируется напрямую в интерфейсы Audio, Sound и Music.