From 720ec920852a4d124fe004edae314ae14364a98c Mon Sep 17 00:00:00 2001 From: Jacob Lee Date: Tue, 26 Oct 2021 14:38:42 -0400 Subject: Scorched Earth --- .../icon.png-487276ed1e3a0c39cad0279d744ee560.md5 | 3 + .../icon.png-487276ed1e3a0c39cad0279d744ee560.stex | Bin 0 -> 3413 bytes klangfarb/Main.gdns | 6 +- klangfarb/Main.tscn | 6 +- klangfarb/klangfarbrs.gdnlib | 14 + klangfarb/libklangfarbrs.gdnlib | 14 - klangfarb/libklangfarbrs.so | Bin 19917392 -> 19936592 bytes klangfarb/main.gd | 17 + klangfarbrs/Cargo.lock | 668 --------------------- klangfarbrs/Cargo.toml | 5 - klangfarbrs/src/ignore | 147 +++++ klangfarbrs/src/lib.rs | 184 +----- klangfarbrs/src/main.rs | 9 +- 13 files changed, 212 insertions(+), 861 deletions(-) create mode 100644 klangfarb/.import/icon.png-487276ed1e3a0c39cad0279d744ee560.md5 create mode 100644 klangfarb/.import/icon.png-487276ed1e3a0c39cad0279d744ee560.stex create mode 100644 klangfarb/klangfarbrs.gdnlib delete mode 100644 klangfarb/libklangfarbrs.gdnlib mode change 100644 => 100755 klangfarb/libklangfarbrs.so create mode 100644 klangfarb/main.gd create mode 100644 klangfarbrs/src/ignore diff --git a/klangfarb/.import/icon.png-487276ed1e3a0c39cad0279d744ee560.md5 b/klangfarb/.import/icon.png-487276ed1e3a0c39cad0279d744ee560.md5 new file mode 100644 index 0000000..7b61c3e --- /dev/null +++ b/klangfarb/.import/icon.png-487276ed1e3a0c39cad0279d744ee560.md5 @@ -0,0 +1,3 @@ +source_md5="47313fa4c47a9963fddd764e1ec6e4a8" +dest_md5="2ded9e7f9060e2b530aab678b135fc5b" + diff --git a/klangfarb/.import/icon.png-487276ed1e3a0c39cad0279d744ee560.stex b/klangfarb/.import/icon.png-487276ed1e3a0c39cad0279d744ee560.stex new file mode 100644 index 0000000..3ca6461 Binary files /dev/null and b/klangfarb/.import/icon.png-487276ed1e3a0c39cad0279d744ee560.stex differ diff --git a/klangfarb/Main.gdns b/klangfarb/Main.gdns index 673e307..e551128 100644 --- a/klangfarb/Main.gdns +++ b/klangfarb/Main.gdns @@ -1,8 +1,8 @@ [gd_resource type="NativeScript" load_steps=2 format=2] -[ext_resource path="res://libklangfarbrs.gdnlib" type="GDNativeLibrary" id=1] +[ext_resource path="res://klangfarbrs.gdnlib" type="GDNativeLibrary" id=1] [resource] -resource_name = "Synth" -class_name = "Synth" +resource_name = "MonoBuffer" +class_name = "MonoBuffer" library = ExtResource( 1 ) diff --git a/klangfarb/Main.tscn b/klangfarb/Main.tscn index bba01a7..9c58bfd 100644 --- a/klangfarb/Main.tscn +++ b/klangfarb/Main.tscn @@ -1,6 +1,10 @@ -[gd_scene load_steps=2 format=2] +[gd_scene load_steps=3 format=2] [ext_resource path="res://Main.gdns" type="Script" id=1] +[ext_resource path="res://main.gd" type="Script" id=2] [node name="Node" type="Node"] script = ExtResource( 1 ) + +[node name="Node" type="Node" parent="."] +script = ExtResource( 2 ) diff --git a/klangfarb/klangfarbrs.gdnlib b/klangfarb/klangfarbrs.gdnlib new file mode 100644 index 0000000..a7f0183 --- /dev/null +++ b/klangfarb/klangfarbrs.gdnlib @@ -0,0 +1,14 @@ +[entry] + +X11.64="res://libklangfarbrs.so" + +[dependencies] + +X11.64=[ ] + +[general] + +singleton=false +load_once=true +symbol_prefix="godot_" +reloadable=true diff --git a/klangfarb/libklangfarbrs.gdnlib b/klangfarb/libklangfarbrs.gdnlib deleted file mode 100644 index 6cfb13a..0000000 --- a/klangfarb/libklangfarbrs.gdnlib +++ /dev/null @@ -1,14 +0,0 @@ -[general] - -singleton=false -load_once=true -symbol_prefix="godot_" -reloadable=true - -[entry] - -X11.64="res://libklangfarbrs.so" - -[dependencies] - -X11.64=[ ] diff --git a/klangfarb/libklangfarbrs.so b/klangfarb/libklangfarbrs.so old mode 100644 new mode 100755 index d428f9c..2ca0b85 Binary files a/klangfarb/libklangfarbrs.so and b/klangfarb/libklangfarbrs.so differ diff --git a/klangfarb/main.gd b/klangfarb/main.gd new file mode 100644 index 0000000..96d8cb5 --- /dev/null +++ b/klangfarb/main.gd @@ -0,0 +1,17 @@ +extends Node + +# Declare member variables here. Examples: +# var a = 2 +# var b = "text" +onready var data = preload("res://klangfarbrs.gdnlib") +# var buffer = MonoBuffer.new() + +# Called when the node enters the scene tree for the first time. +func _ready(): + print("Poop", data.frames()); + + + +# Called every frame. 'delta' is the elapsed time since the previous frame. +#func _process(delta): +# pass diff --git a/klangfarbrs/Cargo.lock b/klangfarbrs/Cargo.lock index f01d49d..f784589 100644 --- a/klangfarbrs/Cargo.lock +++ b/klangfarbrs/Cargo.lock @@ -13,34 +13,6 @@ dependencies = [ "version_check", ] -[[package]] -name = "alsa" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75c4da790adcb2ce5e758c064b4f3ec17a30349f9961d3e5e6c9688b052a9e18" -dependencies = [ - "alsa-sys", - "bitflags", - "libc", - "nix", -] - -[[package]] -name = "alsa-sys" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db8fee663d06c4e303404ef5f40488a53e062f89ba8bfed81f42325aafad1527" -dependencies = [ - "libc", - "pkg-config", -] - -[[package]] -name = "anyhow" -version = "1.0.44" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61604a8f862e1d5c3229fdd78f8b02c68dcf73a4c4b05fd636d12240aaa242c1" - [[package]] name = "approx" version = "0.4.0" @@ -81,33 +53,6 @@ version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693" -[[package]] -name = "bumpalo" -version = "3.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9df67f7bf9ef8498769f994239c45613ef0c5899415fb58e9add412d2c1a538" - -[[package]] -name = "bytes" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4872d67bab6358e59559027aa3b9157c53d9358c51423c17554809a8858e0f8" - -[[package]] -name = "cc" -version = "1.0.71" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79c2681d6594606957bbb8631c4b90a7fcaaa72cdb714743a437b156d6a7eedd" -dependencies = [ - "jobserver", -] - -[[package]] -name = "cesu8" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" - [[package]] name = "cexpr" version = "0.4.0" @@ -134,231 +79,6 @@ dependencies = [ "libloading", ] -[[package]] -name = "combine" -version = "4.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a909e4d93292cd8e9c42e189f61681eff9d67b6541f96b8a1a737f23737bd001" -dependencies = [ - "bytes", - "memchr", -] - -[[package]] -name = "core-foundation-sys" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc" - -[[package]] -name = "coreaudio-rs" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11894b20ebfe1ff903cbdc52259693389eea03b94918a2def2c30c3bf227ad88" -dependencies = [ - "bitflags", - "coreaudio-sys", -] - -[[package]] -name = "coreaudio-sys" -version = "0.2.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b7e3347be6a09b46aba228d6608386739fb70beff4f61e07422da87b0bb31fa" -dependencies = [ - "bindgen", -] - -[[package]] -name = "cpal" -version = "0.13.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98f45f0a21f617cd2c788889ef710b63f075c949259593ea09c826f1e47a2418" -dependencies = [ - "alsa", - "core-foundation-sys", - "coreaudio-rs", - "jni", - "js-sys", - "lazy_static", - "libc", - "mach", - "ndk 0.3.0", - "ndk-glue 0.3.0", - "nix", - "oboe", - "parking_lot", - "stdweb", - "thiserror", - "web-sys", - "winapi", -] - -[[package]] -name = "darling" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d706e75d87e35569db781a9b5e2416cff1236a47ed380831f959382ccd5f858" -dependencies = [ - "darling_core", - "darling_macro", -] - -[[package]] -name = "darling_core" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0c960ae2da4de88a91b2d920c2a7233b400bc33cb28453a2987822d8392519b" -dependencies = [ - "fnv", - "ident_case", - "proc-macro2", - "quote", - "strsim", - "syn", -] - -[[package]] -name = "darling_macro" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9b5a2f4ac4969822c62224815d069952656cadc7084fdca9751e6d959189b72" -dependencies = [ - "darling_core", - "quote", - "syn", -] - -[[package]] -name = "dasp" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7381b67da416b639690ac77c73b86a7b5e64a29e31d1f75fb3b1102301ef355a" -dependencies = [ - "dasp_envelope", - "dasp_frame", - "dasp_interpolate", - "dasp_peak", - "dasp_ring_buffer", - "dasp_rms", - "dasp_sample", - "dasp_signal", - "dasp_slice", - "dasp_window", -] - -[[package]] -name = "dasp_envelope" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ec617ce7016f101a87fe85ed44180839744265fae73bb4aa43e7ece1b7668b6" -dependencies = [ - "dasp_frame", - "dasp_peak", - "dasp_ring_buffer", - "dasp_rms", - "dasp_sample", -] - -[[package]] -name = "dasp_frame" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2a3937f5fe2135702897535c8d4a5553f8b116f76c1529088797f2eee7c5cd6" -dependencies = [ - "dasp_sample", -] - -[[package]] -name = "dasp_interpolate" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fc975a6563bb7ca7ec0a6c784ead49983a21c24835b0bc96eea11ee407c7486" -dependencies = [ - "dasp_frame", - "dasp_ring_buffer", - "dasp_sample", -] - -[[package]] -name = "dasp_peak" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cf88559d79c21f3d8523d91250c397f9a15b5fc72fbb3f87fdb0a37b79915bf" -dependencies = [ - "dasp_frame", - "dasp_sample", -] - -[[package]] -name = "dasp_ring_buffer" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07d79e19b89618a543c4adec9c5a347fe378a19041699b3278e616e387511ea1" - -[[package]] -name = "dasp_rms" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6c5dcb30b7e5014486e2822537ea2beae50b19722ffe2ed7549ab03774575aa" -dependencies = [ - "dasp_frame", - "dasp_ring_buffer", - "dasp_sample", -] - -[[package]] -name = "dasp_sample" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c87e182de0887fd5361989c677c4e8f5000cd9491d6d563161a8f3a5519fc7f" - -[[package]] -name = "dasp_signal" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa1ab7d01689c6ed4eae3d38fe1cea08cba761573fbd2d592528d55b421077e7" -dependencies = [ - "dasp_envelope", - "dasp_frame", - "dasp_interpolate", - "dasp_peak", - "dasp_ring_buffer", - "dasp_rms", - "dasp_sample", - "dasp_window", -] - -[[package]] -name = "dasp_slice" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e1c7335d58e7baedafa516cb361360ff38d6f4d3f9d9d5ee2a2fc8e27178fa1" -dependencies = [ - "dasp_frame", - "dasp_sample", -] - -[[package]] -name = "dasp_window" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99ded7b88821d2ce4e8b842c9f1c86ac911891ab89443cc1de750cae764c5076" -dependencies = [ - "dasp_sample", -] - -[[package]] -name = "derivative" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "euclid" version = "0.22.6" @@ -368,12 +88,6 @@ dependencies = [ "num-traits", ] -[[package]] -name = "fnv" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" - [[package]] name = "gdnative" version = "0.9.3" @@ -498,12 +212,6 @@ dependencies = [ "unicode-segmentation", ] -[[package]] -name = "ident_case" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" - [[package]] name = "indexmap" version = "1.7.0" @@ -529,53 +237,10 @@ version = "0.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4" -[[package]] -name = "jni" -version = "0.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6df18c2e3db7e453d3c6ac5b3e9d5182664d28788126d39b91f2d1e22b017ec" -dependencies = [ - "cesu8", - "combine", - "jni-sys", - "log", - "thiserror", - "walkdir", -] - -[[package]] -name = "jni-sys" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" - -[[package]] -name = "jobserver" -version = "0.1.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af25a77299a7f711a01975c35a6a424eb6862092cc2d6c72c4ed6cbc56dfc1fa" -dependencies = [ - "libc", -] - -[[package]] -name = "js-sys" -version = "0.3.55" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cc9ffccd38c451a86bf13657df244e9c3f37493cce8e5e21e940963777acc84" -dependencies = [ - "wasm-bindgen", -] - [[package]] name = "klangfarbrs" version = "0.1.0" dependencies = [ - "anyhow", - "cpal", - "dasp", - "dasp_envelope", - "dasp_signal", "gdnative", ] @@ -616,39 +281,12 @@ dependencies = [ "scopeguard", ] -[[package]] -name = "log" -version = "0.4.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "mach" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b823e83b2affd8f40a9ee8c29dbc56404c1e34cd2710921f2801e2cf29527afa" -dependencies = [ - "libc", -] - [[package]] name = "memchr" version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a" -[[package]] -name = "memoffset" -version = "0.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59accc507f1338036a0477ef61afdae33cde60840f4dfe481319ce3ad116ddf9" -dependencies = [ - "autocfg", -] - [[package]] name = "mini-internal" version = "0.1.13" @@ -671,91 +309,6 @@ dependencies = [ "ryu", ] -[[package]] -name = "ndk" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8794322172319b972f528bf90c6b467be0079f1fa82780ffb431088e741a73ab" -dependencies = [ - "jni-sys", - "ndk-sys", - "num_enum", - "thiserror", -] - -[[package]] -name = "ndk" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d64d6af06fde0e527b1ba5c7b79a6cc89cfc46325b0b2887dffe8f70197e0c3c" -dependencies = [ - "bitflags", - "jni-sys", - "ndk-sys", - "num_enum", - "thiserror", -] - -[[package]] -name = "ndk-glue" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5caf0c24d51ac1c905c27d4eda4fa0635bbe0de596b8f79235e0b17a4d29385" -dependencies = [ - "lazy_static", - "libc", - "log", - "ndk 0.3.0", - "ndk-macro", - "ndk-sys", -] - -[[package]] -name = "ndk-glue" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3e9e94628f24e7a3cb5b96a2dc5683acd9230bf11991c2a1677b87695138420" -dependencies = [ - "lazy_static", - "libc", - "log", - "ndk 0.4.0", - "ndk-macro", - "ndk-sys", -] - -[[package]] -name = "ndk-macro" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05d1c6307dc424d0f65b9b06e94f88248e6305726b14729fd67a5e47b2dc481d" -dependencies = [ - "darling", - "proc-macro-crate 0.1.5", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "ndk-sys" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c44922cb3dbb1c70b5e5f443d63b64363a898564d739ba5198e3a9138442868d" - -[[package]] -name = "nix" -version = "0.20.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5e06129fb611568ef4e868c14b326274959aa70ff7776e9d55323531c374945" -dependencies = [ - "bitflags", - "cc", - "cfg-if", - "libc", - "memoffset", -] - [[package]] name = "nom" version = "5.1.2" @@ -766,17 +319,6 @@ dependencies = [ "version_check", ] -[[package]] -name = "num-derive" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "876a53fff98e03a936a674b29568b0e605f06b29372c2489ff4de23f1949743d" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "num-traits" version = "0.2.14" @@ -786,51 +328,6 @@ dependencies = [ "autocfg", ] -[[package]] -name = "num_enum" -version = "0.5.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f9bd055fb730c4f8f4f57d45d35cd6b3f0980535b056dc7ff119cee6a66ed6f" -dependencies = [ - "derivative", - "num_enum_derive", -] - -[[package]] -name = "num_enum_derive" -version = "0.5.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "486ea01961c4a818096de679a8b740b26d9033146ac5291b1c98557658f8cdd9" -dependencies = [ - "proc-macro-crate 1.1.0", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "oboe" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e15e22bc67e047fe342a32ecba55f555e3be6166b04dd157cd0f803dfa9f48e1" -dependencies = [ - "jni", - "ndk 0.4.0", - "ndk-glue 0.4.0", - "num-derive", - "num-traits", - "oboe-sys", -] - -[[package]] -name = "oboe-sys" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "338142ae5ab0aaedc8275aa8f67f460e43ae0fca76a695a742d56da0a269eadc" -dependencies = [ - "cc", -] - [[package]] name = "once_cell" version = "1.8.0" @@ -868,31 +365,6 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099" -[[package]] -name = "pkg-config" -version = "0.3.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c9b1041b4387893b91ee6746cddfc28516aff326a3519fb2adf820932c5e6cb" - -[[package]] -name = "proc-macro-crate" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d6ea3c4595b96363c13943497db34af4460fb474a95c43f4446ad341b8c9785" -dependencies = [ - "toml", -] - -[[package]] -name = "proc-macro-crate" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ebace6889caf889b4d3f76becee12e90353f2b8c7d875534a71e5742f8f6f83" -dependencies = [ - "thiserror", - "toml", -] - [[package]] name = "proc-macro2" version = "1.0.30" @@ -956,27 +428,12 @@ version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "71d301d4193d031abdd79ff7e3dd721168a9572ef3fe51a1517aba235bd8f86e" -[[package]] -name = "same-file" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" -dependencies = [ - "winapi-util", -] - [[package]] name = "scopeguard" version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" -[[package]] -name = "serde" -version = "1.0.130" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f12d06de37cf59146fbdecab66aa99f9fe4f78722e3607577a5375d66bd0c913" - [[package]] name = "shlex" version = "0.1.1" @@ -989,18 +446,6 @@ version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1ecab6c735a6bb4139c0caafd0cc3635748bbb3acf4550e8138122099251f309" -[[package]] -name = "stdweb" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef5430c8e36b713e13b48a9f709cc21e046723fe44ce34587b73a830203b533e" - -[[package]] -name = "strsim" -version = "0.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6446ced80d6c486436db5c078dde11a9f73d42b57fb273121e160b84f63d894c" - [[package]] name = "syn" version = "1.0.80" @@ -1012,35 +457,6 @@ dependencies = [ "unicode-xid", ] -[[package]] -name = "thiserror" -version = "1.0.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "854babe52e4df1653706b98fcfc05843010039b406875930a70e4d9644e5c417" -dependencies = [ - "thiserror-impl", -] - -[[package]] -name = "thiserror-impl" -version = "1.0.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa32fd3f627f367fe16f893e2597ae3c05020f8bba2666a4e6ea73d377e5714b" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "toml" -version = "0.5.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a31142970826733df8241ef35dc040ef98c679ab14d7c3e54d827099b3acecaa" -dependencies = [ - "serde", -] - [[package]] name = "unicode-segmentation" version = "1.8.0" @@ -1065,87 +481,12 @@ version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5fecdca9a5291cc2b8dcf7dc02453fee791a280f3743cb0905f8822ae463b3fe" -[[package]] -name = "walkdir" -version = "2.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56" -dependencies = [ - "same-file", - "winapi", - "winapi-util", -] - [[package]] name = "wasi" version = "0.10.2+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6" -[[package]] -name = "wasm-bindgen" -version = "0.2.78" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "632f73e236b219150ea279196e54e610f5dbafa5d61786303d4da54f84e47fce" -dependencies = [ - "cfg-if", - "wasm-bindgen-macro", -] - -[[package]] -name = "wasm-bindgen-backend" -version = "0.2.78" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a317bf8f9fba2476b4b2c85ef4c4af8ff39c3c7f0cdfeed4f82c34a880aa837b" -dependencies = [ - "bumpalo", - "lazy_static", - "log", - "proc-macro2", - "quote", - "syn", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-macro" -version = "0.2.78" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d56146e7c495528bf6587663bea13a8eb588d39b36b679d83972e1a2dbbdacf9" -dependencies = [ - "quote", - "wasm-bindgen-macro-support", -] - -[[package]] -name = "wasm-bindgen-macro-support" -version = "0.2.78" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7803e0eea25835f8abdc585cd3021b3deb11543c6fe226dcd30b228857c5c5ab" -dependencies = [ - "proc-macro2", - "quote", - "syn", - "wasm-bindgen-backend", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-shared" -version = "0.2.78" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0237232789cf037d5480773fe568aac745bfe2afbc11a863e97901780a6b47cc" - -[[package]] -name = "web-sys" -version = "0.3.55" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38eb105f1c59d9eaa6b5cdc92b859d85b926e82cb2e0945cd0c9259faa6fe9fb" -dependencies = [ - "js-sys", - "wasm-bindgen", -] - [[package]] name = "winapi" version = "0.3.9" @@ -1162,15 +503,6 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" -[[package]] -name = "winapi-util" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" -dependencies = [ - "winapi", -] - [[package]] name = "winapi-x86_64-pc-windows-gnu" version = "0.4.0" diff --git a/klangfarbrs/Cargo.toml b/klangfarbrs/Cargo.toml index 34100c2..c896efa 100644 --- a/klangfarbrs/Cargo.toml +++ b/klangfarbrs/Cargo.toml @@ -11,8 +11,3 @@ name = "klangfarbrs" [dependencies] gdnative = "0.9" -anyhow = "1.0.44" -dasp = "0.11.0" -dasp_signal = "0.11.0" -dasp_envelope = "0.11.0" -cpal = "0.13.4" diff --git a/klangfarbrs/src/ignore b/klangfarbrs/src/ignore new file mode 100644 index 0000000..6c52a4b --- /dev/null +++ b/klangfarbrs/src/ignore @@ -0,0 +1,147 @@ + +pub mod test { + use cpal; + use cpal::traits::{DeviceTrait, HostTrait, StreamTrait}; + use dasp::{Sample}; + use dasp_signal::{self as signal, Signal}; + use std::sync::mpsc; + + pub fn test() -> Result<(), anyhow::Error> { + let host = cpal::default_host(); + let device = host + .default_output_device() + .expect("failed to find a default output device"); + let config = device.default_output_config()?; + + match config.sample_format() { + cpal::SampleFormat::F32 => run::(&device, &config.into())?, + cpal::SampleFormat::I16 => run::(&device, &config.into())?, + cpal::SampleFormat::U16 => run::(&device, &config.into())?, + } + + Ok(()) + } + + fn run(device: &cpal::Device, config: &cpal::StreamConfig) -> Result<(), anyhow::Error> + where + T: cpal::Sample, + { + // Create a signal chain to play back 1 second of each oscillator at A4. + let base_freq = 440.0; + let multipliers = [0.8, 1.0, 1.2, 1.7, 2.9, 4.5, 8.8, 1.9, 3.6]; + let freqs = multipliers.map(|m| signal::rate(config.sample_rate.0 as f64).const_hz(base_freq * m)); + let _sines = freqs.map(|f| f.clone().sine()); + + // Shitty naive implementation until Rust clicks. + let hz_0 = signal::rate(config.sample_rate.0 as f64).const_hz(base_freq * 0.8); + let hz_1 = signal::rate(config.sample_rate.0 as f64).const_hz(base_freq * 1.0); + let hz_2 = signal::rate(config.sample_rate.0 as f64).const_hz(base_freq * 1.2); + let hz_3 = signal::rate(config.sample_rate.0 as f64).const_hz(base_freq * 1.7); + let hz_4 = signal::rate(config.sample_rate.0 as f64).const_hz(base_freq * 2.9); + let hz_5 = signal::rate(config.sample_rate.0 as f64).const_hz(base_freq * 4.5); + let hz_6 = signal::rate(config.sample_rate.0 as f64).const_hz(base_freq * 8.8); + let hz_7 = signal::rate(config.sample_rate.0 as f64).const_hz(base_freq * 1.9); + let hz_8 = signal::rate(config.sample_rate.0 as f64).const_hz(base_freq * 3.6); + + let sine_0 = hz_0.clone().sine().scale_amp(0.03); + let sine_1 = hz_1.clone().sine(); + let sine_2 = hz_2.clone().sine().scale_amp(0.8); + let sine_3 = hz_3.clone().sine().scale_amp(0.004); + let sine_4 = hz_4.clone().sine().scale_amp(0.03); + let sine_5 = hz_5.clone().sine().scale_amp(0.02); + let sine_6 = hz_6.clone().sine().scale_amp(0.001); + let sine_7 = hz_7.clone().sine().scale_amp(0.006); + let sine_8 = hz_8.clone().sine().scale_amp(0.05); + + + // let hz = signal::rate(config.sample_rate.0 as f64).const_hz(440.0); + let one_sec = config.sample_rate.0 as usize; + + // let mut sin_a = hz + // .clone() + // .sine(); + + // let mut sin_b = hz_b + // .clone() + // .sine(); + + let mut synth = sine_0 + .add_amp(sine_1) + .add_amp(sine_2) + .add_amp(sine_3) + .add_amp(sine_4) + .add_amp(sine_5) + .add_amp(sine_6) + .add_amp(sine_7) + .add_amp(sine_8) + .take(one_sec) + .map(|s| s.to_sample::() * 0.2); + + // let mut synth = sines[0] + // .add_amp(sines[1]) + // .add_amp(sines[2]) + // .add_amp(sines[3]) + // .add_amp(sines[4]) + // .add_amp(sines[5]) + // .add_amp(sines[6]) + // .add_amp(sines[7]) + // .add_amp(sines[8]) + // .take(one_sec) + // .map(|s| s.to_sample::() * 0.2); + // let mut synth = sin_a.add_amp(sin_b).take(one_sec).map(|s| s.to_sample::() * 0.2); + // let mut synth = hz + // .clone() + // .sine() + // .take(one_sec) + // .chain(hz.clone().saw().take(one_sec)) + // .chain(hz.clone().square().take(one_sec)) + // .chain(hz.clone().noise_simplex().take(one_sec)) + // .chain(signal::noise(0).take(one_sec)) + // .map(|s| s.to_sample::() * 0.2); + + // A channel for indicating when playback has completed. + let (complete_tx, complete_rx) = mpsc::sync_channel(1); + + // Create and run the stream. + let err_fn = |err| eprintln!("an error occurred on stream: {}", err); + let channels = config.channels as usize; + let stream = device.build_output_stream( + config, + move |data: &mut [T], _: &cpal::OutputCallbackInfo| { + write_data(data, channels, &complete_tx, &mut synth) + }, + err_fn, + )?; + stream.play()?; + + // Wait for playback to complete. + complete_rx.recv().unwrap(); + stream.pause()?; + + Ok(()) + } + + fn write_data( + output: &mut [T], + channels: usize, + complete_tx: &mpsc::SyncSender<()>, + signal: &mut dyn Iterator, + ) where + T: cpal::Sample, + { + for frame in output.chunks_mut(channels) { + let sample = match signal.next() { + None => { + complete_tx.try_send(()).ok(); + 0.0 + } + Some(sample) => sample, + }; + let value: T = cpal::Sample::from::(&sample); + for sample in frame.iter_mut() { + *sample = value; + } + } + } + +} diff --git a/klangfarbrs/src/lib.rs b/klangfarbrs/src/lib.rs index 62ed207..1a43aba 100644 --- a/klangfarbrs/src/lib.rs +++ b/klangfarbrs/src/lib.rs @@ -3,185 +3,43 @@ use gdnative::prelude::*; #[derive(NativeClass)] #[inherit(Node)] -pub struct Synth { - frequency: f32 +pub struct MonoBuffer { + frames: [f32; 512] } -#[methods] -impl Synth { - fn new(_owner: &Node) -> Self { - Synth { frequency: 220.0 } - } +pub fn fill_frames() -> [f32; 512] { + let tau = std::f32::consts::FRAC_PI_2; + let frequency = 440.0; + let sample_rate = 8000.0; + let mut frames = [0.0; 512]; - #[export] - fn set_freq( - &mut self, - _owner: &Node, - freq: f32 - ) { - self.frequency = freq; + for i in 0..512 { + frames[i] = f32::sin(tau * frequency * i as f32/sample_rate); } - #[export] - fn _ready(&self, _owner: &Node) { - match test::test() { - Ok(()) => godot_print!("POOOP"), - Err(error) => godot_print!("SHITE! {:?}", error), - }; - } + return frames } -pub mod test { - use cpal; - use cpal::traits::{DeviceTrait, HostTrait, StreamTrait}; - use dasp::{Sample}; - use dasp_signal::{self as signal, Signal}; - use std::sync::mpsc; - - pub fn test() -> Result<(), anyhow::Error> { - let host = cpal::default_host(); - let device = host - .default_output_device() - .expect("failed to find a default output device"); - let config = device.default_output_config()?; - - match config.sample_format() { - cpal::SampleFormat::F32 => run::(&device, &config.into())?, - cpal::SampleFormat::I16 => run::(&device, &config.into())?, - cpal::SampleFormat::U16 => run::(&device, &config.into())?, - } - - Ok(()) +#[methods] +impl MonoBuffer { + fn new(_owner: &Node) -> Self { + MonoBuffer { frames: fill_frames() } } - fn run(device: &cpal::Device, config: &cpal::StreamConfig) -> Result<(), anyhow::Error> - where - T: cpal::Sample, - { - // Create a signal chain to play back 1 second of each oscillator at A4. - let base_freq = 440.0; - let multipliers = [0.8, 1.0, 1.2, 1.7, 2.9, 4.5, 8.8, 1.9, 3.6]; - let freqs = multipliers.map(|m| signal::rate(config.sample_rate.0 as f64).const_hz(base_freq * m)); - let _sines = freqs.map(|f| f.clone().sine()); - - // Shitty naive implementation until Rust clicks. - let hz_0 = signal::rate(config.sample_rate.0 as f64).const_hz(base_freq * 0.8); - let hz_1 = signal::rate(config.sample_rate.0 as f64).const_hz(base_freq * 1.0); - let hz_2 = signal::rate(config.sample_rate.0 as f64).const_hz(base_freq * 1.2); - let hz_3 = signal::rate(config.sample_rate.0 as f64).const_hz(base_freq * 1.7); - let hz_4 = signal::rate(config.sample_rate.0 as f64).const_hz(base_freq * 2.9); - let hz_5 = signal::rate(config.sample_rate.0 as f64).const_hz(base_freq * 4.5); - let hz_6 = signal::rate(config.sample_rate.0 as f64).const_hz(base_freq * 8.8); - let hz_7 = signal::rate(config.sample_rate.0 as f64).const_hz(base_freq * 1.9); - let hz_8 = signal::rate(config.sample_rate.0 as f64).const_hz(base_freq * 3.6); - - let sine_0 = hz_0.clone().sine().scale_amp(0.03); - let sine_1 = hz_1.clone().sine(); - let sine_2 = hz_2.clone().sine().scale_amp(0.8); - let sine_3 = hz_3.clone().sine().scale_amp(0.004); - let sine_4 = hz_4.clone().sine().scale_amp(0.03); - let sine_5 = hz_5.clone().sine().scale_amp(0.02); - let sine_6 = hz_6.clone().sine().scale_amp(0.001); - let sine_7 = hz_7.clone().sine().scale_amp(0.006); - let sine_8 = hz_8.clone().sine().scale_amp(0.05); - - - // let hz = signal::rate(config.sample_rate.0 as f64).const_hz(440.0); - let one_sec = config.sample_rate.0 as usize; - - // let mut sin_a = hz - // .clone() - // .sine(); - - // let mut sin_b = hz_b - // .clone() - // .sine(); - - let mut synth = sine_0 - .add_amp(sine_1) - .add_amp(sine_2) - .add_amp(sine_3) - .add_amp(sine_4) - .add_amp(sine_5) - .add_amp(sine_6) - .add_amp(sine_7) - .add_amp(sine_8) - .take(one_sec) - .map(|s| s.to_sample::() * 0.2); - - // let mut synth = sines[0] - // .add_amp(sines[1]) - // .add_amp(sines[2]) - // .add_amp(sines[3]) - // .add_amp(sines[4]) - // .add_amp(sines[5]) - // .add_amp(sines[6]) - // .add_amp(sines[7]) - // .add_amp(sines[8]) - // .take(one_sec) - // .map(|s| s.to_sample::() * 0.2); - // let mut synth = sin_a.add_amp(sin_b).take(one_sec).map(|s| s.to_sample::() * 0.2); - // let mut synth = hz - // .clone() - // .sine() - // .take(one_sec) - // .chain(hz.clone().saw().take(one_sec)) - // .chain(hz.clone().square().take(one_sec)) - // .chain(hz.clone().noise_simplex().take(one_sec)) - // .chain(signal::noise(0).take(one_sec)) - // .map(|s| s.to_sample::() * 0.2); - - // A channel for indicating when playback has completed. - let (complete_tx, complete_rx) = mpsc::sync_channel(1); - - // Create and run the stream. - let err_fn = |err| eprintln!("an error occurred on stream: {}", err); - let channels = config.channels as usize; - let stream = device.build_output_stream( - config, - move |data: &mut [T], _: &cpal::OutputCallbackInfo| { - write_data(data, channels, &complete_tx, &mut synth) - }, - err_fn, - )?; - stream.play()?; - - // Wait for playback to complete. - complete_rx.recv().unwrap(); - stream.pause()?; - - Ok(()) + fn frames(&self) -> [f32; 512] { + return self.frames; } - fn write_data( - output: &mut [T], - channels: usize, - complete_tx: &mpsc::SyncSender<()>, - signal: &mut dyn Iterator, - ) where - T: cpal::Sample, - { - for frame in output.chunks_mut(channels) { - let sample = match signal.next() { - None => { - complete_tx.try_send(()).ok(); - 0.0 - } - Some(sample) => sample, - }; - let value: T = cpal::Sample::from::(&sample); - for sample in frame.iter_mut() { - *sample = value; - } - } + #[export] + fn _ready(&self, _owner: &Node) { + godot_print!("Whatever, connected.") } - } // Function that registers all exposed classes to Godot fn init(handle: InitHandle) { - // Register the `Synth` type we declared. - handle.add_class::(); + // Register the `MonoBuffer` type we declared. + handle.add_class::(); } // Macro that creates the entry-points of the dynamic library. diff --git a/klangfarbrs/src/main.rs b/klangfarbrs/src/main.rs index fa1cdfb..acb3403 100644 --- a/klangfarbrs/src/main.rs +++ b/klangfarbrs/src/main.rs @@ -1,8 +1,3 @@ -use klangfarbrs::test::test; - fn main() { - match test() { - Ok(()) => (), - Err(error) => panic!("oopsie: {:?}", error), - }; -} + +} -- cgit v1.2.3