2
* Copyright (C) 2010, Google Inc. All rights reserved.
4
* Redistribution and use in source and binary forms, with or without
5
* modification, are permitted provided that the following conditions
7
* 1. Redistributions of source code must retain the above copyright
8
* notice, this list of conditions and the following disclaimer.
9
* 2. Redistributions in binary form must reproduce the above copyright
10
* notice, this list of conditions and the following disclaimer in the
11
* documentation and/or other materials provided with the distribution.
13
* THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
14
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
15
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
16
* DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
17
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
18
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
19
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
20
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
21
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
22
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29
#include "V8AudioContext.h"
31
#include "AudioBuffer.h"
32
#include "AudioContext.h"
33
#include "BindingState.h"
35
#include "V8ArrayBuffer.h"
36
#include "V8AudioBuffer.h"
37
#include "V8Binding.h"
38
#include <wtf/ArrayBuffer.h>
42
v8::Handle<v8::Value> V8AudioContext::constructorCallbackCustom(const v8::Arguments& args)
44
Document* document = currentDocument(BindingState::instance());
46
RefPtr<AudioContext> audioContext;
49
// Constructor for default AudioContext which talks to audio hardware.
51
audioContext = AudioContext::create(document, ec);
53
return setDOMException(ec, args.GetIsolate());
54
if (!audioContext.get())
55
return throwError(v8SyntaxError, "audio resources unavailable for AudioContext construction", args.GetIsolate());
57
// Constructor for offline (render-target) AudioContext which renders into an AudioBuffer.
58
// new AudioContext(in unsigned long numberOfChannels, in unsigned long numberOfFrames, in float sampleRate);
59
if (args.Length() < 3)
60
return throwNotEnoughArgumentsError(args.GetIsolate());
64
int32_t numberOfChannels = toInt32(args[0], ok);
65
if (!ok || numberOfChannels <= 0 || numberOfChannels > 10)
66
return throwError(v8SyntaxError, "Invalid number of channels", args.GetIsolate());
68
int32_t numberOfFrames = toInt32(args[1], ok);
69
if (!ok || numberOfFrames <= 0)
70
return throwError(v8SyntaxError, "Invalid number of frames", args.GetIsolate());
72
float sampleRate = toFloat(args[2]);
74
return throwError(v8SyntaxError, "Invalid sample rate", args.GetIsolate());
77
audioContext = AudioContext::createOfflineContext(document, numberOfChannels, numberOfFrames, sampleRate, ec);
79
return setDOMException(ec, args.GetIsolate());
82
if (!audioContext.get())
83
return throwError(v8SyntaxError, "Error creating AudioContext", args.GetIsolate());
85
// Transform the holder into a wrapper object for the audio context.
86
v8::Handle<v8::Object> wrapper = args.Holder();
87
V8DOMWrapper::createDOMWrapper(audioContext.release(), &info, wrapper);
92
} // namespace WebCore
94
#endif // ENABLE(WEB_AUDIO)