Skip to content

Commit c9cfa78

Browse files
refactor: added param owner node
1 parent bd4637c commit c9cfa78

12 files changed

Lines changed: 37 additions & 25 deletions

File tree

packages/react-native-audio-api/common/cpp/audioapi/HostObjects/AudioNodeHostObject.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -66,8 +66,8 @@ JSI_HOST_FUNCTION_IMPL(AudioNodeHostObject, connect) {
6666
connect(*node);
6767
} else if (obj.isHostObject<AudioParamHostObject>(runtime)) {
6868
auto param = obj.getHostObject<AudioParamHostObject>(runtime);
69-
// TODO
70-
// connectParam(*param->owner_, param->param_.get());
69+
auto owner = args[1].getObject(runtime).getHostObject<AudioNodeHostObject>(runtime);
70+
connectParam(*owner, param->param_.get());
7171
}
7272
return jsi::Value::undefined();
7373
}
@@ -84,8 +84,8 @@ JSI_HOST_FUNCTION_IMPL(AudioNodeHostObject, disconnect) {
8484
disconnect(*node);
8585
} else if (obj.isHostObject<AudioParamHostObject>(runtime)) {
8686
auto param = obj.getHostObject<AudioParamHostObject>(runtime);
87-
// TODO
88-
// disconnectParam(*param->owner_, param->param_.get());
87+
auto owner = args[1].getObject(runtime).getHostObject<AudioNodeHostObject>(runtime);
88+
disconnectParam(*owner, param->param_.get());
8989
}
9090

9191
return jsi::Value::undefined();

packages/react-native-audio-api/src/core/AudioBufferBaseSourceNode.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@ export default class AudioBufferBaseSourceNode extends AudioScheduledSourceNode
1414
constructor(context: BaseAudioContext, node: IAudioBufferBaseSourceNode) {
1515
super(context, node);
1616

17-
this.detune = new AudioParam(node.detune, context);
18-
this.playbackRate = new AudioParam(node.playbackRate, context);
17+
this.detune = new AudioParam(node.detune, context, this);
18+
this.playbackRate = new AudioParam(node.playbackRate, context, this);
1919
}
2020

2121
public get onPositionChanged():

packages/react-native-audio-api/src/core/AudioNode.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ export default class AudioNode {
3737
}
3838

3939
if (destination instanceof AudioParam) {
40-
this.node.connect(destination.audioParam);
40+
this.node.connect(destination.audioParam, destination.owner.node);
4141
} else {
4242
if (destination.numberOfInputs === 0) {
4343
throw new IndexSizeError(
@@ -52,9 +52,11 @@ export default class AudioNode {
5252

5353
public disconnect(destination?: AudioNode | AudioParam): void {
5454
if (destination instanceof AudioParam) {
55-
this.node.disconnect(destination.audioParam);
55+
this.node.disconnect(destination.audioParam, destination.owner.node);
56+
} else if (destination) {
57+
this.node.disconnect(destination.node);
5658
} else {
57-
this.node.disconnect(destination?.node);
59+
this.node.disconnect();
5860
}
5961
}
6062
}

packages/react-native-audio-api/src/core/AudioParam.ts

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,29 @@
11
import { IAudioParam } from '../interfaces';
22
import { RangeError, InvalidStateError } from '../errors';
33
import BaseAudioContext from './BaseAudioContext';
4+
import AudioNode from './AudioNode';
45

56
export default class AudioParam {
67
readonly defaultValue: number;
78
readonly minValue: number;
89
readonly maxValue: number;
910
readonly audioParam: IAudioParam;
1011
readonly context: BaseAudioContext;
11-
12-
constructor(audioParam: IAudioParam, context: BaseAudioContext) {
12+
/** @internal */
13+
public readonly owner: AudioNode;
14+
15+
constructor(
16+
audioParam: IAudioParam,
17+
context: BaseAudioContext,
18+
owner: AudioNode
19+
) {
1320
this.audioParam = audioParam;
1421
this.value = audioParam.value;
1522
this.defaultValue = audioParam.defaultValue;
1623
this.minValue = audioParam.minValue;
1724
this.maxValue = audioParam.maxValue;
1825
this.context = context;
26+
this.owner = owner;
1927
}
2028

2129
public get value(): number {

packages/react-native-audio-api/src/core/BiquadFilterNode.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,10 @@ export default class BiquadFilterNode extends AudioNode {
1616
options || {}
1717
);
1818
super(context, biquadFilter);
19-
this.frequency = new AudioParam(biquadFilter.frequency, context);
20-
this.detune = new AudioParam(biquadFilter.detune, context);
21-
this.Q = new AudioParam(biquadFilter.Q, context);
22-
this.gain = new AudioParam(biquadFilter.gain, context);
19+
this.frequency = new AudioParam(biquadFilter.frequency, context, this);
20+
this.detune = new AudioParam(biquadFilter.detune, context, this);
21+
this.Q = new AudioParam(biquadFilter.Q, context, this);
22+
this.gain = new AudioParam(biquadFilter.gain, context, this);
2323
}
2424

2525
public get type(): BiquadFilterType {

packages/react-native-audio-api/src/core/ConstantSourceNode.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,6 @@ export default class ConstantSourceNode extends AudioScheduledSourceNode {
1212
options || {}
1313
);
1414
super(context, node);
15-
this.offset = new AudioParam(node.offset, context);
15+
this.offset = new AudioParam(node.offset, context, this);
1616
}
1717
}

packages/react-native-audio-api/src/core/DelayNode.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,6 @@ export default class DelayNode extends AudioNode {
99
constructor(context: BaseAudioContext, options?: DelayOptions) {
1010
const delay = context.context.createDelay(options || {});
1111
super(context, delay);
12-
this.delayTime = new AudioParam(delay.delayTime, context);
12+
this.delayTime = new AudioParam(delay.delayTime, context, this);
1313
}
1414
}

packages/react-native-audio-api/src/core/GainNode.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,6 @@ export default class GainNode extends AudioNode {
1010
constructor(context: BaseAudioContext, options?: GainOptions) {
1111
const gainNode: IGainNode = context.context.createGain(options || {});
1212
super(context, gainNode);
13-
this.gain = new AudioParam(gainNode.gain, context);
13+
this.gain = new AudioParam(gainNode.gain, context, this);
1414
}
1515
}

packages/react-native-audio-api/src/core/OscillatorNode.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@ export default class OscillatorNode extends AudioScheduledSourceNode {
1717

1818
const node = context.context.createOscillator(options || {});
1919
super(context, node);
20-
this.frequency = new AudioParam(node.frequency, context);
21-
this.detune = new AudioParam(node.detune, context);
20+
this.frequency = new AudioParam(node.frequency, context, this);
21+
this.detune = new AudioParam(node.detune, context, this);
2222
this.type = node.type;
2323
}
2424

packages/react-native-audio-api/src/core/StereoPannerNode.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,6 @@ export default class StereoPannerNode extends AudioNode {
1212
options || {}
1313
);
1414
super(context, pan);
15-
this.pan = new AudioParam(pan.pan, context);
15+
this.pan = new AudioParam(pan.pan, context, this);
1616
}
1717
}

0 commit comments

Comments
 (0)