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 ConvolverNode_h 2628040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu#define ConvolverNode_h 2728040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu 2828040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu#include "AudioNode.h" 2928040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu#include <wtf/OwnPtr.h> 3028040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu#include <wtf/RefPtr.h> 3128040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu#include <wtf/Threading.h> 3228040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu 3328040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhunamespace WebCore { 3428040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu 3528040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhuclass AudioBuffer; 3628040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhuclass Reverb; 3728040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu 3828040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhuclass ConvolverNode : public AudioNode { 3928040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhupublic: 4028040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu static PassRefPtr<ConvolverNode> create(AudioContext* context, double sampleRate) 4128040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu { 4228040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu return adoptRef(new ConvolverNode(context, sampleRate)); 4328040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu } 4428040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu 4528040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu virtual ~ConvolverNode(); 4628040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu 4728040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu // AudioNode 4828040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu virtual void process(size_t framesToProcess); 4928040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu virtual void reset(); 5028040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu virtual void initialize(); 5128040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu virtual void uninitialize(); 5228040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu 5328040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu // Impulse responses 5428040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu void setBuffer(AudioBuffer*); 5528040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu AudioBuffer* buffer(); 5628040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu 5728040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhuprivate: 5828040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu ConvolverNode(AudioContext*, double sampleRate); 5928040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu 6028040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu OwnPtr<Reverb> m_reverb; 6128040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu RefPtr<AudioBuffer> m_buffer; 6228040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu 6328040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu // This synchronizes dynamic changes to the convolution impulse response with process(). 6428040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu mutable Mutex m_processLock; 6528040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu}; 6628040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu 6728040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu} // namespace WebCore 6828040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu 6928040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu#endif // ConvolverNode_h 70