WEBVTT

00:00:00.008 --> 00:00:01.071
Hey everybody.

00:00:05.067 --> 00:00:08.765
>> Have you ever noticed how
hard it is, to locate a sound,

00:00:08.765 --> 00:00:11.138
in an, coming from an app or
a game?

00:00:11.138 --> 00:00:13.157
It might even sound flat.

00:00:14.955 --> 00:00:16.610
My name's Steven Wilsons.

00:00:16.610 --> 00:00:18.070
>> I'm Adam Tuliper.

00:00:18.070 --> 00:00:18.870
>> And during this session,

00:00:18.870 --> 00:00:23.250
we'll show you how you can use
Spatial Audio to accurately put

00:00:23.250 --> 00:00:26.540
a sound in a three
dimensional space.

00:00:26.540 --> 00:00:30.340
And you'll be able to do
that on HoloLens, Xbox 1,

00:00:30.340 --> 00:00:32.270
Windows Desktop and
Windows phone.

00:00:34.360 --> 00:00:36.380
So what is Spatial Audio?

00:00:36.380 --> 00:00:38.120
Traditionally, audio
has been flat.

00:00:38.120 --> 00:00:42.886
Whether there was headphones,
5.1 speaker configuration,

00:00:42.886 --> 00:00:45.870
7.1 speaker configurations.

00:00:45.870 --> 00:00:49.240
But now, Spatial Audio
gives you the illusion that

00:00:49.240 --> 00:00:52.200
a sound is coming from
a particular location

00:00:52.200 --> 00:00:53.320
in a three dimensional space.

00:00:54.750 --> 00:00:58.787
If you hear a sound coming from
an application as if you would

00:00:58.787 --> 00:01:02.680
from real life, that really
is Spatial Audio done well.

00:01:05.293 --> 00:01:08.800
At BUILD we're announcing
Project Penrose and

00:01:08.800 --> 00:01:13.098
with Penrose we've exposed
Microsoft's HoloLens audio

00:01:13.098 --> 00:01:16.950
technologies to your
UWP apps and games.

00:01:16.950 --> 00:01:19.280
Again you can do this on
HoloLens, desktop, phone, and

00:01:19.280 --> 00:01:19.880
Xbox One.

00:01:21.160 --> 00:01:23.262
This technology uses HRTFs and

00:01:23.262 --> 00:01:26.900
as such is optimized to
work well with headphones.

00:01:28.270 --> 00:01:31.463
As a developer you'll see how
you can now enable spatial audio

00:01:31.463 --> 00:01:33.440
through the AudioGraph API or
Unity.

00:01:37.440 --> 00:01:38.449
As I mentioned before,

00:01:38.449 --> 00:01:42.340
to experience Spatial Audio with
Penrose you'll need headphones.

00:01:42.340 --> 00:01:45.150
The speakers you have in this
room will only give you a hint

00:01:45.150 --> 00:01:47.920
at what Spatial Audio
can really do for you.

00:01:47.920 --> 00:01:49.450
You can try
the HoloLens Academy.

00:01:49.450 --> 00:01:51.760
Many of you have tried before.

00:01:51.760 --> 00:01:54.810
You can download the code,
we'll show you for the demos and

00:01:54.810 --> 00:01:57.600
you can also download
the games afterwards.

00:01:57.600 --> 00:01:58.290
You can also come and

00:01:58.290 --> 00:02:02.850
find us to hear some of
these demos in person.

00:02:04.370 --> 00:02:05.580
So what are HRTFs?

00:02:06.580 --> 00:02:09.955
HRTF stands for head-related
transfer function and

00:02:09.955 --> 00:02:14.170
with our two ears we can hear
sound in three dimensions.

00:02:14.170 --> 00:02:16.540
One is direction, so I can hear
where a sound's coming from,

00:02:16.540 --> 00:02:17.540
the left or the right of me.

00:02:17.540 --> 00:02:21.050
I can hear whether the sound is
coming from in front of me or

00:02:21.050 --> 00:02:22.010
back of me.

00:02:23.180 --> 00:02:25.560
I can distinguish elevation and

00:02:25.560 --> 00:02:28.120
I can also estimate the distance
from where a sound is coming.

00:02:29.860 --> 00:02:33.849
Your head shape, your external
ears, your internal ears and

00:02:33.849 --> 00:02:37.110
your brain will work together so

00:02:37.110 --> 00:02:38.880
that you can perceive
location accurately.

00:02:40.342 --> 00:02:44.710
An HRTF will describe how
a sound would reach your ears,

00:02:44.710 --> 00:02:45.810
your left and

00:02:45.810 --> 00:02:49.140
your right ears when it's coming
from a location in space.

00:02:49.140 --> 00:02:51.810
So when you actually record
a sound at a certain location,

00:02:52.970 --> 00:02:55.590
when you move away from that,
an HRTF will

00:02:55.590 --> 00:02:58.920
describe the transfer that
happens to the sound.

00:02:58.920 --> 00:03:01.333
And you will get the illusion
that the sound was actually

00:03:01.333 --> 00:03:02.935
coming from where
I just pointed at.

00:03:05.328 --> 00:03:08.029
Head Orientation Tracking
is really important

00:03:08.029 --> 00:03:11.240
to improve accuracy of
sound localization.

00:03:11.240 --> 00:03:14.670
And as you can move your head,
you'll notice that it greatly

00:03:14.670 --> 00:03:18.655
reduces front-back confusion and
improves elevation perception.

00:03:18.655 --> 00:03:22.274
We'll show you a demo in a
couple of minutes of how we can

00:03:22.274 --> 00:03:26.053
use one of the headphones that
are available in the market

00:03:26.053 --> 00:03:29.361
today to implement
Head Orientation Tracking and

00:03:29.361 --> 00:03:32.376
just greatly improve
that accuracy for you.

00:03:32.376 --> 00:03:35.390
In Windows 10 we introduced
the AudioGraph API.

00:03:36.720 --> 00:03:41.600
So the AudioGraph API has a
bunch of input nodes on one end.

00:03:42.870 --> 00:03:45.580
A device input node where
you can connect a device

00:03:45.580 --> 00:03:48.810
like a microphone to
a file input node.

00:03:48.810 --> 00:03:52.100
You can load a WAV file or an
MP3 file with on an AudioFrame

00:03:52.100 --> 00:03:54.980
input node if you were
already processing audio or

00:03:54.980 --> 00:03:57.430
video in the Windows stack.

00:03:57.430 --> 00:04:02.510
You can apply a fax to them or
you can submix them.

00:04:02.510 --> 00:04:05.270
And once you're done submixing
them or applying affects to them

00:04:05.270 --> 00:04:10.090
you can output them to a device,
a speaker for example, a file.

00:04:10.090 --> 00:04:12.505
Or you can continue processing
them in the Windows stack using

00:04:12.505 --> 00:04:13.674
the AudioFrame output node.

00:04:16.211 --> 00:04:19.671
Now in Windows 10 Redstone,
we are adding Emitters and

00:04:19.671 --> 00:04:20.470
Listeners.

00:04:21.620 --> 00:04:22.550
What is an emitter?

00:04:22.550 --> 00:04:25.160
An emitter really is
the source of Spatial Audio.

00:04:25.160 --> 00:04:26.550
It's where the sound
is coming from.

00:04:27.640 --> 00:04:30.429
An emitter can either be
an input source or a submix.

00:04:31.920 --> 00:04:34.480
The number of emitters that
we support really depend on

00:04:34.480 --> 00:04:37.050
a number of factors
in your application.

00:04:37.050 --> 00:04:39.640
One is, how much CPU do
you wanna sacrifice?

00:04:39.640 --> 00:04:42.070
How much CPU does
your device have or

00:04:42.070 --> 00:04:44.330
computing power does
your device have?

00:04:44.330 --> 00:04:46.910
And does your device support
hardware offload or not.

00:04:48.010 --> 00:04:49.690
An emitter can have
an orientation.

00:04:50.690 --> 00:04:52.240
It can have a position
in space and

00:04:52.240 --> 00:04:54.970
it can actually
travel at a velocity.

00:04:54.970 --> 00:04:58.040
On the other end of sound
there's the listener and

00:04:58.040 --> 00:05:00.830
that's where we perceive sound.

00:05:02.820 --> 00:05:05.810
We only support 1 listener
at the current time per

00:05:05.810 --> 00:05:09.380
AudioGraph and a listener
itself can have an orientation.

00:05:10.580 --> 00:05:12.290
It can have a position
in space as well and

00:05:12.290 --> 00:05:13.670
it can also travel
at a velocity.

00:05:15.100 --> 00:05:16.730
So let's have a look at
that original graph.

00:05:17.880 --> 00:05:20.030
So now you'll see all of
our input nodes can now

00:05:20.030 --> 00:05:23.190
have an emitter and a submix
can have an emitter as well.

00:05:24.590 --> 00:05:27.223
And on the right hand
side you'll see that our

00:05:27.223 --> 00:05:30.898
DeviceOutputNode now has a
default AudioNodeListener object

00:05:30.898 --> 00:05:33.879
for which now you can use
to configure where sound is

00:05:33.879 --> 00:05:34.653
perceived.

00:05:39.023 --> 00:05:43.752
All right, let's have a look
at a first Hello World demo,

00:05:43.752 --> 00:05:46.561
we called it
Hello Spatial Audio.

00:05:50.390 --> 00:05:51.780
Before we do that, sorry.

00:05:53.040 --> 00:05:54.946
Before we actually show
you the demo itself,

00:05:54.946 --> 00:05:56.410
let me show you
the graph we built.

00:05:58.670 --> 00:06:00.550
The graph is very simple here.

00:06:00.550 --> 00:06:05.398
We're loading one file input
node with the file the siren

00:06:05.398 --> 00:06:07.130
of a car.

