From 4d7b29a27073c1cf2ece31898962aa24648c26a2 Mon Sep 17 00:00:00 2001 From: rnentjes Date: Tue, 21 Feb 2023 21:11:35 +0100 Subject: [PATCH] Simpler sound example --- .../kotlin/WorkletProcessor.kt | 114 +++--------------- 1 file changed, 18 insertions(+), 96 deletions(-) diff --git a/src/jsAudioWorkletMain/kotlin/WorkletProcessor.kt b/src/jsAudioWorkletMain/kotlin/WorkletProcessor.kt index f07319f..82448b9 100644 --- a/src/jsAudioWorkletMain/kotlin/WorkletProcessor.kt +++ b/src/jsAudioWorkletMain/kotlin/WorkletProcessor.kt @@ -1,7 +1,6 @@ @file:OptIn(ExperimentalJsExport::class) import org.khronos.webgl.Float64Array -import org.khronos.webgl.get import org.khronos.webgl.set import org.w3c.dom.MessageEvent import org.w3c.dom.MessagePort @@ -13,19 +12,9 @@ import kotlin.math.sin object WorkletProcessor { var port: MessagePort? = null - var offsets = Array(5) { 0.0 } var counter: Int = 0 - var baseNote = Note.C2 - val CARRAY = arrayOf( - Note.C1, - Note.C2, - Note.C3, - Note.C4, - Note.C5, - Note.C6, - Note.C7, - Note.C8, - ) + var note = Note.C2 + var offset = 0.0 @JsName("setPort") fun setPort(port: MessagePort) { @@ -53,96 +42,29 @@ object WorkletProcessor { @JsName("process") fun process(samples: Int, left: Float64Array, right: Float64Array) { - var first = true - for (index in offsets.indices) { - var offset = offsets[index] - var tmpCounter = counter - var offsetNote = baseNote.transpose(index * 12) - var delta = offsetNote.sampleDelta - - for (sample in 0 until samples) { - var value = sin(offset * 2 * PI) - offset += delta - - val noteProgress = tmpCounter % 5000 - if (noteProgress == 0) { - offsetNote = offsetNote.transpose(1) - if (offsetNote in CARRAY) { - offsetNote = offsetNote.transpose(-12) - } - delta = offsetNote.sampleDelta - } - value *= (1.0 - noteProgress / 5000.0) - - if (first) { - left[sample] = value - right[sample] = value - } else { - left[sample] = left[sample] + value - right[sample] = right[sample] + value - } - tmpCounter++ - } - - offsets[index] = offset - first = false - } - var tmpCounter = counter + var delta = note.sampleDelta + for (sample in 0 until samples) { - if (tmpCounter % 5000 == 0) { - baseNote = baseNote.transpose(1) - if (baseNote in CARRAY) { - baseNote = baseNote.transpose(-12) + var value = sin(offset * 2 * PI) + offset += delta + + val noteProgress = tmpCounter % 5000 + if (noteProgress == 0) { + note = note.transpose(1) + if (note == Note.C7) { + note = Note.C2 } + delta = note.sampleDelta } + value *= (1.0 - noteProgress / 5000.0) + + left[sample] = value + right[sample] = value tmpCounter++ } + counter += samples - - val nrOffsets = offsets.size - for (sample in 0 until samples) { - left[sample] = left[sample] / nrOffsets - right[sample] = right[sample] / nrOffsets - } - - /* for (sample in 0 until samples) { - val noteProgress = counter % 5000 - if (noteProgress == 0) { - baseNote = baseNote.transpose(1) - if (baseNote == Note.C3s) { - baseNote = Note.C2 - } - } - var value = 0.0 - var volumeAdjust = (Note.C3.ordinal - baseNote.ordinal) / 12.0 - for (index in 0 until offsets.size) { - offsets[index] = (offsets[index] + (baseNote.transpose(index * 12).sampleDelta)) % 1.0 - - var partValue = sin(offsets[index] * 2 * PI) - if (index == 0) { - partValue *= volumeAdjust - } else if (index == offsets.size - 1) { - partValue *= (1.0 - volumeAdjust) - } - - value += partValue - - } - - value /= offsets.size - // simple amplitude - value *= if (noteProgress < 0.1) { - (noteProgress / 500.0) - } else { - (1.0 - (noteProgress - 0.1) / 4500.0) - } - - left[sample] = value - right[sample] = value - - counter++ - }*/ } }