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