Мы продолжаем цикл статей по Windows Mixed Reality и разрабатываем с нуля приложение со смешанной реальностью на Unity в формате lab work (лабораторной работы). Вы можете сами, параллельно с публикацией статей, создавать такое приложение. Сегодня поговорим о пространственном звуке и о том, как же создать ощущение пребывания в другой реальности.
![](https://habrastorage.org/r/w780q1/webt/ke/kg/b_/kekgb_00qolqefovcn5ceg6qhca.jpeg)
Динамик готов, теперь попробуем запустить и остановить воспроизведение пространственного звука. В этом разделе мы добавим источник звука и элементы управления воспроизведением звука.
Так как некоторые задачи, которые стоят перед нами, похожи на выполненные ранее, то приведем инструкции в виде списков, чтобы ускорить процесс.
Сверяйте свои действия со снимками экрана, которые находятся в конце каждого большого этапа, а дополнительные справочные материалы смотрите по ссылкам в инструкциях.
Для воспроизведения звука из динамика к нему необходимо добавить компонент Unity AudioSource (Источник звука).
![](https://habrastorage.org/r/w1560/webt/cn/zx/ip/cnzxipbc1kkhvgn1o8nae7qag4o.png)
Чтобы добавить к динамику кнопку воспроизведения, выполните следующие действия:
1. На панели Project (Проект) найдите префаб CircleButton в папке Assets -> HoloToolkit -> UX -> Prefabs -> Buttons (Ресурсы -> HoloToolkit -> UX -> Префабы -> Кнопки) и перетащите его на панель Hierarchy (Иерархия), добавив этот префаб на сцену как дочерний элемент объекта Speaker.
2. Дайте добавленной кнопке имя PlayButton.
![](https://habrastorage.org/r/w1560/webt/ok/hf/nj/okhfnjeigy1qyag3lhgnvorqtvy.png)
3. Увеличьте размер объекта PlayButton, установив для его свойства Transform Scale (Масштаб преобразования) значение (90, 90, 90).
4. Выбрав объект PlayButton, щелкните Add Component -> Event -> Event Trigger (Добавить компонент -> Событие -> Триггер события).
5. Щелкните Add New Event Type -> Pointer Click (Добавить новый тип событий -> Щелчок указателя).
6. Нажмите кнопку «+» в нижней части пустого списка событий.
7. Перетащите объект Speaker из панели Hierarchy (Иерархия) на поле для сброса событий с надписью None (Object) (Нет объектов).
8. В раскрывающемся списке No Function (Без функции) выберите AudioSource->Play().
![](https://habrastorage.org/r/w1560/webt/nk/kp/bs/nkkpbsy1nyvw0hmehubsopb743w.png)
Чтобы добавить к динамику кнопку паузы, выполните следующие действия:
1. Продублируйте объект PlayButton, нажав клавиши Ctrl+D или щелкнув правой кнопкой мыши ресурс на панели Hierarchy (Иерархия) и выбрав Duplicate (Дублировать), а затем переименуйте его в PauseButton.
2. Для функции Event Trigger (Триггер события) объекта PauseButton установите значение AudioSource->Pause().
![](https://habrastorage.org/r/w1560/webt/qb/51/jp/qb51jp8q68yhqt_rrmhd9bt-wow.png)
Сейчас эти кнопки должны работать, но использовать их сложно, так как они перекрывают друг друга. Другая проблема — пользователь не видит их, когда динамик обращен в сторону. Чтобы решить эту проблему, выполните следующее:
1. Для свойства Transform Position (Положение преобразования) объекта PlayButton установите значения (-6, 18, 0).
2. Для свойства Transform Position (Положение преобразования) объекта PauseButton установите значения (6, 18, 0).
3. На панели Hierarchy (Иерархия) щелкните правой кнопкой мыши объект Speaker и выберите Create Empty (Создать пустой), чтобы создать пустой дочерний объект. Переименуйте добавленный объект GameObject в ButtonBillboard. Чтобы переименовать объект, щелкните его правой кнопкой мыши и выберите Rename (Переименовать).
4. Перетащите обе кнопки на объект ButtonBillboard, сделав их дочерними объектами этого объекта.
5. Выбрав объект ButtonBillboard на панели Inspector (Инспектор), щелкните Add Component -> Billboard (Добавить компонент -> Билборд). Компонент Billboard можно найти с помощью панели поиска. Сценарий Billboard из набора средств Mixed Reality Toolkit делает объект постоянно обращенным в сторону камеры и часто применяется для элементов пользовательского интерфейса.
6. Вам необходимо получить следующую структуру для билборда:
![](https://habrastorage.org/r/w1560/webt/di/ss/mp/dissmpodb2t3kjsvyzoqbbetgwq.png)
Чтобы кнопки воспроизведения и паузы было легче различать, можно заменить их стандартные значки на другие. Это можно сделать несколькими способами, но мы воспользуемся самым простым, учитывая размер нашего проекта.
1. Выбрав объект PlayButton, прокрутите панель Inspector (Инспектор) до компонента Compound Button Icon (Значок составной кнопки).
2. Установите флажок Override Icon (Переопределить значок).
3. Перетащите спрайт Start из папки Assets -> Textures (Ресурсы -> Текстуры) на свойство Icon Override (Переопределение значка) компонента Compound Button Icon (Значок составной кнопки).
4. Повторите эти действия для объекта PauseButton, используя спрайт Pause.
![](https://habrastorage.org/r/w1560/webt/qr/jv/b7/qrjvb7jcqgghi6fwjphmrfpozas.png)
Сейчас у нас есть динамик, который можно включать, выключать и перемещать по виртуальной гостиной. Однако у нас нет пространственного звука, который бы усилил эффект присутствия в нашем приложении.
В Unity пространственный звук реализуется с помощью подключаемого модуля пространственного звука (Spatializer). Файлы подключаемого модуля входят в состав Unity, поэтому реализовать пространственный звук не составит труда.
1. Перейдите в раздел Edit -> Project Settings -> Audio (Правка -> Параметры проекта -> Звук).
2. Для параметра Spatializer Plugin (Подключаемый модуль пространственного звука) измените значение с None (Нет) на MS HRTF Spatializer.
Так как система пространственного звука Microsoft в настоящее время поддерживает только частоту дискретизации 48 000 Гц, для параметра System Sample Rate (Системная частота дискретизации) также следует установить значение 48 000 (если это еще не сделано), чтобы не допустить сбоя модуля HRTF.
![](https://habrastorage.org/r/w1560/webt/n2/7q/yn/n27qynrk3pzwurymeq1osjzq9gw.png)
Теперь необходимо задать настройки для самого звукового клипа.
1. На панели Hierarchy (Иерархия) выберите объект Speaker.
2. Прокрутите панель Inspector (Инспектор) до компонента Audio Source (Источник звука) и установите флажок Spatialize (Пространственный звук).
3. Для параметра Spatial Blend (Пространственное смешивание) выберите значение «3D» (численная величина — 1).
4. Разверните меню 3D Sound Settings (Параметры трехмерного звука).
5. Чтобы задать оптимальные параметры трехмерного звука для нашего приложения, установите значение Logarithmic Rolloff (Логарифмический спад) для параметра Volume Rolloff (Спад звука), а для параметра Min Distance (Минимальное расстояние) установите значение 3.
6. Выбрав объект Speaker, щелкните Add Component -> Audio Emitter (Добавить компонент -> Излучатель звука). Это класс из набора средств Mixed Reality Toolkit, который использует подключенный компонент AudioSource и подгруппу звуковых фильтров Unity для применения и контроля звуковых эффектов, например поглощения.
![](https://habrastorage.org/r/w1560/webt/uh/ig/ee/uhigeemafxooal5ujxngtiewgri.png)
Теперь наш динамик полностью готов. Давайте превратим его в префаб.
1. Перетащите объект Speaker в папку Assets -> Prefabs (Ресурсы -> Префабы), чтобы превратить его в префаб.
Превратив динамик в префаб, мы сделаем из него объект, который можно использовать повторно. После этого мы сможем создавать любое количество экземпляров динамика для нашей сцены или других сцен этого проекта.
Теперь давайте сохраним сцену (нажав клавиши Ctrl+S) и запустим ее, чтобы посмотреть результаты нашей работы.
Теперь мы можем делать много чего интересного:
Не забывайте, что вы можете телепортировать себя в различные точки комнаты, нажимая кнопку «Вперед» на джампстике и выбирая точку на полу, в которую вы хотите попасть. Таким способом вы можете перемещаться дальше от динамика.
Оригинал
Авторы: Eric Ahlstrom, cbarkerms, Madison Hight
![](https://habrastorage.org/webt/ke/kg/b_/kekgb_00qolqefovcn5ceg6qhca.jpeg)
Всё руководство будет состоять из 5 частей. Оно будет пополняться каждую неделю. Ниже вы сможете перейти к нужной вам части.
Часть 1: Экспорт приложения UWP для Windows Mixed Reality из Unity;
Часть 2: Настройка среды (VR);
Часть 3: Контроллеры;
Часть 4: Пространственный звук;
Часть 5: HoloLens и графика.
Пространственный звук
Динамик готов, теперь попробуем запустить и остановить воспроизведение пространственного звука. В этом разделе мы добавим источник звука и элементы управления воспроизведением звука.
Так как некоторые задачи, которые стоят перед нами, похожи на выполненные ранее, то приведем инструкции в виде списков, чтобы ускорить процесс.
Сверяйте свои действия со снимками экрана, которые находятся в конце каждого большого этапа, а дополнительные справочные материалы смотрите по ссылкам в инструкциях.
Добавление источника звука
Для воспроизведения звука из динамика к нему необходимо добавить компонент Unity AudioSource (Источник звука).
- Выберите объект Speaker на сцене и щелкните Add Component -> Audio -> Audio Source (Добавить компонент -> Звук -> Источник звука).
- Щелкните маленький значок прицела справа от свойства Audio Clip (Звуковой клип) компонента Audio Source (Источник звука) и выберите Chill Blue Lagoon.
- Снимите флажок Play On Awake (Воспроизведение при создании объекта), так как мы будем управлять воспроизведением с помощью кнопок. Настройки для поддержки пространственного звука мы изменим позже.
![](https://habrastorage.org/webt/cn/zx/ip/cnzxipbc1kkhvgn1o8nae7qag4o.png)
Добавление элементов управления воспроизведением к динамику
Чтобы добавить к динамику кнопку воспроизведения, выполните следующие действия:
1. На панели Project (Проект) найдите префаб CircleButton в папке Assets -> HoloToolkit -> UX -> Prefabs -> Buttons (Ресурсы -> HoloToolkit -> UX -> Префабы -> Кнопки) и перетащите его на панель Hierarchy (Иерархия), добавив этот префаб на сцену как дочерний элемент объекта Speaker.
2. Дайте добавленной кнопке имя PlayButton.
![](https://habrastorage.org/webt/ok/hf/nj/okhfnjeigy1qyag3lhgnvorqtvy.png)
3. Увеличьте размер объекта PlayButton, установив для его свойства Transform Scale (Масштаб преобразования) значение (90, 90, 90).
4. Выбрав объект PlayButton, щелкните Add Component -> Event -> Event Trigger (Добавить компонент -> Событие -> Триггер события).
5. Щелкните Add New Event Type -> Pointer Click (Добавить новый тип событий -> Щелчок указателя).
6. Нажмите кнопку «+» в нижней части пустого списка событий.
7. Перетащите объект Speaker из панели Hierarchy (Иерархия) на поле для сброса событий с надписью None (Object) (Нет объектов).
8. В раскрывающемся списке No Function (Без функции) выберите AudioSource->Play().
![](https://habrastorage.org/webt/nk/kp/bs/nkkpbsy1nyvw0hmehubsopb743w.png)
Чтобы добавить к динамику кнопку паузы, выполните следующие действия:
1. Продублируйте объект PlayButton, нажав клавиши Ctrl+D или щелкнув правой кнопкой мыши ресурс на панели Hierarchy (Иерархия) и выбрав Duplicate (Дублировать), а затем переименуйте его в PauseButton.
2. Для функции Event Trigger (Триггер события) объекта PauseButton установите значение AudioSource->Pause().
![](https://habrastorage.org/webt/qb/51/jp/qb51jp8q68yhqt_rrmhd9bt-wow.png)
Сейчас эти кнопки должны работать, но использовать их сложно, так как они перекрывают друг друга. Другая проблема — пользователь не видит их, когда динамик обращен в сторону. Чтобы решить эту проблему, выполните следующее:
1. Для свойства Transform Position (Положение преобразования) объекта PlayButton установите значения (-6, 18, 0).
2. Для свойства Transform Position (Положение преобразования) объекта PauseButton установите значения (6, 18, 0).
3. На панели Hierarchy (Иерархия) щелкните правой кнопкой мыши объект Speaker и выберите Create Empty (Создать пустой), чтобы создать пустой дочерний объект. Переименуйте добавленный объект GameObject в ButtonBillboard. Чтобы переименовать объект, щелкните его правой кнопкой мыши и выберите Rename (Переименовать).
4. Перетащите обе кнопки на объект ButtonBillboard, сделав их дочерними объектами этого объекта.
5. Выбрав объект ButtonBillboard на панели Inspector (Инспектор), щелкните Add Component -> Billboard (Добавить компонент -> Билборд). Компонент Billboard можно найти с помощью панели поиска. Сценарий Billboard из набора средств Mixed Reality Toolkit делает объект постоянно обращенным в сторону камеры и часто применяется для элементов пользовательского интерфейса.
6. Вам необходимо получить следующую структуру для билборда:
![](https://habrastorage.org/webt/di/ss/mp/dissmpodb2t3kjsvyzoqbbetgwq.png)
Чтобы кнопки воспроизведения и паузы было легче различать, можно заменить их стандартные значки на другие. Это можно сделать несколькими способами, но мы воспользуемся самым простым, учитывая размер нашего проекта.
1. Выбрав объект PlayButton, прокрутите панель Inspector (Инспектор) до компонента Compound Button Icon (Значок составной кнопки).
2. Установите флажок Override Icon (Переопределить значок).
3. Перетащите спрайт Start из папки Assets -> Textures (Ресурсы -> Текстуры) на свойство Icon Override (Переопределение значка) компонента Compound Button Icon (Значок составной кнопки).
4. Повторите эти действия для объекта PauseButton, используя спрайт Pause.
![](https://habrastorage.org/webt/qr/jv/b7/qrjvb7jcqgghi6fwjphmrfpozas.png)
Добавление пространственного звука
Сейчас у нас есть динамик, который можно включать, выключать и перемещать по виртуальной гостиной. Однако у нас нет пространственного звука, который бы усилил эффект присутствия в нашем приложении.
В Unity пространственный звук реализуется с помощью подключаемого модуля пространственного звука (Spatializer). Файлы подключаемого модуля входят в состав Unity, поэтому реализовать пространственный звук не составит труда.
1. Перейдите в раздел Edit -> Project Settings -> Audio (Правка -> Параметры проекта -> Звук).
2. Для параметра Spatializer Plugin (Подключаемый модуль пространственного звука) измените значение с None (Нет) на MS HRTF Spatializer.
Так как система пространственного звука Microsoft в настоящее время поддерживает только частоту дискретизации 48 000 Гц, для параметра System Sample Rate (Системная частота дискретизации) также следует установить значение 48 000 (если это еще не сделано), чтобы не допустить сбоя модуля HRTF.
![](https://habrastorage.org/webt/n2/7q/yn/n27qynrk3pzwurymeq1osjzq9gw.png)
Теперь необходимо задать настройки для самого звукового клипа.
1. На панели Hierarchy (Иерархия) выберите объект Speaker.
2. Прокрутите панель Inspector (Инспектор) до компонента Audio Source (Источник звука) и установите флажок Spatialize (Пространственный звук).
3. Для параметра Spatial Blend (Пространственное смешивание) выберите значение «3D» (численная величина — 1).
4. Разверните меню 3D Sound Settings (Параметры трехмерного звука).
5. Чтобы задать оптимальные параметры трехмерного звука для нашего приложения, установите значение Logarithmic Rolloff (Логарифмический спад) для параметра Volume Rolloff (Спад звука), а для параметра Min Distance (Минимальное расстояние) установите значение 3.
6. Выбрав объект Speaker, щелкните Add Component -> Audio Emitter (Добавить компонент -> Излучатель звука). Это класс из набора средств Mixed Reality Toolkit, который использует подключенный компонент AudioSource и подгруппу звуковых фильтров Unity для применения и контроля звуковых эффектов, например поглощения.
![](https://habrastorage.org/webt/uh/ig/ee/uhigeemafxooal5ujxngtiewgri.png)
Сохранение и запуск
Теперь наш динамик полностью готов. Давайте превратим его в префаб.
1. Перетащите объект Speaker в папку Assets -> Prefabs (Ресурсы -> Префабы), чтобы превратить его в префаб.
Превратив динамик в префаб, мы сделаем из него объект, который можно использовать повторно. После этого мы сможем создавать любое количество экземпляров динамика для нашей сцены или других сцен этого проекта.
Теперь давайте сохраним сцену (нажав клавиши Ctrl+S) и запустим ее, чтобы посмотреть результаты нашей работы.
Теперь мы можем делать много чего интересного:
- воспроизводить и останавливать звук;
- перемещать динамик ближе к себе, замечая, что звук становится громче и яснее;
- перемещать динамик дальше от себя, замечая, что громкость звука снижается.
Не забывайте, что вы можете телепортировать себя в различные точки комнаты, нажимая кнопку «Вперед» на джампстике и выбирая точку на полу, в которую вы хотите попасть. Таким способом вы можете перемещаться дальше от динамика.
Оригинал
Авторы: Eric Ahlstrom, cbarkerms, Madison Hight