-
Notifications
You must be signed in to change notification settings - Fork 0
/
audio.js
125 lines (94 loc) · 2.51 KB
/
audio.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
// // //Load Site Assets
// require('./resonance-audio.js');
var $ = require("jquery");
// Create an AudioContext
var audioContext = new AudioContext();
var resonanceAudioScene = new ResonanceAudio(audioContext);
resonanceAudioScene.output.connect(audioContext.destination);
var roomDimensions = {
width: 20,
height: 10,
depth: 20,
};
var smallRoom = {
width: 5,
height: 5,
depth: 5,
};
var marble = {
// Room wall materials
left: 'marble',
right: 'marble',
front: 'marble',
back: 'marble',
// Room floor
down: 'marble',
// Room ceiling
up: 'marble',
};
var curtain = {
// Room wall materials
left: 'curtain-heavy',
right: 'curtain-heavy',
front: 'curtain-heavy',
back: 'curtain-heavy',
// Room floor
down: 'curtain-heavy',
// Room ceiling
up: 'curtain-heavy',
};
var outdoors = {
// Room wall materials
left: 'transparent',
right: 'transparent',
front: 'transparent',
back: 'transparent',
// Room floor
down: 'transparent',
// Room ceiling
up: 'transparent',
};
resonanceAudioScene.setRoomProperties(roomDimensions, marble);
var chord = document.createElement('audio');
chord.src = './audio/chance.mp3';
var chordSource = audioContext.createMediaElementSource(chord);
// Add the MediaElementSource to the scene as an audio input source.
var source = resonanceAudioScene.createSource();
chordSource.connect(source.input);
AFRAME.registerComponent('listener', {
init () {
this.cameraMatrix4 = new AFRAME.THREE.Matrix4()
},
tick: function () {
this.cameraMatrix4 = this.el.object3D.matrixWorld;
resonanceAudioScene.setListenerFromMatrix(this.cameraMatrix4);
}
});
AFRAME.registerComponent('chord', {
tick: function () {
source.setPosition(this.el.object3D.getWorldPosition().x, this.el.object3D.getWorldPosition().y, this.el.object3D.getWorldPosition().z);
}
});
chord.play();
chord.crossOrigin = 'anonymous';
AFRAME.registerComponent('curtains', {
init: function () {
this.el.addEventListener('click', function (evt) {
resonanceAudioScene.setRoomProperties(roomDimensions, curtain);
});
}
});
AFRAME.registerComponent('marble', {
init: function () {
this.el.addEventListener('click', function (evt) {
resonanceAudioScene.setRoomProperties(roomDimensions, marble);
});
}
});
AFRAME.registerComponent('outdoors', {
init: function () {
this.el.addEventListener('click', function (evt) {
resonanceAudioScene.setRoomProperties(roomDimensions, outdoors);
});
}
});