34 lines
1.1 KiB
JavaScript
34 lines
1.1 KiB
JavaScript
import { TripleOscillator } from "./plugins/TripleOscillator.js";
|
|
import { PLUGINS } from "utils.js";
|
|
|
|
export class InstrumentFactory {
|
|
constructor() {
|
|
// Cria um contexto de áudio único para a página
|
|
this.audioCtx = new (window.AudioContext || window.webkitAudioContext)();
|
|
}
|
|
|
|
play(instrumentData) {
|
|
// Pega o nome do plugin (que vem do python em minúsculo)
|
|
// O parser as vezes bota o nome na raiz ou dentro de tags.
|
|
// Vamos assumir que o "instrument_name" é a chave principal.
|
|
|
|
// Normalização de nome (ex: "TripleOscillator" -> "tripleoscillator")
|
|
const pluginName = (
|
|
instrumentData.instrument_name ||
|
|
instrumentData.name ||
|
|
""
|
|
).toLowerCase();
|
|
|
|
if (PLUGINS[pluginName]) {
|
|
const InstrumentClass = PLUGINS[pluginName];
|
|
const instr = new InstrumentClass(this.audioCtx, instrumentData);
|
|
|
|
// Toca uma nota de teste (Dó central - MIDI 60)
|
|
instr.playNote(60, this.audioCtx.currentTime, 0.5);
|
|
} else {
|
|
console.warn(`Plugin não implementado no JS: ${pluginName}`);
|
|
alert(`O plugin ${pluginName} ainda não tem implementação Web Audio.`);
|
|
}
|
|
}
|
|
}
|