mirror of
https://github.com/vsariola/sointu.git
synced 2025-05-28 03:10:24 -04:00
232 lines
10 KiB
JavaScript
232 lines
10 KiB
JavaScript
import yaml from 'json-to-pretty-yaml';
|
|
import groove from './tests/grooveisinthecode.js';
|
|
import { writeFile } from 'fs/promises';
|
|
|
|
const doc = {
|
|
bpm: groove.BPM,
|
|
rowsperbeat: 4,
|
|
score: {
|
|
length: groove.patterns[0].length,
|
|
rowsperpattern: groove.patternsize,
|
|
tracks: groove.instrumentPatternLists.map(track => {
|
|
|
|
const patterns = track.map(patternIndex => groove.patterns[patternIndex]);
|
|
const order = track.map((patternIndex, ndx) => ndx);
|
|
return {
|
|
numvoices: 1,
|
|
order,
|
|
patterns
|
|
}
|
|
})
|
|
},
|
|
patch: []
|
|
}
|
|
|
|
const addInstrument = (name, strdef) => {
|
|
const units = strdef.split('\n')
|
|
.map(opline => {
|
|
console.log(opline);
|
|
const opcode_params = opline.replace(/\s\s+/,'\t').split(/[\t]/);
|
|
const opcode = opcode_params[0];
|
|
const params = opcode_params[1].split(',');
|
|
const parameters = {};
|
|
params.forEach(param => {
|
|
console.log(param)
|
|
const paramParts = param.split('(');
|
|
const paramName = paramParts[0];
|
|
const paramValue = paramParts[1].substr(0, paramParts[1].length - 1);
|
|
switch(paramName) {
|
|
case 'ATTAC':
|
|
parameters['attack'] = parseInt(paramValue);
|
|
break;
|
|
case 'DECAY':
|
|
parameters['decay'] = parseInt(paramValue);
|
|
break;
|
|
case 'SUSTAIN':
|
|
parameters['sustain'] = parseInt(paramValue);
|
|
break;
|
|
case 'RELEASE':
|
|
parameters['release'] = parseInt(paramValue);
|
|
break;
|
|
case 'GAIN':
|
|
parameters['gain'] = parseInt(paramValue);
|
|
break;
|
|
}
|
|
});
|
|
return {
|
|
"type": {
|
|
"GO4K_ENV": "envelope"
|
|
}[opcode],
|
|
parameters
|
|
}
|
|
});
|
|
doc.patch.push({numvoices: 1, units});
|
|
};
|
|
|
|
const addInstrumentGroup = () => { };
|
|
const setGlobalParamDefs = () => { };
|
|
|
|
addInstrument('lead1', `GO4K_ENV ATTAC(24),DECAY(70),SUSTAIN(32),RELEASE(64),GAIN(60)
|
|
GO4K_VCO TRANSPOSE(76),DETUNE(64),PHASE(0),GATES(85),COLOR(64),SHAPE(64),GAIN(64),FLAGS(NOISE)
|
|
GO4K_DST DRIVE(64), SNHFREQ(0), FLAGS(0)
|
|
GO4K_VCO TRANSPOSE(16),DETUNE(64),PHASE(0),GATES(85),COLOR(64),SHAPE(64),GAIN(128),FLAGS(TRISAW|LFO)
|
|
GO4K_FOP OP(FOP_ADDP)
|
|
GO4K_FST AMOUNT(40),DEST(10*MAX_UNIT_SLOTS+4+FST_SET)
|
|
GO4K_FST AMOUNT(58),DEST(10*MAX_UNIT_SLOTS+5+FST_SET)
|
|
GO4K_FOP OP(FOP_POP)
|
|
GO4K_VCO TRANSPOSE(76),DETUNE(64),PHASE(0),GATES(85),COLOR(64),SHAPE(64),GAIN(128),FLAGS(SINE)
|
|
GO4K_VCO TRANSPOSE(83),DETUNE(64),PHASE(64),GATES(85),COLOR(90),SHAPE(64),GAIN(48),FLAGS(SINE)
|
|
GO4K_VCF FREQUENCY(77),RESONANCE(24),VCFTYPE(BANDPASS)
|
|
GO4K_FOP OP(FOP_ADDP)
|
|
GO4K_FOP OP(FOP_PUSH)
|
|
GO4K_VCF FREQUENCY(32),RESONANCE(128),VCFTYPE(BANDPASS)
|
|
GO4K_FOP OP(FOP_XCH)
|
|
GO4K_VCF FREQUENCY(96),RESONANCE(128),VCFTYPE(BANDPASS)
|
|
GO4K_FOP OP(FOP_ADDP)
|
|
GO4K_FOP OP(FOP_MULP)
|
|
GO4K_DLL PREGAIN(64),DRY(100),FEEDBACK(70),DAMP(64),FREQUENCY(56),DEPTH(48),DELAY(17),COUNT(2)
|
|
GO4K_PAN PANNING(36)
|
|
GO4K_OUT GAIN(65),AUXSEND(80)`);
|
|
addInstrument('bass', `GO4K_ENV ATTAC(32),DECAY(70),SUSTAIN(60),RELEASE(75),GAIN(32)
|
|
GO4K_FST AMOUNT(120),DEST(0*MAX_UNIT_SLOTS+2+FST_SET)
|
|
GO4K_VCO TRANSPOSE(76),DETUNE(64),PHASE(32),GATES(85),COLOR(80),SHAPE(64),GAIN(128),FLAGS(PULSE)
|
|
GO4K_VCO TRANSPOSE(76),DETUNE(72),PHASE(32),GATES(85),COLOR(96),SHAPE(64),GAIN(128),FLAGS(TRISAW)
|
|
GO4K_VCO TRANSPOSE(32),DETUNE(64),PHASE(0),GATES(85),COLOR(64),SHAPE(90),GAIN(128),FLAGS(SINE|LFO)
|
|
GO4K_FST AMOUNT(68),DEST(2*MAX_UNIT_SLOTS+2+FST_SET)
|
|
GO4K_FST AMOUNT(60),DEST(3*MAX_UNIT_SLOTS+2+FST_SET)
|
|
GO4K_FOP OP(FOP_POP)
|
|
GO4K_FOP OP(FOP_ADDP)
|
|
GO4K_FOP OP(FOP_MULP)
|
|
GO4K_VCF FREQUENCY(18),RESONANCE(64),VCFTYPE(PEAK)
|
|
GO4K_VCF FREQUENCY(32),RESONANCE(48),VCFTYPE(LOWPASS)
|
|
GO4K_DST DRIVE(88), SNHFREQ(128), FLAGS(0)
|
|
GO4K_PAN PANNING(80)
|
|
GO4K_DLL PREGAIN(64),DRY(128),FEEDBACK(96),DAMP(64),FREQUENCY(0),DEPTH(0),DELAY(17),COUNT(1) ; ERROR
|
|
GO4K_FOP OP(FOP_XCH)
|
|
GO4K_DLL PREGAIN(64),DRY(128),FEEDBACK(64),DAMP(64),FREQUENCY(0),DEPTH(0),DELAY(18),COUNT(1) ; ERROR
|
|
GO4K_FOP OP(FOP_XCH)
|
|
GO4K_OUT GAIN(18), AUXSEND(10)`);
|
|
|
|
const pad = (panning) => `GO4K_ENV ATTAC(32),DECAY(70),SUSTAIN(80),RELEASE(70),GAIN(80)
|
|
GO4K_VCO TRANSPOSE(16),DETUNE(64),PHASE(0),GATES(85),COLOR(64),SHAPE(64),GAIN(120),FLAGS(TRISAW|LFO)
|
|
GO4K_FST AMOUNT(80),DEST(13*MAX_UNIT_SLOTS+4+FST_SET)
|
|
GO4K_FST AMOUNT(48),DEST(9*MAX_UNIT_SLOTS+4+FST_SET)
|
|
GO4K_FST AMOUNT(58),DEST(9*MAX_UNIT_SLOTS+5+FST_SET)
|
|
GO4K_FOP OP(FOP_POP)
|
|
GO4K_VCO TRANSPOSE(76),DETUNE(64),PHASE(0),GATES(85),COLOR(30),SHAPE(64),GAIN(128),FLAGS(TRISAW)
|
|
GO4K_VCO TRANSPOSE(76),DETUNE(64),PHASE(32),GATES(85),COLOR(90),SHAPE(64),GAIN(64),FLAGS(TRISAW)
|
|
GO4K_VCO TRANSPOSE(64),DETUNE(64),PHASE(64),GATES(85),COLOR(64),SHAPE(64),GAIN(8),FLAGS(NOISE)
|
|
GO4K_VCF FREQUENCY(105),RESONANCE(20),VCFTYPE(BANDPASS)
|
|
GO4K_FOP OP(FOP_ADDP)
|
|
GO4K_FOP OP(FOP_ADDP)
|
|
GO4K_FOP OP(FOP_PUSH)
|
|
GO4K_VCF FREQUENCY(14),RESONANCE(128),VCFTYPE(BANDPASS)
|
|
GO4K_FOP OP(FOP_XCH)
|
|
GO4K_VCF FREQUENCY(70),RESONANCE(128),VCFTYPE(BANDPASS)
|
|
GO4K_FOP OP(FOP_ADDP)
|
|
GO4K_FOP OP(FOP_MULP)
|
|
GO4K_DLL PREGAIN(64),DRY(128),FEEDBACK(64),DAMP(64),FREQUENCY(0),DEPTH(0),DELAY(11),COUNT(1)
|
|
GO4K_PAN PANNING(${panning})
|
|
GO4K_DLL PREGAIN(64),DRY(128),FEEDBACK(64),DAMP(64),FREQUENCY(0),DEPTH(0),DELAY(11),COUNT(1)
|
|
GO4K_OUT GAIN(32), AUXSEND(64)`;
|
|
|
|
addInstrument('pad1', pad(30));
|
|
addInstrument('pad2', pad(60));
|
|
addInstrument('pad3', pad(100));
|
|
addInstrumentGroup('pads', ['pad1', 'pad2', 'pad3']);
|
|
addInstrument('kick', `GO4K_ENV ATTAC(0),DECAY(64),SUSTAIN(96),RELEASE(64),GAIN(90)
|
|
GO4K_FST AMOUNT(128),DEST(0*MAX_UNIT_SLOTS+2+FST_SET)
|
|
GO4K_ENV ATTAC(0),DECAY(70),SUSTAIN(0),RELEASE(0),GAIN(100)
|
|
GO4K_DST DRIVE(32), SNHFREQ(128), FLAGS(0)
|
|
GO4K_FST AMOUNT(80),DEST(6*MAX_UNIT_SLOTS+1+FST_SET)
|
|
GO4K_FOP OP(FOP_POP)
|
|
GO4K_VCO TRANSPOSE(46),DETUNE(64),PHASE(0),GATES(85),COLOR(64),SHAPE(64),GAIN(48),FLAGS(TRISAW)
|
|
GO4K_FOP OP(FOP_MULP)
|
|
GO4K_FOP OP(FOP_LOADNOTE)
|
|
GO4K_FOP OP(FOP_MULP)
|
|
GO4K_PAN PANNING(40)
|
|
GO4K_OUT GAIN(12), AUXSEND(1)`);
|
|
addInstrument('snare', `GO4K_ENV ATTAC(0),DECAY(72),SUSTAIN(0),RELEASE(72),GAIN(25)
|
|
GO4K_FST AMOUNT(128),DEST(0*MAX_UNIT_SLOTS+2+FST_SET)
|
|
GO4K_ENV ATTAC(0),DECAY(56),SUSTAIN(0),RELEASE(0),GAIN(128)
|
|
GO4K_FST AMOUNT(108),DEST(6*MAX_UNIT_SLOTS+1+FST_SET)
|
|
GO4K_FST AMOUNT(72),DEST(7*MAX_UNIT_SLOTS+1+FST_SET)
|
|
GO4K_FOP OP(FOP_POP)
|
|
GO4K_VCO TRANSPOSE(16),DETUNE(64),PHASE(0),GATES(85),COLOR(64),SHAPE(32),GAIN(64),FLAGS(SINE)
|
|
GO4K_VCO TRANSPOSE(32),DETUNE(64),PHASE(0),GATES(85),COLOR(64),SHAPE(80),GAIN(64),FLAGS(SINE)
|
|
GO4K_VCO TRANSPOSE(64),DETUNE(64),PHASE(0),GATES(85),COLOR(64),SHAPE(10),GAIN(64),FLAGS(NOISE)
|
|
GO4K_VCF FREQUENCY(96),RESONANCE(128),VCFTYPE(LOWPASS)
|
|
GO4K_VCO TRANSPOSE(64),DETUNE(64),PHASE(0),GATES(85),COLOR(64),SHAPE(64),GAIN(16),FLAGS(NOISE)
|
|
GO4K_FOP OP(FOP_ADDP)
|
|
GO4K_FOP OP(FOP_ADDP)
|
|
GO4K_FOP OP(FOP_ADDP)
|
|
GO4K_FOP OP(FOP_MULP)
|
|
GO4K_VCF FREQUENCY(22),RESONANCE(32),VCFTYPE(HIGHPASS)
|
|
GO4K_FOP OP(FOP_LOADNOTE)
|
|
GO4K_FOP OP(FOP_MULP)
|
|
GO4K_PAN PANNING(56)
|
|
GO4K_OUT GAIN(4), AUXSEND(2)
|
|
GO4K_FLD AMOUNT(100)
|
|
GO4K_FST AMOUNT(64),DEST(6*MAX_UNIT_SLOTS+1+FST_SET)
|
|
GO4K_FST AMOUNT(64),DEST(7*MAX_UNIT_SLOTS+1+FST_SET)
|
|
GO4K_FOP OP(FOP_POP)`);
|
|
|
|
addInstrumentGroup('drums', ['kick', 'snare']);
|
|
addInstrument('drivelead', `GO4K_ENV ATTAC(32),DECAY(64),SUSTAIN(90),RELEASE(48),GAIN(35)
|
|
GO4K_VCO TRANSPOSE(76),DETUNE(70),PHASE(0),GATES(127),COLOR(10),SHAPE(110),GAIN(128),FLAGS(PULSE)
|
|
GO4K_VCO TRANSPOSE(76),DETUNE(64),PHASE(64),GATES(127),COLOR(20),SHAPE(20),GAIN(128),FLAGS(PULSE)
|
|
GO4K_VCO TRANSPOSE(76),DETUNE(58),PHASE(128),GATES(127),COLOR(30),SHAPE(110),GAIN(128),FLAGS(PULSE)
|
|
GO4K_FOP OP(FOP_ADDP)
|
|
GO4K_FOP OP(FOP_ADDP)
|
|
GO4K_FOP OP(FOP_MULP)
|
|
GO4K_VCO TRANSPOSE(48),DETUNE(64),PHASE(64),GATES(0x80),COLOR(127),SHAPE(64),GAIN(50),FLAGS(SINE|LFO)
|
|
GO4K_FST AMOUNT(104),DEST(10*MAX_UNIT_SLOTS+4+FST_SET)
|
|
GO4K_FOP OP(FOP_POP)
|
|
GO4K_VCF FREQUENCY(94),RESONANCE(120),VCFTYPE(LOWPASS)
|
|
GO4K_DLL PREGAIN(64),DRY(100),FEEDBACK(70),DAMP(64),FREQUENCY(56),DEPTH(48),DELAY(17),COUNT(2)
|
|
GO4K_PAN PANNING(50)
|
|
GO4K_DLL PREGAIN(64),DRY(100),FEEDBACK(70),DAMP(64),FREQUENCY(56),DEPTH(48),DELAY(16),COUNT(1)
|
|
GO4K_OUT GAIN(10),AUXSEND(52)`);
|
|
|
|
addInstrument('hihat', `GO4K_ENV ATTAC(0),DECAY(64),SUSTAIN(15),RELEASE(32),GAIN(100)
|
|
GO4K_VCO TRANSPOSE(64),DETUNE(64),PHASE(64),GATES(85),COLOR(64),SHAPE(64),GAIN(128),FLAGS(NOISE)
|
|
GO4K_FOP OP(FOP_MULP)
|
|
GO4K_VCF FREQUENCY(128),RESONANCE(128),VCFTYPE(BANDPASS)
|
|
GO4K_FOP OP(FOP_LOADNOTE)
|
|
GO4K_FOP OP(FOP_MULP)
|
|
GO4K_PAN PANNING(56)
|
|
GO4K_OUT GAIN(44), AUXSEND(0)`);
|
|
addInstrument('squarelead', `GO4K_ENV ATTAC(0),DECAY(70),SUSTAIN(0),RELEASE(70),GAIN(64)
|
|
GO4K_ENV ATTAC(0),DECAY(80),SUSTAIN(0),RELEASE(80),GAIN(128)
|
|
GO4K_FST AMOUNT(96),DEST(18*MAX_UNIT_SLOTS+4+FST_SET)
|
|
GO4K_FST AMOUNT(96),DEST(19*MAX_UNIT_SLOTS+4+FST_SET)
|
|
GO4K_FOP OP(FOP_POP)
|
|
GO4K_FOP OP(FOP_PUSH)
|
|
GO4K_VCO TRANSPOSE(72),DETUNE(64),PHASE(0),GATES(85),COLOR(64),SHAPE(64),GAIN(128),FLAGS(SINE|LFO)
|
|
GO4K_FOP OP(FOP_ADDP)
|
|
GO4K_FST AMOUNT(32),DEST(13*MAX_UNIT_SLOTS+5+FST_SET)
|
|
GO4K_FOP OP(FOP_POP)
|
|
GO4K_VCO TRANSPOSE(96),DETUNE(64),PHASE(0),GATES(85),COLOR(64),SHAPE(64),GAIN(128),FLAGS(SINE|LFO)
|
|
GO4K_FST AMOUNT(80),DEST(15*MAX_UNIT_SLOTS+2+FST_SET)
|
|
GO4K_FOP OP(FOP_POP)
|
|
GO4K_VCO TRANSPOSE(76),DETUNE(64),PHASE(0),GATES(85),COLOR(128),SHAPE(64),GAIN(128),FLAGS(PULSE)
|
|
GO4K_VCO TRANSPOSE(88),DETUNE(64),PHASE(0),GATES(85),COLOR(100),SHAPE(64),GAIN(128),FLAGS(TRISAW)
|
|
GO4K_FOP OP(FOP_ADDP)
|
|
GO4K_VCF FREQUENCY(82),RESONANCE(96),VCFTYPE(LOWPASS)
|
|
GO4K_VCF FREQUENCY(64),RESONANCE(96),VCFTYPE(LOWPASS)
|
|
GO4K_FOP OP(FOP_MULP)
|
|
GO4K_DLL PREGAIN(64),DRY(100),FEEDBACK(70),DAMP(64),FREQUENCY(56),DEPTH(48),DELAY(17),COUNT(2)
|
|
GO4K_PAN PANNING(64)
|
|
GO4K_DLL PREGAIN(64),DRY(100),FEEDBACK(70),DAMP(64),FREQUENCY(56),DEPTH(48),DELAY(18),COUNT(2)
|
|
GO4K_OUT GAIN(16), AUXSEND(32)`);
|
|
|
|
setGlobalParamDefs(`GO4K_ACC ACCTYPE(AUX)
|
|
GO4K_DLL PREGAIN(55),DRY(70),FEEDBACK(100),DAMP(64),FREQUENCY(0),DEPTH(0),DELAY(0),COUNT(8)
|
|
GO4K_FOP OP(FOP_XCH)
|
|
GO4K_DLL PREGAIN(55),DRY(70),FEEDBACK(100),DAMP(64),FREQUENCY(0),DEPTH(0),DELAY(8),COUNT(8)
|
|
GO4K_FOP OP(FOP_XCH)
|
|
GO4K_ACC ACCTYPE(OUTPUT)
|
|
GO4K_FOP OP(FOP_ADDP2)
|
|
GO4K_OUT GAIN(128), AUXSEND(0)`);
|
|
|
|
await writeFile('tests/groove.yaml', yaml.stringify(doc)); |