/ proof-of-concept / midiboot
Sign in
proof-of-concept / midiboot
midiboot / src / instruments / registry.ts
27 lines · 892 BBlameHistoryRaw
1import type { Instrument } from './types.ts';
2import { builtinInstruments } from './builtins.ts';
4// The instrument registry. Custom instruments (a GPU physical model, a
5// sampler, anything implementing Instrument) are added with
6// registerInstrument, typically at startup; tracks refer to instruments by
7// id, so an unknown id falls back to the first builtin rather than
8// failing.
10const instruments = new Map<string, Instrument>();
11for (const ins of builtinInstruments) instruments.set(ins.id, ins);
13export function registerInstrument(ins: Instrument): void {
14 instruments.set(ins.id, ins);
17export function unregisterInstrument(id: string): void {
18 instruments.delete(id);
21export function getInstrument(id: string): Instrument {
22 return instruments.get(id) ?? builtinInstruments[0];
25export function listInstruments(): Instrument[] {
26 return [...instruments.values()];
↑↓ move↵openescclose