From 6aba8d98ff4ce597c16d36451d38483db982b365 Mon Sep 17 00:00:00 2001 From: lqdev Date: Sun, 20 Nov 2022 23:06:55 +0100 Subject: [PATCH] ports --- build.gradle.kts | 27 ++++- d3r/Cargo.lock | 7 ++ d3r/Cargo.toml | 1 + d3r/src/lib.rs | 3 + proj/block/module_generic.ase | Bin 614 -> 0 bytes proj/block/speaker_front.ase | Bin 627 -> 884 bytes proj/block/speaker_side.ase | Bin 0 -> 445 bytes proj/device/port.ase | Bin 0 -> 324 bytes .../f3798f81c7b6fecad2cbfec741314f8a66c0eca3 | 4 + .../assets/dawd3/blockstates/speaker.json | 19 ++++ .../assets/dawd3/models/block/speaker.json | 73 +++++++++++++ .../assets/dawd3/models/item/speaker.json | 0 .../net/liquidev/d3r/AudioOutputStream.java | 2 +- src/main/java/net/liquidev/d3r/D3r.java | 2 +- .../kotlin/net/liquidev/dawd3/D3Registry.kt | 4 +- src/main/kotlin/net/liquidev/dawd3/Mod.kt | 24 +++-- .../kotlin/net/liquidev/dawd3/audio/Audio.kt | 37 +++++++ .../net/liquidev/dawd3/audio/AudioBuffer.kt | 23 ++++ .../net/liquidev/dawd3/audio/device/Device.kt | 9 ++ .../dawd3/audio/device/DeviceInstance.kt | 33 ++++++ .../liquidev/dawd3/audio/device/Devices.kt | 53 ++++++++++ .../net/liquidev/dawd3/audio/device/Sim.kt | 45 ++++++++ .../liquidev/dawd3/audio/device/exceptions.kt | 5 + .../net/liquidev/dawd3/audio/device/ports.kt | 38 +++++++ .../dawd3/audio/devices/ConstantDevice.kt | 22 ++++ .../audio/devices/SineOscillatorDevice.kt | 39 +++++++ .../dawd3/audio/devices/TerminalDevice.kt | 21 ++++ .../dawd3/audio/generator/AudioGenerator.kt | 30 ++++++ .../audio/generator/DeviceGraphGenerator.kt | 28 +++++ .../dawd3/audio/generator/MixGenerator.kt | 89 ++++++++++++++++ .../generator}/SineOscGenerator.kt | 12 ++- .../net/liquidev/dawd3/audio/unit/volume.kt | 14 +++ .../kotlin/net/liquidev/dawd3/block/Blocks.kt | 54 ++++++---- .../net/liquidev/dawd3/block/SpeakerBlock.kt | 46 -------- .../dawd3/block/SpeakerBlockEntity.kt | 20 ---- .../dawd3/block/device/DeviceBlock.kt | 27 +++++ .../block/device/DeviceBlockDescriptor.kt | 30 ++++++ .../dawd3/block/device/DeviceBlockEntity.kt | 40 +++++++ .../dawd3/block/device/PhysicalPort.kt | 31 ++++++ .../block/devices/SpeakerBlockDescriptor.kt | 49 +++++++++ .../dawd3/block/entity/D3BlockEntity.kt | 18 ++++ .../dawd3/block/entity/blockEntityEvents.kt | 17 +++ .../net/liquidev/dawd3/common/Affine2x2.kt | 23 ++++ .../net/liquidev/dawd3/common/TaskQueue.kt | 18 ++++ .../kotlin/net/liquidev/dawd3/common/math.kt | 14 +++ .../net/liquidev/dawd3/datagen/Datagen.kt | 14 +++ .../liquidev/dawd3/datagen/ModelDatagen.kt | 49 +++++++++ .../dawd3/datagen/device/DeviceBlockModel.kt | 99 ++++++++++++++++++ .../net/liquidev/dawd3/datagen/json/json.kt | 74 +++++++++++++ .../net/liquidev/dawd3/datagen/json/model.kt | 61 +++++++++++ .../kotlin/net/liquidev/dawd3/item/Items.kt | 14 ++- .../dawd3/mixin/SoundManagerAccessor.kt | 12 --- .../dawd3/mixin/SoundSystemAccessor.kt | 12 --- .../liquidev/dawd3/sound/AudioGenerator.kt | 27 ----- .../kotlin/net/liquidev/dawd3/sound/Sound.kt | 32 ------ .../assets/dawd3/blockstates/speaker.json | 8 -- .../resources/assets/dawd3/lang/en_us.json | 4 +- .../assets/dawd3/models/block/speaker.json | 6 -- .../dawd3/textures/block/module_side.png | Bin 125 -> 0 bytes .../dawd3/textures/block/speaker_front.png | Bin 149 -> 297 bytes .../dawd3/textures/block/speaker_side.png | Bin 0 -> 290 bytes .../assets/dawd3/textures/device/port.png | Bin 0 -> 140 bytes src/main/resources/dawd3.mixins.json | 2 - src/main/resources/fabric.mod.json | 6 ++ 64 files changed, 1264 insertions(+), 207 deletions(-) delete mode 100644 proj/block/module_generic.ase create mode 100644 proj/block/speaker_side.ase create mode 100644 proj/device/port.ase create mode 100644 src/main/generated/.cache/f3798f81c7b6fecad2cbfec741314f8a66c0eca3 create mode 100644 src/main/generated/assets/dawd3/blockstates/speaker.json create mode 100644 src/main/generated/assets/dawd3/models/block/speaker.json rename src/main/{resources => generated}/assets/dawd3/models/item/speaker.json (100%) create mode 100644 src/main/kotlin/net/liquidev/dawd3/audio/Audio.kt create mode 100644 src/main/kotlin/net/liquidev/dawd3/audio/AudioBuffer.kt create mode 100644 src/main/kotlin/net/liquidev/dawd3/audio/device/Device.kt create mode 100644 src/main/kotlin/net/liquidev/dawd3/audio/device/DeviceInstance.kt create mode 100644 src/main/kotlin/net/liquidev/dawd3/audio/device/Devices.kt create mode 100644 src/main/kotlin/net/liquidev/dawd3/audio/device/Sim.kt create mode 100644 src/main/kotlin/net/liquidev/dawd3/audio/device/exceptions.kt create mode 100644 src/main/kotlin/net/liquidev/dawd3/audio/device/ports.kt create mode 100644 src/main/kotlin/net/liquidev/dawd3/audio/devices/ConstantDevice.kt create mode 100644 src/main/kotlin/net/liquidev/dawd3/audio/devices/SineOscillatorDevice.kt create mode 100644 src/main/kotlin/net/liquidev/dawd3/audio/devices/TerminalDevice.kt create mode 100644 src/main/kotlin/net/liquidev/dawd3/audio/generator/AudioGenerator.kt create mode 100644 src/main/kotlin/net/liquidev/dawd3/audio/generator/DeviceGraphGenerator.kt create mode 100644 src/main/kotlin/net/liquidev/dawd3/audio/generator/MixGenerator.kt rename src/main/kotlin/net/liquidev/dawd3/{sound => audio/generator}/SineOscGenerator.kt (57%) create mode 100644 src/main/kotlin/net/liquidev/dawd3/audio/unit/volume.kt delete mode 100644 src/main/kotlin/net/liquidev/dawd3/block/SpeakerBlock.kt delete mode 100644 src/main/kotlin/net/liquidev/dawd3/block/SpeakerBlockEntity.kt create mode 100644 src/main/kotlin/net/liquidev/dawd3/block/device/DeviceBlock.kt create mode 100644 src/main/kotlin/net/liquidev/dawd3/block/device/DeviceBlockDescriptor.kt create mode 100644 src/main/kotlin/net/liquidev/dawd3/block/device/DeviceBlockEntity.kt create mode 100644 src/main/kotlin/net/liquidev/dawd3/block/device/PhysicalPort.kt create mode 100644 src/main/kotlin/net/liquidev/dawd3/block/devices/SpeakerBlockDescriptor.kt create mode 100644 src/main/kotlin/net/liquidev/dawd3/block/entity/D3BlockEntity.kt create mode 100644 src/main/kotlin/net/liquidev/dawd3/block/entity/blockEntityEvents.kt create mode 100644 src/main/kotlin/net/liquidev/dawd3/common/Affine2x2.kt create mode 100644 src/main/kotlin/net/liquidev/dawd3/common/TaskQueue.kt create mode 100644 src/main/kotlin/net/liquidev/dawd3/common/math.kt create mode 100644 src/main/kotlin/net/liquidev/dawd3/datagen/Datagen.kt create mode 100644 src/main/kotlin/net/liquidev/dawd3/datagen/ModelDatagen.kt create mode 100644 src/main/kotlin/net/liquidev/dawd3/datagen/device/DeviceBlockModel.kt create mode 100644 src/main/kotlin/net/liquidev/dawd3/datagen/json/json.kt create mode 100644 src/main/kotlin/net/liquidev/dawd3/datagen/json/model.kt delete mode 100644 src/main/kotlin/net/liquidev/dawd3/mixin/SoundManagerAccessor.kt delete mode 100644 src/main/kotlin/net/liquidev/dawd3/mixin/SoundSystemAccessor.kt delete mode 100644 src/main/kotlin/net/liquidev/dawd3/sound/AudioGenerator.kt delete mode 100644 src/main/kotlin/net/liquidev/dawd3/sound/Sound.kt delete mode 100644 src/main/resources/assets/dawd3/blockstates/speaker.json delete mode 100644 src/main/resources/assets/dawd3/models/block/speaker.json delete mode 100644 src/main/resources/assets/dawd3/textures/block/module_side.png create mode 100644 src/main/resources/assets/dawd3/textures/block/speaker_side.png create mode 100644 src/main/resources/assets/dawd3/textures/device/port.png diff --git a/build.gradle.kts b/build.gradle.kts index 49717f2..570a3ef 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -17,7 +17,11 @@ dependencies { minecraft("com.mojang", "minecraft", project.extra["minecraft_version"] as String) mappings("net.fabricmc", "yarn", project.extra["yarn_mappings"] as String, null, "v2") modImplementation("net.fabricmc", "fabric-loader", project.extra["loader_version"] as String) - modImplementation("net.fabricmc.fabric-api", "fabric-api", project.extra["fabric_version"] as String) + modImplementation( + "net.fabricmc.fabric-api", + "fabric-api", + project.extra["fabric_version"] as String + ) modImplementation( "net.fabricmc", "fabric-language-kotlin", @@ -36,6 +40,27 @@ rustImport { layout.set("flat") } +val mainSourceSet = sourceSets.main.get() + +val datagenDir = layout.projectDirectory.dir("src").dir(mainSourceSet.name).dir("generated") +loom { + runs { + create("datagenClient") { + inherit(runConfigs["client"]) + name("Data Generation") + vmArg("-Dfabric-api.datagen") + vmArg("-Dfabric-api.datagen.output-dir=$datagenDir") + vmArg("-Dfabric-api.datagen.modid=dawd3") + ideConfigGenerated(true) + runDir("build/datagen") + } + } +} + +sourceSets.named(mainSourceSet.name) { + resources.srcDir(datagenDir) +} + tasks { val javaVersion = JavaVersion.toVersion((project.extra["java_version"] as String).toInt()) diff --git a/d3r/Cargo.lock b/d3r/Cargo.lock index e3f902d..0b73e36 100644 --- a/d3r/Cargo.lock +++ b/d3r/Cargo.lock @@ -220,6 +220,7 @@ dependencies = [ "bitvec", "cpal", "env_logger", + "hound", "jni 0.20.0", "log", ] @@ -264,6 +265,12 @@ dependencies = [ "libc", ] +[[package]] +name = "hound" +version = "3.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d13cdbd5dbb29f9c88095bbdc2590c9cba0d0a1269b983fef6b2cdd7e9f4db1" + [[package]] name = "humantime" version = "2.1.0" diff --git a/d3r/Cargo.toml b/d3r/Cargo.toml index f1efdf0..52ea656 100644 --- a/d3r/Cargo.toml +++ b/d3r/Cargo.toml @@ -12,5 +12,6 @@ crate-type = ["cdylib"] bitvec = "1.0.1" cpal = "0.14.1" env_logger = "0.9.3" +hound = "3.5.0" jni = "0.20.0" log = "0.4.17" diff --git a/d3r/src/lib.rs b/d3r/src/lib.rs index 013f8c1..eccdce1 100644 --- a/d3r/src/lib.rs +++ b/d3r/src/lib.rs @@ -1,8 +1,10 @@ use std::cell::RefCell; use std::fmt::Display; +use std::fs::File; use cpal::traits::{DeviceTrait, HostTrait, StreamTrait}; use cpal::{BufferSize, Device, Host, SampleRate, Stream, StreamConfig}; +use hound::{SampleFormat, WavSpec}; use jni::objects::{JClass, JMethodID, JObject}; use jni::signature::ReturnType; use jni::sys::jvalue; @@ -157,6 +159,7 @@ pub extern "system" fn Java_net_liquidev_d3r_D3r_openOutputStream( let generator_ref = env.new_global_ref(generator).map_err(|e| e.to_string())?; let jvm = env.get_java_vm().map_err(|e| e.to_string())?; let mut initialized = false; + let stream = device .build_output_stream( &config.clone(), diff --git a/proj/block/module_generic.ase b/proj/block/module_generic.ase deleted file mode 100644 index 69f032a298db6c803827d300eaec16a4ebabdcea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 614 zcmYdeVqkc%l#xMzL4ZMlfsuiMA%y`MC^ImE1Q|FOIFN;@#(u`g!0_uME7(?61_lN( z1_lOp1+bM!cD!L=V31T$hKeXbX=LjE|NsBN{QnFLTw9y2Sp=Kbm+wngG z1KTOD{|pTEZ-V|aFdX{b2NHh;(#zWS0mQag_@99xgCX}n1H&pX`C1sH{lvu{vVbHk)J^>`Tuy? ze+GuvJ3Ia}FbIf%M3gjL{xdKb*~I>5VDJbj{m;NKZQ1_+3=Eg=y!>Cxz`(!)iV2W+ zA->{bS7A_*Ww6m?2sLBqc4Rx{RsSaF(Cn-Ks2 diff --git a/proj/block/speaker_front.ase b/proj/block/speaker_front.ase index a09f132bd4ad1dffa15ddfdc56cb988a7e908c4f..198b27d1ec313217afd7f14863274602080fd860 100644 GIT binary patch literal 884 zcmXS6W?*=*l#xMzL4bjSfsuiMA%y`Mh%qpN1Q|FOIFN;@#{R;@!0_uMH`rEg1_lN( z1_lOp1+bM!cFbd7V31S*$$g)P@xmK0r&Ye3~Q$v9PY?Z0Lc9e-il#OO}faR1}M+s38 zS&&%@OfV-fFff3e!^+^3SeaTRk5!T#BB@{mk!D8I3zIg+FKt-Kz`(!?au>)>xC21x zqGC>}e>C3#1s<;c-}5UQe&0N@%urOL=|I<76Yot$!L#np)L@r(keBe7E7mGI`9$?A z!MZ(Oa}s@iTrRfSlW=eQ#@9CgCRV0=zIMJbu5HQlplqjidl`Q%yctu$;M2u)SQBh9 zBLfKjhg;0bz`{^5M_7P?kxjutfPsAqLt_D0Aw&g2A;g8P{ft}(6nL291v-5H{tp*l zy~$F7`^J|pFXjm!Ha=j>P;@?fQJyp&4b%Wr&2(W$33``763<&#p7e=7jco@-Y~2Fj+SJ`@jFF zYA)CGg9!`_Q5h2#2B>SjoggzqnnRpz^|C!n|I59us>qNF;kWS2uYAFvY|i`_02D0E A(*OVf literal 627 zcmXSBVqkc%l#xMzL4ZMlfsuiMA%y`MC^ImE1Q|FOIFN;@#{SI6!0_uME7(?61_lN( z1_lOp1+bM!cD!L=V31T$hKeXbX=LjE|NsBN{QnFLTw9y2Sp=Kbm+wngG z1KTOD{|pTEZ-V|aFdX{b2NHh;(#zWS0mQag_@99xgCX}n1H&pX`C1sH{lvu{vVbHk)J^>`Tuy? ze+GuvJ3Ia}FbIf%M3gjL{xdKb*~I>5VDJbj{m;NKZQ1_+3=Eg=y!>Cxz`(!)iV2W+ zA->{bS7A_*Ww6m?2sLBqc4Rx{RsSaF(C6 icB~L^O}^~kbuaL@`&;>*ZjlrKXEb8FY5)M%0G{{& diff --git a/proj/block/speaker_side.ase b/proj/block/speaker_side.ase new file mode 100644 index 0000000000000000000000000000000000000000..c5b0faa40193e7343f67d30db644a2e7791684b6 GIT binary patch literal 445 zcmdnX$iVPmDIVb17jYVoAjT7VaJsC{|pT4`$PXTFwAf9{m;NKt;F#^ z14CVs`F{q6^Z=dzN(>APEFgb^3_CP8X~&fK_5GpqTYRULIMyYZrw8cBf>bCl!whC% zVEE6#z`)AjlUSKr)CXcJK;-^2L1+eW;8o1Id?nz=dd?%ue%(q~(|OGOm_gwTDTzKK z#w6*p|F1GmOW;XboXle>tnxSDr{=~!m&6&C2IY-63<{GBJam`-ax~G=VGFY7Q0|`i v_|En~k@|e { var registered = arrayListOf>() - fun add(id: String, item: T): Registered { - val entry = Registered(Identifier(Mod.id, id), item) + fun add(id: Identifier, item: T): Registered { + val entry = Registered(id, item) registered.add(entry) return entry } diff --git a/src/main/kotlin/net/liquidev/dawd3/Mod.kt b/src/main/kotlin/net/liquidev/dawd3/Mod.kt index ed95be5..f8763e2 100644 --- a/src/main/kotlin/net/liquidev/dawd3/Mod.kt +++ b/src/main/kotlin/net/liquidev/dawd3/Mod.kt @@ -4,33 +4,45 @@ import net.fabricmc.api.ClientModInitializer import net.fabricmc.api.ModInitializer import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientLifecycleEvents import net.liquidev.d3r.D3r +import net.liquidev.dawd3.audio.Audio import net.liquidev.dawd3.block.Blocks +import net.liquidev.dawd3.block.entity.registerBlockEntityEvents import net.liquidev.dawd3.item.Items -import net.liquidev.dawd3.sound.Sound +import org.slf4j.Logger import org.slf4j.LoggerFactory @Suppress("UNUSED") object Mod : ModInitializer, ClientModInitializer { const val id = "dawd3" - private val logger = LoggerFactory.getLogger("dawd³") + val logger = logger(null) override fun onInitialize() { logger.info("hello, sound traveler! welcome to the dawd³ experience") - - Blocks.blockRegistry.registerAll() + Blocks.initialize() Items.registry.registerAll() } override fun onInitializeClient() { logger.info("booting up sound engine") D3r.load() - Sound.forceInitializationNow() + Audio.forceInitializationNow() ClientLifecycleEvents.CLIENT_STOPPING.register { logger.info("shutting down sound engine") - Sound.deinitialize() + Audio.deinitialize() D3r.unload() } + + registerBlockEntityEvents() } + + private fun loggerName(name: String?): String = + if (name != null) "$id/$name" else id + + fun logger(name: String?): Logger = + LoggerFactory.getLogger(loggerName(name)) + + inline fun logger(): Logger = + logger(T::class.simpleName) } diff --git a/src/main/kotlin/net/liquidev/dawd3/audio/Audio.kt b/src/main/kotlin/net/liquidev/dawd3/audio/Audio.kt new file mode 100644 index 0000000..89d52ab --- /dev/null +++ b/src/main/kotlin/net/liquidev/dawd3/audio/Audio.kt @@ -0,0 +1,37 @@ +package net.liquidev.dawd3.audio + +import net.liquidev.d3r.D3r +import net.liquidev.dawd3.Mod +import net.liquidev.dawd3.audio.generator.MixGenerator +import net.liquidev.dawd3.audio.unit.Decibels + +/** Audio system and common settings. */ +object Audio { + val logger = Mod.logger