Skip to content

Commit 7f3ea2e

Browse files
committed
Wired up file selector input to web patch
1 parent 530b0f0 commit 7f3ea2e

2 files changed

Lines changed: 36 additions & 14 deletions

File tree

WebSource/patch.html

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,14 @@
1010
<div class="center">
1111
<h1>OWL Patch</h1>
1212
<h2>Input select</h2>
13-
<div>
13+
<div class="input-select no-input">
1414
<input type="button" onclick="patch.clearInput(); return false;" value="No input"/>
1515
<input type="button" onclick="patch.useMicrophoneInput(); return false;" value="Microphone"/>
16+
<input type="button" onclick="patch.useFileInput(); return false;" value="File"/>
17+
<div class="file-input-controls">
18+
<input type="file" id="file-input-selector" onchange="patch.onFileSelect(this.files)" />
19+
<audio id="file-input-audio" controls></audio>
20+
</div>
1621
</div>
1722
<h2>Diagnostics</h2>
1823
<div>
@@ -44,8 +49,9 @@ <h2>Diagnostics</h2>
4449
document.getElementById("p2").innerHTML = "<h3>"+patch.getParameterName(1)+"</h3>";
4550
document.getElementById("p3").innerHTML = "<h3>"+patch.getParameterName(2)+"</h3>";
4651
document.getElementById("p4").innerHTML = "<h3>"+patch.getParameterName(3)+"</h3>";
47-
<!-- patch.update("Volume", 0.1); -->
48-
<!-- patch.play(); -->
52+
53+
// patch.update("Volume", 0.1);
54+
// patch.play();
4955
var getMessage = function(){
5056
var msg = patch.getMessage();
5157
if(msg)

WebSource/webaudio.js

Lines changed: 27 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,10 @@ if (!owl.context)
1212
}
1313

1414
// Cross-browser compatibility for getUserMedia
15-
navigator.getUserMedia = (navigator.getUserMedia ||
16-
navigator.webkitGetUserMedia ||
17-
navigator.mozGetUserMedia ||
18-
navigator.msGetUserMedia);
15+
navigator.getUserMedia = navigator.getUserMedia ||
16+
navigator.webkitGetUserMedia ||
17+
navigator.mozGetUserMedia ||
18+
navigator.msGetUserMedia;
1919

2020
var WEB_setup = Module.cwrap('WEB_setup', 'number', ['number', 'number']);
2121
var WEB_processBlock = Module.cwrap('WEB_processBlock', 'number', ['number', 'number']);
@@ -28,7 +28,9 @@ var WEB_getStatus = Module.cwrap('WEB_getStatus', 'string', []);
2828
owl.dsp = function () {
2929
var that = {};
3030
that.model = {
31-
inputNode: null
31+
inputNode: null,
32+
fileNode: owl.context.createMediaElementSource(document.getElementById('file-input-audio')),
33+
micNode: null
3234
};
3335
that.vectorsize = 2048;
3436
console.log("setup[fs "+owl.context.sampleRate+"][bs "+that.vectorsize+"]");
@@ -94,12 +96,26 @@ owl.dsp = function () {
9496
}
9597

9698
that.useMicrophoneInput = function () {
97-
navigator.getUserMedia.call(navigator, {audio: true}, function (stream) {
98-
var node = owl.context.createMediaStreamSource(stream);
99-
that.connectInput(node);
100-
}, function (err) {
101-
console.error(err);
102-
});
99+
if (that.model.micNode) {
100+
that.connectInput(that.model.micNode);
101+
} else {
102+
navigator.getUserMedia.call(navigator, {audio: true}, function (stream) {
103+
that.model.micNode = owl.context.createMediaStreamSource(stream);
104+
that.connectInput(that.model.micNode);
105+
}, function (err) {
106+
console.error(err);
107+
});
108+
}
109+
}
110+
111+
that.useFileInput = function () {
112+
that.connectInput(that.model.fileNode);
113+
}
114+
115+
that.onFileSelect = function (files) {
116+
var fileUrl = files[0] ? URL.createObjectURL(files[0]) : '';
117+
var audioElement = document.getElementById('file-input-audio');
118+
audioElement.src = fileUrl;
103119
}
104120

105121
// Bind to Web Audio

0 commit comments

Comments
 (0)