mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-17 23:35:34 +00:00
Bug 865246 - Part 3: Update the BiquadFilterNode IDL to match the current spec; r=padenot
This commit is contained in:
parent
bfd9579893
commit
3163802ff4
@ -5,17 +5,17 @@
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
#include "BiquadFilterNode.h"
|
||||
#include "mozilla/dom/BiquadFilterNodeBinding.h"
|
||||
#include "AudioNodeEngine.h"
|
||||
#include "AudioNodeStream.h"
|
||||
#include "AudioDestinationNode.h"
|
||||
#include "WebAudioUtils.h"
|
||||
#include "blink/Biquad.h"
|
||||
|
||||
namespace mozilla {
|
||||
namespace dom {
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_INHERITED_3(BiquadFilterNode, AudioNode,
|
||||
mFrequency, mQ, mGain)
|
||||
NS_IMPL_CYCLE_COLLECTION_INHERITED_4(BiquadFilterNode, AudioNode,
|
||||
mFrequency, mDetune, mQ, mGain)
|
||||
|
||||
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION_INHERITED(BiquadFilterNode)
|
||||
NS_INTERFACE_MAP_END_INHERITING(AudioNode)
|
||||
@ -32,8 +32,9 @@ public:
|
||||
, mDestination(static_cast<AudioNodeStream*> (aDestination->Stream()))
|
||||
// Keep the default values in sync with the default values in
|
||||
// BiquadFilterNode::BiquadFilterNode
|
||||
, mType(BiquadTypeEnum::LOWPASS)
|
||||
, mType(BiquadFilterType::Lowpass)
|
||||
, mFrequency(350.f)
|
||||
, mDetune(0.f)
|
||||
, mQ(1.f)
|
||||
, mGain(0.f)
|
||||
{
|
||||
@ -47,13 +48,14 @@ public:
|
||||
enum Parameteres {
|
||||
TYPE,
|
||||
FREQUENCY,
|
||||
DETUNE,
|
||||
Q,
|
||||
GAIN
|
||||
};
|
||||
void SetInt32Parameter(uint32_t aIndex, int32_t aValue) MOZ_OVERRIDE
|
||||
{
|
||||
switch (aIndex) {
|
||||
case TYPE: mType = static_cast<BiquadTypeEnum>(aValue); break;
|
||||
case TYPE: mType = static_cast<BiquadFilterType>(aValue); break;
|
||||
default:
|
||||
NS_ERROR("Bad BiquadFilterNode Int32Parameter");
|
||||
}
|
||||
@ -66,6 +68,10 @@ public:
|
||||
mFrequency = aValue;
|
||||
WebAudioUtils::ConvertAudioParamToTicks(mFrequency, mSource, mDestination);
|
||||
break;
|
||||
case DETUNE:
|
||||
mDetune = aValue;
|
||||
WebAudioUtils::ConvertAudioParamToTicks(mDetune, mSource, mDestination);
|
||||
break;
|
||||
case Q:
|
||||
mQ = aValue;
|
||||
WebAudioUtils::ConvertAudioParamToTicks(mQ, mSource, mDestination);
|
||||
@ -91,16 +97,18 @@ public:
|
||||
private:
|
||||
AudioNodeStream* mSource;
|
||||
AudioNodeStream* mDestination;
|
||||
BiquadTypeEnum mType;
|
||||
BiquadFilterType mType;
|
||||
AudioParamTimeline mFrequency;
|
||||
AudioParamTimeline mDetune;
|
||||
AudioParamTimeline mQ;
|
||||
AudioParamTimeline mGain;
|
||||
};
|
||||
|
||||
BiquadFilterNode::BiquadFilterNode(AudioContext* aContext)
|
||||
: AudioNode(aContext)
|
||||
, mType(BiquadTypeEnum::LOWPASS)
|
||||
, mType(BiquadFilterType::Lowpass)
|
||||
, mFrequency(new AudioParam(this, SendFrequencyToStream, 350.f))
|
||||
, mDetune(new AudioParam(this, SendDetuneToStream, 0.f))
|
||||
, mQ(new AudioParam(this, SendQToStream, 1.f))
|
||||
, mGain(new AudioParam(this, SendGainToStream, 0.f))
|
||||
{
|
||||
@ -115,18 +123,6 @@ BiquadFilterNode::WrapObject(JSContext* aCx, JS::Handle<JSObject*> aScope)
|
||||
return BiquadFilterNodeBinding::Wrap(aCx, aScope, this);
|
||||
}
|
||||
|
||||
void
|
||||
BiquadFilterNode::SetType(uint16_t aType, ErrorResult& aRv)
|
||||
{
|
||||
BiquadTypeEnum type = static_cast<BiquadTypeEnum> (aType);
|
||||
if (type > BiquadTypeEnum::Max) {
|
||||
aRv.Throw(NS_ERROR_DOM_INDEX_SIZE_ERR);
|
||||
} else {
|
||||
mType = type;
|
||||
SendInt32ParameterToStream(BiquadFilterNodeEngine::TYPE, aType);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
BiquadFilterNode::SendFrequencyToStream(AudioNode* aNode)
|
||||
{
|
||||
@ -134,6 +130,13 @@ BiquadFilterNode::SendFrequencyToStream(AudioNode* aNode)
|
||||
SendTimelineParameterToStream(This, BiquadFilterNodeEngine::FREQUENCY, *This->mFrequency);
|
||||
}
|
||||
|
||||
void
|
||||
BiquadFilterNode::SendDetuneToStream(AudioNode* aNode)
|
||||
{
|
||||
BiquadFilterNode* This = static_cast<BiquadFilterNode*>(aNode);
|
||||
SendTimelineParameterToStream(This, BiquadFilterNodeEngine::DETUNE, *This->mDetune);
|
||||
}
|
||||
|
||||
void
|
||||
BiquadFilterNode::SendQToStream(AudioNode* aNode)
|
||||
{
|
||||
|
@ -9,26 +9,13 @@
|
||||
|
||||
#include "AudioNode.h"
|
||||
#include "AudioParam.h"
|
||||
#include "mozilla/ErrorResult.h"
|
||||
#include "mozilla/TypedEnum.h"
|
||||
#include "mozilla/dom/BiquadFilterNodeBinding.h"
|
||||
|
||||
namespace mozilla {
|
||||
namespace dom {
|
||||
|
||||
class AudioContext;
|
||||
|
||||
MOZ_BEGIN_ENUM_CLASS(BiquadTypeEnum, uint16_t)
|
||||
LOWPASS = 0,
|
||||
HIGHPASS = 1,
|
||||
BANDPASS = 2,
|
||||
LOWSHELF = 3,
|
||||
HIGHSHELF = 4,
|
||||
PEAKING = 5,
|
||||
NOTCH = 6,
|
||||
ALLPASS = 7,
|
||||
Max = 7
|
||||
MOZ_END_ENUM_CLASS(BiquadTypeEnum)
|
||||
|
||||
class BiquadFilterNode : public AudioNode
|
||||
{
|
||||
public:
|
||||
@ -45,17 +32,25 @@ public:
|
||||
return true;
|
||||
}
|
||||
|
||||
uint16_t Type() const
|
||||
BiquadFilterType Type() const
|
||||
{
|
||||
return static_cast<uint16_t> (mType);
|
||||
return mType;
|
||||
}
|
||||
void SetType(BiquadFilterType aType)
|
||||
{
|
||||
mType = aType;
|
||||
}
|
||||
void SetType(uint16_t aType, ErrorResult& aRv);
|
||||
|
||||
AudioParam* Frequency() const
|
||||
{
|
||||
return mFrequency;
|
||||
}
|
||||
|
||||
AudioParam* Detune() const
|
||||
{
|
||||
return mDetune;
|
||||
}
|
||||
|
||||
AudioParam* Q() const
|
||||
{
|
||||
return mQ;
|
||||
@ -68,12 +63,14 @@ public:
|
||||
|
||||
private:
|
||||
static void SendFrequencyToStream(AudioNode* aNode);
|
||||
static void SendDetuneToStream(AudioNode* aNode);
|
||||
static void SendQToStream(AudioNode* aNode);
|
||||
static void SendGainToStream(AudioNode* aNode);
|
||||
|
||||
private:
|
||||
BiquadTypeEnum mType;
|
||||
BiquadFilterType mType;
|
||||
nsRefPtr<AudioParam> mFrequency;
|
||||
nsRefPtr<AudioParam> mDetune;
|
||||
nsRefPtr<AudioParam> mQ;
|
||||
nsRefPtr<AudioParam> mGain;
|
||||
};
|
||||
|
@ -36,20 +36,27 @@ addLoadEvent(function() {
|
||||
filter.connect(destination);
|
||||
|
||||
// Verify default values
|
||||
is(filter.type, 0, "Correct default value for type");
|
||||
is(filter.type, "lowpass", "Correct default value for type");
|
||||
near(filter.frequency.defaultValue, 350, "Correct default value for filter frequency");
|
||||
near(filter.detune.defaultValue, 0, "Correct default value for filter detune");
|
||||
near(filter.Q.defaultValue, 1, "Correct default value for filter Q");
|
||||
near(filter.gain.defaultValue, 0, "Correct default value for filter gain");
|
||||
|
||||
// Make sure that we can set all of the valid type values
|
||||
for (var i = 0; i <= 7; ++i) {
|
||||
filter.type = i;
|
||||
var types = [
|
||||
"lowpass",
|
||||
"highpass",
|
||||
"bandpass",
|
||||
"lowshelf",
|
||||
"highshelf",
|
||||
"peaking",
|
||||
"notch",
|
||||
"allpass",
|
||||
];
|
||||
for (var i = 0; i < types.length; ++i) {
|
||||
filter.type = types[i];
|
||||
}
|
||||
|
||||
expectException(function() {
|
||||
filter.type = 8;
|
||||
}, DOMException.INDEX_SIZE_ERR);
|
||||
|
||||
source.start(0);
|
||||
SimpleTest.executeSoon(function() {
|
||||
source.stop(0);
|
||||
|
@ -134,7 +134,7 @@ DOMInterfaces = {
|
||||
},
|
||||
|
||||
'BiquadFilterNode': {
|
||||
'resultNotAddRefed': [ 'frequency', 'q', 'gain' ],
|
||||
'resultNotAddRefed': [ 'frequency', 'detune', 'q', 'gain' ],
|
||||
},
|
||||
|
||||
'Blob': [
|
||||
|
@ -10,22 +10,23 @@
|
||||
* liability, trademark and document use rules apply.
|
||||
*/
|
||||
|
||||
enum BiquadFilterType {
|
||||
"lowpass",
|
||||
"highpass",
|
||||
"bandpass",
|
||||
"lowshelf",
|
||||
"highshelf",
|
||||
"peaking",
|
||||
"notch",
|
||||
"allpass"
|
||||
};
|
||||
|
||||
[PrefControlled]
|
||||
interface BiquadFilterNode : AudioNode {
|
||||
|
||||
// Filter type.
|
||||
const unsigned short LOWPASS = 0;
|
||||
const unsigned short HIGHPASS = 1;
|
||||
const unsigned short BANDPASS = 2;
|
||||
const unsigned short LOWSHELF = 3;
|
||||
const unsigned short HIGHSHELF = 4;
|
||||
const unsigned short PEAKING = 5;
|
||||
const unsigned short NOTCH = 6;
|
||||
const unsigned short ALLPASS = 7;
|
||||
|
||||
[SetterThrows]
|
||||
attribute unsigned short type;
|
||||
attribute BiquadFilterType type;
|
||||
readonly attribute AudioParam frequency; // in Hertz
|
||||
readonly attribute AudioParam detune; // in Cents
|
||||
readonly attribute AudioParam Q; // Quality factor
|
||||
readonly attribute AudioParam gain; // in Decibels
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user