mirror of
https://codeberg.org/uzu/strudel
synced 2026-07-24 05:57:17 -04:00
194 lines
4.8 KiB
JavaScript
194 lines
4.8 KiB
JavaScript
import { Pattern, silence, toMidi } from '@strudel.cycles/core';
|
|
import { samples } from '@strudel.cycles/webaudio';
|
|
|
|
export function prebake() {
|
|
samples(
|
|
{
|
|
piano: {
|
|
A0: 'A0v8.mp3',
|
|
C1: 'C1v8.mp3',
|
|
Ds1: 'Ds1v8.mp3',
|
|
Fs1: 'Fs1v8.mp3',
|
|
A1: 'A1v8.mp3',
|
|
C2: 'C2v8.mp3',
|
|
Ds2: 'Ds2v8.mp3',
|
|
Fs2: 'Fs2v8.mp3',
|
|
A2: 'A2v8.mp3',
|
|
C3: 'C3v8.mp3',
|
|
Ds3: 'Ds3v8.mp3',
|
|
Fs3: 'Fs3v8.mp3',
|
|
A3: 'A3v8.mp3',
|
|
C4: 'C4v8.mp3',
|
|
Ds4: 'Ds4v8.mp3',
|
|
Fs4: 'Fs4v8.mp3',
|
|
A4: 'A4v8.mp3',
|
|
C5: 'C5v8.mp3',
|
|
Ds4: 'Ds4v8.mp3',
|
|
Fs5: 'Fs5v8.mp3',
|
|
A5: 'A5v8.mp3',
|
|
C6: 'C6v8.mp3',
|
|
Ds6: 'Ds6v8.mp3',
|
|
Fs6: 'Fs6v8.mp3',
|
|
A6: 'A6v8.mp3',
|
|
C7: 'C7v8.mp3',
|
|
Ds7: 'Ds7v8.mp3',
|
|
Fs7: 'Fs7v8.mp3',
|
|
A7: 'A7v8.mp3',
|
|
C8: 'C8v8.mp3',
|
|
},
|
|
},
|
|
// https://archive.org/details/SalamanderGrandPianoV3
|
|
// License: CC-by http://creativecommons.org/licenses/by/3.0/ Author: Alexander Holm
|
|
'./samples/piano/',
|
|
);
|
|
}
|
|
|
|
samples({
|
|
jazzbass: {
|
|
_base: './samples/jazzbass/moog_',
|
|
c1: 'c2.mp3',
|
|
e1: 'e2.mp3',
|
|
a1: 'a2.mp3',
|
|
c2: 'c3.mp3',
|
|
e2: 'e3.mp3',
|
|
a2: 'a3.mp3',
|
|
c3: 'c4.mp3',
|
|
},
|
|
stage73: {
|
|
_base: './samples/stage73/',
|
|
c2: ['quiet/c2.mp3', 'loud/c2.mp3'],
|
|
e2: ['quiet/e2.mp3', 'loud/e2.mp3'],
|
|
a2: ['quiet/a2.mp3', 'loud/a2.mp3'],
|
|
c3: ['quiet/c3.mp3', 'loud/c3.mp3'],
|
|
e3: ['quiet/e3.mp3', 'loud/e3.mp3'],
|
|
a3: ['quiet/a3.mp3', 'loud/a3.mp3'],
|
|
c4: ['quiet/c4.mp3', 'loud/c4.mp3'],
|
|
e4: ['quiet/e4.mp3', 'loud/e4.mp3'],
|
|
a4: ['quiet/a4.mp3', 'loud/a4.mp3'],
|
|
c5: ['quiet/c5.mp3', 'loud/c5.mp3'],
|
|
e5: ['quiet/e5.mp3', 'loud/e5.mp3'],
|
|
a5: ['quiet/a5.mp3', 'loud/a5.mp3'],
|
|
c6: ['quiet/c6.mp3', 'loud/c6.mp3'],
|
|
},
|
|
flute: {
|
|
_base: './samples/flute/',
|
|
g2: 'g2.mp3',
|
|
c3: 'c3.mp3',
|
|
f3: 'f3.mp3',
|
|
c4: 'c4.mp3',
|
|
f4: 'f4.mp3',
|
|
c5: 'c5.mp3',
|
|
},
|
|
});
|
|
console.log('bake...');
|
|
samples(
|
|
{
|
|
bd: 'bd.mp3',
|
|
sd: ['sd.mp3', 'sd2.mp3'],
|
|
hh: ['hh.mp3'],
|
|
snap: ['snap.mp3'],
|
|
oh: ['oh.mp3'],
|
|
},
|
|
'./samples/president/president_',
|
|
);
|
|
|
|
const times = (length, func) => Array.from({ length }, (_, i) => func(i));
|
|
|
|
samples({ earth: times((i) => `Earth Kit (${i + 1}).wav`) }, './samples/EMU World/Earth Kit/');
|
|
samples({ bottle: times((i) => `Bottle (${i + 1}).wav`) }, './samples/EMU World/Bottle/');
|
|
samples({ shekere: times(32, (i) => `Shekere (${i + 1}).wav`) }, './samples/EMU World/Shekere/');
|
|
samples({ block: times(5, (i) => `Block (${i + 1}).wav`) }, './samples/EMU World/Block/');
|
|
|
|
samples(
|
|
{
|
|
'Brazilian Kit': [
|
|
'BK Agogo 2.wav',
|
|
'BK Agogo 3.wav',
|
|
'BK Agogo.wav',
|
|
'BK Bass Drum.wav',
|
|
'BK Bass Tom.wav',
|
|
'BK Block 2.wav',
|
|
'BK Block 3.wav',
|
|
'BK Block.wav',
|
|
'BK ClapTamb 2.wav',
|
|
'BK ClapTamb.wav',
|
|
'BK Conga 2.wav',
|
|
'BK Conga.wav',
|
|
'BK Cowbell 2.wav',
|
|
'BK Cowbell 3.wav',
|
|
'BK Cowbell.wav',
|
|
'BK CrashTamb.wav',
|
|
'BK Cup 2.wav',
|
|
'BK Cup.wav',
|
|
'BK Cymb 2.wav',
|
|
'BK Cymb 3.wav',
|
|
'BK Cymbal.wav',
|
|
'BK High Tom 2.wav',
|
|
'BK High Tom.wav',
|
|
'BK Low Tom 2.wav',
|
|
'BK Low Tom.wav',
|
|
'BK Mid Tom 2.wav',
|
|
'BK Mid Tom.wav',
|
|
'BK Mute Cymb.wav',
|
|
'BK Rattle.wav',
|
|
'BK Ride 2.wav',
|
|
'BK Ride.wav',
|
|
'BK Rimshot.wav',
|
|
'BK Scraper 2.wav',
|
|
'BK Scraper.wav',
|
|
'BK Shaker 2.wav',
|
|
'BK Shaker 3.wav',
|
|
'BK Shaker.wav',
|
|
'BK Snare.wav',
|
|
'BK SnareTamb 2.wav',
|
|
'BK SnareTamb.wav',
|
|
'BK Triangle 2.wav',
|
|
'BK Triangle 3.wav',
|
|
'BK Triangle 4.wav',
|
|
'BK Triangle 5.wav',
|
|
'BK Triangle 6.wav',
|
|
'BK Triangle.wav',
|
|
'BK Whistle 2.wav',
|
|
'BK Whistle 3.wav',
|
|
'BK Whistle.wav',
|
|
'BK Woop 2.wav',
|
|
'BK Woop.wav',
|
|
],
|
|
},
|
|
'./samples/EMU World/Brazilian Kit/',
|
|
);
|
|
|
|
const maxPan = toMidi('C8');
|
|
const panwidth = (pan, width) => pan * width + (1 - width) / 2;
|
|
|
|
Pattern.prototype.panByPitch = function () {
|
|
return this.fmap((value) => {
|
|
try {
|
|
// pan by pitch
|
|
const pan = panwidth(Math.min(toMidi(value.note || value.n) / maxPan, 1), 0.5);
|
|
return { ...value, pan: (value.pan || 1) * pan };
|
|
} catch (e) {
|
|
console.log('.panByPitch error', e);
|
|
return silence;
|
|
}
|
|
});
|
|
};
|
|
|
|
Pattern.prototype.piano = function () {
|
|
return this.clip(1).s('piano').panByPitch().gain(0.6);
|
|
};
|
|
|
|
Pattern.prototype.rhodes = function () {
|
|
return this.clip(1).s('stage73').panByPitch(); //.gain(1.5);
|
|
};
|
|
|
|
Pattern.prototype.jazzbass = function () {
|
|
return this.clip(1).s('jazzbass').gain(0.6);
|
|
};
|
|
Pattern.prototype.flute = function () {
|
|
return this.clip(1).s('flute');
|
|
};
|
|
Pattern.prototype.block = function () {
|
|
return this.clip(1).s('block');
|
|
};
|