00:06:07.130 --> 00:06:10.330
We're positioning it in space
by adding an emitter to it.

00:06:10.330 --> 00:06:13.000
And we're sending that
spatialized sound that you'll

00:06:13.000 --> 00:06:16.180
get, we're sending that directly
to our DeviceOutputNode.

00:06:16.180 --> 00:06:18.900
The reason we're doing this is
that it'll support hardware

00:06:18.900 --> 00:06:19.750
offload in the future.

00:06:20.780 --> 00:06:24.210
We're also adding a reverb
path with reduced gain.

00:06:25.230 --> 00:06:27.790
And we're sending that through
the SubmixNode where we actually

00:06:27.790 --> 00:06:29.590
are applying the reverb and

00:06:29.590 --> 00:06:31.340
as well sending that to
the device output node.

00:06:33.350 --> 00:06:35.240
The code to do this
is very simple.

00:06:36.960 --> 00:06:38.800
First off,
we're creating an AudioGraph.

00:06:39.880 --> 00:06:43.212
We're setting the audio category
which is GameEffects so

00:06:43.212 --> 00:06:46.650
that the proper docking
policies are put in place.

00:06:46.650 --> 00:06:49.720
We're also making sure that we
configure our output correctly,

00:06:49.720 --> 00:06:52.740
setting it to 48 kilohertz,
setting it to stereo for

00:06:52.740 --> 00:06:56.250
our headphones and 16-bit flow.

00:06:56.250 --> 00:06:58.280
And then we're
creating our graph.

00:06:58.280 --> 00:07:00.730
And if our graph creation is
successful, we'll continue.

00:07:02.390 --> 00:07:06.230
Now our graph is really
built from the output

00:07:06.230 --> 00:07:08.060
nodes to the input nodes.

00:07:08.060 --> 00:07:09.630
So the first thing we'll
do is we'll create our

00:07:09.630 --> 00:07:10.344
device output node.

00:07:10.344 --> 00:07:16.194
We'll create our device
output node saying on our AudioGraph

00:07:16.194 --> 00:07:19.466
CreateDeviceOutputNodeAsync.

00:07:19.466 --> 00:07:22.054
And once that's successful,
our next step happens,

00:07:22.054 --> 00:07:24.300
and we keep building our graph.

00:07:24.300 --> 00:07:26.319
We're adding the reverb
submix node.

00:07:27.690 --> 00:07:29.160
We're creating a submix node and

00:07:29.160 --> 00:07:30.750
we're adding it to
our output node.

00:07:31.900 --> 00:07:33.690
We are also reducing
the gain for that.

00:07:35.780 --> 00:07:39.070
And finally for our reverb,
we're adding the reverb effect,

00:07:39.070 --> 00:07:41.760
we're creating, it and
we're adding it to the submix.

00:07:43.430 --> 00:07:46.920
Now, our next step is
to create that emitter.

00:07:46.920 --> 00:07:48.690
That's really where the sound
will be coming from.

00:07:50.090 --> 00:07:53.720
We're creating an audio
node emitter by giving it

00:07:53.720 --> 00:07:56.020
an omnidirectional
emitter shape,

00:07:56.020 --> 00:07:58.350
which means that the sound
will go in every direction.

00:07:58.350 --> 00:08:00.920
You can also create a cone,
for example, where you will

00:08:00.920 --> 00:08:03.710
only hear the sound as long as
you're in the projected cone.

00:08:05.710 --> 00:08:09.824
And we're positioning our
emitter and we're using a right

00:08:09.824 --> 00:08:13.607
hand coordinate system for
that so negative X is left,

00:08:13.607 --> 00:08:16.910
positive one is right,
and then we have Y and Z.

00:08:16.910 --> 00:08:18.760
And Z is surprisingly for

00:08:18.760 --> 00:08:21.799
some people negative in the
front and positive in the back.

00:08:23.970 --> 00:08:24.620
Our next step is,

00:08:24.620 --> 00:08:26.470
now that we have our emitter,
we're loading our file.

00:08:27.770 --> 00:08:31.820
Currently for spatialization to
happen, all of the sound you

00:08:31.820 --> 00:08:36.282
attach with an emitter needs to
be mono and encoded in 48 kHz.

00:08:36.282 --> 00:08:42.790
So we're loading in mono
48 kHz car siren, and once

00:08:42.790 --> 00:08:46.770
we've done that, we're adding
it, or combining, or sorry.

00:08:46.770 --> 00:08:50.950
We're creating the file
input node and

00:08:50.950 --> 00:08:52.330
we're passing the emitter in.

00:08:52.330 --> 00:08:54.459
So at this point,
we have our file input node, and

00:08:54.459 --> 00:08:56.750
we positioned it in space by
adding our emitter to it.

00:08:58.839 --> 00:09:02.259
Once we've successfully created
our emitter, we're adding it to

00:09:02.259 --> 00:09:05.920
our submix, and we're adding
it to our output node.

00:09:05.920 --> 00:09:08.298
And at this point our
graph's been completed and

00:09:08.298 --> 00:09:09.522
we can show you the demo.

00:09:18.368 --> 00:09:21.018
What's very neat, with this
simple demo you'll be able to

00:09:21.018 --> 00:09:23.668
download the code afterwards,
is that we have a car here and

00:09:23.668 --> 00:09:25.600
the car is positioned
away from you.

00:09:25.600 --> 00:09:26.920
So the sound will be less loud.

00:09:28.100 --> 00:09:29.240
As I drag the car,

00:09:29.240 --> 00:09:32.370
we'll also update the emitter
position, we'll also

00:09:32.370 --> 00:09:35.670
add velocity to the object which
will create a Doppler effect.

00:09:36.780 --> 00:09:43.525
So let me give it a try.

00:09:43.525 --> 00:09:50.682
[SOUND]
Very

00:09:50.682 --> 00:09:54.269
simple demo to add an emitter
to your audiograph.

00:09:58.186 --> 00:09:59.464
>> I'm gonna wake up with
that sound in my head.

00:09:59.464 --> 00:10:00.787
[LAUGH]
>> Yeah.

00:10:00.787 --> 00:10:02.087
Well, we've gone through
a couple of dry runs.

00:10:02.087 --> 00:10:04.508
[LAUGH] The next step is,

00:10:04.508 --> 00:10:10.310
how do you had head
tracking to our AudioGraph?

00:10:10.310 --> 00:10:10.990
So what we did for

00:10:10.990 --> 00:10:15.170
that is, we're using
the Jabra Intelligent Headset,

00:10:15.170 --> 00:10:20.175
which provides us with
an accelerometer, e-Compass,

00:10:20.175 --> 00:10:23.810
[INAUDIBLE],
GPS, etc.

00:10:23.810 --> 00:10:26.620
And we're using that one
to update our listener

00:10:26.620 --> 00:10:28.070
orientation in the next demo.

00:10:29.880 --> 00:10:32.480
So from a graph perspective
what we're just doing is we're,

00:10:32.480 --> 00:10:33.740
we will build the same graph,

00:10:34.860 --> 00:10:36.380
the UI will look
a little bit different.

00:10:37.390 --> 00:10:40.069
But we'll start updating our
audio node listener object.

00:10:44.120 --> 00:10:48.190
The first thing we're doing,
is from this head set we'll read

00:10:48.190 --> 00:10:54.110
yaw, pitch, and roll as
a vector three coordinate,

00:10:54.110 --> 00:10:55.460
x, y, z coordinates, again.

00:10:56.580 --> 00:10:59.386
Our next step will be to
convert the angles we'll get,

00:10:59.386 --> 00:11:01.221
the url angels,
to radial angles.

00:11:02.784 --> 00:11:04.290
Former is right there.

00:11:04.290 --> 00:11:05.740
It's just a simple
math conversion.

00:11:07.410 --> 00:11:08.700
Then the next step is,

00:11:09.770 --> 00:11:13.832
to make sure that our
orientation is set as part of a.

00:11:14.840 --> 00:11:18.280
Is often times used in
the game development world

00:11:18.280 --> 00:11:19.540
to avoid gimble lock.

00:11:19.540 --> 00:11:23.470
It's a pretty well known problem
there where to axis collide and

00:11:23.470 --> 00:11:26.160
you can't just move
one coordinate anymore

00:11:26.160 --> 00:11:30.790
to make sure your object turns,
all lright.

00:11:30.790 --> 00:11:33.400
Let's have a quick
look at that demo.

00:11:33.400 --> 00:11:35.937
You'll see it's
a spacial sphere demo and

00:11:35.937 --> 00:11:38.967
I also did the recorded
session I'll go step by step

00:11:38.967 --> 00:11:42.081
through the code to actually
make this demo happen.

00:11:53.082 --> 00:11:54.266
So what I'll do in.

00:11:54.266 --> 00:11:55.773
>> Think switch them out.

00:11:55.773 --> 00:11:56.298
>> Yeah, let me switch.

00:11:59.398 --> 00:12:02.298
In this presentation,
we'll see sphere and

00:12:02.298 --> 00:12:05.426
if you let the demo run,
I'll position a ball and

00:12:05.426 --> 00:12:08.420
a sun around you and
you'll hear the sun move.

00:12:08.420 --> 00:12:10.220
It would work a lot better
with headphones as I

00:12:10.220 --> 00:12:11.530
mentioned before.

00:12:11.530 --> 00:12:15.320
What will also happen is
that as I move my head,

00:12:15.320 --> 00:12:17.820
you'll see my little
bobblehead move along with me.

00:12:17.820 --> 00:12:19.094
And update
the position of sound.

00:12:26.970 --> 00:12:29.720
>> Front position.

00:12:29.720 --> 00:12:30.890
Front right position.

00:12:32.390 --> 00:12:33.830
Right position.

00:12:33.830 --> 00:12:34.980
>> So as I'm moving my head now.

00:12:34.980 --> 00:12:36.460
>> Right position.

00:12:36.460 --> 00:12:37.920
>> For
me the sound is moving with me.

00:12:40.000 --> 00:12:41.440
>> Right position.

00:12:41.440 --> 00:12:42.480
>> I think that's a pretty cool demo-

00:12:42.480 --> 00:12:42.880
>> Right position.

00:12:42.880 --> 00:12:47.160
>> In how to show how you can
use head orientation tracking to

00:12:47.160 --> 00:12:51.510
just make sure you have a more
realistic experience of audio.

00:12:51.510 --> 00:12:53.785
And if you're just playing
a game or something, just those

00:12:53.785 --> 00:12:56.115
small movements will help you
locate the sound a lot easier.

00:12:59.098 --> 00:13:02.231
All right now that we've seen
some of the simple introductions

00:13:02.231 --> 00:13:03.660
on how to use spatial audio.

00:13:07.308 --> 00:13:10.497
Let's talk about what are some
real life applications you

00:13:10.497 --> 00:13:11.090
can have.

00:13:12.840 --> 00:13:14.730
First one is, augmented and
virtual reality.

00:13:14.730 --> 00:13:15.810
It's very simple.

00:13:15.810 --> 00:13:16.780
You've all seen it.

00:13:16.780 --> 00:13:20.130
It's a very, it's a must have to
create a realistic perception.

00:13:20.130 --> 00:13:23.330
If you're creating great audio,
or if you don't create great

00:13:23.330 --> 00:13:25.800
audio in a virtual reality,
it is easy for

00:13:25.800 --> 00:13:28.650
your users to really just snap
out of that experience and

00:13:28.650 --> 00:13:29.650
it doesn't work well for them.

00:13:30.970 --> 00:13:32.624
Another experience you can
create is watching movies.

00:13:32.624 --> 00:13:35.529
So as you have surround sound,
what you can do with this

00:13:35.529 --> 00:13:39.077
technology is virtually position
the speakers around your head.

00:13:39.077 --> 00:13:42.574
So you can take surround
sound and actually listen

00:13:42.574 --> 00:13:46.080
to a surround sound
experience with headphones.

00:13:47.150 --> 00:13:48.550
Another experience
you can build, for

00:13:48.550 --> 00:13:51.710
example, is a music experience.

00:13:53.040 --> 00:13:55.470
If you use this technology
you'll notice that the sound

00:13:55.470 --> 00:13:57.020
actually is more
externalized and

00:13:57.020 --> 00:13:59.270
it just creates a more I think,

00:13:59.270 --> 00:14:02.620
it's just a better listening
experience for the audio scene.

00:14:03.770 --> 00:14:08.290
What we've also experimented
with was just positioning

00:14:08.290 --> 00:14:10.380
all the different instruments
in a different location, and

00:14:10.380 --> 00:14:13.440
you get a very interesting
perception of sound that way.

00:14:13.440 --> 00:14:15.770
And then, there's gaming.

00:14:15.770 --> 00:14:20.990
Now, how neat is it,
if you play a 3D shooter and

00:14:20.990 --> 00:14:23.110
you hear somebody
sneak up behind you.

00:14:23.110 --> 00:14:24.470
You can just turn around and
shoot them.

00:14:24.470 --> 00:14:26.890
No depth of sound will be
coming from behind you.

00:14:26.890 --> 00:14:30.550
That point, you just
became a better gamer and

00:14:30.550 --> 00:14:32.490
we just raised the bar for
gaming.

00:14:35.330 --> 00:14:38.460
One of the applications of
Augmentor Reality does not have

00:14:38.460 --> 00:14:39.209
any visuals with it.

00:14:40.210 --> 00:14:43.110
It's the Guide Dogs project
we've been working on

00:14:43.110 --> 00:14:46.700
and with the Guide Dogs
project we're helping people

00:14:46.700 --> 00:14:49.850
that are visually impaired to
navigate to the world more

00:14:49.850 --> 00:14:54.470
comfortably with the use
of spatial audio.

00:14:54.470 --> 00:14:58.110
So as they're walking around we
are tracking their location.

00:14:58.110 --> 00:15:00.350
And we're making
sure that as our for

00:15:00.350 --> 00:15:02.350
example walking
by a coffee shop,

00:15:02.350 --> 00:15:05.040
we give them an indication
that there is a coffee shop.

00:15:05.040 --> 00:15:07.910
But we don't have to say
things like there is a coffee

00:15:07.910 --> 00:15:12.078
shop 30 degrees from
you at about 15 meters.

00:15:12.078 --> 00:15:15.920
Just by seeing there
is a coffee shop and

00:15:15.920 --> 00:15:19.380
positioning the sound then we'll
be able to look at where that

00:15:19.380 --> 00:15:23.430
shop is and we just don't
interfere as much with their

00:15:23.430 --> 00:15:28.390
daily experience by having all
that extra thrown at them.

00:15:29.560 --> 00:15:31.950
Some of the key technologies
that are being used here

00:15:31.950 --> 00:15:33.540
are spatial audio.

00:15:33.540 --> 00:15:36.340
But also background audio
which has become a lot simpler

00:15:36.340 --> 00:15:39.540
in the new version of Windows
10 and we'll talk about that.

00:15:39.540 --> 00:15:41.967
You've seen the headset that
we've been using through

00:15:41.967 --> 00:15:44.559
BlueTooth, and it also uses
Microsoft mapping services.

00:15:49.758 --> 00:15:52.700
I mentioned virtual
speakers before.

00:15:52.700 --> 00:15:55.440
And we'll build a demo
here using Big Buck Bunny,

00:15:55.440 --> 00:15:57.830
which is my favorite
video of all time.

00:15:59.000 --> 00:16:01.610
This one's a little bit more
complicated, this graph.

00:16:01.610 --> 00:16:04.730
So what we're doing is
we're taking a video file

00:16:04.730 --> 00:16:06.910
with 5.1 speaker audio.

00:16:06.910 --> 00:16:08.550
We're passing that
to a media clip,

00:16:09.860 --> 00:16:13.580
which is a media
composition class.

00:16:13.580 --> 00:16:17.080
And to that clip we're adding
the spacial audio effect.

00:16:17.080 --> 00:16:20.240
So what we'll be doing here is
that we'll get an audio frame

00:16:20.240 --> 00:16:23.360
into spacial audio effect and
we'll take the six channels,

00:16:23.360 --> 00:16:27.730
we'll split them up and we'll
position them in different audio

00:16:27.730 --> 00:16:29.860
frame input nodes and
we'll put them around my head.

00:16:32.190 --> 00:16:34.640
That's pretty much what
the graph will look like.

00:16:34.640 --> 00:16:38.010
It's a graph here, you're fairly
familiar with at this point.

00:16:38.010 --> 00:16:40.840
So as I mentioned you have the
audio frame input node, you add

00:16:40.840 --> 00:16:43.930
an emitter to it and you send
it to an audio frame output node

00:16:43.930 --> 00:16:48.280
instead of a device this time so
that you can loop the result,

00:16:48.280 --> 00:16:53.300
the spatialized stereo version
of the sound back to the effect,

00:16:53.300 --> 00:16:56.440
replace the original audio,
the 5.1 audio,

00:16:56.440 --> 00:16:59.230
send it back to the media
clip to the media element.

00:16:59.230 --> 00:17:00.660
And here, to your speakers.

00:17:01.800 --> 00:17:03.490
So how cool is that?

00:17:03.490 --> 00:17:04.580
All the sudden,

00:17:04.580 --> 00:17:07.490
I got a 501 surround system
just using my headphones.

00:17:09.400 --> 00:17:12.040
So the code here
is fairly simple.

00:17:12.040 --> 00:17:14.870
But and it's creating
the media clip first.

00:17:14.870 --> 00:17:15.880
I'm loading my file.

00:17:17.080 --> 00:17:19.710
And then, through the audio
effect definitions,

00:17:19.710 --> 00:17:21.219
I am adding my
spatial audio effect.

00:17:22.300 --> 00:17:24.330
And the meat of the code
is obviously in the space,

00:17:24.330 --> 00:17:25.170
how do you effect?

00:17:25.170 --> 00:17:28.320
I'll share the code out,
after this presentation.

00:17:29.950 --> 00:17:32.880
Our next step is to create
a media composition object, and

00:17:32.880 --> 00:17:34.400
add a clip to it, and

00:17:34.400 --> 00:17:36.160
then just set it as a source for
the player.

00:17:38.270 --> 00:17:39.087
So, have a look at that demo.

00:17:53.970 --> 00:17:57.242
So, as this video plays, what
you'll notice is that the sound

00:17:57.242 --> 00:18:00.457
as sounds playing throughout
the video, different speakers

00:18:00.457 --> 00:18:03.393
here in this will light up as
they are receiving volume.

00:18:03.393 --> 00:18:13.393
[MUSIC]

00:18:23.034 --> 00:18:26.624
So you've now created a much
richer listening experience for

00:18:26.624 --> 00:18:28.570
people with headphones.

00:18:28.570 --> 00:18:29.880
Very simple.

00:18:29.880 --> 00:18:33.555
One of the things you notice is
that as soon as I minimized my

00:18:33.555 --> 00:18:37.080
application, it stopped
playing which is not great for

00:18:37.080 --> 00:18:41.660
video but it definitely is not
great for music scenarios.

00:18:41.660 --> 00:18:44.190
So what we're announcing
today as well is a change

00:18:44.190 --> 00:18:46.450
in how background
audio works and

00:18:46.450 --> 00:18:49.830
background audio works great
with AudioGraph as well.

00:18:49.830 --> 00:18:53.640
So what you do now is you add
the background media playback

00:18:53.640 --> 00:18:54.360
capability.

00:18:55.420 --> 00:18:58.590
And with that new capability you
can now write all of your chord

