diff --git a/ProjectObsidian/Elements/Audio.cs b/ProjectObsidian/Elements/Audio.cs index cb39618..1d07767 100644 --- a/ProjectObsidian/Elements/Audio.cs +++ b/ProjectObsidian/Elements/Audio.cs @@ -164,12 +164,12 @@ public void Process(Span buffer, float lowFreq, float highFreq, float reso public static class Algorithms { - public static void SineShapedRingModulation(Span buffer, Span input1, Span input2, float modulationIndex) where S : unmanaged, IAudioSample + public static void SineShapedRingModulation(Span buffer, Span input1, Span input2, float modulationIndex, int channelCount) where S : unmanaged, IAudioSample { // Apply sine-shaped ring modulation for (int i = 0; i < buffer.Length; i++) { - for (int j = 0; j < buffer[i].ChannelCount; j++) + for (int j = 0; j < channelCount; j++) { float carrierValue = input1[i][j]; float modulatorValue = input2[i][j]; @@ -221,14 +221,14 @@ private static double[] CalculateInstantaneousPhase(Span buffer) where S : return phase; } - public static void PhaseModulation(Span buffer, Span input1, Span input2, float modulationIndex) where S : unmanaged, IAudioSample + public static void PhaseModulation(Span buffer, Span input1, Span input2, float modulationIndex, int channelCount) where S : unmanaged, IAudioSample { double[] carrierPhase = CalculateInstantaneousPhase(input1); // Apply phase modulation for (int i = 0; i < buffer.Length; i++) { - for (int j = 0; j < buffer[i].ChannelCount; j++) + for (int j = 0; j < channelCount; j++) { double modifiedPhase = carrierPhase[i] + (modulationIndex * input2[i][j]); @@ -244,12 +244,12 @@ public static void PhaseModulation(Span buffer, Span input1, Span in } } - public static void RingModulation(Span buffer, Span input1, Span input2, float modulationIndex) where S : unmanaged, IAudioSample + public static void RingModulation(Span buffer, Span input1, Span input2, float modulationIndex, int channelCount) where S : unmanaged, IAudioSample { // Apply ring modulation for (int i = 0; i < buffer.Length; i++) { - for (int j = 0; j < buffer[i].ChannelCount; j++) + for (int j = 0; j < channelCount; j++) { float carrierValue = input1[i][j]; float modulatorValue = input2[i][j]; diff --git a/ProjectObsidian/ProtoFlux/Audio/AudioAdder.cs b/ProjectObsidian/ProtoFlux/Audio/AudioAdder.cs index 0962b14..f03ad53 100644 --- a/ProjectObsidian/ProtoFlux/Audio/AudioAdder.cs +++ b/ProjectObsidian/ProtoFlux/Audio/AudioAdder.cs @@ -4,6 +4,7 @@ using FrooxEngine.ProtoFlux; using FrooxEngine; using Elements.Assets; +using Elements.Core; namespace ProtoFlux.Runtimes.Execution.Nodes.Obsidian.Audio { @@ -50,7 +51,7 @@ public void Read(Span buffer) where S : unmanaged, IAudioSample { newBuffer[i] = newBuffer[i].Add(newBuffer2[i]); - for (int j = 0; j < newBuffer[i].ChannelCount; j++) + for (int j = 0; j < ChannelCount; j++) { if (newBuffer[i][j] > 1f) newBuffer[i] = newBuffer[i].SetChannel(j, 1f); else if (newBuffer[i][j] < -1f) newBuffer[i] = newBuffer[i].SetChannel(j, -1f); diff --git a/ProjectObsidian/ProtoFlux/Audio/AudioMultiply.cs b/ProjectObsidian/ProtoFlux/Audio/AudioMultiply.cs index 3bc8228..cb5c57d 100644 --- a/ProjectObsidian/ProtoFlux/Audio/AudioMultiply.cs +++ b/ProjectObsidian/ProtoFlux/Audio/AudioMultiply.cs @@ -41,7 +41,7 @@ public void Read(Span buffer) where S : unmanaged, IAudioSample { newBuffer[i] = newBuffer[i].Multiply(Value); - for (int j = 0; j < newBuffer[i].ChannelCount; j++) + for (int j = 0; j < ChannelCount; j++) { if (newBuffer[i][j] > 1f) newBuffer[i] = newBuffer[i].SetChannel(j, 1f); if (newBuffer[i][j] < -1f) newBuffer[i] = newBuffer[i].SetChannel(j, -1f); diff --git a/ProjectObsidian/ProtoFlux/Audio/AudioSubtractor.cs b/ProjectObsidian/ProtoFlux/Audio/AudioSubtractor.cs index fe301fd..112e452 100644 --- a/ProjectObsidian/ProtoFlux/Audio/AudioSubtractor.cs +++ b/ProjectObsidian/ProtoFlux/Audio/AudioSubtractor.cs @@ -50,7 +50,7 @@ public void Read(Span buffer) where S : unmanaged, IAudioSample { newBuffer[i] = newBuffer[i].Subtract(newBuffer2[i]); - for (int j = 0; j < newBuffer[i].ChannelCount; j++) + for (int j = 0; j < ChannelCount; j++) { if (newBuffer[i][j] > 1f) newBuffer[i] = newBuffer[i].SetChannel(j, 1f); else if (newBuffer[i][j] < -1f) newBuffer[i] = newBuffer[i].SetChannel(j, -1f); diff --git a/ProjectObsidian/ProtoFlux/Audio/ChannelSplitter.cs b/ProjectObsidian/ProtoFlux/Audio/ChannelSplitter.cs index 0ee6af2..fa7d71d 100644 --- a/ProjectObsidian/ProtoFlux/Audio/ChannelSplitter.cs +++ b/ProjectObsidian/ProtoFlux/Audio/ChannelSplitter.cs @@ -17,7 +17,7 @@ public class ChannelSplitterProxy : ProtoFluxEngineProxy, IAudioSource public bool IsActive => Active; - public int ChannelCount => 2; + public int ChannelCount => 1; public void Read(Span buffer) where S : unmanaged, IAudioSample { diff --git a/ProjectObsidian/ProtoFlux/Audio/PhaseModulatorNode.cs b/ProjectObsidian/ProtoFlux/Audio/PhaseModulatorNode.cs index d7a4ef7..e0e48f0 100644 --- a/ProjectObsidian/ProtoFlux/Audio/PhaseModulatorNode.cs +++ b/ProjectObsidian/ProtoFlux/Audio/PhaseModulatorNode.cs @@ -51,7 +51,7 @@ public void Read(Span buffer) where S : unmanaged, IAudioSample newBuffer2.Fill(default); } - Algorithms.PhaseModulation(buffer, newBuffer, newBuffer2, ModulationIndex); + Algorithms.PhaseModulation(buffer, newBuffer, newBuffer2, ModulationIndex, ChannelCount); } } [NodeCategory("Obsidian/Audio/Effects")] diff --git a/ProjectObsidian/ProtoFlux/Audio/RingModulatorNode.cs b/ProjectObsidian/ProtoFlux/Audio/RingModulatorNode.cs index 28e62f0..c2f23e6 100644 --- a/ProjectObsidian/ProtoFlux/Audio/RingModulatorNode.cs +++ b/ProjectObsidian/ProtoFlux/Audio/RingModulatorNode.cs @@ -52,7 +52,7 @@ public void Read(Span buffer) where S : unmanaged, IAudioSample newBuffer2.Fill(default); } - Algorithms.RingModulation(buffer, newBuffer, newBuffer2, ModulationIndex); + Algorithms.RingModulation(buffer, newBuffer, newBuffer2, ModulationIndex, ChannelCount); } } [NodeCategory("Obsidian/Audio/Effects")] diff --git a/ProjectObsidian/ProtoFlux/Audio/SineShapedRingModulatorNode.cs b/ProjectObsidian/ProtoFlux/Audio/SineShapedRingModulatorNode.cs index 6eeb60a..8df9049 100644 --- a/ProjectObsidian/ProtoFlux/Audio/SineShapedRingModulatorNode.cs +++ b/ProjectObsidian/ProtoFlux/Audio/SineShapedRingModulatorNode.cs @@ -51,7 +51,7 @@ public void Read(Span buffer) where S : unmanaged, IAudioSample newBuffer2.Fill(default); } - Algorithms.SineShapedRingModulation(buffer, newBuffer, newBuffer2, ModulationIndex); + Algorithms.SineShapedRingModulation(buffer, newBuffer, newBuffer2, ModulationIndex, ChannelCount); } } [NodeCategory("Obsidian/Audio/Effects")]