Hologramas são objetos feitos de luz e som.

A maior parte das aplicações não necessita de sons. Quantas vezes você se preocupou sobre que tipo de som deve ser emitido quando o usuário realiza uma operação? Contudo, essa não é a realidade quando desenvolvemos aplicativos para Hololens e para os demais devices de realidade mista disponíveis no mercado. No mundo real, tudo que fazemos emite som e ao desenvolver aplicativos de realidade mista precisamos fazer o mesmo.

Neste post falo sobre a importância desse aspecto no desenvolvimento de aplicações para a família Windows Mixed Reality.

Spatial Sound – Som Espacial

Uma pessoa falando, um lápis caindo da mesa, um carro acelerando, todos esses sons partem de um ponto e geram uma onda sonora que nos atinge. Quando se trata de identificar um som a reação natural das pessoas é virar a cabeça na direção do som para localizá-lo e compreendê-lo, bem como andar ao redor do local para identificar se estão se aproximando ou se afastando do som.

A experiência que temos no mundo real ao lidar com sons é bem diferente da que temos ao escutar uma música ou mesmo dentro de jogos digitais, neste contexto, simular todos estes efeitos sonoros pode ser bem trabalhoso ou mesmo inviável para uma aplicação mais simples.

Felizmente o Hololens cuida de todos os aspectos citados acima de forma nativa, através do som espacial, facilitando a vida dos desenvolvedores e criando efeitos sonoros com base na física de som do mundo real.

O som espacial é um conjunto de técnicas e filtros relacionados a localização sonora o qual foram implementados em um HRFT – Head Related Transfer Function. Projeto este desenvolvido pelo time de pesquisa do Hololens que, em conjunto com os sensores de compreensão e mapeamento do ambiente, simulam a física de som do mundo real.

Basicamente, precisamos apenas utilizar arquivos de áudio em formato mono e o Hololens cuida de toda a simulação da física de som durante a execução do aplicativo.

Importância do som em apps de realidade mista

Ao criar aplicativos para realidade mista é importante lembrar que o campo de visão do dispositivo – assim como o campo de visão dos nossos olhos – nem sempre estará exibindo todos os objetos do ambiente, uma vez que objetos podem ser adicionados dinâmicamente ou mesmo por outra pessoa utilizando Shared Holograms, logo, podemos utilizar sons para direcionar a atenção para outro local. Vale lembrar aqui que o uso de alertas visuais para direcionar o usuário para outro local via óculos de realidade virtual ou mista podem causar náuseas, com sons não temos este problema 🙂

Outro aspecto que vale ressaltar é a simulação da física, pois, no mundo real, todos os objetos emitem sons quando sofrem algum tipo de interação e utilizamos esses sons para validar ações e compreender o objeto, como por exemplo, se trata-se de um objeto oco, metálico e etc.

Considerar esses aspectos ao desenvolver os hologramas que farão parte do aplicativo traz uma diferença enorme na experiência de uso do mesmo.

Dica sobre o formato de arquivos de áudio

Em aplicativos para realidade mista nós não utilizamos som stereo apenas mono com o Som Espacial sendo aplicado automaticamente e simulando a saída correta em cada orelha. A razão para tal é que no mundo real os sons não são emitidos em modo stereo – com um canal de aúdio para o lado esquerdo e outro para o lado direito – e sim em formato mono, onde o som é emitido como uma onda a partir de um ponto específico do ambiente.

Se você utilizar arquivos em formato stereo eles irão apenas ocupar mais espaço no aplicativo.

Criando o projeto no Unity

Iremos utilizar o HoloToolkit para inserir o prefab de camera e um script que utilizaremos mais a frente, portanto, importe a versão mais atualizada do HoloToolkit e adicione ao projeto.

Estou utilizando a versão 2017.2.1.4 Patch Release.

Configuração para habilitar som espacial no Unity

Para que a Unity utilize som espacial precisamos habilitar o uso do HTRF, citado anteriormente, através da aba:

Edit > Project Settings > Audio

Em seguida selecione o plugin MS HTRF Spatializer.

Com esta configuração você agora poderá habilitar o uso de som espacial em qualquer fonte de audio que esteja associada a um Game Object na sua aplicação.

Adicionando som ao seu holograma

Crie um Game Object e, dentro dele, importe ou crie um modelo 3D para o seu projeto.

Para facilitar, eu irei utilizar um modelo 3D de um telefone. Você pode baixar esse modelo gratuitamente a partir da Unity Store em:

https://assetstore.unity.com/packages/3d/old-telephone-62434

Adicione ao Game Object os seguintes componentes:

  • Audio Source
  • Audio Emitter (componente do HoloToolkit)

Audio Source é o componente que executa o som a partir de um arquivo de audio, além de possuir diversos controles e configurações que podemos alterar em tempo de execução.

Aplique um arquivo de áudio para o telefone e certifique-se de que as opções abaixo estejam definidas:

  • Spatial Blend = 1
  • Spatialize = true

Você pode obter assets de audio gratuitamente em freesound.org.

Eu irei utilizar o arquivo de áudio abaixo para simular o telefone tocando.

https://freesound.org/s/342167/

Audio Emitter é um componente do HoloToolkit que analisa continuamente o ambiente e altera o som de acordo com a sua movimentação ao redor do ambiente e também dá suporte a oclusão, abafando o som caso outros objetos (físicos ou virtuais) estejam entre o usuário e o nosso telefone. Basicamente, ele altera o som de acordo com a influência que o ambiente ao redor possui, da mesma forma que a física de som do mundo real.

Conclusão

Este post foi uma introdução ao tema de aúdio em aplicativos de realidae mista, existem vários outros aspectos e técnicas que podemos utilizar, como por exemplo programar oclusão dinamicamente, programar efeitos sonoros de baixa e alta fidelidade, alterar a configuração do tamanho do ambiente, o qual afeta como o som deve ser emitido e etc.

Espero que o post tenha ajudado, até mais.

Links úteis

(Cross-post de http://lazarofl.github.io/2018/05/02/Implementando-Som-Espacial-para-aplicativos-Hololens/)

Lazaro Fernandes Lima Suleiman

Desenvolvedor