00:18:58.590 --> 00:19:01.200
in one process versus the two
process model you had to do

00:19:01.200 --> 00:19:04.720
before where In the one
process you had your why and

00:19:04.720 --> 00:19:07.890
in the second one you controlled
all of your playback which

00:19:07.890 --> 00:19:08.930
was very confusing.

00:19:11.390 --> 00:19:14.290
Now with the one process model
when your application is put to

00:19:14.290 --> 00:19:17.310
the background the XAML
textures are unloaded and

00:19:17.310 --> 00:19:19.920
the memory footprint of
your app comes down.

00:19:19.920 --> 00:19:21.440
The next thing that
happens is that you get

00:19:21.440 --> 00:19:23.880
a notifications saying
you're minimized.

00:19:23.880 --> 00:19:26.620
And you can clean up
more resources if needed.

00:19:26.620 --> 00:19:29.390
And if needed means if you're
over the memory limit.

00:19:29.390 --> 00:19:31.810
If you are actually over the
memory limit you'll get another

00:19:31.810 --> 00:19:34.840
event and you will need to
clean up your resources or

00:19:34.840 --> 00:19:37.830
you will be potentially
closed as an application.

00:19:38.850 --> 00:19:42.680
When you're foregrounded again
and your visibility has changed.

00:19:42.680 --> 00:19:44.920
You get a notification for
that as well.

00:19:44.920 --> 00:19:46.508
And XAML's rehydrated.

00:19:46.508 --> 00:19:50.215
So it's a very simple with a
couple notifications how you now

00:19:50.215 --> 00:19:53.718
implement a background audio
in Windows 10 Redstone.

00:19:57.955 --> 00:20:00.462
>> All right,
that was pretty awesome.

00:20:00.462 --> 00:20:03.215
You can take C# and
work with the AudioGraph API.

00:20:03.215 --> 00:20:06.179
And the first time I heard that
it was neat because you're

00:20:06.179 --> 00:20:09.331
to really stress that point
you're taking all this multiple

00:20:09.331 --> 00:20:12.420
channels and making my regular
headphones here just like it

00:20:12.420 --> 00:20:13.860
was almost on fire but one.

00:20:13.860 --> 00:20:17.478
All right, so that's one option
that Steven showed to be able to

00:20:17.478 --> 00:20:19.220
work with the AudioGraph API.

00:20:19.220 --> 00:20:22.620
One of my favorite programs
of all time outside of

00:20:22.620 --> 00:20:23.710
Visual Studio is Unity,

00:20:23.710 --> 00:20:26.020
a very popular gaming
engine middleware.

00:20:26.020 --> 00:20:28.710
And to be able to use our
spatial audio API behind

00:20:28.710 --> 00:20:31.150
the scenes with Unity is
actually pretty easy.

00:20:31.150 --> 00:20:33.586
So we worked to create a couple
neat demos to show you that is

00:20:33.586 --> 00:20:36.121
gonna showcase I think some of
the audio features and how to do

00:20:36.121 --> 00:20:38.676
it inside of Unity and some of
the cool things that you can do.

00:20:44.005 --> 00:20:47.760
Now audio in Unity has a couple
different facets to it.

00:20:47.760 --> 00:20:49.670
We have 2D audio and
traditionally think of when

00:20:49.670 --> 00:20:51.630
you're playing a game,
a 2D game.

00:20:51.630 --> 00:20:53.550
That's the easiest
use case to look at.

00:20:53.550 --> 00:20:56.290
The background music to your
game is a pretty consistent

00:20:56.290 --> 00:20:58.410
volume while you're
playing your game.

00:20:58.410 --> 00:20:59.880
Doesn't matter where
you go in your game,

00:20:59.880 --> 00:21:01.040
it plays pretty consistently.

00:21:01.040 --> 00:21:02.250
It might fade out,
might fade in, but

00:21:02.250 --> 00:21:04.130
it's not positionally sensitive.

00:21:04.130 --> 00:21:05.910
The same thing can happen
in a 3D game as well.

00:21:05.910 --> 00:21:07.310
You can have 2D audio and
a 3D game.

00:21:07.310 --> 00:21:09.530
You have a first person shooter.

00:21:09.530 --> 00:21:11.560
When you're running around
shooting zombies you've got

00:21:11.560 --> 00:21:13.600
a heavy metal truck
thing in the background.

00:21:13.600 --> 00:21:15.580
Also 2D audio in a 3D game.

00:21:17.610 --> 00:21:19.236
Now next you have 3D audio.

00:21:19.236 --> 00:21:22.670
3D audio as it stands out of
the box is really, it's a mix

00:21:22.670 --> 00:21:26.420
between volume control and
panning from left to right.

00:21:26.420 --> 00:21:29.320
Based on the position of
the listener to the various

00:21:29.320 --> 00:21:30.730
audio sources so

00:21:30.730 --> 00:21:34.270
the closer you get to a sound
the louder it's gonna be.

00:21:34.270 --> 00:21:35.810
If you hear a gunshot off
to the left hand side,

00:21:35.810 --> 00:21:37.650
you're gonna hear it out
of the left hand speaker.

00:21:37.650 --> 00:21:39.930
If you rotate essentially
the audio listener you can now

00:21:39.930 --> 00:21:42.110
hear it out of both
speakers pretty evenly.

00:21:42.110 --> 00:21:43.750
And you get closer,
it's gonna get louder and

00:21:43.750 --> 00:21:44.875
louder and louder.

00:21:44.875 --> 00:21:46.490
Until you reach a distance
where it won't get any louder.

00:21:48.260 --> 00:21:50.822
Then we have spatialization.

00:21:50.822 --> 00:21:52.447
You might think that 3D
audio spatialization,

00:21:52.447 --> 00:21:53.485
there is a difference though.

00:21:53.485 --> 00:21:57.200
Again, 3D audio is still
pretty much flat and plainer.

00:21:57.200 --> 00:21:59.730
Spatialization as Steven
showed in some of the demos,

00:21:59.730 --> 00:22:00.940
you can hear things behind you,

00:22:00.940 --> 00:22:02.780
the police car when
it goes behind you.

00:22:02.780 --> 00:22:05.650
So it's not just panning or
volume control.

00:22:05.650 --> 00:22:08.420
Out of the box, Unity doesn't
have spatialization with it.

00:22:08.420 --> 00:22:09.090
But however,

00:22:09.090 --> 00:22:12.350
it does have the ability to
have a spatialization plugin.

00:22:14.530 --> 00:22:18.350
So we have an MS HRTF
spatialization plugin for Unity.

00:22:18.350 --> 00:22:20.540
You can also add it
to the project, or

00:22:20.540 --> 00:22:23.190
as was just announced I believe
yesterday with Unity 5.4

00:22:23.190 --> 00:22:27.800
that has Hollow Lens in preview
that has it out of the box.

00:22:27.800 --> 00:22:29.330
And future versions of
unity will that have

00:22:29.330 --> 00:22:30.010
plug in there out of the box.

00:22:30.010 --> 00:22:31.840
You just need to make
sure you go in and

00:22:31.840 --> 00:22:34.190
enable spatialization
in your project.

00:22:34.190 --> 00:22:36.720
And you can do that in
project settings audio.

00:22:36.720 --> 00:22:39.370
Select a particular spatializer
that you want to use.

00:22:39.370 --> 00:22:41.910
And then you're all set to go
from the plugin stand point.

00:22:41.910 --> 00:22:44.790
Now you still need to configure
a couple of other things.

00:22:44.790 --> 00:22:47.840
But now what are we doing
with this spatialization?

00:22:47.840 --> 00:22:51.940
Inside Microsoft, we've actually
tested over 350 people.

00:22:51.940 --> 00:22:55.530
We measured the size of their
ears, size of their head and

00:22:55.530 --> 00:22:58.170
measured actually 96
different biometric

00:22:58.170 --> 00:23:01.180
pieces of data about each
one of those individuals.

00:23:01.180 --> 00:23:04.040
And we've come up with a pretty
standardized head model

00:23:04.040 --> 00:23:07.080
that fits a good portion of
the population out there.

00:23:07.080 --> 00:23:09.430
We can essentially
predict on top of that,

00:23:09.430 --> 00:23:12.320
how you're going to hear
audio by the way you look.

00:23:12.320 --> 00:23:15.060
So personalization of these
HRTF, head related transfer

00:23:15.060 --> 00:23:17.760
functions, is actually being
used in HoloLens currently.

00:23:17.760 --> 00:23:20.640
And we're gonna be bringing this
to future versions of Windows

00:23:20.640 --> 00:23:23.220
as well, to be able to use this
personalization aspect of HRTF

00:23:23.220 --> 00:23:25.089
in your other applications.

00:23:27.820 --> 00:23:29.840
Now spatialization options,
this is important.

00:23:29.840 --> 00:23:30.960
We've already
configured a plug-in,

00:23:30.960 --> 00:23:32.460
we have a next step
that we need to do.

00:23:33.595 --> 00:23:37.740
We can do it manually, and doing
it manually you can spatialize,

00:23:37.740 --> 00:23:40.160
we've got it going
to an audio source.

00:23:40.160 --> 00:23:42.590
In a Unity project we typically
drop audio sources all over.

00:23:42.590 --> 00:23:44.506
If there's a waterfall, there's
an audio source over there.

00:23:44.506 --> 00:23:45.356
There's a zombie,

00:23:45.356 --> 00:23:47.610
has an audio source over
there as we'll see shortly.

00:23:47.610 --> 00:23:48.730
We have a pretty
cool zombie demo.

00:23:48.730 --> 00:23:52.070
And you need to make sure that
you check off spatialized.

00:23:52.070 --> 00:23:54.270
The important thing to note
is that if the plugin is not

00:23:54.270 --> 00:23:55.940
enabled, spatialized
won't show up.

