// Copyright 2016 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // See https://webaudio.github.io/web-audio-api/#BaseAudioContext enum AudioContextState { "suspended", "running", "closed" }; callback DecodeErrorCallback = void (DOMException error); callback DecodeSuccessCallback = void (AudioBuffer decodedData); [ Exposed=Window, ActiveScriptWrappable ] interface BaseAudioContext : EventTarget { // All rendered audio ultimately connects to destination, which represents the audio hardware. readonly attribute AudioDestinationNode destination; // All scheduled times are relative to this time in seconds. readonly attribute double currentTime; // All AudioNodes in the context run at this sample-rate (sample-frames per second). [HighEntropy=Direct, Measure] readonly attribute float sampleRate; // All panning is relative to this listener. readonly attribute AudioListener listener; // Current state of the AudioContext readonly attribute AudioContextState state; [RaisesException] AudioBuffer createBuffer(unsigned long numberOfChannels, unsigned long numberOfFrames, float sampleRate); // Asynchronous audio file data decoding. // TODO(crbug.com/841185): |successCallback| and |errorCallback| are not // nullable in the spec. [RaisesException, MeasureAs=AudioContextDecodeAudioData, CallWith=ScriptState] Promise decodeAudioData(ArrayBuffer audioData, optional DecodeSuccessCallback? successCallback, optional DecodeErrorCallback? errorCallback); // Sources [RaisesException, MeasureAs=AudioContextCreateBufferSource] AudioBufferSourceNode createBufferSource(); [RaisesException, MeasureAs=AudioContextCreateConstantSource] ConstantSourceNode createConstantSource(); // Processing nodes [RaisesException, MeasureAs=AudioContextCreateGain] GainNode createGain(); [RaisesException, MeasureAs=AudioContextCreateDelay] DelayNode createDelay(optional double maxDelayTime); [RaisesException, MeasureAs=AudioContextCreateBiquadFilter] BiquadFilterNode createBiquadFilter(); [RaisesException, MeasureAs=AudioContextCreateIIRFilter] IIRFilterNode createIIRFilter(sequence feedForward, sequence feedBack); [RaisesException, MeasureAs=AudioContextCreateWaveShaper] WaveShaperNode createWaveShaper(); [RaisesException, MeasureAs=AudioContextCreatePannerAutomated] PannerNode createPanner(); [RaisesException, MeasureAs=AudioContextCreateConvolver] ConvolverNode createConvolver(); [RaisesException, MeasureAs=AudioContextCreateDynamicsCompressor] DynamicsCompressorNode createDynamicsCompressor(); [RaisesException, MeasureAs=AudioContextCreateAnalyser] AnalyserNode createAnalyser(); [RaisesException, MeasureAs=AudioContextCreateScriptProcessor] ScriptProcessorNode createScriptProcessor(optional unsigned long bufferSize, optional unsigned long numberOfInputChannels, optional unsigned long numberOfOutputChannels); [RaisesException, MeasureAs=AudioContextCreateStereoPanner] StereoPannerNode createStereoPanner(); [RaisesException, MeasureAs=AudioContextCreateOscillator] OscillatorNode createOscillator(); [RaisesException, MeasureAs=AudioContextCreatePeriodicWave] PeriodicWave createPeriodicWave(sequence real, sequence imag, optional PeriodicWaveConstraints constraints = {}); // Channel splitting and merging [RaisesException, MeasureAs=AudioContextCreateChannelSplitter] ChannelSplitterNode createChannelSplitter(optional unsigned long numberOfOutputs); [RaisesException, MeasureAs=AudioContextCreateChannelMerger] ChannelMergerNode createChannelMerger(optional unsigned long numberOfInputs); [SecureContext] readonly attribute AudioWorklet audioWorklet; attribute EventHandler onstatechange; };