mmpSearch/assets/js/audio/InstrumentFactory.js

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.`);
}
}
}