codeformat

This commit is contained in:
Felix Roos 2023-10-01 23:20:05 +02:00
parent 1909caf769
commit 6ca99e33ab
4 changed files with 24 additions and 45 deletions

View file

@ -1197,7 +1197,7 @@ const generic_params = [
]; ];
// TODO: slice / splice https://www.youtube.com/watch?v=hKhPdO0RKDQ&list=PL2lW1zNIIwj3bDkh-Y3LUGDuRcoUigoDs&index=13 // TODO: slice / splice https://www.youtube.com/watch?v=hKhPdO0RKDQ&list=PL2lW1zNIIwj3bDkh-Y3LUGDuRcoUigoDs&index=13
controls.createParam = function(names) { controls.createParam = function (names) {
const name = Array.isArray(names) ? names[0] : names; const name = Array.isArray(names) ? names[0] : names;
var withVal; var withVal;
@ -1221,7 +1221,7 @@ controls.createParam = function(names) {
const func = (...pats) => sequence(...pats).withValue(withVal); const func = (...pats) => sequence(...pats).withValue(withVal);
const setter = function(...pats) { const setter = function (...pats) {
if (!pats.length) { if (!pats.length) {
return this.fmap(withVal); return this.fmap(withVal);
} }

View file

@ -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;

View file

@ -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.
@ -24,7 +21,7 @@ var reverbGen = {};
the impulse response has been generated. The impulse response the impulse response has been generated. The impulse response
is passed to this function as its parameter. May be called is passed to this function as its parameter. May be called
immediately within the current execution context, or later. */ immediately within the current execution context, or later. */
reverbGen.generateReverb = function(params, callback) { reverbGen.generateReverb = function (params, callback) {
var audioContext = params.audioContext || new AudioContext(); var audioContext = params.audioContext || new AudioContext();
var sampleRate = params.sampleRate || 44100; var sampleRate = params.sampleRate || 44100;
var numChannels = params.numChannels || 2; var numChannels = params.numChannels || 2;
@ -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;
} }
} }
@ -57,7 +54,7 @@ reverbGen.generateReverb = function(params, callback) {
@param {number} min Minimum value of data for the graph (lower edge). @param {number} min Minimum value of data for the graph (lower edge).
@param {number} max Maximum value of data in the graph (upper edge). @param {number} max Maximum value of data in the graph (upper edge).
@return {!CanvasElement} The generated canvas element. */ @return {!CanvasElement} The generated canvas element. */
reverbGen.generateGraph = function(data, width, height, min, max) { reverbGen.generateGraph = function (data, width, height, min, max) {
var canvas = document.createElement('canvas'); var canvas = document.createElement('canvas');
canvas.width = width; canvas.width = width;
canvas.height = height; canvas.height = height;
@ -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
@ -85,7 +82,7 @@ reverbGen.generateGraph = function(data, width, height, min, max) {
is truncated at that point. This is expressed as an integer, is truncated at that point. This is expressed as an integer,
applying to the post-normalized and integer-converted applying to the post-normalized and integer-converted
buffer. The default is 0, meaning don't truncate. */ buffer. The default is 0, meaning don't truncate. */
reverbGen.saveWavFile = function(buffer, name, opt_minTail) { reverbGen.saveWavFile = function (buffer, name, opt_minTail) {
var bitsPerSample = 16; var bitsPerSample = 16;
var bytesPerSample = 2; var bytesPerSample = 2;
var sampleRate = buffer.sampleRate; var sampleRate = buffer.sampleRate;
@ -124,23 +121,22 @@ 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
var bytesPerSampleFrame = numChannels * bytesPerSample; var bytesPerSampleFrame = numChannels * bytesPerSample;
dataView.setUint32(28, sampleRate * bytesPerSampleFrame, true); // ByteRate dataView.setUint32(28, sampleRate * bytesPerSampleFrame, true); // ByteRate
dataView.setUint16(32, bytesPerSampleFrame, true); // BlockAlign dataView.setUint16(32, bytesPerSampleFrame, true); // BlockAlign
dataView.setUint16(34, bitsPerSample, true); // BitsPerSample dataView.setUint16(34, bitsPerSample, true); // BitsPerSample
dataView.setUint32(36, 1635017060, true); // "data" dataView.setUint32(36, 1635017060, true); // "data"
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;
@ -159,7 +155,7 @@ reverbGen.saveWavFile = function(buffer, name, opt_minTail) {
@param {number} lpFreqEndAt @param {number} lpFreqEndAt
@param {!function(!AudioBuffer)} callback May be called @param {!function(!AudioBuffer)} callback May be called
immediately within the current execution context, or later.*/ immediately within the current execution context, or later.*/
var applyGradualLowpass = function(input, lpFreqStart, lpFreqEnd, lpFreqEndAt, callback) { var applyGradualLowpass = function (input, lpFreqStart, lpFreqEnd, lpFreqEndAt, callback) {
if (lpFreqStart == 0) { if (lpFreqStart == 0) {
callback(input); callback(input);
return; return;
@ -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);
@ -181,7 +177,7 @@ var applyGradualLowpass = function(input, lpFreqStart, lpFreqEnd, lpFreqEndAt, c
player.connect(filter); player.connect(filter);
filter.connect(context.destination); filter.connect(context.destination);
player.start(); player.start();
context.oncomplete = function(event) { context.oncomplete = function (event) {
callback(event.renderedBuffer); callback(event.renderedBuffer);
}; };
context.startRendering(); context.startRendering();
@ -192,7 +188,7 @@ var applyGradualLowpass = function(input, lpFreqStart, lpFreqEnd, lpFreqEndAt, c
/** @private /** @private
@param {!AudioBuffer} buffer @param {!AudioBuffer} buffer
@return {!Array.<!Float32Array>} An array containing the Float32Array of each channel's samples. */ @return {!Array.<!Float32Array>} An array containing the Float32Array of each channel's samples. */
var getAllChannelData = function(buffer) { var getAllChannelData = function (buffer) {
var channels = []; var channels = [];
for (var i = 0; i < buffer.numberOfChannels; i++) { for (var i = 0; i < buffer.numberOfChannels; i++) {
channels[i] = buffer.getChannelData(i); channels[i] = buffer.getChannelData(i);
@ -202,7 +198,7 @@ var getAllChannelData = function(buffer) {
/** @private /** @private
@return {number} A random number from -1 to 1. */ @return {number} A random number from -1 to 1. */
var randomSample = function() { var randomSample = function () {
return Math.random() * 2 - 1; return Math.random() * 2 - 1;
}; };

View file

@ -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];