new: implement web audio player with support for js and wasmJs platforms
This commit is contained in:
@@ -48,6 +48,15 @@ kotlin {
|
||||
implementation(project.dependencies.platform(libs.koin.bom))
|
||||
implementation(libs.koin.core)
|
||||
}
|
||||
// webMain is the js + wasmJs intermediate source set from the default hierarchy template.
|
||||
webMain.dependencies {
|
||||
// Browser audio (HTMLAudioElement, document) for js + wasmJs
|
||||
implementation(libs.kotlinx.browser)
|
||||
}
|
||||
wasmJsMain {
|
||||
// HTMLAudioElement interop on Wasm requires this opt-in.
|
||||
languageSettings.optIn("kotlin.js.ExperimentalWasmJsInterop")
|
||||
}
|
||||
commonTest.dependencies {
|
||||
implementation(libs.kotlin.test)
|
||||
}
|
||||
|
||||
@@ -1,23 +0,0 @@
|
||||
package fr.ajaury.gwenedeg.player
|
||||
|
||||
class JsAudioPlayer : AudioPlayer {
|
||||
override fun play() {
|
||||
TODO("Not yet implemented")
|
||||
}
|
||||
|
||||
override fun pause() {
|
||||
TODO("Not yet implemented")
|
||||
}
|
||||
|
||||
override fun stop() {
|
||||
TODO("Not yet implemented")
|
||||
}
|
||||
|
||||
override fun release() {
|
||||
TODO("Not yet implemented")
|
||||
}
|
||||
|
||||
override fun load(uri: String) {
|
||||
TODO("Not yet implemented")
|
||||
}
|
||||
}
|
||||
-6
@@ -1,6 +0,0 @@
|
||||
package fr.ajaury.gwenedeg.player.di
|
||||
|
||||
import org.koin.core.module.Module
|
||||
|
||||
actual val audioPlayerModule: Module
|
||||
get() = TODO("Not yet implemented")
|
||||
@@ -1,23 +0,0 @@
|
||||
package fr.ajaury.gwenedeg.player
|
||||
|
||||
class WasmAudioPlayer : AudioPlayer {
|
||||
override fun play() {
|
||||
TODO("Not yet implemented")
|
||||
}
|
||||
|
||||
override fun pause() {
|
||||
TODO("Not yet implemented")
|
||||
}
|
||||
|
||||
override fun stop() {
|
||||
TODO("Not yet implemented")
|
||||
}
|
||||
|
||||
override fun release() {
|
||||
TODO("Not yet implemented")
|
||||
}
|
||||
|
||||
override fun load(uri: String) {
|
||||
TODO("Not yet implemented")
|
||||
}
|
||||
}
|
||||
-6
@@ -1,6 +0,0 @@
|
||||
package fr.ajaury.gwenedeg.player.di
|
||||
|
||||
import org.koin.core.module.Module
|
||||
|
||||
actual val audioPlayerModule: Module
|
||||
get() = TODO("Not yet implemented")
|
||||
@@ -0,0 +1,32 @@
|
||||
package fr.ajaury.gwenedeg.player
|
||||
|
||||
import kotlinx.browser.document
|
||||
import org.w3c.dom.HTMLAudioElement
|
||||
|
||||
class WebAudioPlayer : AudioPlayer {
|
||||
private var audio: HTMLAudioElement? = null
|
||||
|
||||
override fun load(uri: String) {
|
||||
audio = (document.createElement("audio") as HTMLAudioElement).apply {
|
||||
src = uri
|
||||
}
|
||||
}
|
||||
|
||||
override fun play() {
|
||||
audio?.play()
|
||||
}
|
||||
|
||||
override fun pause() {
|
||||
audio?.pause()
|
||||
}
|
||||
|
||||
override fun stop() {
|
||||
audio?.pause()
|
||||
audio?.currentTime = 0.0
|
||||
}
|
||||
|
||||
override fun release() {
|
||||
audio?.pause()
|
||||
audio = null
|
||||
}
|
||||
}
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
package fr.ajaury.gwenedeg.player
|
||||
|
||||
class WebAudioSessionManager : AudioSessionManager {
|
||||
override fun activate() {
|
||||
}
|
||||
|
||||
override fun deactivate() {
|
||||
}
|
||||
}
|
||||
+13
@@ -0,0 +1,13 @@
|
||||
package fr.ajaury.gwenedeg.player.di
|
||||
|
||||
import fr.ajaury.gwenedeg.player.AudioPlayer
|
||||
import fr.ajaury.gwenedeg.player.AudioSessionManager
|
||||
import fr.ajaury.gwenedeg.player.WebAudioPlayer
|
||||
import fr.ajaury.gwenedeg.player.WebAudioSessionManager
|
||||
import org.koin.core.module.Module
|
||||
import org.koin.dsl.module
|
||||
|
||||
actual val audioPlayerModule: Module = module {
|
||||
single<AudioPlayer> { WebAudioPlayer() }
|
||||
single<AudioSessionManager> { WebAudioSessionManager() }
|
||||
}
|
||||
Reference in New Issue
Block a user