codeformat
This commit is contained in:
parent
1909caf769
commit
6ca99e33ab
4 changed files with 24 additions and 45 deletions
|
|
@ -2,13 +2,7 @@ import reverbGen from './reverbGen.mjs';
|
||||||
|
|
||||||
if (typeof AudioContext !== 'undefined') {
|
if (typeof AudioContext !== 'undefined') {
|
||||||
AudioContext.prototype.generateReverb = reverbGen.generateReverb;
|
AudioContext.prototype.generateReverb = reverbGen.generateReverb;
|
||||||
AudioContext.prototype.createReverb = function(
|
AudioContext.prototype.createReverb = function (audioContext, duration, fade, revlp, revdim) {
|
||||||
audioContext,
|
|
||||||
duration,
|
|
||||||
fade,
|
|
||||||
revlp,
|
|
||||||
revdim
|
|
||||||
) {
|
|
||||||
const convolver = this.createConvolver();
|
const convolver = this.createConvolver();
|
||||||
convolver.setDuration = (d, fade, revlp, revdim) => {
|
convolver.setDuration = (d, fade, revlp, revdim) => {
|
||||||
this.generateReverb(
|
this.generateReverb(
|
||||||
|
|
@ -23,7 +17,7 @@ if (typeof AudioContext !== 'undefined') {
|
||||||
},
|
},
|
||||||
(buffer) => {
|
(buffer) => {
|
||||||
convolver.buffer = buffer;
|
convolver.buffer = buffer;
|
||||||
}
|
},
|
||||||
);
|
);
|
||||||
convolver.duration = d;
|
convolver.duration = d;
|
||||||
convolver.fade = fade;
|
convolver.fade = fade;
|
||||||
|
|
|
||||||
|
|
@ -12,9 +12,6 @@
|
||||||
// See the License for the specific language governing permissions and
|
// See the License for the specific language governing permissions and
|
||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
|
|
||||||
"use strict";
|
|
||||||
|
|
||||||
|
|
||||||
var reverbGen = {};
|
var reverbGen = {};
|
||||||
|
|
||||||
/** Generates a reverb impulse response.
|
/** Generates a reverb impulse response.
|
||||||
|
|
@ -42,7 +39,7 @@ reverbGen.generateReverb = function(params, callback) {
|
||||||
chan[j] = randomSample() * Math.pow(decayBase, j);
|
chan[j] = randomSample() * Math.pow(decayBase, j);
|
||||||
}
|
}
|
||||||
for (var j = 0; j < fadeInSampleFrames; j++) {
|
for (var j = 0; j < fadeInSampleFrames; j++) {
|
||||||
chan[j] *= (j / fadeInSampleFrames);
|
chan[j] *= j / fadeInSampleFrames;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -71,7 +68,7 @@ reverbGen.generateGraph = function(data, width, height, min, max) {
|
||||||
gc.fillRect(i * xscale, height - (data[i] - min) * yscale, 1, 1);
|
gc.fillRect(i * xscale, height - (data[i] - min) * yscale, 1, 1);
|
||||||
}
|
}
|
||||||
return canvas;
|
return canvas;
|
||||||
}
|
};
|
||||||
|
|
||||||
/** Saves an AudioBuffer as a 16-bit WAV file on the client's host
|
/** Saves an AudioBuffer as a 16-bit WAV file on the client's host
|
||||||
file system. Normalizes it to peak at +-32767, and optionally
|
file system. Normalizes it to peak at +-32767, and optionally
|
||||||
|
|
@ -124,7 +121,7 @@ reverbGen.saveWavFile = function(buffer, name, opt_minTail) {
|
||||||
dataView.setUint32(4, fileBytes - 8, true); // file length
|
dataView.setUint32(4, fileBytes - 8, true); // file length
|
||||||
dataView.setUint32(8, 1163280727, true); // "WAVE"
|
dataView.setUint32(8, 1163280727, true); // "WAVE"
|
||||||
dataView.setUint32(12, 544501094, true); // "fmt "
|
dataView.setUint32(12, 544501094, true); // "fmt "
|
||||||
dataView.setUint32(16, 16, true) // fmt chunk length
|
dataView.setUint32(16, 16, true); // fmt chunk length
|
||||||
dataView.setUint16(20, 1, true); // PCM format
|
dataView.setUint16(20, 1, true); // PCM format
|
||||||
dataView.setUint16(22, numChannels, true); // NumChannels
|
dataView.setUint16(22, numChannels, true); // NumChannels
|
||||||
dataView.setUint32(24, sampleRate, true); // SampleRate
|
dataView.setUint32(24, sampleRate, true); // SampleRate
|
||||||
|
|
@ -136,11 +133,10 @@ reverbGen.saveWavFile = function(buffer, name, opt_minTail) {
|
||||||
dataView.setUint32(40, sampleDataBytes, true);
|
dataView.setUint32(40, sampleDataBytes, true);
|
||||||
for (var j = 0; j < numSampleFrames; j++) {
|
for (var j = 0; j < numSampleFrames; j++) {
|
||||||
for (var i = 0; i < numChannels; i++) {
|
for (var i = 0; i < numChannels; i++) {
|
||||||
dataView.setInt16(44 + j * bytesPerSampleFrame + i * bytesPerSample,
|
dataView.setInt16(44 + j * bytesPerSampleFrame + i * bytesPerSample, Math.round(scale * channels[i][j]), true);
|
||||||
Math.round(scale * channels[i][j]), true);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
var blob = new Blob([arrayBuffer], { 'type': 'audio/wav' });
|
var blob = new Blob([arrayBuffer], { type: 'audio/wav' });
|
||||||
var url = window.URL.createObjectURL(blob);
|
var url = window.URL.createObjectURL(blob);
|
||||||
var linkEl = document.createElement('a');
|
var linkEl = document.createElement('a');
|
||||||
linkEl.href = url;
|
linkEl.href = url;
|
||||||
|
|
@ -173,7 +169,7 @@ var applyGradualLowpass = function(input, lpFreqStart, lpFreqEnd, lpFreqEndAt, c
|
||||||
lpFreqStart = Math.min(lpFreqStart, input.sampleRate / 2);
|
lpFreqStart = Math.min(lpFreqStart, input.sampleRate / 2);
|
||||||
lpFreqEnd = Math.min(lpFreqEnd, input.sampleRate / 2);
|
lpFreqEnd = Math.min(lpFreqEnd, input.sampleRate / 2);
|
||||||
|
|
||||||
filter.type = "lowpass";
|
filter.type = 'lowpass';
|
||||||
filter.Q.value = 0.0001;
|
filter.Q.value = 0.0001;
|
||||||
filter.frequency.setValueAtTime(lpFreqStart, 0);
|
filter.frequency.setValueAtTime(lpFreqStart, 0);
|
||||||
filter.frequency.linearRampToValueAtTime(lpFreqEnd, lpFreqEndAt);
|
filter.frequency.linearRampToValueAtTime(lpFreqEnd, lpFreqEndAt);
|
||||||
|
|
|
||||||
|
|
@ -109,20 +109,12 @@ function getDelay(orbit, delaytime, delayfeedback, t) {
|
||||||
let reverbs = {};
|
let reverbs = {};
|
||||||
|
|
||||||
function getReverb(orbit, duration = 2, fade, revlp, revdim) {
|
function getReverb(orbit, duration = 2, fade, revlp, revdim) {
|
||||||
|
|
||||||
// If no reverb has been created for a given orbit, create one
|
// If no reverb has been created for a given orbit, create one
|
||||||
if (!reverbs[orbit]) {
|
if (!reverbs[orbit]) {
|
||||||
const ac = getAudioContext();
|
const ac = getAudioContext();
|
||||||
const reverb = ac.createReverb(
|
const reverb = ac.createReverb(getAudioContext(), duration, fade, revlp, revdim);
|
||||||
getAudioContext(),
|
|
||||||
duration,
|
|
||||||
fade,
|
|
||||||
revlp,
|
|
||||||
revdim,
|
|
||||||
);
|
|
||||||
reverb.connect(getDestination());
|
reverb.connect(getDestination());
|
||||||
reverbs[orbit] = reverb;
|
reverbs[orbit] = reverb;
|
||||||
console.log(reverbs[orbit]);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (
|
if (
|
||||||
|
|
@ -131,14 +123,11 @@ function getReverb(orbit, duration = 2, fade, revlp, revdim) {
|
||||||
reverbs[orbit].revlp !== revlp ||
|
reverbs[orbit].revlp !== revlp ||
|
||||||
reverbs[orbit].revdim !== revdim
|
reverbs[orbit].revdim !== revdim
|
||||||
) {
|
) {
|
||||||
reverbs[orbit] = reverbs[orbit].setDuration(
|
reverbs[orbit] = reverbs[orbit].setDuration(duration, fade, revlp, revdim);
|
||||||
duration, fade, revlp, revdim
|
|
||||||
);
|
|
||||||
reverbs[orbit].duration = duration;
|
reverbs[orbit].duration = duration;
|
||||||
reverbs[orbit].fade = fade;
|
reverbs[orbit].fade = fade;
|
||||||
reverbs[orbit].revlp = revlp;
|
reverbs[orbit].revlp = revlp;
|
||||||
reverbs[orbit].revdim = revdim;
|
reverbs[orbit].revdim = revdim;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return reverbs[orbit];
|
return reverbs[orbit];
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue