12daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch/* 22daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch * Copyright (C) 2011, Google Inc. All rights reserved. 32daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch * 42daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch * Redistribution and use in source and binary forms, with or without 52daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch * modification, are permitted provided that the following conditions 62daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch * are met: 72daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch * 1. Redistributions of source code must retain the above copyright 82daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch * notice, this list of conditions and the following disclaimer. 92daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch * 2. Redistributions in binary form must reproduce the above copyright 102daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch * notice, this list of conditions and the following disclaimer in the 112daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch * documentation and/or other materials provided with the distribution. 122daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch * 132daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY 142daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 152daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 162daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch * DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY 172daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 182daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 192daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 202daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 212daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 222daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 232daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch */ 242daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 252daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#include "config.h" 262daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 272daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#if ENABLE(WEB_AUDIO) 282daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 292daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#include "DefaultAudioDestinationNode.h" 302daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 312daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#ifndef NDEBUG 322daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#include <stdio.h> 332daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#endif 342daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 352daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochnamespace WebCore { 362daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 372daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben MurdochDefaultAudioDestinationNode::DefaultAudioDestinationNode(AudioContext* context) 382daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch : AudioDestinationNode(context, AudioDestination::hardwareSampleRate()) 392daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch{ 402daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch initialize(); 412daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch} 422daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 432daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben MurdochDefaultAudioDestinationNode::~DefaultAudioDestinationNode() 442daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch{ 452daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch uninitialize(); 462daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch} 472daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 482daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochvoid DefaultAudioDestinationNode::initialize() 492daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch{ 502daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch if (isInitialized()) 512daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch return; 522daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 532daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch double hardwareSampleRate = AudioDestination::hardwareSampleRate(); 542daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#ifndef NDEBUG 552daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch fprintf(stderr, ">>>> hardwareSampleRate = %f\n", hardwareSampleRate); 562daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#endif 572daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 582daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch m_destination = AudioDestination::create(*this, hardwareSampleRate); 592daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 602daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch AudioNode::initialize(); 612daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch} 622daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 632daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochvoid DefaultAudioDestinationNode::uninitialize() 642daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch{ 652daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch if (!isInitialized()) 662daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch return; 672daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 682daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch m_destination->stop(); 692daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 702daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch AudioNode::uninitialize(); 712daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch} 722daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 732daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochvoid DefaultAudioDestinationNode::startRendering() 742daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch{ 752daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch ASSERT(isInitialized()); 762daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch if (isInitialized()) 772daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch m_destination->start(); 782daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch} 792daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 802daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch} // namespace WebCore 812daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 822daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#endif // ENABLE(WEB_AUDIO) 83