39 lines
1.3 KiB
JavaScript
39 lines
1.3 KiB
JavaScript
// js/audio.js
|
|
|
|
import * as Tone from "https://esm.sh/tone";
|
|
|
|
// O contexto de áudio agora será gerenciado principalmente pelo Tone.js.
|
|
// Esta função garante que ele seja iniciado por uma interação do usuário.
|
|
export function initializeAudioContext() {
|
|
if (Tone.context.state !== 'running') {
|
|
Tone.start();
|
|
console.log("AudioContext iniciado com Tone.js");
|
|
}
|
|
}
|
|
|
|
// ✅ DEPOIS: devolve o *raw* AudioContext (nativo do Web Audio)
|
|
export function getAudioContext() {
|
|
// compatível com versões novas/antigas do Tone
|
|
const ctx = typeof Tone.getContext === 'function' ? Tone.getContext() : Tone.context;
|
|
return ctx.rawContext || ctx; // rawContext quando existir
|
|
}
|
|
|
|
export function getMainGainNode() {
|
|
return Tone.Destination;
|
|
}
|
|
|
|
// Funções para controlar o volume e pan master
|
|
export function updateMasterVolume(volume) {
|
|
// Tone.Destination.volume.value é em decibéis. Convertemos de linear (0-1.5) para dB.
|
|
if (volume === 0) {
|
|
Tone.Destination.volume.value = -Infinity;
|
|
} else {
|
|
Tone.Destination.volume.value = Tone.gainToDb(volume);
|
|
}
|
|
}
|
|
|
|
export function updateMasterPan(pan) {
|
|
// A panorimização master em Tone.js geralmente requer um nó Panner dedicado.
|
|
// Por enquanto, esta função servirá como um placeholder para futuras implementações.
|
|
console.log("Master Pan ainda não implementado com Tone.js");
|
|
} |