From fac4f25effaff8f494f2db31b4ab410bf1495801 Mon Sep 17 00:00:00 2001 From: Maciej Makowski Date: Fri, 23 Aug 2024 10:15:07 +0200 Subject: [PATCH 1/3] refactor: moved parameters classes to parameter folder --- ios/{params => parameters}/AudioParam/AudioParam.h | 0 ios/{params => parameters}/AudioParam/AudioParam.m | 0 ios/{params => parameters}/AudioParam/IOSAudioParam.h | 0 ios/{params => parameters}/AudioParam/IOSAudioParam.mm | 0 ios/{params => parameters}/ParamChange/ParamChange.h | 0 ios/{params => parameters}/ParamChange/ParamChange.m | 0 6 files changed, 0 insertions(+), 0 deletions(-) rename ios/{params => parameters}/AudioParam/AudioParam.h (100%) rename ios/{params => parameters}/AudioParam/AudioParam.m (100%) rename ios/{params => parameters}/AudioParam/IOSAudioParam.h (100%) rename ios/{params => parameters}/AudioParam/IOSAudioParam.mm (100%) rename ios/{params => parameters}/ParamChange/ParamChange.h (100%) rename ios/{params => parameters}/ParamChange/ParamChange.m (100%) diff --git a/ios/params/AudioParam/AudioParam.h b/ios/parameters/AudioParam/AudioParam.h similarity index 100% rename from ios/params/AudioParam/AudioParam.h rename to ios/parameters/AudioParam/AudioParam.h diff --git a/ios/params/AudioParam/AudioParam.m b/ios/parameters/AudioParam/AudioParam.m similarity index 100% rename from ios/params/AudioParam/AudioParam.m rename to ios/parameters/AudioParam/AudioParam.m diff --git a/ios/params/AudioParam/IOSAudioParam.h b/ios/parameters/AudioParam/IOSAudioParam.h similarity index 100% rename from ios/params/AudioParam/IOSAudioParam.h rename to ios/parameters/AudioParam/IOSAudioParam.h diff --git a/ios/params/AudioParam/IOSAudioParam.mm b/ios/parameters/AudioParam/IOSAudioParam.mm similarity index 100% rename from ios/params/AudioParam/IOSAudioParam.mm rename to ios/parameters/AudioParam/IOSAudioParam.mm diff --git a/ios/params/ParamChange/ParamChange.h b/ios/parameters/ParamChange/ParamChange.h similarity index 100% rename from ios/params/ParamChange/ParamChange.h rename to ios/parameters/ParamChange/ParamChange.h diff --git a/ios/params/ParamChange/ParamChange.m b/ios/parameters/ParamChange/ParamChange.m similarity index 100% rename from ios/params/ParamChange/ParamChange.m rename to ios/parameters/ParamChange/ParamChange.m From c5db447e4d29d1240b15316ed34403375c014fe0 Mon Sep 17 00:00:00 2001 From: Maciej Makowski Date: Fri, 23 Aug 2024 10:23:25 +0200 Subject: [PATCH 2/3] feat: implemented new panning algorithm for StereoPannerNode on Android --- .../com/audiocontext/nodes/StereoPannerNode.kt | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/android/src/main/java/com/audiocontext/nodes/StereoPannerNode.kt b/android/src/main/java/com/audiocontext/nodes/StereoPannerNode.kt index 460564bc..61291db0 100644 --- a/android/src/main/java/com/audiocontext/nodes/StereoPannerNode.kt +++ b/android/src/main/java/com/audiocontext/nodes/StereoPannerNode.kt @@ -6,7 +6,9 @@ import com.audiocontext.context.BaseAudioContext import com.audiocontext.parameters.AudioParam import com.audiocontext.parameters.PlaybackParameters import com.audiocontext.utils.Constants -import kotlin.math.min +import kotlin.math.* + +// https://webaudio.github.io/web-audio-api/#stereopanner-algorithm class StereoPannerNode(context: BaseAudioContext): AudioNode(context) { override val numberOfInputs: Int = 1 @@ -16,9 +18,14 @@ class StereoPannerNode(context: BaseAudioContext): AudioNode(context) { @RequiresApi(Build.VERSION_CODES.N) override fun process(playbackParameters: PlaybackParameters) { - val currentTime = context.getCurrentTime() - playbackParameters.leftPan *= min(1.0 - pan.getValueAtTime(currentTime), 1.0) - playbackParameters.rightPan *= min(1.0 + pan.getValueAtTime(currentTime), 1.0) + val pan = pan.getValueAtTime(context.getCurrentTime()) + val x = (pan + 1) / 2; + + val gainL = cos(x * PI / 2); + val gainR = sin(x * PI / 2); + + playbackParameters.leftPan *= gainL + playbackParameters.rightPan *= gainR super.process(playbackParameters) } } From efa8144656f27bcb873ce92e8d08d793d0b120c6 Mon Sep 17 00:00:00 2001 From: Maciej Makowski Date: Fri, 23 Aug 2024 10:27:54 +0200 Subject: [PATCH 3/3] feat: implemented new panning algorithm for StereoPannerNode on IOS --- .../com/audiocontext/nodes/StereoPannerNode.kt | 1 + ios/nodes/StereoPannerNode/StereoPannerNode.m | 15 +++++++++++---- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/android/src/main/java/com/audiocontext/nodes/StereoPannerNode.kt b/android/src/main/java/com/audiocontext/nodes/StereoPannerNode.kt index 61291db0..6e0682ec 100644 --- a/android/src/main/java/com/audiocontext/nodes/StereoPannerNode.kt +++ b/android/src/main/java/com/audiocontext/nodes/StereoPannerNode.kt @@ -26,6 +26,7 @@ class StereoPannerNode(context: BaseAudioContext): AudioNode(context) { playbackParameters.leftPan *= gainL playbackParameters.rightPan *= gainR + super.process(playbackParameters) } } diff --git a/ios/nodes/StereoPannerNode/StereoPannerNode.m b/ios/nodes/StereoPannerNode/StereoPannerNode.m index be52c2de..aaf85679 100644 --- a/ios/nodes/StereoPannerNode/StereoPannerNode.m +++ b/ios/nodes/StereoPannerNode/StereoPannerNode.m @@ -1,6 +1,8 @@ #import "StereoPannerNode.h" #import "AudioContext.h" +// https://webaudio.github.io/web-audio-api/#stereopanner-algorithm + @implementation StereoPannerNode - (instancetype)initWithContext:(AudioContext *)context { @@ -18,10 +20,15 @@ - (void)cleanup { } - (void)processWithParameters:(PlaybackParameters *)parameters { - double currentTime = [self.context getCurrentTime]; - parameters.leftGain *= fmin(1.0 - [_panParam getValueAtTime:currentTime], 1.0); - parameters.rightGain *= fmin(1.0 + [_panParam getValueAtTime:currentTime], 1.0); - + double pan = [_panParam getValueAtTime:[self.context getCurrentTime]]; + double x = (pan + 1) / 2; + + double gainL = cos(x * M_PI / 2); + double gainR = sin(x * M_PI / 2); + + parameters.leftGain *= gainL; + parameters.rightGain *= gainR; + [super processWithParameters:parameters]; }