// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file // for details. All rights reserved. Use of this source code is governed by a // BSD-style license that can be found in the LICENSE file. part of web_audio; $(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS { $!MEMBERS factory AudioContext() => JS('AudioContext', 'new (window.AudioContext || window.webkitAudioContext)()'); GainNode createGain() { if (JS('bool', '#.createGain !== undefined', this)) { return JS('GainNode', '#.createGain()', this); } else { return JS('GainNode', '#.createGainNode()', this); } } ScriptProcessorNode createScriptProcessor([int$NULLABLE bufferSize, int$NULLABLE numberOfInputChannels, int$NULLABLE numberOfOutputChannels]) { var function = JS( '=Object', '#.createScriptProcessor || ' '#.createJavaScriptNode', this, this); if (numberOfOutputChannels != null) { return JS('ScriptProcessorNode', '#.call(#, #, #, #)', function, this, bufferSize, numberOfInputChannels, numberOfOutputChannels); } else if (numberOfInputChannels != null) { return JS('ScriptProcessorNode', '#.call(#, #, #)', function, this, bufferSize, numberOfInputChannels); } else if (bufferSize != null) { return JS( 'ScriptProcessorNode', '#.call(#, #)', function, this, bufferSize); } else { return JS( 'ScriptProcessorNode', '#.call(#)', function, this); } } @JSName('decodeAudioData') Future$#NULLSAFECAST() _decodeAudioData(ByteBuffer audioData, [DecodeSuccessCallback$NULLABLE successCallback, DecodeErrorCallback$NULLABLE errorCallback]) native; Future decodeAudioData(ByteBuffer audioData, [DecodeSuccessCallback$NULLABLE successCallback, DecodeErrorCallback$NULLABLE errorCallback]) { if (successCallback != null && errorCallback != null) { return _decodeAudioData(audioData, successCallback, errorCallback); } var completer = new Completer(); _decodeAudioData(audioData, (value) { completer.complete(value); }, (error) { if (error == null) { completer.completeError(''); } else { completer.completeError(error); } }); return completer.future; } }