1e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block/*
2e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block * Copyright (C) 2010 Google Inc. All rights reserved.
3e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block *
4e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block * Redistribution and use in source and binary forms, with or without
5e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block * modification, are permitted provided that the following conditions
6e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block * are met:
7e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block *
8e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block * 1.  Redistributions of source code must retain the above copyright
9e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block *     notice, this list of conditions and the following disclaimer.
10e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block * 2.  Redistributions in binary form must reproduce the above copyright
11e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block *     notice, this list of conditions and the following disclaimer in the
12e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block *     documentation and/or other materials provided with the distribution.
13e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block * 3.  Neither the name of Apple Computer, Inc. ("Apple") nor the names of
14e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block *     its contributors may be used to endorse or promote products derived
15e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block *     from this software without specific prior written permission.
16e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block *
17e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
18e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
19e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
20e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
21e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
22e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
23e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
24e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block */
28e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block
29cad810f21b803229eb11403f9209855525a25d57Steve Block#ifndef WebAudioDevice_h
30cad810f21b803229eb11403f9209855525a25d57Steve Block#define WebAudioDevice_h
31e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block
32cad810f21b803229eb11403f9209855525a25d57Steve Block#include "WebVector.h"
33e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block
34cad810f21b803229eb11403f9209855525a25d57Steve Blocknamespace WebKit {
35e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block
36cad810f21b803229eb11403f9209855525a25d57Steve Block// Abstract interface to the Chromium audio system.
37e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block
38cad810f21b803229eb11403f9209855525a25d57Steve Blockclass WebAudioDevice {
39e8b154fd68f9b33be40a3590e58347f353835f5cSteve Blockpublic:
40cad810f21b803229eb11403f9209855525a25d57Steve Block    class RenderCallback {
41cad810f21b803229eb11403f9209855525a25d57Steve Block    public:
42cad810f21b803229eb11403f9209855525a25d57Steve Block        virtual void render(const WebVector<float*>& audioData, size_t numberOfFrames) = 0;
43cad810f21b803229eb11403f9209855525a25d57Steve Block    protected:
44cad810f21b803229eb11403f9209855525a25d57Steve Block        virtual ~RenderCallback() { }
45cad810f21b803229eb11403f9209855525a25d57Steve Block    };
46cad810f21b803229eb11403f9209855525a25d57Steve Block
47cad810f21b803229eb11403f9209855525a25d57Steve Block    virtual ~WebAudioDevice() { }
48cad810f21b803229eb11403f9209855525a25d57Steve Block
49cad810f21b803229eb11403f9209855525a25d57Steve Block    virtual void start() = 0;
50cad810f21b803229eb11403f9209855525a25d57Steve Block    virtual void stop() = 0;
512bde8e466a4451c7319e3a072d118917957d6554Steve Block    virtual double sampleRate() = 0;
52e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block};
53e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block
54cad810f21b803229eb11403f9209855525a25d57Steve Block} // namespace WebKit
55e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block
56cad810f21b803229eb11403f9209855525a25d57Steve Block#endif // WebAudioDevice_h
57