00:23:57.640 --> 00:23:58.730
Then you choose a spatial blend.

00:24:00.280 --> 00:24:01.880
It's a little slider to
determine whether or

00:24:01.880 --> 00:24:02.920
not you want 2D or 3D.

00:24:02.920 --> 00:24:04.560
And there's different use
cases for using that.

00:24:04.560 --> 00:24:06.420
Sometimes if you get
close to your sound,

00:24:06.420 --> 00:24:08.280
some folks will make
it over to 3D side.

00:24:08.280 --> 00:24:11.330
But for spatialization, you want
that all the way over to 3D.

00:24:11.330 --> 00:24:13.920
You want a 3D sound spatialized.

00:24:13.920 --> 00:24:16.940
Not to manually configure it and
you can do this on any of

00:24:16.940 --> 00:24:19.330
the audio sources in your seam
that you want to be spatialized.

00:24:20.480 --> 00:24:22.350
There's another method that
you can use to auto configure

00:24:22.350 --> 00:24:23.650
all of this.

00:24:23.650 --> 00:24:25.830
It requires a little bit of code
to enumerate your game objects

00:24:25.830 --> 00:24:27.859
to do that and we'll look at
that in just a couple slides.

00:24:29.190 --> 00:24:32.590
But first, let's talk about
the plugin parameters and

00:24:32.590 --> 00:24:34.500
how we can talk to
the spatialization plugin.

00:24:36.210 --> 00:24:38.080
Any spatialization plugin
can define their own

00:24:38.080 --> 00:24:38.870
custom parameters.

00:24:38.870 --> 00:24:41.690
They can communicate with
from inside of Unity.

00:24:41.690 --> 00:24:43.470
The Microsoft HRTF plugin.

00:24:43.470 --> 00:24:46.220
We have two main parameters
that you communicate with.

00:24:46.220 --> 00:24:49.140
The first is a room size,
or room model.

00:24:49.140 --> 00:24:52.020
If you're in an office,
there's a little bit

00:24:52.020 --> 00:24:54.100
of reverb that's added
to the sound in there.

00:24:54.100 --> 00:24:55.060
And your ear senses that.

00:24:55.060 --> 00:24:57.210
Now this is not reverb added for
effect.

00:24:57.210 --> 00:24:58.030
If I'm playing guitar,

00:24:58.030 --> 00:25:00.710
I might add a reverb effect
on there, that is an effect.

00:25:00.710 --> 00:25:03.220
Sound that you hear in the real
world, has a little bit of

00:25:03.220 --> 00:25:06.550
reverb, depending on the room,
added to how you hear audio.

00:25:06.550 --> 00:25:11.380
And so our HRTF functions try
to model that to make it so,

00:25:11.380 --> 00:25:13.800
you can hear the sound
in a realistic way.

00:25:13.800 --> 00:25:15.390
So our HRTF code will say okay,

00:25:15.390 --> 00:25:17.700
you've specified
a small room model.

00:25:17.700 --> 00:25:18.870
Then we're gonna add and

00:25:18.870 --> 00:25:22.310
integrate, a little bit of
reverb onto the HRTF this way,

00:25:22.310 --> 00:25:23.620
so it sounds realistic.

00:25:23.620 --> 00:25:26.300
You have the ability to
specify a medium room.

00:25:26.300 --> 00:25:28.050
In here,
I would specify a large room.

00:25:28.050 --> 00:25:30.380
Or number four, as you're
basically going outdoors,

00:25:30.380 --> 00:25:31.550
we're gonna have
an extremely minimal,

00:25:31.550 --> 00:25:34.050
or nill amount of
reverb added to that.

00:25:35.750 --> 00:25:38.270
Next, we have a roll off which
allows us just some fine tuning

00:25:38.270 --> 00:25:39.425
of volume curves.

00:25:39.425 --> 00:25:40.530
It's a algorithmic curve and

00:25:40.530 --> 00:25:42.710
we can essentially say
here's your minimum gain and

00:25:42.710 --> 00:25:46.120
maximum gain, how we can effect
the decibel depending on

00:25:46.120 --> 00:25:48.800
how close or how far away we
get from the audio source.

00:25:48.800 --> 00:25:50.520
Just some extra abilities
to tweak those values.

00:25:51.858 --> 00:25:53.700
Now, using Unity it's
as simple as this,

00:25:53.700 --> 00:25:56.950
on a particular gain object
you add a little bit of code.

00:25:56.950 --> 00:25:58.970
First line is common
practice across Unity,

00:25:58.970 --> 00:26:02.540
that's how you get a component,
an audio source.

00:26:02.540 --> 00:26:05.700
We get a reference to our audio
source, now we simply call,

00:26:05.700 --> 00:26:07.280
set spatial Azure float.

00:26:07.280 --> 00:26:09.700
That communication the plugin,
the tele-plugin in

00:26:09.700 --> 00:26:13.310
this particular case,
value one is room size, and

00:26:13.310 --> 00:26:15.310
then we're going to pass
in room size small.

00:26:15.310 --> 00:26:18.540
That's it, that's how you
configure an audio source for

00:26:18.540 --> 00:26:20.680
spacialization, enabling
a plug-in,

00:26:20.680 --> 00:26:23.760
and communicating with
a plug-in to say for

00:26:23.760 --> 00:26:25.740
this audio source we're
gonna use a small room size.

00:26:26.940 --> 00:26:28.930
Now I mentioned we can also
do this automatically.

00:26:28.930 --> 00:26:30.650
I showed the manual
configuration.

00:26:31.790 --> 00:26:33.210
If we want to auto configure it

00:26:33.210 --> 00:26:35.260
we can use just
a little bit of code.

00:26:35.260 --> 00:26:38.780
Let's assume we have a use
case that, in a small room

00:26:38.780 --> 00:26:41.480
we have 50 different objects we
need to spatialize in there.

00:26:41.480 --> 00:26:43.700
What we can do is
we can add a tag.

00:26:43.700 --> 00:26:46.550
A tag is just some text you
assign to an object in Unity.

00:26:46.550 --> 00:26:49.610
And we can tag all of our
particular objects in that small

00:26:49.610 --> 00:26:52.190
room with a tag
"SpatialEmittersSmall".

00:26:52.190 --> 00:26:53.210
It can be any text you want,

00:26:53.210 --> 00:26:55.170
I just chose
"SpatialEmittersSmall".

00:26:55.170 --> 00:26:56.080
And so that line of code

00:26:56.080 --> 00:26:57.590
enumerates all of
those game objects.

00:26:57.590 --> 00:26:58.240
Gives them back to you.

00:26:59.490 --> 00:27:02.560
Next, you can just write a
little bit of code to configure

00:27:02.560 --> 00:27:04.970
the audio sources for
each of those game objects.

00:27:06.120 --> 00:27:06.844
And then next,

00:27:06.844 --> 00:27:09.685
you just communicate with
those particular plug-ins, for

00:27:09.685 --> 00:27:11.260
the spacialization plug-ins.

00:27:11.260 --> 00:27:13.109
You say for each of those
objects, go ahead and

00:27:13.109 --> 00:27:14.209
set the room size to small.

00:27:14.209 --> 00:27:16.954
If you had a medium room size
you could have spatiaizer

00:27:16.954 --> 00:27:19.480
emitter medium,
spatializer emitter large.

00:27:19.480 --> 00:27:21.364
And so it gives you just one bit
of code that auto configures

00:27:21.364 --> 00:27:23.363
everything for you so you don't
have to worry if you missed any

00:27:23.363 --> 00:27:24.566
options or
didn't send correctly.

00:27:28.409 --> 00:27:32.225
For this next demo we worked
with a partner, Dream Tapp,

00:27:32.225 --> 00:27:34.900
to implement a Zombie
super rocket.

00:27:34.900 --> 00:27:35.620
I love zombies.

00:27:35.620 --> 00:27:37.110
I love zombie shows.

00:27:37.110 --> 00:27:39.890
So there's a couple
considerations when you're

00:27:39.890 --> 00:27:44.160
making a game or an experience
with spatialized sound

00:27:44.160 --> 00:27:46.650
you can't just drop
any audio anywhere.

00:27:46.650 --> 00:27:49.580
Because there's things that
folks that have been doing game

00:27:49.580 --> 00:27:50.310
and app development for

00:27:50.310 --> 00:27:52.210
awhile they might have
some expectations.

00:27:52.210 --> 00:27:53.710
Like let's just throw
sound in there.

00:27:53.710 --> 00:27:56.470
Position becomes extremely
important as we'll see.

00:27:56.470 --> 00:27:57.921
So, let's check out this demo.

00:28:09.820 --> 00:28:12.595
All right, first let's
go ahead and play it.

00:28:16.915 --> 00:28:17.762
You'll notice right away.

00:28:21.756 --> 00:28:22.859
There's some zombie sounds.

00:28:26.260 --> 00:28:28.153
Let's actually go ahead and
maximize this.

00:28:33.076 --> 00:28:34.130
Okay now listen to the audio.

00:28:35.800 --> 00:28:37.650
We are currently
spalialized as you can see.

00:28:37.650 --> 00:28:39.350
Kind on the left hand
side of the screen.

00:28:39.350 --> 00:28:41.060
Spatial audio is on.

00:28:41.060 --> 00:28:42.380
We are in a small room size.

00:28:42.380 --> 00:28:47.885
Let's change the room
size to medium and large.

00:28:47.885 --> 00:28:51.472
[SOUND]
>> [INAUDIBLE]

00:28:51.472 --> 00:28:54.282
>> None.

00:28:54.282 --> 00:28:54.960
Small.

00:28:57.210 --> 00:28:59.685
Medium and large.

00:28:59.685 --> 00:29:01.705
And if we turn it off you
can hear the instant effect.

00:29:01.705 --> 00:29:05.662
[SOUND]
Right, everything is kind of

