Urho3D/Audio

Материал из Энциклопедия о программировании
Перейти к: навигация, поиск

В подсистеме Audio реализуется поток аудио выхода. После инициализации поддерживаются следующие операции:

  • Воспроизведение необработанного звука, ресурсов Ogg Vorbis или WAV Sound с помощью компонента SoundSource. Это позволяет делать ручное стерео панорамирование моно звуков; стереозвук будет выводиться с исходным стереомиксом.
  • Воспроизведение вышеуказанных звуковых форматов в псевдо-3D с помощью компонента SoundSource3D. У него есть стереопозиционирование и затухание на расстоянии, но он (по крайней мере, пока) не фильтрует звук в зависимости от направления (в новых версиях делает и это).

Компонент источника звука должен быть создан в узле, чтобы он считался «включенным» и мог воспроизводиться, однако этот узел не обязательно должен принадлежать сцене (напр., для звуков UI/HUD без позиции, которые будут просто излишне загромождать 3D-сцену, вы можете просто создать экземпляр узла в коде приложения, аналогично камере, существующей вне сцены.

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

На выходе получается программное микширование неограниченного количества одновременных звуков. Звуки Ogg Vorbis декодируются на лету, и их декодирование может потребовать больших затрат памяти и ресурсов процессора, поэтому рекомендуются файлы WAV, когда необходимо воспроизвести большое количество коротких звуковых эффектов.

В целях управления громкостью каждый SoundSource можно разделить на определенную пользователем группу, которая умножается на главную категорию и индивидуальное усиление SoundSource, установленное с помощью SetGain для окончательного уровня громкости.

Для управления громкостью категорий используйте SetMasterGain, который определяет категорию, если она ещё не существует.

Обратите внимание, что подсистема Audio всегда создается, но в режиме headless воспроизведение звуков моделируется с учетом длины и частоты звука. Это позволяет основывать логику на том, воспроизводится конкретный звук или нет, даже в серверном коде.

Параметры звука

Стандартный файл WAV не может сказать, должен ли он зацикливаться, а необработанный звук не содержит никакой информации заголовка. Параметры для ресурса Sound можно дополнительно указать через файл XML, имя которого совпадает с именем звука, но с расширением xml. Возможные элементы и атрибуты описаны ниже:

<sound>
	<format frequency="x" sixteenbit="true|false" stereo="true|false" />
	<loop enable="true|false" start="x" end="x" />
</sound>

Частота указывается в Гц, а начало и конец цикла — это байты от начала аудиоданных. Если цикл включен без указания начала и конца, предполагается, что это весь звук. Сжатые звуки Ogg Vorbis не поддерживают указание диапазона петель, т.е. указывается только включено или отключено полное звуковое воспроизведение.

Стриминг звука

Помимо воспроизведения существующих звуковых ресурсов, звук может генерироваться во время выполнения с помощью класса SoundStream и его подклассов. Чтобы начать воспроизведение потока на SoundSource, вызовите Play(SoundStream* stream).

Потоковая передача звука используется внутри для реализации декодирования Ogg Vorbis «на лету». Он доступен только в коде C++, но не в сценариях из-за его низкоуровневого характера. См. образец SoundSynthesis C++ для примера использования подкласса BufferedSoundStream, который позволяет помещать звуковые данные в очередь для воспроизведения из основного потока.

Аудио события

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