Аудио в Интернете
Эта страница предоставляет только информацию об аудиовозможностях в веб-платформе. Чтобы узнать, как использовать аудио в вашем проекте Unity, см. Audio Overview.
Потому что Unity использует FMOD для управления звуком на разных платформах, веб-платформа поддерживает лишь ограниченный набор возможностей — только базовые функции. FMOD опирается на потоки, которых API WebGL не поддерживает. Поэтому Unity использует реализацию на основе внутреннего Web Audio API, где воспроизведением и микшированием звука занимается браузер.
Примечание: Новая политика автоматического воспроизведения в Google Chrome предотвращает автоматическое воспроизведение аудио- и видеофайлов при определенных обстоятельствах. Например, игра может быть настроена на автоматическое воспроизведение фоновой музыки вскоре после загрузки, но она не будет воспроизводиться автоматически, если вы не нажмете или не нажмете на веб-сайте. Дополнительные сведения о том, как включить или отключить эту политику, см. в документации Google Chrome на сайте Политика автоматического воспроизведения в Chrome.
Поддерживаемые классы
Unity Веб поддерживает следующие API классы:
| Класс | WebGL статус поддержки |
|---|---|
| AudioSource | WebGL поддерживает некоторые APIs. См. AudioSource для конкретных деталей поддержки. |
| AudioListener | Все APIs поддерживаются. |
| AudioClip | WebGL поддерживает некоторые APIs. См. AudioClip для конкретных деталей поддержки. |
| AudioMixer | WebGL поддерживает некоторые APIs. См. Аудиомикшер для конкретных деталей поддержки. |
| SystemInfo.supportsAudio | Браузер поддерживает звук для WebGL. По этой причине SystemInfo.supportsAudio всегда является истинным. |
| Microphone | Не поддерживается. |
AudioSource
AudioSource API поддерживает базовое позиционное воспроизведение аудио, включая:
- Пауза и возобновление
- Роллоф
- Настройка высоты звука
- Поддержка эффекта Доплера
Unity WebGL поддерживает следующие AudioSource APIs:
| Настройки | Описание |
|---|---|
| Clip | Определяет следующий аудиоклип, который будет воспроизведен. |
| dopplerLevel | Устанавливает шкалу Доплера для AudioSource. |
| ignoreListenerPause | Позволяет AudioSource игнорировать AudioListener.pause и продолжать воспроизводить аудио. |
| ignoreListenerVolume | Игнорирует том AudioSource конечного пользователя. |
| isPlaying | Возвращает true, если AudioSource.clip играет. |
| loop | Позволяет приложению повторять AudioSource.clip. |
| maxDistance | Задает максимальное расстояние, на котором AudioSource.clip прекращает затухание или становится не слышным. |
| minDistance | Устанавливается минимальное расстояние, на котором AudioSource.clip больше не поднимается в громкости. Звук начинает ослабевать за минимальным расстоянием. |
| mute | Выключает AudioSource. |
| pitch | Задает высоту AudioSource.clip. WebGL поддерживает только положительные значения высоты. |
| playOnAwake | Играет AudioSource на Awake. |
| rolloffMode | Устанавливает AudioSource затухание на расстоянии. |
| time | Задает позицию воспроизведения в секундах. |
| timeSamples | Устанавливает позицию воспроизведения в семплах с импульсной кодовой модуляцией (PCM). |
| velocityUpdateMode | Задает, обновляется ли AudioSource в цикле фиксированного или динамического обновления. |
| volume | Задает громкость AudioSource (0.0 до 1.0). |
| Pause | Приостанавливает AudioSource.clip. |
| Play | Играет AudioSource.clip. |
| PlayDelayed | Играет AudioSource.clip с задержкой, которую вы указываете в секундах. |
| PlayOneShot | Воспроизведение AudioClip и масштабирование AudioSource на volumeScale. |
| PlayScheduled | Играет AudioSource в указанное время. |
| SetScheduledEndTime | Задает время окончания запланированного AudioSource.clip. |
| SetScheduledStartTime | Задает время начала запланированного AudioSource.clip. |
| Stop | Прекращает воспроизведение AudioSource.clip. |
| UnPause | Возобновляет приостановленный AudioSource.clip. |
| PlayClipAtPoint | Играет AudioSource.clip в заданной позиции в мировом пространстве. |
Примечание: Поскольку аудиоданные декодируются в браузере с помощью decodeAudioData, возможно, что частота дискретизации аудиофайла во время выполнения отличается от сериализированных аудиоданных (44100Гц), поскольку браузер будет соответствовать частоте дискретизации BaseAudioContext, обычно согласованной с настройками аудиодрайвера устройства. Учитывая это, мы рекомендуем проверить значение AudioClip.frequency во время выполнения или использовать AudioSource.time при выполнении операций поиска.
AudioClip
Unity WebGL импортирует AudioClip файлы в формате Advanced Audio Coding (AAC), который поддерживается большинством браузеров. Unity WebGL поддерживает следующие AudioClip APIs:
| Свойства | Описание |
|---|---|
| frequency | Частота дискретизации клипа в герцах. |
| length | Длина AudioClip в секундах. |
| loadState | Возвращает текущее состояние загрузки аудиоданных, связанных с AudioClip. |
| samples | Длина AudioClip в образцах. |
| loadType | Тип нагрузки клипа. Вы можете установить тип нагрузки AudioClip в Inspector. |
| Метод | Описание | Дополнительная информация |
|---|---|---|
| AudioClip.Create | Создает AudioClip с именем и длиной, которые вы указываете. | Unity WebGL частично поддерживает AudioClip.Create. Браузеры не поддерживают динамическую трансляцию, поэтому для использования AudioClip.Create, установите Stream на false. |
| AudioClip.SetData | Задает образцы данных в AudioSource.clip. | Unity WebGL частично поддерживает AudioClip.SetData. Вы можете использовать этот метод только на сжатых аудио файлах с Тип нагрузки установить на Декомпрессия при нагрузкеСм. Сжатое аудио. |
| AudioClip.GetData | Получает массив с образцовыми данными из AudioSource.clip. | Unity WebGL частично поддерживает AudioClip.GetData. Вы можете использовать этот метод только на сжатых аудио файлах с Тип нагрузки установить на Декомпрессия при нагрузкеСм. Сжатое аудио. |
Примечание: Для поддержки аудиоклипа на Linux, убедитесь, что установлен пакет ffmpeg.
Проблемы с аудиоциклами
При повторении аудиоклипа на сборке WebGL в точке повторения могут возникать звуковые помехи. Поскольку AAC является лицензированным форматом, Unity зависит от кодера хост-платформы для преобразования файлов в AAC. Кодеры могут изменять первые 1024 семпла во время кодирования, что влияет на точку начала повтора и вызывает звуковые помехи при повторе звука. Чтобы решить эту проблему:
- Используйте WAV в качестве формата исходного файла.
- Добавьте по крайней мере 1024 пробы молчания в начало вашего файла WAV.
- Отредактируйте кусок
smplWAV так, чтобы петля начиналась после добавления молчания.
Аудиомикшер
Unity Web поддерживает некоторые функции Аудиомикшер.
С помощью Аудио-миксеров в Интернете можно выполнять следующие действия:
- Создание ассета Аудио-миксер.
- Добавить AudioMixerGroups в иерархию.
- Настройте громкость каждой группы. Чтобы выявить или изменить громкость с помощью скрипта, используйте AudioMixer.SetFloat.
Примечание: Объем — это единственное свойство, которое можно изменить в Web. Другие свойства и звуковые эффекты не поддерживаются.
Сжатое аудио
Чтобы использовать сжатое аудио с WebGL в Unity, установите для AudioClip loadType один из следующих параметров:
Вы также можете изменить эти настройки в Unity Editor. Чтобы изменить настройку, выберите свой Аудиоклип, затем установите Тип Загрузки в окне Inspector на предпочтительный вариант (Разсжатие при загрузке или Сжатие в памяти).
| Метод сжатия | Описание | Соображения |
|---|---|---|
| CompressedInMemory | Используйте это для сжатия аудио на диске и чтобы оно оставалось сжатым после загрузки в память приложения. | Сжатое аудио может вызвать задержку и является менее точным, когда дело доходит до воспроизведения аудио. Однако, сжатое аудио использует меньше памяти в вашем приложении, чем декомпрессированное аудио. Наилучшей практикой является использование CompressedInMemory для аудио, которое не влияет на точность, например, фоновая музыка. |
| DecompressOnLoad | Используйте это для сжатия аудио на диске, подобно CompressedInMemory, и декомпрессии при загрузке в память приложения. | Десжатое аудио использует значительное количество памяти по сравнению со сжатым аудио, но имеет меньшую задержку и большую гибкость аудио. Используйте DecompressedOnLoad для аудио, которое зависит от точности (например, диалог персонажа или звуковые эффекты). |
Проблемы с тихим режимом на iOS браузерах
Переключатель тихого режима на устройствах iOS ведет себя по-разному для сжатых и несжатых аудиоклипов в веб-сборках. Несжатые звуки не слышны на устройствах iOS в тихом режиме, потому что WebKit категоризирует этот тип аудиоузла иначе, чем MediaElementSourceNode, который используется для звуков CompressedInMemory. Для получения дополнительной информации см. WebKit issue #262781.
Если вы установите loadType аудиоклипа на DecompressOnLoad, клип не будет слышен на устройствах iOS, находящихся в тихом режиме. Чтобы обеспечить воспроизведение аудио независимо от тихого режима, установите loadType аудиоклипа на CompressedInMemory. Эта проблема возникает только в веб-сборках.
Если вам нужно загрузить звук при запуске сцены, рекомендуется загрузить звук полностью во временной сцене и загрузить целевую сцену добавочно.
Воспроизведение аудио и безопасность браузера
По соображениям безопасности браузеры не разрешают воспроизведение аудио, пока конечный пользователь не взаимодействует с веб-страницей вашего приложения с помощью щелчка мыши, касания или нажатия клавиши. Используйте загрузочный экран, чтобы позволить конечному пользователю взаимодействовать с вашим приложением и начать воспроизведение аудио до начала основного контента.
Скриптовый аудиоконвейер
Скриптовый аудиоконвейер не поддерживается. Попытка использовать его в веб-компилировании вызовет предупреждение.