00:29:05.662 --> 00:29:09.092
a consistent volume almost like
you have headphones on but

00:29:09.092 --> 00:29:10.983
it's all panning the same way.

00:29:10.983 --> 00:29:14.722
Now let's turn around here.

00:29:16.589 --> 00:29:18.912
And we have the scariest
zombie of all.

00:29:18.912 --> 00:29:21.760
[SOUND]
>> We have a zombie that looks

00:29:21.760 --> 00:29:22.429
frightening like me.

00:29:22.429 --> 00:29:26.663
[SOUND]
>> [LAUGH] Let's off that

00:29:26.663 --> 00:29:27.748
zombie.

00:29:27.748 --> 00:29:33.587
>> [LAUGH]
>> Now listen in here.

00:29:33.587 --> 00:29:34.342
[MUSIC]

00:29:34.342 --> 00:29:36.084
We have a flame overhead.

00:29:36.084 --> 00:29:46.022
[MUSIC]

00:29:46.022 --> 00:29:49.353
We have some zapping wires,
and lastly,

00:29:49.353 --> 00:29:51.930
we've some speakers in there.

00:29:51.930 --> 00:29:54.264
[MUSIC]

00:29:54.264 --> 00:29:57.042
As I turn away.

00:29:57.042 --> 00:29:58.285
We can hear the position.

00:29:58.285 --> 00:29:59.502
The sound is up there.

00:29:59.502 --> 00:30:00.326
It's coming from up there.

00:30:00.326 --> 00:30:01.046
Spatialize.

00:30:01.046 --> 00:30:05.167
[MUSIC]

00:30:05.167 --> 00:30:07.150
So, with these sounds, there's
a couple different things.

00:30:07.150 --> 00:30:08.650
We heard foot steps as
we were walking along.

00:30:08.650 --> 00:30:09.652
So, let's look at my character,
here.

00:30:16.919 --> 00:30:19.923
If I scroll back, let's talk
about two things, first,

00:30:19.923 --> 00:30:21.780
that we use to enable this.

00:30:21.780 --> 00:30:25.450
Edit, Project Settings,
Audio, and

00:30:25.450 --> 00:30:27.400
here we have MSHRT
a spatializer.

00:30:27.400 --> 00:30:28.320
So we've added the plug in.

00:30:29.790 --> 00:30:34.120
Now anywhere,
when we have an audio source,

00:30:34.120 --> 00:30:35.770
we've configured
our audio sources

00:30:37.750 --> 00:30:42.010
to have our spatialized settings
and those were set to 3D.

00:30:42.010 --> 00:30:43.359
So our sources are all
set up for us.

00:30:44.880 --> 00:30:46.185
But why do we have so

00:30:46.185 --> 00:30:50.598
many different options here on
our first-person controller?

00:30:50.598 --> 00:30:54.331
There's one, two, three,
four, five, six, seven,

00:30:54.331 --> 00:30:58.640
eight different audio sources
just on my main character.

00:30:58.640 --> 00:31:00.310
Why so many sounds for
just one character?

00:31:00.310 --> 00:31:02.280
Well, as we started this, and

00:31:02.280 --> 00:31:03.580
we had something
like the footsteps.

00:31:03.580 --> 00:31:07.310
Footsteps, typically an audio
source, is about here on a user.

00:31:07.310 --> 00:31:08.959
When you're playing
footsteps from your

00:31:08.959 --> 00:31:11.800
mid-section in a spatialized
world, it sounds weird.

00:31:11.800 --> 00:31:13.380
When you play in
a non-spatialized game,

00:31:13.380 --> 00:31:14.670
it's just kind of what your

00:31:14.670 --> 00:31:16.780
brain is used to in playing
a non-spatialized game.

00:31:17.990 --> 00:31:20.005
So we took those sounds and
we put them on the floor and

00:31:20.005 --> 00:31:21.740
they suddenly sounded like they
were coming from the floor,

00:31:21.740 --> 00:31:22.310
as you'd expect.

00:31:23.370 --> 00:31:25.460
Now overhead we have
one each for rain, so

00:31:25.460 --> 00:31:27.140
we have a left channel and
a right channel for rain.

00:31:28.190 --> 00:31:31.380
Now our spatialized audio sounds
should be mono, so we have

00:31:31.380 --> 00:31:34.000
slightly different sounds to
make sure they're not phasing

00:31:34.000 --> 00:31:35.480
for left and right and
they're playing overhead.

00:31:35.480 --> 00:31:38.100
You ever see the old cartoons
where the storm cloud follows

00:31:38.100 --> 00:31:39.360
you around wherever you go?

00:31:39.360 --> 00:31:40.760
That's exactly
what happens here.

00:31:42.010 --> 00:31:44.840
And the reason that we do that
is rain is always overhead.

00:31:44.840 --> 00:31:46.030
It's positionally placed and

00:31:46.030 --> 00:31:47.890
it follows us around
wherever we go.

00:31:47.890 --> 00:31:49.940
We don't need multiple
ones set around our scene.

00:31:49.940 --> 00:31:52.710
If we walk notice our
audio goes with us.

00:31:54.360 --> 00:31:56.930
We did the same left and
right for an airplane.

00:31:56.930 --> 00:31:58.970
But there's a special case
that comes with something

00:31:58.970 --> 00:31:59.589
like an airplane.

00:32:02.150 --> 00:32:05.100
When somebody records the sound
of an airplane what do they do?

00:32:05.100 --> 00:32:07.193
Do they hang on the edge of
an airplane with a microphone?

00:32:07.193 --> 00:32:08.017
They don't!

00:32:08.017 --> 00:32:10.166
[LAUGH] They're on the ground
they're listening to that

00:32:10.166 --> 00:32:10.669
airplane and

00:32:10.669 --> 00:32:13.680
as such because the speed of the
airplane you get Doppler shift.

00:32:13.680 --> 00:32:17.360
So, a sound out of the box
that you record of an airplane

00:32:17.360 --> 00:32:19.800
has Doppler shift
associated with it.

00:32:19.800 --> 00:32:21.370
So that's one of the settings
you need to make sure that

00:32:21.370 --> 00:32:21.890
you turn off.

00:32:21.890 --> 00:32:24.910
We don't want additional
Doppler sound included on

00:32:24.910 --> 00:32:26.450
audio that already has
a Doppler built in.

00:32:26.450 --> 00:32:28.740
That was one of the challenges
of getting an airplane sound.

00:32:29.800 --> 00:32:33.300
That also follows us overhead
because the outside or

00:32:33.300 --> 00:32:34.710
any building you're
in is gonna basically

00:32:34.710 --> 00:32:36.759
act like a big acoustic box or
something like an airplane.

00:32:38.590 --> 00:32:40.635
Zombies same thing
as the player.

00:32:40.635 --> 00:32:42.220
Zombie's groaning and

00:32:42.220 --> 00:32:45.670
moaning comes from the zombie's
mouth which would be right here.

00:32:45.670 --> 00:32:46.220
And zombie

00:32:46.220 --> 00:32:47.970
walking sounds would have to
come from the zombie's feet.

00:32:47.970 --> 00:32:50.989
It also makes sense but
something to be aware of when

00:32:50.989 --> 00:32:54.089
you're designing these
particular experiences.

00:32:54.089 --> 00:32:54.751
>> All right.

00:32:54.751 --> 00:32:55.795
Thanks Adam.

00:32:55.795 --> 00:32:57.105
Actually, can I show
one more thing?

00:32:57.105 --> 00:32:57.607
>> Yeah, go ahead.

00:32:57.607 --> 00:33:00.001
>> I know you're gonna
talk about profiling and

00:33:00.001 --> 00:33:02.836
performance but this is
a pretty good graph that shows

00:33:02.836 --> 00:33:05.990
you immediately what happens
with performance and audio.

00:33:05.990 --> 00:33:08.260
Let's go ahead and
get my mouse up here.

00:33:11.500 --> 00:33:13.170
Scroll down to audio.

00:33:13.170 --> 00:33:16.920
This graph right here, this is
my total audio CPU percentage.

00:33:18.600 --> 00:33:20.242
So let's go ahead and
unpause this.

00:33:23.291 --> 00:33:28.460
Just watch the graph and let
me shut-off spatialized audio.

00:33:28.460 --> 00:33:30.490
Turn it on, turn it off.

00:33:32.510 --> 00:33:33.770
There's a hit for
spatialized audio.

00:33:33.770 --> 00:33:35.392
In this case it's
pretty minimal but

00:33:35.392 --> 00:33:38.060
it is one thing to be aware of
and using the profiler built-in

00:33:38.060 --> 00:33:40.677
unit you can actually see the
audio CPU percentage that your

00:33:40.677 --> 00:33:42.322
experience is
currently taking up.

00:33:44.390 --> 00:33:47.895
>> So let's talk about
some tips while Adam

00:33:47.895 --> 00:33:51.410
is trying to get ready for
his next demo.

00:33:51.410 --> 00:33:55.930
One of the things that is
important for our spatialization

00:33:55.930 --> 00:34:00.428
technology is to make sure that
all spatialized audio is mono.

00:34:00.428 --> 00:34:04.010
We also wanna make sure you
target 48khz audio because

00:34:04.010 --> 00:34:07.500
in the pipelines, it will
actually be converted to 48khz.

00:34:07.500 --> 00:34:10.705
AudioGraph itself will actually
throw an error at this point if

00:34:10.705 --> 00:34:12.220
you do not use 48khz audio.

00:34:14.090 --> 00:34:17.070
What Adam and I learned is
that when you get graphs from

00:34:17.070 --> 00:34:21.380
designers, they're not always
at scale, and real live scale.

00:34:21.380 --> 00:34:22.390
>> Usually not at scale.

00:34:22.390 --> 00:34:25.570
>> Or usually yes.

