improve export: add stereo + measure performance + add bigger pattern for testing
This commit is contained in:
parent
3caf08e199
commit
14193abe03
1 changed files with 82 additions and 21 deletions
|
|
@ -16,23 +16,72 @@ await evalScope(
|
||||||
miniAllStrings(); // allows using single quotes for mini notation / skip transpilation
|
miniAllStrings(); // allows using single quotes for mini notation / skip transpilation
|
||||||
|
|
||||||
let sampleRate = 48000,
|
let sampleRate = 48000,
|
||||||
cps = 0.5;
|
cps = 0.4;
|
||||||
|
|
||||||
let pat = note('[c e g b]*3')
|
/* await doughsamples('github:eddyflux/crate');
|
||||||
.add(note(7))
|
await doughsamples('github:eddyflux/wax'); */
|
||||||
.lpf(sine.rangex(200, 4000).slow(2))
|
|
||||||
.lpq(0.3)
|
let pat = note('c,eb,g,<bb c4 d4 eb4>')
|
||||||
.s('<pulse saw tri>*2')
|
.s('sine')
|
||||||
.att(0.01)
|
.press()
|
||||||
.rel(0.2)
|
.add(note(24))
|
||||||
.clip(2)
|
.fmi(3)
|
||||||
.delay(0.5)
|
.fmh(5.01)
|
||||||
.jux(rev)
|
.dec(0.4)
|
||||||
.sometimes(add(note(12)))
|
.delay('.6:<.12 .22>:.8')
|
||||||
.gain(0.25)
|
.jux(press)
|
||||||
|
.rarely(add(note('12')))
|
||||||
|
.lpf(400)
|
||||||
|
.lpq(0.2)
|
||||||
|
.lpd(0.4)
|
||||||
|
.lpenv(3)
|
||||||
|
.fmdecay(0.4)
|
||||||
|
.fmenv(1)
|
||||||
|
.postgain(0.6)
|
||||||
|
.stack(s('<pink white>*8').dec(0.07).rarely(ply('2')).delay(0.5).hpf(sine.range(200, 2000).slow(4)).hpq(0.2))
|
||||||
|
.stack(
|
||||||
|
s('[- white@3]*2')
|
||||||
|
.dec(0.4)
|
||||||
|
.hpf('<2000!3 <4000 8000>>*4')
|
||||||
|
.hpq(0.6)
|
||||||
|
.ply('<1 2>*4')
|
||||||
|
.postgain(0.5)
|
||||||
|
.delay(0.5)
|
||||||
|
.jux(rev)
|
||||||
|
.lpf(5000),
|
||||||
|
)
|
||||||
|
.stack(
|
||||||
|
note('<c2 - [- f1] ->*2')
|
||||||
|
.s('square')
|
||||||
|
.lpf(sine.range(100, 300).slow(4))
|
||||||
|
.lpe(1)
|
||||||
|
.segment(8)
|
||||||
|
.lpd(0.3)
|
||||||
|
.lpq(0.2)
|
||||||
|
.dec(0.2)
|
||||||
|
.speed('<1 2>')
|
||||||
|
.ply('<1 2>')
|
||||||
|
.postgain(1),
|
||||||
|
)
|
||||||
|
.stack(
|
||||||
|
chord('<Cm Cm7 Cm9 Cm11 Fm Fm7 Fm9 Fm11>')
|
||||||
|
.voicing()
|
||||||
|
.s('<sine>')
|
||||||
|
.clip(1)
|
||||||
|
.rel(0.4)
|
||||||
|
.vib('4:.2')
|
||||||
|
.gain(0.7)
|
||||||
|
.hpf(1200)
|
||||||
|
.fm(0.5)
|
||||||
|
.att(1)
|
||||||
|
.lpa(0.5)
|
||||||
|
.lpf(200)
|
||||||
|
.lpenv(4)
|
||||||
|
.chorus(0.8),
|
||||||
|
)
|
||||||
.slow(1 / cps);
|
.slow(1 / cps);
|
||||||
|
|
||||||
let cycles = 4;
|
let cycles = 30;
|
||||||
let seconds = cycles + 1; // 1s release tail
|
let seconds = cycles + 1; // 1s release tail
|
||||||
const haps = pat.queryArc(0, cycles);
|
const haps = pat.queryArc(0, cycles);
|
||||||
|
|
||||||
|
|
@ -41,20 +90,32 @@ const dough = new Dough(sampleRate);
|
||||||
console.log('spawn voices...');
|
console.log('spawn voices...');
|
||||||
haps.forEach((hap) => {
|
haps.forEach((hap) => {
|
||||||
hap.value._begin = Number(hap.whole.begin);
|
hap.value._begin = Number(hap.whole.begin);
|
||||||
hap.value._duration = hap.duration / cps;
|
hap.value._duration = hap.duration/* / cps */;
|
||||||
dough.scheduleSpawn(hap.value);
|
dough.scheduleSpawn(hap.value);
|
||||||
});
|
});
|
||||||
console.log(`render ${seconds}s long buffer...`);
|
console.log(`render ${seconds}s long buffer, each dot is 1 second:`);
|
||||||
const buffer = new Float32Array(seconds * sampleRate);
|
const buffers = [new Float32Array(seconds * sampleRate), new Float32Array(seconds * sampleRate)];
|
||||||
while (dough.t <= buffer.length) {
|
let t = performance.now();
|
||||||
|
while (dough.t <= buffers[0].length) {
|
||||||
dough.update();
|
dough.update();
|
||||||
buffer[dough.t] = dough.out[0];
|
buffers[0][dough.t] = dough.out[0];
|
||||||
|
buffers[1][dough.t] = dough.out[1];
|
||||||
|
if (dough.t % sampleRate === 0) {
|
||||||
|
process.stdout.write('.');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
console.log('done!');
|
const took = (performance.now() - t) / 1000;
|
||||||
|
const load = (took / seconds) * 100;
|
||||||
|
const speed = (seconds / took).toFixed(2);
|
||||||
|
console.log('');
|
||||||
|
console.log(`done!
|
||||||
|
rendered ${seconds}s in ${took.toFixed(2)}s
|
||||||
|
speed: ${speed}x
|
||||||
|
load: ${load.toFixed(2)}%`);
|
||||||
|
|
||||||
const patternAudio = {
|
const patternAudio = {
|
||||||
sampleRate,
|
sampleRate,
|
||||||
channelData: [buffer],
|
channelData: buffers,
|
||||||
};
|
};
|
||||||
|
|
||||||
WavEncoder.encode(patternAudio).then((buffer) => {
|
WavEncoder.encode(patternAudio).then((buffer) => {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue