Update authentication system, database models, and UI components
This commit is contained in:
@ -1,17 +1,30 @@
|
||||
// sound.js — reusable Web Audio beep
|
||||
|
||||
export function playBeep(frequency = 432, duration = 0.2, type = 'sine') {
|
||||
const ctx = new (window.AudioContext || window.webkitAudioContext)();
|
||||
const osc = ctx.createOscillator();
|
||||
const gain = ctx.createGain();
|
||||
try {
|
||||
// Validate parameters to prevent audio errors
|
||||
if (!Number.isFinite(frequency) || frequency <= 0) {
|
||||
frequency = 432; // fallback to default
|
||||
}
|
||||
if (!Number.isFinite(duration) || duration <= 0) {
|
||||
duration = 0.2; // fallback to default
|
||||
}
|
||||
|
||||
const ctx = new (window.AudioContext || window.webkitAudioContext)();
|
||||
const osc = ctx.createOscillator();
|
||||
const gain = ctx.createGain();
|
||||
|
||||
osc.type = type;
|
||||
osc.frequency.value = frequency;
|
||||
osc.type = type;
|
||||
osc.frequency.value = frequency;
|
||||
|
||||
osc.connect(gain);
|
||||
gain.connect(ctx.destination);
|
||||
osc.connect(gain);
|
||||
gain.connect(ctx.destination);
|
||||
|
||||
gain.gain.setValueAtTime(0.1, ctx.currentTime); // subtle volume
|
||||
osc.start();
|
||||
osc.stop(ctx.currentTime + duration);
|
||||
gain.gain.setValueAtTime(0.1, ctx.currentTime); // subtle volume
|
||||
osc.start();
|
||||
osc.stop(ctx.currentTime + duration);
|
||||
} catch (error) {
|
||||
// Silently handle audio errors to prevent breaking upload flow
|
||||
console.warn('[SOUND] Audio beep failed:', error.message);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user