/**
 * @private
 */
Ext.define('Ext.util.Audio', {
    singleton: true,
    ctx: null,
 
    beep: function(callback) {
        this.oscillate(200, 1, callback);
    },
 
    oscillate: function(duration, type, callback) {
        var osc;
 
        if (!this.ctx) {
            this.ctx = new (window.audioContext || window.webkitAudioContext);
        }
 
        if (!this.ctx) {
            console.log("BEEP");
 
            return;
        }
 
        type = (type % 5) || 0;
 
        try {
            osc = this.ctx.createOscillator();
 
            osc.type = type;
            osc.connect(this.ctx.destination);
            osc.noteOn(0);
 
            Ext.defer(function() {
                osc.noteOff(0);
 
                if (callback) {
                    callback();
                }
            }, duration);
        }
        catch (e) {
            throw new Error("[Ext.util.Audio.oscillate] Error with Oscillator playback");
        }
 
    }
 
})
;