diff --git a/.idea/jsLibraryMappings.xml b/.idea/jsLibraryMappings.xml deleted file mode 100644 index 9b40f69..0000000 --- a/.idea/jsLibraryMappings.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/audio-worklet/build.gradle.kts b/audio-worklet/build.gradle.kts index 6eb7ea2..73a0e21 100644 --- a/audio-worklet/build.gradle.kts +++ b/audio-worklet/build.gradle.kts @@ -40,15 +40,9 @@ kotlin { sourceSets { val commonMain by getting { dependencies { - implementation(project(":common")) - implementation("nl.astraeus:vst-worklet-base:1.0.0-SNAPSHOT") } } - val jsMain by getting { - dependencies { - implementation(project(":common")) - } - } + val jsMain by getting } } diff --git a/audio-worklet/src/jsMain/kotlin/nl/astraeus/vst/chip/ChipProcessor.kt b/audio-worklet/src/jsMain/kotlin/nl/astraeus/vst/chip/ChipProcessor.kt index fa7e784..77b088c 100644 --- a/audio-worklet/src/jsMain/kotlin/nl/astraeus/vst/chip/ChipProcessor.kt +++ b/audio-worklet/src/jsMain/kotlin/nl/astraeus/vst/chip/ChipProcessor.kt @@ -4,7 +4,6 @@ package nl.astraeus.vst.chip import nl.astraeus.vst.ADSR import nl.astraeus.vst.AudioWorkletProcessor -import nl.astraeus.vst.Note import nl.astraeus.vst.currentTime import nl.astraeus.vst.registerProcessor import nl.astraeus.vst.sampleRate @@ -21,6 +20,8 @@ import kotlin.math.sin val POLYPHONICS = 10 val PI2 = PI * 2 +@ExperimentalJsExport +@JsExport class PlayingNote( val note: Int, var velocity: Int = 0 diff --git a/audio-worklet/src/jsMain/kotlin/nl/astraeus/vst/chip/Note.kt b/audio-worklet/src/jsMain/kotlin/nl/astraeus/vst/chip/Note.kt new file mode 100644 index 0000000..6e2f642 --- /dev/null +++ b/audio-worklet/src/jsMain/kotlin/nl/astraeus/vst/chip/Note.kt @@ -0,0 +1,196 @@ +package nl.astraeus.vst.chip + +import nl.astraeus.vst.chip.Note.entries +import kotlin.math.max +import kotlin.math.min +import kotlin.math.pow +import kotlin.math.round + +/** + * User: rnentjes + * Date: 14-11-15 + * Time: 11:50 + */ + +@ExperimentalJsExport +@JsExport +enum class Note( + val sharp: String, + val flat: String +) { + NO01("C--", "C--"), + NO02("C#-", "Db-"), + NO03("D--", "D--"), + NO04("D#-", "Eb-"), + NO05("E--", "E--"), + NO06("F--", "F--"), + NO07("F#-", "Gb-"), + NO08("G--", "G--"), + NO09("G#-", "Ab-"), + NO10("A--", "A--"), + NO11("A#-", "Bb-"), + NO12("B--", "B--"), + C0("C-0", "C-0"), + C0s("C#0", "Db0"), + D0("D-0", "D-0"), + D0s("D#0", "Eb0"), + E0("E-0", "E-0"), + F0("F-0", "F-0"), + F0s("F#0", "Gb0"), + G0("G-0", "G-0"), + G0s("G#0", "Ab0"), + A0("A-0", "A-0"), + A0s("A#0", "Bb0"), + B0("B-0", "B-0"), + C1("C-1", "C-1"), + C1s("C#1", "Db1"), + D1("D-1", "D-1"), + D1s("D#1", "Eb1"), + E1("E-1", "E-1"), + F1("F-1", "F-1"), + F1s("F#1", "Gb1"), + G1("G-1", "G-1"), + G1s("G#1", "Ab1"), + A1("A-1", "A-1"), + A1s("A#1", "Bb1"), + B1("B-1", "B-1"), + C2("C-2", "C-2"), + C2s("C#2", "Db2"), + D2("D-2", "D-2"), + D2s("D#2", "Eb2"), + E2("E-2", "E-2"), + F2("F-2", "F-2"), + F2s("F#2", "Gb2"), + G2("G-2", "G-2"), + G2s("G#2", "Ab2"), + A2("A-2", "A-2"), + A2s("A#2", "Bb2"), + B2("B-2", "B-2"), + C3("C-3", "C-3"), + C3s("C#3", "Db3"), + D3("D-3", "D-3"), + D3s("D#3", "Eb3"), + E3("E-3", "E-3"), + F3("F-3", "F-3"), + F3s("F#3", "Gb3"), + G3("G-3", "G-3"), + G3s("G#3", "Ab3"), + A3("A-3", "A-3"), + A3s("A#3", "Bb3"), + B3("B-3", "B-3"), + C4("C-4", "C-4"), + C4s("C#4", "Db4"), + D4("D-4", "D-4"), + D4s("D#4", "Eb4"), + E4("E-4", "E-4"), + F4("F-4", "F-4"), + F4s("F#4", "Gb4"), + G4("G-4", "G-4"), + G4s("G#4", "Ab4"), + A4("A-4", "A-4"), + A4s("A#4", "Bb4"), + B4("B-4", "B-4"), + C5("C-5", "C-5"), + C5s("C#5", "Db5"), + D5("D-5", "D-5"), + D5s("D#5", "Eb5"), + E5("E-5", "E-5"), + F5("F-5", "F-5"), + F5s("F#5", "Gb5"), + G5("G-5", "G-5"), + G5s("G#5", "Ab5"), + A5("A-5", "A-5"), + A5s("A#5", "Bb5"), + B5("B-5", "B-5"), + C6("C-6", "C-6"), + C6s("C#6", "Db6"), + D6("D-6", "D-6"), + D6s("D#6", "Eb6"), + E6("E-6", "E-6"), + F6("F-6", "F-6"), + F6s("F#6", "Gb6"), + G6("G-6", "G-6"), + G6s("G#6", "Ab6"), + A6("A-6", "A-6"), + A6s("A#6", "Bb6"), + B6("B-6", "B-6"), + C7("C-7", "C-7"), + C7s("C#7", "Db7"), + D7("D-7", "D-7"), + D7s("D#7", "Eb7"), + E7("E-7", "E-7"), + F7("F-7", "F-7"), + F7s("F#7", "Gb7"), + G7("G-7", "G-7"), + G7s("G#7", "Ab7"), + A7("A-7", "A-7"), + A7s("A#7", "Bb7"), + B7("B-7", "B-7"), + C8("C-8", "C-8"), + C8s("C#8", "Db8"), + D8("D-8", "D-8"), + D8s("D#8", "Eb8"), + E8("E-8", "E-8"), + F8("F-8", "F-8"), + F8s("F#8", "Gb8"), + G8("G-8", "G-8"), + G8s("G#8", "Ab8"), + A8("A-8", "A-8"), + A8s("A#8", "Bb8"), + B8("B-8", "B-8"), + C9("C-9", "C-9"), + C9s("C#9", "Db9"), + D9("D-9", "D-9"), + D9s("D#9", "Eb9"), + E9("E-9", "E-9"), + F9("F-9", "F-9"), + F9s("F#9", "Gb9"), + G9("G-9", "G-9"), + + // out of midi range + //G9s("G#9","Ab9"), + //A9("A-9","A-9"), + //A9s("A#9","Bb9"), + //B9("B-9","B-9"), + NONE("---", "---"), + UP("^^^", "^^^"), + END("XXX", "XXX"), + ; + + // 69 = A4.ordinal + val freq: Double = round(440.0 * 2.0.pow((ordinal - 69) / 12.0)) // * 10000.0) / 10000.0 + val cycleLength: Double = 1.0 / freq + var sampleDelta: Double = 0.0 + + fun transpose(semiNotes: Int): Note = if (ordinal >= C0.ordinal && ordinal <= G9.ordinal) { + var result = this.ordinal + semiNotes + + result = min(result, G9.ordinal) + result = max(result, C0.ordinal) + + fromMidi(result) + } else { + this + } + + companion object { + fun fromMidi(midi: Int): Note { + // todo: add check + return entries[midi] + } + + fun updateSampleRate(rate: Int) { + println("Setting sample rate to $rate") + for (note in Note.entries) { + note.sampleDelta = (1.0 / rate.toDouble()) / note.cycleLength + } + } + } +} + +// freq = 10Hz +// cycleLength = 0.1 +// sampleRate = 48000 +// sampleDelta = 4800 + +// (1.0 / freq) * sampleRate diff --git a/build.gradle.kts b/build.gradle.kts index f1d6e8c..b466b0e 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -55,7 +55,6 @@ kotlin { sourceSets { val commonMain by getting { dependencies { - implementation(project(":common")) //base implementation("nl.astraeus:kotlin-css-generator:1.0.10") implementation("org.jetbrains.kotlinx:kotlinx-datetime:0.6.0") diff --git a/common/build.gradle.kts b/common/build.gradle.kts deleted file mode 100644 index 57e87ec..0000000 --- a/common/build.gradle.kts +++ /dev/null @@ -1,36 +0,0 @@ -@file:OptIn(ExperimentalKotlinGradlePluginApi::class) - -import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi - -buildscript { - apply(from = "../common.gradle.kts") -} - -plugins { - kotlin("multiplatform") -} - -kotlin { - js { - compilerOptions { - target.set("es2015") - } - browser() - } - /* @OptIn(ExperimentalWasmDsl::class) - wasmJs { - browser() - mavenPublication { - groupId = group as String - pom { name = "${project.name}-wasm-js" } - } - }*/ - jvm() - - sourceSets { - val commonMain by getting - val jsMain by getting - val jvmMain by getting - //val wasmJsMain by getting - } -} diff --git a/common/settings.gradle.kts b/common/settings.gradle.kts deleted file mode 100644 index fb2502c..0000000 --- a/common/settings.gradle.kts +++ /dev/null @@ -1 +0,0 @@ -apply(from = "../settings.common.gradle.kts") diff --git a/common/src/commonMain/kotlin/nl/astraeus/vst/Note.kt b/common/src/commonMain/kotlin/nl/astraeus/vst/Note.kt deleted file mode 100644 index ca08cde..0000000 --- a/common/src/commonMain/kotlin/nl/astraeus/vst/Note.kt +++ /dev/null @@ -1,192 +0,0 @@ -package nl.astraeus.vst - -import kotlin.math.max -import kotlin.math.min -import kotlin.math.pow -import kotlin.math.round - -/** - * User: rnentjes - * Date: 14-11-15 - * Time: 11:50 - */ - -enum class Note( - val sharp: String, - val flat: String -) { - NO01("C--","C--"), - NO02("C#-","Db-"), - NO03("D--","D--"), - NO04("D#-","Eb-"), - NO05("E--","E--"), - NO06("F--","F--"), - NO07("F#-","Gb-"), - NO08("G--","G--"), - NO09("G#-","Ab-"), - NO10("A--","A--"), - NO11("A#-","Bb-"), - NO12("B--","B--"), - C0("C-0","C-0"), - C0s("C#0","Db0"), - D0("D-0","D-0"), - D0s("D#0","Eb0"), - E0("E-0","E-0"), - F0("F-0","F-0"), - F0s("F#0","Gb0"), - G0("G-0","G-0"), - G0s("G#0","Ab0"), - A0("A-0","A-0"), - A0s("A#0","Bb0"), - B0("B-0","B-0"), - C1("C-1","C-1"), - C1s("C#1","Db1"), - D1("D-1","D-1"), - D1s("D#1","Eb1"), - E1("E-1","E-1"), - F1("F-1","F-1"), - F1s("F#1","Gb1"), - G1("G-1","G-1"), - G1s("G#1","Ab1"), - A1("A-1","A-1"), - A1s("A#1","Bb1"), - B1("B-1","B-1"), - C2("C-2","C-2"), - C2s("C#2","Db2"), - D2("D-2","D-2"), - D2s("D#2","Eb2"), - E2("E-2","E-2"), - F2("F-2","F-2"), - F2s("F#2","Gb2"), - G2("G-2","G-2"), - G2s("G#2","Ab2"), - A2("A-2","A-2"), - A2s("A#2","Bb2"), - B2("B-2","B-2"), - C3("C-3","C-3"), - C3s("C#3","Db3"), - D3("D-3","D-3"), - D3s("D#3","Eb3"), - E3("E-3","E-3"), - F3("F-3","F-3"), - F3s("F#3","Gb3"), - G3("G-3","G-3"), - G3s("G#3","Ab3"), - A3("A-3","A-3"), - A3s("A#3","Bb3"), - B3("B-3","B-3"), - C4("C-4","C-4"), - C4s("C#4","Db4"), - D4("D-4","D-4"), - D4s("D#4","Eb4"), - E4("E-4","E-4"), - F4("F-4","F-4"), - F4s("F#4","Gb4"), - G4("G-4","G-4"), - G4s("G#4","Ab4"), - A4("A-4","A-4"), - A4s("A#4","Bb4"), - B4("B-4","B-4"), - C5("C-5","C-5"), - C5s("C#5","Db5"), - D5("D-5","D-5"), - D5s("D#5","Eb5"), - E5("E-5","E-5"), - F5("F-5","F-5"), - F5s("F#5","Gb5"), - G5("G-5","G-5"), - G5s("G#5","Ab5"), - A5("A-5","A-5"), - A5s("A#5","Bb5"), - B5("B-5","B-5"), - C6("C-6","C-6"), - C6s("C#6","Db6"), - D6("D-6","D-6"), - D6s("D#6","Eb6"), - E6("E-6","E-6"), - F6("F-6","F-6"), - F6s("F#6","Gb6"), - G6("G-6","G-6"), - G6s("G#6","Ab6"), - A6("A-6","A-6"), - A6s("A#6","Bb6"), - B6("B-6","B-6"), - C7("C-7","C-7"), - C7s("C#7","Db7"), - D7("D-7","D-7"), - D7s("D#7","Eb7"), - E7("E-7","E-7"), - F7("F-7","F-7"), - F7s("F#7","Gb7"), - G7("G-7","G-7"), - G7s("G#7","Ab7"), - A7("A-7","A-7"), - A7s("A#7","Bb7"), - B7("B-7","B-7"), - C8("C-8","C-8"), - C8s("C#8","Db8"), - D8("D-8","D-8"), - D8s("D#8","Eb8"), - E8("E-8","E-8"), - F8("F-8","F-8"), - F8s("F#8","Gb8"), - G8("G-8","G-8"), - G8s("G#8","Ab8"), - A8("A-8","A-8"), - A8s("A#8","Bb8"), - B8("B-8","B-8"), - C9("C-9","C-9"), - C9s("C#9","Db9"), - D9("D-9","D-9"), - D9s("D#9","Eb9"), - E9("E-9","E-9"), - F9("F-9","F-9"), - F9s("F#9","Gb9"), - G9("G-9","G-9"), - // out of midi range - //G9s("G#9","Ab9"), - //A9("A-9","A-9"), - //A9s("A#9","Bb9"), - //B9("B-9","B-9"), - NONE("---", "---"), - UP("^^^","^^^"), - END("XXX","XXX"), - ; - - // 69 = A4.ordinal - val freq: Double = round(440.0 * 2.0.pow((ordinal - 69)/12.0)) // * 10000.0) / 10000.0 - val cycleLength: Double = 1.0 / freq - var sampleDelta: Double = 0.0 - - fun transpose(semiNotes: Int): Note = if (ordinal >= C0.ordinal && ordinal <= G9.ordinal) { - var result = this.ordinal + semiNotes - - result = min(result, G9.ordinal) - result = max(result, C0.ordinal) - - fromMidi(result) - } else { - this - } - - companion object { - fun fromMidi(midi: Int): Note { - // todo: add check - return entries[midi] - } - - fun updateSampleRate(rate: Int) { - println("Setting sample rate to $rate") - for (note in Note.entries) { - note.sampleDelta = (1.0 / rate.toDouble()) / note.cycleLength - } - } - } -} - -// freq = 10Hz -// cycleLength = 0.1 -// sampleRate = 48000 -// sampleDelta = 4800 - -// (1.0 / freq) * sampleRate diff --git a/settings.gradle.kts b/settings.gradle.kts index ab45cf9..92d4c00 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -2,5 +2,4 @@ apply(from = "settings.common.gradle.kts") rootProject.name = "vst-chip" -include(":common") include(":audio-worklet") diff --git a/src/jvmMain/kotlin/nl/astraeus/vst/chip/Main.kt b/src/jvmMain/kotlin/nl/astraeus/vst/chip/Main.kt index 07db578..926a156 100644 --- a/src/jvmMain/kotlin/nl/astraeus/vst/chip/Main.kt +++ b/src/jvmMain/kotlin/nl/astraeus/vst/chip/Main.kt @@ -1,6 +1,7 @@ package nl.astraeus.vst.chip import nl.astraeus.vst.base.Settings +import nl.astraeus.vst.base.db.Database import nl.astraeus.vst.base.web.UndertowServer import nl.astraeus.vst.chip.logger.LogLevel import nl.astraeus.vst.chip.logger.Logger @@ -15,38 +16,7 @@ fun main() { Settings.port = 9005 Settings.jdbcStatsPort = 6005 - /* - Class.forName("nl.astraeus.jdbc.Driver") - - Database.initialize(HikariConfig().apply { - driverClassName = "nl.astraeus.jdbc.Driver" - jdbcUrl = "jdbc:stat:webServerPort=6002:jdbc:sqlite:data/chip.db" - username = "sa" - password = "" - maximumPoolSize = 25 - isAutoCommit = false - - validate() - }) - - val sessionHandler = SessionAttachmentHandler( - InMemorySessionManager("vst-session-manager"), - SessionCookieConfig() - ) - sessionHandler.setNext(RequestHandler) - - val server = Undertow.builder() - .addHttpListener(Settings.port, "localhost") - .setIoThreads(4) - .setHandler(sessionHandler) - .setServerOption(UndertowOptions.SHUTDOWN_TIMEOUT, 1000) - .build() - - println("Starting server at port ${Settings.port}...") - server?.start() - */ - - + Database.start() UndertowServer.start( "Vst Chip",