Broadcast
This commit is contained in:
@@ -3,8 +3,8 @@ package nl.astraeus.vst.chip
|
|||||||
import kotlinx.browser.document
|
import kotlinx.browser.document
|
||||||
import kotlinx.browser.window
|
import kotlinx.browser.window
|
||||||
import nl.astraeus.komp.Komponent
|
import nl.astraeus.komp.Komponent
|
||||||
import nl.astraeus.vst.chip.channel.Broadcaster
|
import nl.astraeus.vst.chip.midi.Broadcaster
|
||||||
import nl.astraeus.vst.chip.channel.MidiMessage
|
import nl.astraeus.vst.chip.midi.MidiMessage
|
||||||
import nl.astraeus.vst.chip.midi.Midi
|
import nl.astraeus.vst.chip.midi.Midi
|
||||||
import nl.astraeus.vst.chip.view.MainView
|
import nl.astraeus.vst.chip.view.MainView
|
||||||
import org.khronos.webgl.Uint8Array
|
import org.khronos.webgl.Uint8Array
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
@file:OptIn(ExperimentalJsExport::class)
|
@file:OptIn(ExperimentalJsExport::class)
|
||||||
|
|
||||||
package nl.astraeus.vst.chip.channel
|
package nl.astraeus.vst.chip.midi
|
||||||
|
|
||||||
import kotlinx.browser.window
|
import kotlinx.browser.window
|
||||||
import org.khronos.webgl.Uint8Array
|
import org.khronos.webgl.Uint8Array
|
||||||
@@ -63,6 +63,7 @@ object Broadcaster {
|
|||||||
val channels = mutableMapOf<Int, BroadcastChannel>()
|
val channels = mutableMapOf<Int, BroadcastChannel>()
|
||||||
|
|
||||||
fun getChannel(channel: Int): BroadcastChannel = channels.getOrPut(channel) {
|
fun getChannel(channel: Int): BroadcastChannel = channels.getOrPut(channel) {
|
||||||
|
println("Opening broadcast channel $channel")
|
||||||
val bcChannel = BroadcastChannel("audio-worklet-$channel")
|
val bcChannel = BroadcastChannel("audio-worklet-$channel")
|
||||||
|
|
||||||
bcChannel.onmessage = { event ->
|
bcChannel.onmessage = { event ->
|
||||||
@@ -75,6 +76,10 @@ object Broadcaster {
|
|||||||
private fun onMessage(channel: Int, event: MessageEvent) {
|
private fun onMessage(channel: Int, event: MessageEvent) {
|
||||||
val data: dynamic = event.data.asDynamic()
|
val data: dynamic = event.data.asDynamic()
|
||||||
|
|
||||||
|
console.log(
|
||||||
|
"Received broadcast message on channel $channel",
|
||||||
|
event
|
||||||
|
)
|
||||||
if (data.type == MessageType.SYNC.name) {
|
if (data.type == MessageType.SYNC.name) {
|
||||||
val syncMessage = SyncMessage(
|
val syncMessage = SyncMessage(
|
||||||
data.timeOrigin,
|
data.timeOrigin,
|
||||||
@@ -92,6 +97,7 @@ object Broadcaster {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun send(channel: Int, message: Any) {
|
fun send(channel: Int, message: Any) {
|
||||||
|
console.log("Sending broadcast message on channel $channel:", message)
|
||||||
getChannel(channel).postMessage(message)
|
getChannel(channel).postMessage(message)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -33,8 +33,8 @@ import nl.astraeus.komp.Komponent
|
|||||||
import nl.astraeus.vst.chip.audio.VstChipWorklet
|
import nl.astraeus.vst.chip.audio.VstChipWorklet
|
||||||
import nl.astraeus.vst.chip.midi.Midi
|
import nl.astraeus.vst.chip.midi.Midi
|
||||||
import org.khronos.webgl.Uint8Array
|
import org.khronos.webgl.Uint8Array
|
||||||
|
import org.w3c.dom.HTMLInputElement
|
||||||
import org.w3c.dom.HTMLSelectElement
|
import org.w3c.dom.HTMLSelectElement
|
||||||
import org.w3c.performance.Performance
|
|
||||||
|
|
||||||
object MainView : Komponent() {
|
object MainView : Komponent() {
|
||||||
private var messages: MutableList<String> = ArrayList()
|
private var messages: MutableList<String> = ArrayList()
|
||||||
@@ -112,7 +112,7 @@ object MainView : Komponent() {
|
|||||||
type = InputType.number
|
type = InputType.number
|
||||||
value = Midi.inputChannel.toString()
|
value = Midi.inputChannel.toString()
|
||||||
onChangeFunction = { event ->
|
onChangeFunction = { event ->
|
||||||
val target = event.target as HTMLSelectElement
|
val target = event.target as HTMLInputElement
|
||||||
Midi.inputChannel = target.value.toInt()
|
Midi.inputChannel = target.value.toInt()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -156,7 +156,7 @@ object MainView : Komponent() {
|
|||||||
type = InputType.number
|
type = InputType.number
|
||||||
value = Midi.outputChannel.toString()
|
value = Midi.outputChannel.toString()
|
||||||
onChangeFunction = { event ->
|
onChangeFunction = { event ->
|
||||||
val target = event.target as HTMLSelectElement
|
val target = event.target as HTMLInputElement
|
||||||
Midi.outputChannel = target.value.toInt()
|
Midi.outputChannel = target.value.toInt()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user