00:34:25.570 --> 00:34:28.620
And the thing that is really
important with spatializing

00:34:28.620 --> 00:34:32.150
sound is understanding that the
spatialization technology we use

00:34:32.150 --> 00:34:34.330
assumes the units
to be in meters and

00:34:34.330 --> 00:34:36.590
so one unit equals one meter.

00:34:36.590 --> 00:34:40.040
So when that world scale is off,
spatialization sound and

00:34:40.040 --> 00:34:43.050
the distance curves and such
will also be off a little bit.

00:34:45.180 --> 00:34:47.130
Adam also touched on
HRTF performance.

00:34:47.130 --> 00:34:50.360
So, it is important to note
that since we're Windows

00:34:50.360 --> 00:34:54.360
we run on many, many different
devices, and different devices

00:34:54.360 --> 00:34:58.154
will support different
amounts of supported voices.

00:34:59.300 --> 00:35:03.691
Now, It's also important to
realize that you will budget for

00:35:03.691 --> 00:35:04.888
spatial audio.

00:35:04.888 --> 00:35:09.042
If it's 5% you'll have less
spatial voices than you have

00:35:09.042 --> 00:35:09.740
10%.

00:35:09.740 --> 00:35:13.757
But again the 10% on a less
powerful device might result in

00:35:13.757 --> 00:35:15.268
less voices.

00:35:15.268 --> 00:35:19.100
So, it is important for you to
keep that in mind when you're

00:35:19.100 --> 00:35:20.249
designing your application.

00:35:21.720 --> 00:35:25.510
Below I have listed some common
techniques on how you can

00:35:25.510 --> 00:35:29.410
deal with devices that
are less powerful.

00:35:29.410 --> 00:35:32.220
So if you have a graph, the
first graph on the left that has

00:35:32.220 --> 00:35:36.350
two emitters,
two spatial objects on it.

00:35:36.350 --> 00:35:39.080
And you need less, or
you have less spatial audio

00:35:39.080 --> 00:35:42.540
capability what you could do is
take the emitters off those two

00:35:42.540 --> 00:35:45.027
individual nodes and
sub-mix the sound and

00:35:45.027 --> 00:35:48.520
basically co-locating them by
adding another emitter to it.

00:35:48.520 --> 00:35:51.630
So you would do that when sounds
are really close in distance and

00:35:51.630 --> 00:35:53.140
traveling at a similar velocity.

00:35:54.690 --> 00:35:57.880
One of the other things you
can do is put a priority

00:35:57.880 --> 00:35:59.850
on the spatial object you have.

00:35:59.850 --> 00:36:03.065
And if your spatial object
count is not high enough or

00:36:03.065 --> 00:36:06.644
when you can render you might
drop one of the emitters on one

00:36:06.644 --> 00:36:07.901
of the input nodes.

00:36:09.590 --> 00:36:12.010
What's important to notice
is that spatial audio is

00:36:12.010 --> 00:36:12.960
a simulation.

00:36:12.960 --> 00:36:17.630
So as Adam mentioned before, you
expect and you need sounds that

00:36:17.630 --> 00:36:22.145
come from the right location
as you're creating your sound.

00:36:22.145 --> 00:36:24.995
That means footsteps,
you wanna put an emitter that

00:36:24.995 --> 00:36:28.390
actually targets
the footsteps at the bottom.

00:36:28.390 --> 00:36:29.650
Because that's really
what you're used to and

00:36:29.650 --> 00:36:31.490
that's where the sound
is coming from.

00:36:31.490 --> 00:36:33.220
Same goes for
when somebody is speaking.

00:36:33.220 --> 00:36:35.636
You wanna actually
put a speaker or

00:36:35.636 --> 00:36:41.554
an emitter where
their head is Another

00:36:41.554 --> 00:36:45.790
important thing to note is that
vertical location matters.

00:36:45.790 --> 00:36:47.270
So what I mean by that is that

00:36:48.460 --> 00:36:53.570
as you now have a high channel,
it's important to understand how

00:36:53.570 --> 00:36:55.060
well that works at
certain degrees.

00:36:55.060 --> 00:36:58.680
So anything above 30 degrees,
30 degrees works well.

00:36:58.680 --> 00:36:59.820
So if I'm looking at Adam and

00:36:59.820 --> 00:37:03.800
Adam is speaking at me that
almost works well for me.

00:37:03.800 --> 00:37:07.060
But an airplane flying over or
speakers or

00:37:07.060 --> 00:37:10.930
such are really good to
locate because of that fact.

00:37:12.140 --> 00:37:14.710
The next thing
Adam mentioned was

00:37:14.710 --> 00:37:17.549
the importance of room models
and the good use of room models.

00:37:19.020 --> 00:37:22.290
When you are spatializing sound
you need to use room models to

00:37:22.290 --> 00:37:25.080
really represent the room you're
in because that will give you

00:37:25.080 --> 00:37:26.750
the correct distance cues and
such.

00:37:28.040 --> 00:37:30.310
And so
don't use them as an effect, but

00:37:30.310 --> 00:37:31.800
use them to really
model the room.

00:37:33.840 --> 00:37:37.440
Something you might have
experienced here is that

00:37:37.440 --> 00:37:40.000
expectation of wave simulation.

00:37:40.000 --> 00:37:43.038
So a rain always comes from
above so immediately your brain

00:37:43.038 --> 00:37:46.230
thinks that the rain really
is coming from above.

00:37:46.230 --> 00:37:49.388
And the next demo, if you
hear of an eagle fly over,

00:37:49.388 --> 00:37:52.841
you will naturally be able to
localize that sound better

00:37:52.841 --> 00:37:56.160
because eagles oftentimes
fly over your head.

00:37:56.160 --> 00:37:56.800
Unless you're in trouble.

00:37:58.230 --> 00:38:01.920
And real world sounds are more
effective for the same reason.

00:38:01.920 --> 00:38:04.420
Sounds that you know and

00:38:04.420 --> 00:38:06.190
sounds that are always
in a similar location,

00:38:06.190 --> 00:38:08.540
you'll be able to place them
better in those locations.

00:38:10.500 --> 00:38:11.860
When you're normalizing
a sound for

00:38:11.860 --> 00:38:16.160
spatial audio, it's important
to think about normalizing

00:38:16.160 --> 00:38:20.430
the sound as if it was recorded
1m away from you, and as such,

00:38:20.430 --> 00:38:22.760
the spatialization effect
will work really great.

00:38:24.320 --> 00:38:29.120
You do not need to add any
additional distance attenuation,

00:38:29.120 --> 00:38:31.520
so the spatialization technology

00:38:31.520 --> 00:38:33.170
panels will take care
of that for you.

00:38:34.220 --> 00:38:36.002
If you have a sound in your UI,
for

00:38:36.002 --> 00:38:38.330
example, is really important.

00:38:38.330 --> 00:38:42.331
You can add dynamic compression
to make sure that that sound

00:38:42.331 --> 00:38:45.382
sounds louder when
it's really important.

00:38:45.382 --> 00:38:49.631
All right, with that being said,
let's move on to our next demo.

00:38:49.631 --> 00:38:51.548
>> My favorite demo.

00:38:51.548 --> 00:38:52.730
Well, the other one's good, too.

00:38:52.730 --> 00:38:53.580
They're different.

00:38:53.580 --> 00:38:55.440
Zombies and dungeons.

00:38:55.440 --> 00:38:56.430
You can kind of
see a theme here.

00:38:57.560 --> 00:38:59.570
This next demo that we
worked with another partner,

00:38:59.570 --> 00:39:04.340
Silicon Storm, and this going
to be using the HTC Vive, one of

00:39:04.340 --> 00:39:07.770
the various capable VR headsets
that are on the market, that

00:39:07.770 --> 00:39:12.230
actually can integrate quite
easily with our audio runtime.

00:39:12.230 --> 00:39:16.030
And so on this one,
this is a headset.

00:39:16.030 --> 00:39:18.020
I have stage tracking
that's gonna be set up.

00:39:18.020 --> 00:39:19.626
But there's one thing I
wanna show you inside of

00:39:19.626 --> 00:39:20.469
the experience first and

00:39:20.469 --> 00:39:22.251
then we'll actually do
a quick run through on here.

00:39:33.535 --> 00:39:35.485
All right, let me set these on
the floor just to make sure

00:39:35.485 --> 00:39:42.875
these are ready And I'm back.

00:39:42.875 --> 00:39:45.680
[LAUGH].

00:39:45.680 --> 00:39:48.100
So we can see this level that
we've got laid out here.

00:39:48.100 --> 00:39:50.957
And we're gonna start out on
this far edge of the cliff

00:39:50.957 --> 00:39:52.745
here and there's gonna be wind.

00:39:52.745 --> 00:39:54.173
So take a moment to
really appreciate and

00:39:54.173 --> 00:39:54.887
listen to sounds and

00:39:54.887 --> 00:39:56.576
try to understand where
they're coming from.

00:39:56.576 --> 00:39:58.215
Imagine yourself
on the edge there.

00:39:58.215 --> 00:40:01.195
I'm gonna be immersed so I'm
gonna be in a slightly different

00:40:01.195 --> 00:40:03.599
place than you guys but
when we go up the side here,

00:40:03.599 --> 00:40:04.822
we're gonna hear wind.

00:40:04.822 --> 00:40:07.446
Think, if you're going up
the side of a cliff, and

00:40:07.446 --> 00:40:09.530
the sound of wind is
gonna be different.

00:40:09.530 --> 00:40:12.650
So we've taken time to
add different things to

00:40:12.650 --> 00:40:13.620
these locations.

00:40:13.620 --> 00:40:17.390
Now, the specialization
settings, we can set manually.

00:40:17.390 --> 00:40:19.820
We showed little bits of code
that we can use to essentially

00:40:19.820 --> 00:40:23.100
talk with,
the specializer plug in.

