Testing zn method chaining

This commit is contained in:
2023-08-13 20:38:31 +03:00
parent 7f6a768802
commit bf7e07d845
3 changed files with 28 additions and 20 deletions

View File

@ -3,7 +3,7 @@ import { scale } from './Scales';
import { tryEvaluate } from "./Evaluator";
import { MidiConnection } from "./IO/MidiConnection";
import { DrunkWalk } from './Utils/Drunk';
import { next, Pitch, Chord, Rest } from "zifferjs";
import { Pitch, Chord, Rest, Event, Start, cachedStart } from "zifferjs";
import {
superdough, samples,
initAudioOnFirstClick,
@ -176,25 +176,32 @@ export class UserAPI {
this.MidiConnection.sendMidiNote(note, channel, velocity, duration)
}
public zn(input: string, options: {[key: string]: string|number} = {}): Pitch|Chord|Rest {
const node = next(input, options) as any;
const channel = (options.channel ? options.channel : 0) as number;
const velocity = (options.velocity ? options.velocity : 100) as number;
const sustain = (options.sustain ? options.sustain : 0.5) as number;
if(node instanceof Pitch) {
if(node.bend) this.MidiConnection.sendPitchBend(node.bend, channel);
this.MidiConnection.sendMidiNote(node.note!, channel, velocity, sustain);
if(node.bend) this.MidiConnection.sendPitchBend(8192, channel);
} else if(node instanceof Chord) {
node.pitches.forEach(pitch => {
if(pitch.bend) this.MidiConnection.sendPitchBend(pitch.bend, channel);
this.MidiConnection.sendMidiNote(pitch.note!, channel, velocity, sustain);
if(pitch.bend) this.MidiConnection.sendPitchBend(8192, channel);
});
} else if(node instanceof Rest) {
public zn(input: string, options: {[key: string]: string|number} = {}): Event {
let event = cachedStart(input, options);
if(event instanceof Start) {
// do nothing for now ...
} else {
let node = event;
if(node.modifiedEvent) node = node.modifiedEvent;
const channel = (options.channel ? options.channel : 0) as number;
const velocity = (options.velocity ? options.velocity : 100) as number;
const sustain = (options.sustain ? options.sustain : 0.5) as number;
if(node instanceof Pitch) {
if(node.bend) this.MidiConnection.sendPitchBend(node.bend, channel);
this.MidiConnection.sendMidiNote(node.note!, channel, velocity, sustain);
if(node.bend) this.MidiConnection.sendPitchBend(8192, channel);
} else if(node instanceof Chord) {
node.pitches.forEach((pitch: Pitch) => {
if(pitch.bend) this.MidiConnection.sendPitchBend(pitch.bend, channel);
this.MidiConnection.sendMidiNote(pitch.note!, channel, velocity, sustain);
if(pitch.bend) this.MidiConnection.sendPitchBend(8192, channel);
});
} else if(node instanceof Rest) {
// do nothing for now ...
}
if(node.modifiedEvent) node.modifiedEvent = undefined;
}
return node;
return event.next();
}
public sysex(data: Array<number>): void {