128040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu/*
228040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu * Copyright (C) 2010, Google Inc. All rights reserved.
328040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu *
428040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu * Redistribution and use in source and binary forms, with or without
528040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu * modification, are permitted provided that the following conditions
628040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu * are met:
728040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu * 1.  Redistributions of source code must retain the above copyright
828040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu *    notice, this list of conditions and the following disclaimer.
928040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu * 2.  Redistributions in binary form must reproduce the above copyright
1028040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu *    notice, this list of conditions and the following disclaimer in the
1128040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu *    documentation and/or other materials provided with the distribution.
1228040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu *
1328040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
1428040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
1528040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
1628040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu * DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
1728040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
1828040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
1928040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
2028040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
2128040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
2228040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
2328040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu */
2428040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu
2528040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu#ifndef RealtimeAnalyserNode_h
2628040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu#define RealtimeAnalyserNode_h
2728040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu
2828040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu#include "AudioNode.h"
2928040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu#include "RealtimeAnalyser.h"
3028040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu
3128040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhunamespace WebCore {
3228040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu
3328040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhuclass RealtimeAnalyserNode : public AudioNode {
3428040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhupublic:
3528040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu    static PassRefPtr<RealtimeAnalyserNode> create(AudioContext* context, double sampleRate)
3628040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu    {
3728040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu        return adoptRef(new RealtimeAnalyserNode(context, sampleRate));
3828040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu    }
3928040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu
4028040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu    virtual ~RealtimeAnalyserNode();
4128040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu
4228040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu    // AudioNode
4328040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu    virtual void process(size_t framesToProcess);
4428040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu    virtual void pullInputs(size_t framesToProcess);
4528040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu    virtual void reset();
4628040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu
4728040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu    // Javascript bindings
4828040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu    unsigned int fftSize() const { return m_analyser.fftSize(); }
4928040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu    void setFftSize(unsigned int size) { m_analyser.setFftSize(size); }
5028040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu
5128040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu    unsigned frequencyBinCount() const { return m_analyser.frequencyBinCount(); }
5228040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu
5328040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu    void setMinDecibels(float k) { m_analyser.setMinDecibels(k); }
5428040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu    float minDecibels() const { return m_analyser.minDecibels(); }
5528040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu
5628040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu    void setMaxDecibels(float k) { m_analyser.setMaxDecibels(k); }
5728040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu    float maxDecibels() const { return m_analyser.maxDecibels(); }
5828040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu
5928040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu    void setSmoothingTimeConstant(float k) { m_analyser.setSmoothingTimeConstant(k); }
6028040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu    float smoothingTimeConstant() const { return m_analyser.smoothingTimeConstant(); }
6128040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu
622fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#if ENABLE(WEBGL)
6328040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu    void getFloatFrequencyData(Float32Array* array) { m_analyser.getFloatFrequencyData(array); }
6428040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu    void getByteFrequencyData(Uint8Array* array) { m_analyser.getByteFrequencyData(array); }
6528040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu    void getByteTimeDomainData(Uint8Array* array) { m_analyser.getByteTimeDomainData(array); }
6628040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu#endif
6728040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu
6828040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhuprivate:
6928040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu    RealtimeAnalyserNode(AudioContext*, double sampleRate);
7028040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu
7128040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu    RealtimeAnalyser m_analyser;
7228040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu};
7328040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu
7428040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu} // namespace WebCore
7528040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu
7628040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu#endif // RealtimeAnalyserNode_h
77