00:40:23.100 --> 00:40:25.550
And we can simply
do basic things,

00:40:25.550 --> 00:40:27.976
the set specializer float, the
demo's that we looked at before.

00:40:27.976 --> 00:40:32.160
Set specializer float,
in this particular case,

00:40:32.160 --> 00:40:37.380
we're just setting this to be
a room of none, in other words,

00:40:37.380 --> 00:40:38.560
we are outdoors.

00:40:38.560 --> 00:40:41.040
We're not in a small room, we're
not in a conference shaped room,

00:40:41.040 --> 00:40:42.600
we're not in a supermarket.

00:40:42.600 --> 00:40:43.650
We're outside, so

00:40:43.650 --> 00:40:45.560
it needs to change how it's
gonna do the processing there.

00:40:47.260 --> 00:40:48.542
All right, let's go ahead,
and run this demo,

00:40:48.542 --> 00:40:49.144
let me maximize this.

00:40:58.040 --> 00:40:59.060
Find my right controller here.

00:41:04.402 --> 00:41:05.563
Hopefully, I don't
fall off the stage.

00:41:05.563 --> 00:41:06.398
[SOUND]

00:41:15.433 --> 00:41:18.580
And as it figures, my headset's
not tracking, there we go.

00:41:18.580 --> 00:41:23.409
[SOUND]
Gonna restart this real quick,

00:41:23.409 --> 00:41:24.970
for some reason,
my headset's not tracking here.

00:41:24.970 --> 00:41:27.420
Let me just move back,
so I can see me.

00:41:27.420 --> 00:41:29.543
The way that this headset
actually works is we have,

00:41:29.543 --> 00:41:31.231
sensors that are set
up on the stage here,

00:41:31.231 --> 00:41:33.740
and so this gives me kind of a
realistic tracking throughout my

00:41:33.740 --> 00:41:34.386
environment.

00:41:36.488 --> 00:41:37.963
[SOUND]

00:41:50.277 --> 00:41:53.335
And, of course it's not
tracking me in my environment.

00:41:53.335 --> 00:41:55.660
[LAUGH] There we go,
all right, now we're in.

00:41:58.393 --> 00:41:59.482
Now take a moment,

00:41:59.482 --> 00:42:02.341
we have eagles that
are flying up overhead there,

00:42:02.341 --> 00:42:05.960
we have the sounds around us,
we have flags that are flapping.

00:42:07.720 --> 00:42:10.710
You can hear the winds, we
kinda got that edge over there.

00:42:12.520 --> 00:42:15.063
I'm gonna violate a little
principle of VR, and

00:42:15.063 --> 00:42:18.164
fast essentially move myself
through this world using this

00:42:18.164 --> 00:42:19.542
little way point system.

00:42:19.542 --> 00:42:21.319
Now automatically notice,
or Steven,

00:42:21.319 --> 00:42:22.631
are you over there, Steven?

00:42:22.631 --> 00:42:23.489
>> [LAUGH] Yes.

00:42:23.489 --> 00:42:26.671
>> We can hear the edge
of this wind zone here.

00:42:29.226 --> 00:42:31.026
We're at the very edge of it,
let's go into it

00:42:31.026 --> 00:42:41.026
[SOUND]

00:42:43.866 --> 00:42:45.667
All right, so hopefully you felt

00:42:45.667 --> 00:42:48.893
a little bit of that chill that
was kind of on the edge there.

00:42:48.893 --> 00:42:51.352
Now we're coming up
to our dungeon here,

00:42:51.352 --> 00:42:54.802
Steve you want to bring me up
to that spot there, next one.

00:42:54.802 --> 00:42:58.372
All right,

00:42:58.372 --> 00:43:03.370
let's go into.

00:43:03.370 --> 00:43:09.790
We go into our area,
our flags shut off outside.

00:43:09.790 --> 00:43:11.110
Our eagles shut off outside,

00:43:11.110 --> 00:43:13.110
we need to make sure we don't
hear those sounds any more.

00:43:13.110 --> 00:43:15.070
As soon, as we've entered
into this region we've shut

00:43:15.070 --> 00:43:16.020
the sounds off.

00:43:16.020 --> 00:43:17.529
Now we have torches
burning on the side.

00:43:20.830 --> 00:43:21.840
Let's move to this area.

00:43:23.930 --> 00:43:26.247
Again, we can literally hear
the fire burning on the sides.

00:43:33.388 --> 00:43:35.730
And in the dungeon, we have
a couple of different traps

00:43:38.484 --> 00:43:40.381
There's a slight creaking
going on of the,

00:43:40.381 --> 00:43:42.943
the lumber that's kind of
holding entire place up here, or

00:43:42.943 --> 00:43:44.240
helping to hold the place up.

00:43:46.070 --> 00:43:48.161
And, I can see there's a trapper
right there, up on top, so

00:43:48.161 --> 00:43:49.606
let's check out what
that guy's about.

00:43:54.772 --> 00:43:55.712
>> Up.

00:43:55.712 --> 00:43:59.683
[SOUND]
>> Stop tracking.

00:43:59.683 --> 00:44:04.792
>> Okay, okay.

00:44:04.792 --> 00:44:07.752
>> Right when the trap
drops it stops tracking.

00:44:07.752 --> 00:44:09.065
Did you see it or no?

00:44:09.065 --> 00:44:09.990
>> Yeah, I did.
>> You saw it?

00:44:09.990 --> 00:44:13.170
>> Yeah.
>> Because the other thing that

00:44:13.170 --> 00:44:14.270
we can do
>> You said,

00:44:15.840 --> 00:44:17.400
you were able to see
the trap drop on there?

00:44:17.400 --> 00:44:19.501
All right, there's on other
thing, that I'll show you, and

00:44:19.501 --> 00:44:21.210
we don't actually have
to have the headset on.

00:44:21.210 --> 00:44:25.994
The cool thing about
technology nowadays

00:44:25.994 --> 00:44:30.640
is we can pretty easily
switch back, and

00:44:30.640 --> 00:44:36.516
forth between,
what we're doing with a headset,

00:44:36.516 --> 00:44:41.588
and what we're gonna
do without a headset.

00:44:46.047 --> 00:44:49.567
>> So over this trap,
on the right hand side here.

00:44:49.567 --> 00:44:51.561
There's a lava pits
that we passed by.

00:44:51.561 --> 00:44:54.055
[SOUND] One more trap.

00:44:54.055 --> 00:45:02.413
[SOUND]
So

00:45:02.413 --> 00:45:04.671
arrows that have audio
sources on them, so

00:45:04.671 --> 00:45:06.310
we can hear them as they fly by.

00:45:08.080 --> 00:45:11.070
And then as we, if you notice,
they hit the back wall,

00:45:11.070 --> 00:45:13.365
hopefully you heard it somewhat,
behind you.

00:45:13.365 --> 00:45:15.530
Cuz, those hit the back wall,

00:45:15.530 --> 00:45:17.548
and they made a sound at
that location when they hit.

00:45:17.548 --> 00:45:20.580
So the specialization aspect,
I hope you can hear it brings to

00:45:20.580 --> 00:45:23.550
live, now with headphones on,
it's kind for the side speakers

00:45:23.550 --> 00:45:25.940
you've got kind of an idea where
those sounds are coming from.

00:45:27.100 --> 00:45:31.252
>> Great, thanks Dan for
the demo,

00:45:31.252 --> 00:45:36.230
so Let's switch to,
the deck again.

00:45:36.230 --> 00:45:39.270
All right, so that's the end
of our presentation.

00:45:39.270 --> 00:45:42.030
I hope you've seen, couple
great demo's that demonstrate,

00:45:42.030 --> 00:45:44.450
how you can add spatial
audio to games, but

00:45:44.450 --> 00:45:48.220
also how you can add spatial
audio, to your applications,

00:45:48.220 --> 00:45:50.270
in udev lp using
the audiograph API.

00:45:53.000 --> 00:45:54.300
We can't wait to really see,

00:45:54.300 --> 00:45:56.790
what kind of spatial audio
experiences you create, and

00:45:56.790 --> 00:46:00.270
you can reach out both to me,
and Adam afterwards to,

00:46:01.350 --> 00:46:04.820
you know, we'll help you out
with building those experiences.

00:46:04.820 --> 00:46:08.170
You can also watch the separate
recorded presentation,

00:46:08.170 --> 00:46:11.070
on the spatial sphere
on channel nine.

00:46:11.070 --> 00:46:14.820
And we will post code samples
for the code samples, for

00:46:14.820 --> 00:46:16.960
a lot of the demos you've
seen here today on github.

00:46:17.970 --> 00:46:20.830
And, we'll also
post the games for

00:46:20.830 --> 00:46:24.390
which we can't always,
share the full resources.

00:46:24.390 --> 00:46:26.280
But we'll put those
online as well.

00:46:27.700 --> 00:46:30.750
We'll post the link to both
of them on our channel

00:46:30.750 --> 00:46:31.469
nine video page.

00:46:32.600 --> 00:46:35.620
All right, well thank you for
your time today.

00:46:35.620 --> 00:46:36.850
I hope you had a great time, and

00:46:36.850 --> 00:46:40.270
I hope you're ready to build
some spatial audio experiences.

00:46:40.270 --> 00:46:41.120
>> Thank you all very much,
and for

00:46:41.120 --> 00:46:43.050
the folks in the room, we're
gonna stay a little bit after.

00:46:43.050 --> 00:46:44.670
So we'll be here to answer
questions, and if you wanna

00:46:44.670 --> 00:46:46.190
check out the headset
check anything with that.

00:46:46.190 --> 00:46:47.100
Come on up, and talk to us too,

00:46:47.100 --> 00:46:49.070
thank you all very much,
enjoy the rest of build.

00:46:49.070 --> 00:46:50.980
>> Thanks a lot.

