Confirmed users
770
edits
| Line 322: | Line 322: | ||
return compressorNode.forget(); | return compressorNode.forget(); | ||
} | } | ||
already_AddRefed<GainNode> | |||
AudioContext::CreateGain() | |||
{ | |||
nsRefPtr<GainNode> gainNode = new GainNode(this); | |||
return gainNode.forget(); | |||
} | |||
GainNode::GainNode(AudioContext* aContext) | |||
: AudioNode(aContext, | |||
2, | |||
ChannelCountMode::Max, | |||
ChannelInterpretation::Speakers) | |||
, mGain(new AudioParam(MOZ_THIS_IN_INITIALIZER_LIST(), | |||
SendGainToStream, 1.0f)) | |||
{ | |||
GainNodeEngine* engine = new GainNodeEngine(this, aContext->Destination()); | |||
mStream = aContext->Graph()->CreateAudioNodeStream(engine, MediaStreamGraph::INTERNAL_STREAM); | |||
engine->SetSourceStream(static_cast<AudioNodeStream*> (mStream.get())); | |||
} | |||
void | |||
GainNode::SendGainToStream(AudioNode* aNode) | |||
{ | |||
GainNode* This = static_cast<GainNode*>(aNode); | |||
// It will call to GainNodeEngine::SetTimelineParameter eventually. | |||
SendTimelineParameterToStream(This, GainNodeEngine::GAIN, *This->mGain); | |||
} | |||
void GainNodeEngine::SetTimelineParameter(uint32_t aIndex, | |||
const AudioParamTimeline& aValue, | |||
TrackRate aSampleRate) MOZ_OVERRIDE | |||
{ | |||
switch (aIndex) { | |||
case GAIN: | |||
MOZ_ASSERT(mSource && mDestination); | |||
mGain = aValue; | |||
WebAudioUtils::ConvertAudioParamToTicks(mGain, mSource, mDestination); | |||
break; | |||
default: | |||
NS_ERROR("Bad GainNodeEngine TimelineParameter"); | |||
} | |||
} | |||
AudioNodeStream* | |||
MediaStreamGraph::CreateAudioNodeStream(AudioNodeEngine* aEngine, | |||
AudioNodeStreamKind aKind, | |||
TrackRate aSampleRate) | |||
{ | |||
MOZ_ASSERT(NS_IsMainThread()); | |||
if (!aSampleRate) { | |||
aSampleRate = aEngine->NodeMainThread()->Context()->SampleRate(); | |||
} | |||
AudioNodeStream* stream = new AudioNodeStream(aEngine, aKind, aSampleRate); | |||
NS_ADDREF(stream); | |||
MediaStreamGraphImpl* graph = static_cast<MediaStreamGraphImpl*>(this); | |||
stream->SetGraphImpl(graph); | |||
if (aEngine->HasNode()) { | |||
stream->SetChannelMixingParametersImpl(aEngine->NodeMainThread()->ChannelCount(), | |||
aEngine->NodeMainThread()->ChannelCountModeValue(), | |||
aEngine->NodeMainThread()->ChannelInterpretationValue()); | |||
} | |||
graph->AppendMessage(new CreateMessage(stream)); | |||
return stream; | |||
} | |||
</source> | |||
==AudioNode::Connect == | |||
<source lang="cpp"> | |||
</source> | |||
==AudioNodeStream::ProcessInput == | |||
<source lang="cpp"> | |||
</source> | </source> | ||