diff --git a/juicy-noise-android/app/src/main/java/com/danand/juicynoise/AudioOutput.kt b/juicy-noise-android/app/src/main/java/com/danand/juicynoise/AudioOutput.kt index 63896a5..084b948 100644 --- a/juicy-noise-android/app/src/main/java/com/danand/juicynoise/AudioOutput.kt +++ b/juicy-noise-android/app/src/main/java/com/danand/juicynoise/AudioOutput.kt @@ -53,24 +53,42 @@ class AudioOutput( val bufferSizeMono = bufferSize / 2 - val bufferMono = FloatArray(bufferSizeMono) + val bufferMonoLeft = FloatArray(bufferSizeMono) + val bufferMonoRight = FloatArray(bufferSizeMono) val sampleTimeStep = 1.0f / samplingRate var timeElapsedSeconds = 0.0f while (isActive) { - for (sampleIndex in bufferMono.indices) { + for (sampleIndex in bufferMonoLeft.indices) { val sampleTime = timeElapsedSeconds + (sampleIndex * sampleTimeStep) var sampleValueMax = 0.0f for (signalProcessor in signalProcessors) { - val sampleValue = signalProcessor.process(sampleTime) - sampleValueMax = max(sampleValueMax, sampleValue) + if (signalProcessor.getChannel() == 0) { + val sampleValue = signalProcessor.process(sampleTime) + sampleValueMax = max(sampleValueMax, sampleValue) + } } - bufferMono[sampleIndex] = sampleValueMax + bufferMonoLeft[sampleIndex] = sampleValueMax + } + + for (sampleIndex in bufferMonoRight.indices) { + val sampleTime = timeElapsedSeconds + (sampleIndex * sampleTimeStep) + + var sampleValueMax = 0.0f + + for (signalProcessor in signalProcessors) { + if (signalProcessor.getChannel() == 1) { + val sampleValue = signalProcessor.process(sampleTime) + sampleValueMax = max(sampleValueMax, sampleValue) + } + } + + bufferMonoRight[sampleIndex] = sampleValueMax } // TODO: Uncomment when delay effect will be fixed. @@ -82,9 +100,9 @@ class AudioOutput( var sampleIndexStereo = 0 - for (sampleIndexMono in bufferMono.indices) { - bufferStereo[sampleIndexStereo] = bufferMono[sampleIndexMono] - bufferStereo[sampleIndexStereo + 1] = bufferMono[sampleIndexMono] + for (sampleIndexMono in bufferMonoLeft.indices) { + bufferStereo[sampleIndexStereo] = bufferMonoLeft[sampleIndexMono] + bufferStereo[sampleIndexStereo + 1] = bufferMonoRight[sampleIndexMono] sampleIndexStereo += 2 } diff --git a/juicy-noise-android/app/src/main/java/com/danand/juicynoise/MainActivity.kt b/juicy-noise-android/app/src/main/java/com/danand/juicynoise/MainActivity.kt index a9ab3fa..5c49ed2 100644 --- a/juicy-noise-android/app/src/main/java/com/danand/juicynoise/MainActivity.kt +++ b/juicy-noise-android/app/src/main/java/com/danand/juicynoise/MainActivity.kt @@ -172,12 +172,15 @@ class MainActivity : ComponentActivity(), SensorEventListener { pressure = sensorManager.getDefaultSensor(Sensor.TYPE_PRESSURE) proximity = sensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY) - val signalProcessorSensors = SignalProcessorSensors(sensorsState) + val signalProcessorSensorsLeft = SignalProcessorSensors(sensorsState, 0) + val signalProcessorSensorsRight = SignalProcessorSensors(sensorsState, 1) + val effectDelay = EffectDelay(sensorsState) audioOutput = AudioOutput( arrayOf( - signalProcessorSensors, + signalProcessorSensorsLeft, + signalProcessorSensorsRight, ), arrayOf( effectDelay, diff --git a/juicy-noise-android/app/src/main/java/com/danand/juicynoise/interfaces/SignalProcessor.kt b/juicy-noise-android/app/src/main/java/com/danand/juicynoise/interfaces/SignalProcessor.kt index d8e15e6..f5a6450 100644 --- a/juicy-noise-android/app/src/main/java/com/danand/juicynoise/interfaces/SignalProcessor.kt +++ b/juicy-noise-android/app/src/main/java/com/danand/juicynoise/interfaces/SignalProcessor.kt @@ -1,5 +1,7 @@ package com.danand.juicynoise.interfaces interface SignalProcessor { + fun getChannel(): Int + fun process(time: Float): Float } diff --git a/juicy-noise-android/app/src/main/java/com/danand/juicynoise/signalprocessors/SignalProcessorSensors.kt b/juicy-noise-android/app/src/main/java/com/danand/juicynoise/signalprocessors/SignalProcessorSensors.kt index b8d0fb2..f95482e 100644 --- a/juicy-noise-android/app/src/main/java/com/danand/juicynoise/signalprocessors/SignalProcessorSensors.kt +++ b/juicy-noise-android/app/src/main/java/com/danand/juicynoise/signalprocessors/SignalProcessorSensors.kt @@ -18,7 +18,10 @@ import kotlin.math.min import kotlin.math.tanh import kotlin.random.Random -class SignalProcessorSensors(private val sensorsState: MutableState) : SignalProcessor { +class SignalProcessorSensors( + private val sensorsState: MutableState, + private val channel: Int, + ) : SignalProcessor { private val sensorGetters: Array<() -> Float> = arrayOf( { sensorsState.value.longitude }, { sensorsState.value.latitude }, @@ -93,6 +96,10 @@ class SignalProcessorSensors(private val sensorsState: MutableState) : private var weirdEffectDivider = 9 + override fun getChannel(): Int { + return this.channel + } + override fun process(time: Float): Float { val angularSpeedMagnitude = magnitude( this.sensorsState.value.angularSpeedX,