UNPKG

apphouse

Version:

Component library for React that uses observable state management and theme-able components.

322 lines (270 loc) 9.34 kB
// export const doWorkerTask = async ( // workerFunction, // input, // buffers, // ) => { // // Create worker // let fnString = // "(" + // workerFunction.toString().replace('"use strict";', "") + // ")();"; // let workerBlob = new Blob([fnString]); // let workerBlobURL = window.URL.createObjectURL(workerBlob); // let worker = new Worker(workerBlobURL); // // Run worker // return await new Promise(function (resolve, reject) { // worker.onmessage = function (e) { // resolve(e.data); // }; // worker.postMessage(input, buffers); // }); // }; // export const giantRobotTransform = async (audioBuffer) => { // let ctx = new OfflineAudioContext( // audioBuffer.numberOfChannels, // audioBuffer.length, // audioBuffer.sampleRate, // ); // let source = ctx.createBufferSource(); // source.buffer = audioBuffer; // let dee = new Jungle(ctx); // dee.setPitchOffset(-0.1); // let deep = new Jungle(ctx); // deep.setPitchOffset(-0.2); // let deeper = new Jungle(ctx); // deeper.setPitchOffset(-0.4); // let deeperer = new Jungle(ctx); // deeperer.setPitchOffset(-0.8); // let compressor = ctx.createDynamicsCompressor(); // source.connect(dee.input); // source.connect(deep.input); // source.connect(deeper.input); // source.connect(deeperer.input); // dee.output.connect(compressor); // deep.output.connect(compressor); // deeper.output.connect(compressor); // deeperer.output.connect(compressor); // compressor.connect(ctx.destination); // source.start(0); // return await ctx.startRendering(); // }; // export const megaphoneTransform = async (audioBuffer) => { // let ctx = new OfflineAudioContext( // audioBuffer.numberOfChannels, // audioBuffer.length, // audioBuffer.sampleRate, // ); // let source = ctx.createBufferSource(); // source.buffer = audioBuffer; // // Wave shaper // let waveShaper = ctx.createWaveShaper(); // waveShaper.curve = makeDistortionCurve(30); // function makeDistortionCurve(amount) { // var k = typeof amount === "number" ? amount : 50; // var n_samples = 44100; // var curve = new Float32Array(n_samples); // var deg = Math.PI / 180; // var x; // for (let i = 0; i < n_samples; ++i) { // x = (i * 2) / n_samples - 1; // curve[i] = // ((3 + k) * x * 20 * deg) / (Math.PI + k * Math.abs(x)); // } // return curve; // } // let lpf1 = ctx.createBiquadFilter(); // lpf1.type = "lowpass"; // lpf1.frequency.value = 2000.0; // let lpf2 = ctx.createBiquadFilter(); // lpf2.type = "lowpass"; // lpf2.frequency.value = 2000.0; // let hpf1 = ctx.createBiquadFilter(); // hpf1.type = "highpass"; // hpf1.frequency.value = 500.0; // let hpf2 = ctx.createBiquadFilter(); // hpf2.type = "highpass"; // hpf2.frequency.value = 500.0; // let compressor = ctx.createDynamicsCompressor(); // lpf1.connect(lpf2); // lpf2.connect(hpf1); // hpf1.connect(hpf2); // hpf2.connect(waveShaper); // waveShaper.connect(compressor); // compressor.connect(ctx.destination); // source.connect(lpf1); // source.start(0); // return await ctx.startRendering(); // }; // export const reverseReverbTransform = async (audioBuffer) => { // let ctx = new OfflineAudioContext( // audioBuffer.numberOfChannels, // audioBuffer.length, // audioBuffer.sampleRate, // ); // let reversedAudioBuffer = createReversedAudioBuffer(audioBuffer); // let source = ctx.createBufferSource(); // source.buffer = reversedAudioBuffer; // let convolver = ctx.createConvolver(); // convolver.buffer = await ctx.decodeAudioData( // await ( // await fetch( // "/audio/impulse-responses/voxengo/Parking Garage.wav", // ) // ).arrayBuffer(), // ); // // convolver.buffer = await ctx.decodeAudioData(await (await fetch("../audio/impulse-responses/church.wav")).arrayBuffer()); // let outCompressor = ctx.createDynamicsCompressor(); // source.connect(convolver); // convolver.connect(outCompressor); // //dry // let dryGain = ctx.createGain(); // dryGain.gain.value = 0.5; // source.connect(dryGain); // dryGain.connect(outCompressor); // outCompressor.connect(ctx.destination); // source.start(0); // return createReversedAudioBuffer(await ctx.startRendering()); // function createReversedAudioBuffer(audioBuffer) { // let ctx = new AudioContext(); // // copy audiobuffer // let reversedAudioBuffer = ctx.createBuffer( // audioBuffer.numberOfChannels, // audioBuffer.length, // audioBuffer.sampleRate, // ); // for (let i = 0; i < audioBuffer.numberOfChannels; i++) { // reversedAudioBuffer.copyToChannel( // audioBuffer.getChannelData(i), // i, // ); // } // // reverse new audiobuffer // for (let i = 0; i < reversedAudioBuffer.numberOfChannels; i++) { // reversedAudioBuffer.getChannelData(i).reverse(); // } // return reversedAudioBuffer; // } // }; // export const telephoneTransform = async (audioBuffer) => { // let ctx = new OfflineAudioContext( // audioBuffer.numberOfChannels, // audioBuffer.length, // audioBuffer.sampleRate, // ); // let source = ctx.createBufferSource(); // source.buffer = audioBuffer; // let lpf1 = ctx.createBiquadFilter(); // lpf1.type = "lowpass"; // lpf1.frequency.value = 2000.0; // let lpf2 = ctx.createBiquadFilter(); // lpf2.type = "lowpass"; // lpf2.frequency.value = 2000.0; // let hpf1 = ctx.createBiquadFilter(); // hpf1.type = "highpass"; // hpf1.frequency.value = 500.0; // let hpf2 = ctx.createBiquadFilter(); // hpf2.type = "highpass"; // hpf2.frequency.value = 500.0; // let compressor = ctx.createDynamicsCompressor(); // lpf1.connect(lpf2); // lpf2.connect(hpf1); // hpf1.connect(hpf2); // hpf2.connect(compressor); // compressor.connect(ctx.destination); // source.connect(lpf1); // source.start(0); // return await ctx.startRendering(); // }; // export const slowWobbleTransform = async (audioBuffer) => { // let ctx = new OfflineAudioContext( // audioBuffer.numberOfChannels, // audioBuffer.length, // audioBuffer.sampleRate, // ); // let source = ctx.createBufferSource(); // source.buffer = audioBuffer; // let oscillator = ctx.createOscillator(); // oscillator.frequency.value = 1; // oscillator.type = "sine"; // let oscillatorGain = ctx.createGain(); // oscillatorGain.gain.value = 0.05; // let delay = ctx.createDelay(); // delay.delayTime.value = 0.05; // // source --> delay --> ctx.destination // // oscillator --> oscillatorGain --> delay.delayTime --> ctx.destination // source.connect(delay); // delay.connect(ctx.destination); // oscillator.connect(oscillatorGain); // oscillatorGain.connect(delay.delayTime); // oscillator.start(); // source.start(); // let outputAudioBuffer = await ctx.startRendering(); // return outputAudioBuffer; // }; // export const reverseTime = async (audioBuffer: AudioBuffer) => { // let ctx = new AudioContext(); // // copy audiobuffer // let outputAudioBuffer = ctx.createBuffer( // audioBuffer.numberOfChannels, // audioBuffer.length, // audioBuffer.sampleRate, // ); // for (let i = 0; i < audioBuffer.numberOfChannels; i++) { // outputAudioBuffer.copyToChannel(audioBuffer.getChannelData(i), i); // } // // reverse new audiobuffer // for (let i = 0; i < outputAudioBuffer.numberOfChannels; i++) { // outputAudioBuffer.getChannelData(i).reverse(); // } // return outputAudioBuffer; // }; // export const speedTransform = async ( // audioBuffer: AudioBuffer, // speed: number, // ) => { // let channels: any = []; // for (let i = 0; i < audioBuffer.numberOfChannels; i++) { // channels[i] = new Float32Array(audioBuffer.getChannelData(i)); // } // // Run worker // let outputChannels = await doWorkerTask( // () => { // self.onmessage = function (e) { // let inputChannels = e.data.channels; // let speed = e.data.speed; // let outputChannels = []; // for (let i = 0; i < inputChannels.length; i++) { // outputChannels[i] = new Float32Array( // Math.floor(inputChannels[i].length / speed), // ); // for (let j = 0; j < outputChannels[i].length; j++) { // outputChannels[i][j] = // inputChannels[i][Math.floor(j * speed)]; // } // } // // self.postMessage(outputChannels, [ // // ...outputChannels.map((c) => c.buffer), // // ...inputChannels.map((c) => c.buffer), // // ]); // self.close(); // }; // }, // { channels, speed }, // channels.map((c) => c.buffer), // ); // let ctx = new OfflineAudioContext( // audioBuffer.numberOfChannels, // outputChannels[0].length, // audioBuffer.sampleRate, // ); // let outputAudioBuffer = ctx.createBuffer( // outputChannels.length, // outputChannels[0].length, // audioBuffer.sampleRate, // ); // for (let i = 0; i < outputChannels.length; i++) { // outputAudioBuffer.copyToChannel(outputChannels[i], i); // } // return outputAudioBuffer; // }; export const filters = {};