PassRefPtr<AudioContext> AudioContext::create(Document* document) { ASSERT(document); ASSERT(isMainThread()); if (s_hardwareContextCount >= MaxHardwareContexts) return 0; RefPtr<AudioContext> audioContext(adoptRef(new AudioContext(document))); audioContext->suspendIfNeeded(); return audioContext.release(); }
PassRefPtr<AudioContext> AudioContext::create(Document& document, ExceptionCode& ec) { UNUSED_PARAM(ec); ASSERT(isMainThread()); if (s_hardwareContextCount >= MaxHardwareContexts) return nullptr; RefPtr<AudioContext> audioContext(adoptRef(new AudioContext(document))); audioContext->suspendIfNeeded(); return audioContext.release(); }
PassRefPtr<AudioContext> AudioContext::createOfflineContext(Document* document, unsigned numberOfChannels, size_t numberOfFrames, float sampleRate, ExceptionCode& ec) { ASSERT(document); // FIXME: offline contexts have limitations on supported sample-rates. // Currently all AudioContexts must have the same sample-rate. HRTFDatabaseLoader* loader = HRTFDatabaseLoader::loader(); if (numberOfChannels > 10 || !isSampleRateRangeGood(sampleRate) || (loader && loader->databaseSampleRate() != sampleRate)) { ec = SYNTAX_ERR; return 0; } RefPtr<AudioContext> audioContext(adoptRef(new AudioContext(document, numberOfChannels, numberOfFrames, sampleRate))); audioContext->suspendIfNeeded(); return audioContext.release(); }
PassRefPtr<OfflineAudioContext> OfflineAudioContext::create(ScriptExecutionContext* context, unsigned numberOfChannels, size_t numberOfFrames, float sampleRate, ExceptionCode& ec) { // FIXME: add support for workers. if (!context || !context->isDocument()) { ec = NOT_SUPPORTED_ERR; return 0; } Document* document = toDocument(context); if (numberOfChannels > 10 || !isSampleRateRangeGood(sampleRate)) { ec = SYNTAX_ERR; return 0; } RefPtr<OfflineAudioContext> audioContext(adoptRef(new OfflineAudioContext(document, numberOfChannels, numberOfFrames, sampleRate))); audioContext->suspendIfNeeded(); return audioContext.release(); }