├── .cargo └── config ├── .github └── workflows │ └── build.yml ├── .gitignore ├── Cargo.lock ├── Cargo.toml ├── LICENSE ├── README.md ├── bundler.toml ├── gui ├── .gitignore ├── README.md ├── app │ ├── globals.css │ ├── index.ts │ ├── layout.tsx │ └── page.tsx ├── bun.lockb ├── eslint.config.mjs ├── next.config.ts ├── package.json ├── postcss.config.mjs ├── tailwind.config.ts └── tsconfig.json ├── media └── image.png ├── src ├── editor.rs └── lib.rs └── xtask ├── Cargo.toml └── src └── main.rs /.cargo/config: -------------------------------------------------------------------------------- 1 | [alias] 2 | xtask = "run --package xtask --release --" 3 | -------------------------------------------------------------------------------- /.github/workflows/build.yml: -------------------------------------------------------------------------------- 1 | name: Automated Builds 2 | 3 | on: 4 | push: 5 | branches: 6 | - "**" 7 | tags: 8 | - "*" 9 | pull_request: 10 | branches: 11 | - master 12 | workflow_dispatch: 13 | 14 | defaults: 15 | run: 16 | # This otherwise gets run under dash which does not support brace expansion 17 | shell: bash 18 | 19 | jobs: 20 | # We'll only package the plugins with an entry in bundler.toml 21 | package: 22 | strategy: 23 | matrix: 24 | include: 25 | - { name: ubuntu, os: ubuntu-latest, cross-target: "" } 26 | - { 27 | name: macos-universal, 28 | os: macos-latest, 29 | cross-target: aarch64-apple-darwin, 30 | } 31 | - { name: windows, os: windows-latest, cross-target: "" } 32 | name: Package plugin binaries 33 | runs-on: ${{ matrix.os }} 34 | steps: 35 | - uses: actions/checkout@v3 36 | - name: Fetch all git history 37 | run: git fetch --force --prune --tags --unshallow 38 | 39 | - name: Install dependencies 40 | if: startsWith(matrix.os, 'ubuntu') 41 | run: | 42 | sudo apt-get update 43 | sudo apt-get install -y libasound2-dev libgl-dev libjack-dev libx11-xcb-dev libxcb1-dev libxcb-dri2-0-dev libxcb-icccm4-dev libxcursor-dev libxkbcommon-dev libxcb-shape0-dev libxcb-xfixes0-dev libglib2.0-0 libwebkit2gtk-4.1-dev 44 | export PKG_CONFIG_PATH=/usr/lib/pkgconfig:/usr/share/pkgconfig 45 | 46 | - uses: actions/cache@v3 47 | # FIXME: Caching `target/` causes the Windows runner to blow up after some time 48 | if: startsWith(matrix.os, 'windows') 49 | with: 50 | path: | 51 | ~/.cargo/registry/index/ 52 | ~/.cargo/registry/cache/ 53 | ~/.cargo/git/db/ 54 | key: ${{ matrix.name }}-${{ matrix.cross-target }} 55 | - uses: actions/cache@v3 56 | if: "!startsWith(matrix.os, 'windows')" 57 | with: 58 | path: | 59 | ~/.cargo/registry/index/ 60 | ~/.cargo/registry/cache/ 61 | ~/.cargo/git/db/ 62 | target/ 63 | key: ${{ matrix.name }}-${{ matrix.cross-target }} 64 | 65 | - uses: oven-sh/setup-bun@v2 66 | - name: Build GUI 67 | working-directory: gui 68 | run: bun install && bun run build 69 | 70 | - name: Set up Rust toolchain 71 | # Needed for SIMD 72 | uses: dtolnay/rust-toolchain@nightly 73 | with: 74 | # The macOS AArch64 build is done from an x86_64 macOS CI runner, so 75 | # it needs to be cross compiled 76 | targets: ${{ matrix.cross-target }} 77 | 78 | # i have no idea why this needs to be here, the macos version just wouldn't build without it 79 | - name: Add correct macos target 80 | if: startsWith(matrix.os, 'macos') 81 | run: rustup target add x86_64-apple-darwin 82 | 83 | - name: Package all targets from bundler.toml 84 | # Instead of hardcoding which targets to build and package, we'll 85 | # package everything that's got en entry in the `bundler.toml` file 86 | run: | 87 | runner_name=${{ matrix.name }} 88 | if [[ $runner_name = 'macos-universal' ]]; then 89 | export MACOSX_DEPLOYMENT_TARGET=10.13 90 | cargo xtask bundle-universal midiometry --release 91 | else 92 | cross_target=${{ matrix.cross-target }} 93 | if [[ -n $cross_target ]]; then 94 | package_args+=("--target" "$cross_target") 95 | fi 96 | cargo xtask bundle midiometry --release 97 | fi 98 | 99 | - name: Determine build archive name 100 | run: | 101 | # Windows (usually) doesn't like colons in file names 102 | echo "ARCHIVE_NAME=midiometry-$(date -u +"%Y-%m-%d-%H%m%S")-${{ matrix.name }}" >> "$GITHUB_ENV" 103 | - name: Move all packaged plugin into a directory 104 | run: | 105 | # GitHub Action strips the top level directory, great, have another one 106 | mkdir -p "$ARCHIVE_NAME/$ARCHIVE_NAME" 107 | mv target/bundled/* "$ARCHIVE_NAME/$ARCHIVE_NAME" 108 | # - name: Add an OS-specific readme file with installation instructions 109 | # run: cp ".github/workflows/readme-${{ runner.os }}.txt" "$ARCHIVE_NAME/$ARCHIVE_NAME/README.txt" 110 | - uses: actions/upload-artifact@v3 111 | with: 112 | name: ${{ env.ARCHIVE_NAME }} 113 | path: ${{ env.ARCHIVE_NAME }} 114 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /target 2 | /assets -------------------------------------------------------------------------------- /Cargo.lock: -------------------------------------------------------------------------------- 1 | # This file is automatically @generated by Cargo. 2 | # It is not intended for manual editing. 3 | version = 4 4 | 5 | [[package]] 6 | name = "addr2line" 7 | version = "0.24.2" 8 | source = "registry+https://github.com/rust-lang/crates.io-index" 9 | checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" 10 | dependencies = [ 11 | "gimli", 12 | ] 13 | 14 | [[package]] 15 | name = "adler2" 16 | version = "2.0.0" 17 | source = "registry+https://github.com/rust-lang/crates.io-index" 18 | checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" 19 | 20 | [[package]] 21 | name = "anyhow" 22 | version = "1.0.94" 23 | source = "registry+https://github.com/rust-lang/crates.io-index" 24 | checksum = "c1fd03a028ef38ba2276dce7e33fcd6369c158a1bca17946c4b1b701891c1ff7" 25 | 26 | [[package]] 27 | name = "anymap" 28 | version = "1.0.0-beta.2" 29 | source = "registry+https://github.com/rust-lang/crates.io-index" 30 | checksum = "8f1f8f5a6f3d50d89e3797d7593a50f96bb2aaa20ca0cc7be1fb673232c91d72" 31 | 32 | [[package]] 33 | name = "as-raw-xcb-connection" 34 | version = "1.0.1" 35 | source = "registry+https://github.com/rust-lang/crates.io-index" 36 | checksum = "175571dd1d178ced59193a6fc02dde1b972eb0bc56c892cde9beeceac5bf0f6b" 37 | 38 | [[package]] 39 | name = "atk" 40 | version = "0.18.2" 41 | source = "registry+https://github.com/rust-lang/crates.io-index" 42 | checksum = "241b621213072e993be4f6f3a9e4b45f65b7e6faad43001be957184b7bb1824b" 43 | dependencies = [ 44 | "atk-sys", 45 | "glib", 46 | "libc", 47 | ] 48 | 49 | [[package]] 50 | name = "atk-sys" 51 | version = "0.18.2" 52 | source = "registry+https://github.com/rust-lang/crates.io-index" 53 | checksum = "c5e48b684b0ca77d2bbadeef17424c2ea3c897d44d566a1617e7e8f30614d086" 54 | dependencies = [ 55 | "glib-sys", 56 | "gobject-sys", 57 | "libc", 58 | "system-deps", 59 | ] 60 | 61 | [[package]] 62 | name = "atomic_float" 63 | version = "0.1.0" 64 | source = "registry+https://github.com/rust-lang/crates.io-index" 65 | checksum = "62af46d040ba9df09edc6528dae9d8e49f5f3e82f55b7d2ec31a733c38dbc49d" 66 | 67 | [[package]] 68 | name = "atomic_refcell" 69 | version = "0.1.13" 70 | source = "registry+https://github.com/rust-lang/crates.io-index" 71 | checksum = "41e67cd8309bbd06cd603a9e693a784ac2e5d1e955f11286e355089fcab3047c" 72 | 73 | [[package]] 74 | name = "atty" 75 | version = "0.2.14" 76 | source = "registry+https://github.com/rust-lang/crates.io-index" 77 | checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" 78 | dependencies = [ 79 | "hermit-abi", 80 | "libc", 81 | "winapi", 82 | ] 83 | 84 | [[package]] 85 | name = "autocfg" 86 | version = "1.4.0" 87 | source = "registry+https://github.com/rust-lang/crates.io-index" 88 | checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" 89 | 90 | [[package]] 91 | name = "backtrace" 92 | version = "0.3.74" 93 | source = "registry+https://github.com/rust-lang/crates.io-index" 94 | checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" 95 | dependencies = [ 96 | "addr2line", 97 | "cfg-if", 98 | "libc", 99 | "miniz_oxide", 100 | "object", 101 | "rustc-demangle", 102 | "windows-targets 0.52.6", 103 | ] 104 | 105 | [[package]] 106 | name = "base64" 107 | version = "0.21.7" 108 | source = "registry+https://github.com/rust-lang/crates.io-index" 109 | checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" 110 | 111 | [[package]] 112 | name = "baseview" 113 | version = "0.1.0" 114 | source = "git+https://github.com/RustAudio/baseview#9a0b42c09d712777b2edb4c5e0cb6baf21e988f0" 115 | dependencies = [ 116 | "cocoa 0.24.1", 117 | "core-foundation", 118 | "keyboard-types", 119 | "nix", 120 | "objc", 121 | "raw-window-handle", 122 | "uuid", 123 | "winapi", 124 | "x11", 125 | "x11rb", 126 | ] 127 | 128 | [[package]] 129 | name = "bitflags" 130 | version = "1.3.2" 131 | source = "registry+https://github.com/rust-lang/crates.io-index" 132 | checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" 133 | 134 | [[package]] 135 | name = "bitflags" 136 | version = "2.6.0" 137 | source = "registry+https://github.com/rust-lang/crates.io-index" 138 | checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" 139 | 140 | [[package]] 141 | name = "block" 142 | version = "0.1.6" 143 | source = "registry+https://github.com/rust-lang/crates.io-index" 144 | checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" 145 | 146 | [[package]] 147 | name = "block-buffer" 148 | version = "0.10.4" 149 | source = "registry+https://github.com/rust-lang/crates.io-index" 150 | checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" 151 | dependencies = [ 152 | "generic-array", 153 | ] 154 | 155 | [[package]] 156 | name = "byteorder" 157 | version = "1.5.0" 158 | source = "registry+https://github.com/rust-lang/crates.io-index" 159 | checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" 160 | 161 | [[package]] 162 | name = "bytes" 163 | version = "1.9.0" 164 | source = "registry+https://github.com/rust-lang/crates.io-index" 165 | checksum = "325918d6fe32f23b19878fe4b34794ae41fc19ddbe53b10571a4874d44ffd39b" 166 | 167 | [[package]] 168 | name = "cairo-rs" 169 | version = "0.18.5" 170 | source = "registry+https://github.com/rust-lang/crates.io-index" 171 | checksum = "8ca26ef0159422fb77631dc9d17b102f253b876fe1586b03b803e63a309b4ee2" 172 | dependencies = [ 173 | "bitflags 2.6.0", 174 | "cairo-sys-rs", 175 | "glib", 176 | "libc", 177 | "once_cell", 178 | "thiserror", 179 | ] 180 | 181 | [[package]] 182 | name = "cairo-sys-rs" 183 | version = "0.18.2" 184 | source = "registry+https://github.com/rust-lang/crates.io-index" 185 | checksum = "685c9fa8e590b8b3d678873528d83411db17242a73fccaed827770ea0fedda51" 186 | dependencies = [ 187 | "glib-sys", 188 | "libc", 189 | "system-deps", 190 | ] 191 | 192 | [[package]] 193 | name = "camino" 194 | version = "1.1.9" 195 | source = "registry+https://github.com/rust-lang/crates.io-index" 196 | checksum = "8b96ec4966b5813e2c0507c1f86115c8c5abaadc3980879c3424042a02fd1ad3" 197 | dependencies = [ 198 | "serde", 199 | ] 200 | 201 | [[package]] 202 | name = "cargo-platform" 203 | version = "0.1.9" 204 | source = "registry+https://github.com/rust-lang/crates.io-index" 205 | checksum = "e35af189006b9c0f00a064685c727031e3ed2d8020f7ba284d78cc2671bd36ea" 206 | dependencies = [ 207 | "serde", 208 | ] 209 | 210 | [[package]] 211 | name = "cargo_metadata" 212 | version = "0.18.1" 213 | source = "registry+https://github.com/rust-lang/crates.io-index" 214 | checksum = "2d886547e41f740c616ae73108f6eb70afe6d940c7bc697cb30f13daec073037" 215 | dependencies = [ 216 | "camino", 217 | "cargo-platform", 218 | "semver", 219 | "serde", 220 | "serde_json", 221 | "thiserror", 222 | ] 223 | 224 | [[package]] 225 | name = "cc" 226 | version = "1.2.4" 227 | source = "registry+https://github.com/rust-lang/crates.io-index" 228 | checksum = "9157bbaa6b165880c27a4293a474c91cdcf265cc68cc829bf10be0964a391caf" 229 | dependencies = [ 230 | "shlex", 231 | ] 232 | 233 | [[package]] 234 | name = "cesu8" 235 | version = "1.1.0" 236 | source = "registry+https://github.com/rust-lang/crates.io-index" 237 | checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" 238 | 239 | [[package]] 240 | name = "cfg-expr" 241 | version = "0.15.8" 242 | source = "registry+https://github.com/rust-lang/crates.io-index" 243 | checksum = "d067ad48b8650848b989a59a86c6c36a995d02d2bf778d45c3c5d57bc2718f02" 244 | dependencies = [ 245 | "smallvec", 246 | "target-lexicon", 247 | ] 248 | 249 | [[package]] 250 | name = "cfg-if" 251 | version = "1.0.0" 252 | source = "registry+https://github.com/rust-lang/crates.io-index" 253 | checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" 254 | 255 | [[package]] 256 | name = "cfg_aliases" 257 | version = "0.1.1" 258 | source = "registry+https://github.com/rust-lang/crates.io-index" 259 | checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e" 260 | 261 | [[package]] 262 | name = "clap-sys" 263 | version = "0.3.0" 264 | source = "git+https://github.com/robbert-vdh/clap-sys.git?branch=feature%2Fcstr-macro#523a5f8a8dd021ec99e7d6e0c0ebe7741a3da9d4" 265 | 266 | [[package]] 267 | name = "cocoa" 268 | version = "0.24.1" 269 | source = "registry+https://github.com/rust-lang/crates.io-index" 270 | checksum = "f425db7937052c684daec3bd6375c8abe2d146dca4b8b143d6db777c39138f3a" 271 | dependencies = [ 272 | "bitflags 1.3.2", 273 | "block", 274 | "cocoa-foundation", 275 | "core-foundation", 276 | "core-graphics 0.22.3", 277 | "foreign-types 0.3.2", 278 | "libc", 279 | "objc", 280 | ] 281 | 282 | [[package]] 283 | name = "cocoa" 284 | version = "0.25.0" 285 | source = "registry+https://github.com/rust-lang/crates.io-index" 286 | checksum = "f6140449f97a6e97f9511815c5632d84c8aacf8ac271ad77c559218161a1373c" 287 | dependencies = [ 288 | "bitflags 1.3.2", 289 | "block", 290 | "cocoa-foundation", 291 | "core-foundation", 292 | "core-graphics 0.23.2", 293 | "foreign-types 0.5.0", 294 | "libc", 295 | "objc", 296 | ] 297 | 298 | [[package]] 299 | name = "cocoa-foundation" 300 | version = "0.1.2" 301 | source = "registry+https://github.com/rust-lang/crates.io-index" 302 | checksum = "8c6234cbb2e4c785b456c0644748b1ac416dd045799740356f8363dfe00c93f7" 303 | dependencies = [ 304 | "bitflags 1.3.2", 305 | "block", 306 | "core-foundation", 307 | "core-graphics-types", 308 | "libc", 309 | "objc", 310 | ] 311 | 312 | [[package]] 313 | name = "combine" 314 | version = "4.6.7" 315 | source = "registry+https://github.com/rust-lang/crates.io-index" 316 | checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd" 317 | dependencies = [ 318 | "bytes", 319 | "memchr", 320 | ] 321 | 322 | [[package]] 323 | name = "convert_case" 324 | version = "0.4.0" 325 | source = "registry+https://github.com/rust-lang/crates.io-index" 326 | checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" 327 | 328 | [[package]] 329 | name = "core-foundation" 330 | version = "0.9.4" 331 | source = "registry+https://github.com/rust-lang/crates.io-index" 332 | checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" 333 | dependencies = [ 334 | "core-foundation-sys", 335 | "libc", 336 | ] 337 | 338 | [[package]] 339 | name = "core-foundation-sys" 340 | version = "0.8.7" 341 | source = "registry+https://github.com/rust-lang/crates.io-index" 342 | checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" 343 | 344 | [[package]] 345 | name = "core-graphics" 346 | version = "0.22.3" 347 | source = "registry+https://github.com/rust-lang/crates.io-index" 348 | checksum = "2581bbab3b8ffc6fcbd550bf46c355135d16e9ff2a6ea032ad6b9bf1d7efe4fb" 349 | dependencies = [ 350 | "bitflags 1.3.2", 351 | "core-foundation", 352 | "core-graphics-types", 353 | "foreign-types 0.3.2", 354 | "libc", 355 | ] 356 | 357 | [[package]] 358 | name = "core-graphics" 359 | version = "0.23.2" 360 | source = "registry+https://github.com/rust-lang/crates.io-index" 361 | checksum = "c07782be35f9e1140080c6b96f0d44b739e2278479f64e02fdab4e32dfd8b081" 362 | dependencies = [ 363 | "bitflags 1.3.2", 364 | "core-foundation", 365 | "core-graphics-types", 366 | "foreign-types 0.5.0", 367 | "libc", 368 | ] 369 | 370 | [[package]] 371 | name = "core-graphics-types" 372 | version = "0.1.3" 373 | source = "registry+https://github.com/rust-lang/crates.io-index" 374 | checksum = "45390e6114f68f718cc7a830514a96f903cccd70d02a8f6d9f643ac4ba45afaf" 375 | dependencies = [ 376 | "bitflags 1.3.2", 377 | "core-foundation", 378 | "libc", 379 | ] 380 | 381 | [[package]] 382 | name = "cpufeatures" 383 | version = "0.2.16" 384 | source = "registry+https://github.com/rust-lang/crates.io-index" 385 | checksum = "16b80225097f2e5ae4e7179dd2266824648f3e2f49d9134d584b76389d31c4c3" 386 | dependencies = [ 387 | "libc", 388 | ] 389 | 390 | [[package]] 391 | name = "crossbeam" 392 | version = "0.8.4" 393 | source = "registry+https://github.com/rust-lang/crates.io-index" 394 | checksum = "1137cd7e7fc0fb5d3c5a8678be38ec56e819125d8d7907411fe24ccb943faca8" 395 | dependencies = [ 396 | "crossbeam-channel", 397 | "crossbeam-deque", 398 | "crossbeam-epoch", 399 | "crossbeam-queue", 400 | "crossbeam-utils", 401 | ] 402 | 403 | [[package]] 404 | name = "crossbeam-channel" 405 | version = "0.5.14" 406 | source = "registry+https://github.com/rust-lang/crates.io-index" 407 | checksum = "06ba6d68e24814cb8de6bb986db8222d3a027d15872cabc0d18817bc3c0e4471" 408 | dependencies = [ 409 | "crossbeam-utils", 410 | ] 411 | 412 | [[package]] 413 | name = "crossbeam-deque" 414 | version = "0.8.6" 415 | source = "registry+https://github.com/rust-lang/crates.io-index" 416 | checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" 417 | dependencies = [ 418 | "crossbeam-epoch", 419 | "crossbeam-utils", 420 | ] 421 | 422 | [[package]] 423 | name = "crossbeam-epoch" 424 | version = "0.9.18" 425 | source = "registry+https://github.com/rust-lang/crates.io-index" 426 | checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" 427 | dependencies = [ 428 | "crossbeam-utils", 429 | ] 430 | 431 | [[package]] 432 | name = "crossbeam-queue" 433 | version = "0.3.12" 434 | source = "registry+https://github.com/rust-lang/crates.io-index" 435 | checksum = "0f58bbc28f91df819d0aa2a2c00cd19754769c2fad90579b3592b1c9ba7a3115" 436 | dependencies = [ 437 | "crossbeam-utils", 438 | ] 439 | 440 | [[package]] 441 | name = "crossbeam-utils" 442 | version = "0.8.21" 443 | source = "registry+https://github.com/rust-lang/crates.io-index" 444 | checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" 445 | 446 | [[package]] 447 | name = "crypto-common" 448 | version = "0.1.6" 449 | source = "registry+https://github.com/rust-lang/crates.io-index" 450 | checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" 451 | dependencies = [ 452 | "generic-array", 453 | "typenum", 454 | ] 455 | 456 | [[package]] 457 | name = "cssparser" 458 | version = "0.27.2" 459 | source = "registry+https://github.com/rust-lang/crates.io-index" 460 | checksum = "754b69d351cdc2d8ee09ae203db831e005560fc6030da058f86ad60c92a9cb0a" 461 | dependencies = [ 462 | "cssparser-macros", 463 | "dtoa-short", 464 | "itoa 0.4.8", 465 | "matches", 466 | "phf 0.8.0", 467 | "proc-macro2", 468 | "quote", 469 | "smallvec", 470 | "syn 1.0.109", 471 | ] 472 | 473 | [[package]] 474 | name = "cssparser-macros" 475 | version = "0.6.1" 476 | source = "registry+https://github.com/rust-lang/crates.io-index" 477 | checksum = "13b588ba4ac1a99f7f2964d24b3d896ddc6bf847ee3855dbd4366f058cfcd331" 478 | dependencies = [ 479 | "quote", 480 | "syn 2.0.90", 481 | ] 482 | 483 | [[package]] 484 | name = "deranged" 485 | version = "0.3.11" 486 | source = "registry+https://github.com/rust-lang/crates.io-index" 487 | checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" 488 | dependencies = [ 489 | "powerfmt", 490 | ] 491 | 492 | [[package]] 493 | name = "derive_more" 494 | version = "0.99.18" 495 | source = "registry+https://github.com/rust-lang/crates.io-index" 496 | checksum = "5f33878137e4dafd7fa914ad4e259e18a4e8e532b9617a2d0150262bf53abfce" 497 | dependencies = [ 498 | "convert_case", 499 | "proc-macro2", 500 | "quote", 501 | "rustc_version", 502 | "syn 2.0.90", 503 | ] 504 | 505 | [[package]] 506 | name = "digest" 507 | version = "0.10.7" 508 | source = "registry+https://github.com/rust-lang/crates.io-index" 509 | checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" 510 | dependencies = [ 511 | "block-buffer", 512 | "crypto-common", 513 | ] 514 | 515 | [[package]] 516 | name = "displaydoc" 517 | version = "0.2.5" 518 | source = "registry+https://github.com/rust-lang/crates.io-index" 519 | checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" 520 | dependencies = [ 521 | "proc-macro2", 522 | "quote", 523 | "syn 2.0.90", 524 | ] 525 | 526 | [[package]] 527 | name = "dtoa" 528 | version = "1.0.9" 529 | source = "registry+https://github.com/rust-lang/crates.io-index" 530 | checksum = "dcbb2bf8e87535c23f7a8a321e364ce21462d0ff10cb6407820e8e96dfff6653" 531 | 532 | [[package]] 533 | name = "dtoa-short" 534 | version = "0.3.5" 535 | source = "registry+https://github.com/rust-lang/crates.io-index" 536 | checksum = "cd1511a7b6a56299bd043a9c167a6d2bfb37bf84a6dfceaba651168adfb43c87" 537 | dependencies = [ 538 | "dtoa", 539 | ] 540 | 541 | [[package]] 542 | name = "dunce" 543 | version = "1.0.5" 544 | source = "registry+https://github.com/rust-lang/crates.io-index" 545 | checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" 546 | 547 | [[package]] 548 | name = "equivalent" 549 | version = "1.0.1" 550 | source = "registry+https://github.com/rust-lang/crates.io-index" 551 | checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" 552 | 553 | [[package]] 554 | name = "errno" 555 | version = "0.3.10" 556 | source = "registry+https://github.com/rust-lang/crates.io-index" 557 | checksum = "33d852cb9b869c2a9b3df2f71a3074817f01e1844f839a144f5fcef059a4eb5d" 558 | dependencies = [ 559 | "libc", 560 | "windows-sys 0.59.0", 561 | ] 562 | 563 | [[package]] 564 | name = "field-offset" 565 | version = "0.3.6" 566 | source = "registry+https://github.com/rust-lang/crates.io-index" 567 | checksum = "38e2275cc4e4fc009b0669731a1e5ab7ebf11f469eaede2bab9309a5b4d6057f" 568 | dependencies = [ 569 | "memoffset 0.9.1", 570 | "rustc_version", 571 | ] 572 | 573 | [[package]] 574 | name = "fnv" 575 | version = "1.0.7" 576 | source = "registry+https://github.com/rust-lang/crates.io-index" 577 | checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" 578 | 579 | [[package]] 580 | name = "foreign-types" 581 | version = "0.3.2" 582 | source = "registry+https://github.com/rust-lang/crates.io-index" 583 | checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" 584 | dependencies = [ 585 | "foreign-types-shared 0.1.1", 586 | ] 587 | 588 | [[package]] 589 | name = "foreign-types" 590 | version = "0.5.0" 591 | source = "registry+https://github.com/rust-lang/crates.io-index" 592 | checksum = "d737d9aa519fb7b749cbc3b962edcf310a8dd1f4b67c91c4f83975dbdd17d965" 593 | dependencies = [ 594 | "foreign-types-macros", 595 | "foreign-types-shared 0.3.1", 596 | ] 597 | 598 | [[package]] 599 | name = "foreign-types-macros" 600 | version = "0.2.3" 601 | source = "registry+https://github.com/rust-lang/crates.io-index" 602 | checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" 603 | dependencies = [ 604 | "proc-macro2", 605 | "quote", 606 | "syn 2.0.90", 607 | ] 608 | 609 | [[package]] 610 | name = "foreign-types-shared" 611 | version = "0.1.1" 612 | source = "registry+https://github.com/rust-lang/crates.io-index" 613 | checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" 614 | 615 | [[package]] 616 | name = "foreign-types-shared" 617 | version = "0.3.1" 618 | source = "registry+https://github.com/rust-lang/crates.io-index" 619 | checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b" 620 | 621 | [[package]] 622 | name = "form_urlencoded" 623 | version = "1.2.1" 624 | source = "registry+https://github.com/rust-lang/crates.io-index" 625 | checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" 626 | dependencies = [ 627 | "percent-encoding", 628 | ] 629 | 630 | [[package]] 631 | name = "futf" 632 | version = "0.1.5" 633 | source = "registry+https://github.com/rust-lang/crates.io-index" 634 | checksum = "df420e2e84819663797d1ec6544b13c5be84629e7bb00dc960d6917db2987843" 635 | dependencies = [ 636 | "mac", 637 | "new_debug_unreachable", 638 | ] 639 | 640 | [[package]] 641 | name = "futures-channel" 642 | version = "0.3.31" 643 | source = "registry+https://github.com/rust-lang/crates.io-index" 644 | checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" 645 | dependencies = [ 646 | "futures-core", 647 | ] 648 | 649 | [[package]] 650 | name = "futures-core" 651 | version = "0.3.31" 652 | source = "registry+https://github.com/rust-lang/crates.io-index" 653 | checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" 654 | 655 | [[package]] 656 | name = "futures-executor" 657 | version = "0.3.31" 658 | source = "registry+https://github.com/rust-lang/crates.io-index" 659 | checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" 660 | dependencies = [ 661 | "futures-core", 662 | "futures-task", 663 | "futures-util", 664 | ] 665 | 666 | [[package]] 667 | name = "futures-io" 668 | version = "0.3.31" 669 | source = "registry+https://github.com/rust-lang/crates.io-index" 670 | checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" 671 | 672 | [[package]] 673 | name = "futures-macro" 674 | version = "0.3.31" 675 | source = "registry+https://github.com/rust-lang/crates.io-index" 676 | checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" 677 | dependencies = [ 678 | "proc-macro2", 679 | "quote", 680 | "syn 2.0.90", 681 | ] 682 | 683 | [[package]] 684 | name = "futures-task" 685 | version = "0.3.31" 686 | source = "registry+https://github.com/rust-lang/crates.io-index" 687 | checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" 688 | 689 | [[package]] 690 | name = "futures-util" 691 | version = "0.3.31" 692 | source = "registry+https://github.com/rust-lang/crates.io-index" 693 | checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" 694 | dependencies = [ 695 | "futures-core", 696 | "futures-macro", 697 | "futures-task", 698 | "pin-project-lite", 699 | "pin-utils", 700 | "slab", 701 | ] 702 | 703 | [[package]] 704 | name = "fxhash" 705 | version = "0.2.1" 706 | source = "registry+https://github.com/rust-lang/crates.io-index" 707 | checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" 708 | dependencies = [ 709 | "byteorder", 710 | ] 711 | 712 | [[package]] 713 | name = "gdk" 714 | version = "0.18.2" 715 | source = "registry+https://github.com/rust-lang/crates.io-index" 716 | checksum = "d9f245958c627ac99d8e529166f9823fb3b838d1d41fd2b297af3075093c2691" 717 | dependencies = [ 718 | "cairo-rs", 719 | "gdk-pixbuf", 720 | "gdk-sys", 721 | "gio", 722 | "glib", 723 | "libc", 724 | "pango", 725 | ] 726 | 727 | [[package]] 728 | name = "gdk-pixbuf" 729 | version = "0.18.5" 730 | source = "registry+https://github.com/rust-lang/crates.io-index" 731 | checksum = "50e1f5f1b0bfb830d6ccc8066d18db35c487b1b2b1e8589b5dfe9f07e8defaec" 732 | dependencies = [ 733 | "gdk-pixbuf-sys", 734 | "gio", 735 | "glib", 736 | "libc", 737 | "once_cell", 738 | ] 739 | 740 | [[package]] 741 | name = "gdk-pixbuf-sys" 742 | version = "0.18.0" 743 | source = "registry+https://github.com/rust-lang/crates.io-index" 744 | checksum = "3f9839ea644ed9c97a34d129ad56d38a25e6756f99f3a88e15cd39c20629caf7" 745 | dependencies = [ 746 | "gio-sys", 747 | "glib-sys", 748 | "gobject-sys", 749 | "libc", 750 | "system-deps", 751 | ] 752 | 753 | [[package]] 754 | name = "gdk-sys" 755 | version = "0.18.2" 756 | source = "registry+https://github.com/rust-lang/crates.io-index" 757 | checksum = "5c2d13f38594ac1e66619e188c6d5a1adb98d11b2fcf7894fc416ad76aa2f3f7" 758 | dependencies = [ 759 | "cairo-sys-rs", 760 | "gdk-pixbuf-sys", 761 | "gio-sys", 762 | "glib-sys", 763 | "gobject-sys", 764 | "libc", 765 | "pango-sys", 766 | "pkg-config", 767 | "system-deps", 768 | ] 769 | 770 | [[package]] 771 | name = "gdkx11" 772 | version = "0.18.2" 773 | source = "registry+https://github.com/rust-lang/crates.io-index" 774 | checksum = "3caa00e14351bebbc8183b3c36690327eb77c49abc2268dd4bd36b856db3fbfe" 775 | dependencies = [ 776 | "gdk", 777 | "gdkx11-sys", 778 | "gio", 779 | "glib", 780 | "libc", 781 | "x11", 782 | ] 783 | 784 | [[package]] 785 | name = "gdkx11-sys" 786 | version = "0.18.2" 787 | source = "registry+https://github.com/rust-lang/crates.io-index" 788 | checksum = "6e2e7445fe01ac26f11601db260dd8608fe172514eb63b3b5e261ea6b0f4428d" 789 | dependencies = [ 790 | "gdk-sys", 791 | "glib-sys", 792 | "libc", 793 | "system-deps", 794 | "x11", 795 | ] 796 | 797 | [[package]] 798 | name = "generic-array" 799 | version = "0.14.7" 800 | source = "registry+https://github.com/rust-lang/crates.io-index" 801 | checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" 802 | dependencies = [ 803 | "typenum", 804 | "version_check", 805 | ] 806 | 807 | [[package]] 808 | name = "gethostname" 809 | version = "0.4.3" 810 | source = "registry+https://github.com/rust-lang/crates.io-index" 811 | checksum = "0176e0459c2e4a1fe232f984bca6890e681076abb9934f6cea7c326f3fc47818" 812 | dependencies = [ 813 | "libc", 814 | "windows-targets 0.48.5", 815 | ] 816 | 817 | [[package]] 818 | name = "getrandom" 819 | version = "0.1.16" 820 | source = "registry+https://github.com/rust-lang/crates.io-index" 821 | checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" 822 | dependencies = [ 823 | "cfg-if", 824 | "libc", 825 | "wasi 0.9.0+wasi-snapshot-preview1", 826 | ] 827 | 828 | [[package]] 829 | name = "getrandom" 830 | version = "0.2.15" 831 | source = "registry+https://github.com/rust-lang/crates.io-index" 832 | checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" 833 | dependencies = [ 834 | "cfg-if", 835 | "libc", 836 | "wasi 0.11.0+wasi-snapshot-preview1", 837 | ] 838 | 839 | [[package]] 840 | name = "gimli" 841 | version = "0.31.1" 842 | source = "registry+https://github.com/rust-lang/crates.io-index" 843 | checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" 844 | 845 | [[package]] 846 | name = "gio" 847 | version = "0.18.4" 848 | source = "registry+https://github.com/rust-lang/crates.io-index" 849 | checksum = "d4fc8f532f87b79cbc51a79748f16a6828fb784be93145a322fa14d06d354c73" 850 | dependencies = [ 851 | "futures-channel", 852 | "futures-core", 853 | "futures-io", 854 | "futures-util", 855 | "gio-sys", 856 | "glib", 857 | "libc", 858 | "once_cell", 859 | "pin-project-lite", 860 | "smallvec", 861 | "thiserror", 862 | ] 863 | 864 | [[package]] 865 | name = "gio-sys" 866 | version = "0.18.1" 867 | source = "registry+https://github.com/rust-lang/crates.io-index" 868 | checksum = "37566df850baf5e4cb0dfb78af2e4b9898d817ed9263d1090a2df958c64737d2" 869 | dependencies = [ 870 | "glib-sys", 871 | "gobject-sys", 872 | "libc", 873 | "system-deps", 874 | "winapi", 875 | ] 876 | 877 | [[package]] 878 | name = "glib" 879 | version = "0.18.5" 880 | source = "registry+https://github.com/rust-lang/crates.io-index" 881 | checksum = "233daaf6e83ae6a12a52055f568f9d7cf4671dabb78ff9560ab6da230ce00ee5" 882 | dependencies = [ 883 | "bitflags 2.6.0", 884 | "futures-channel", 885 | "futures-core", 886 | "futures-executor", 887 | "futures-task", 888 | "futures-util", 889 | "gio-sys", 890 | "glib-macros", 891 | "glib-sys", 892 | "gobject-sys", 893 | "libc", 894 | "memchr", 895 | "once_cell", 896 | "smallvec", 897 | "thiserror", 898 | ] 899 | 900 | [[package]] 901 | name = "glib-macros" 902 | version = "0.18.5" 903 | source = "registry+https://github.com/rust-lang/crates.io-index" 904 | checksum = "0bb0228f477c0900c880fd78c8759b95c7636dbd7842707f49e132378aa2acdc" 905 | dependencies = [ 906 | "heck 0.4.1", 907 | "proc-macro-crate 2.0.0", 908 | "proc-macro-error", 909 | "proc-macro2", 910 | "quote", 911 | "syn 2.0.90", 912 | ] 913 | 914 | [[package]] 915 | name = "glib-sys" 916 | version = "0.18.1" 917 | source = "registry+https://github.com/rust-lang/crates.io-index" 918 | checksum = "063ce2eb6a8d0ea93d2bf8ba1957e78dbab6be1c2220dd3daca57d5a9d869898" 919 | dependencies = [ 920 | "libc", 921 | "system-deps", 922 | ] 923 | 924 | [[package]] 925 | name = "gobject-sys" 926 | version = "0.18.0" 927 | source = "registry+https://github.com/rust-lang/crates.io-index" 928 | checksum = "0850127b514d1c4a4654ead6dedadb18198999985908e6ffe4436f53c785ce44" 929 | dependencies = [ 930 | "glib-sys", 931 | "libc", 932 | "system-deps", 933 | ] 934 | 935 | [[package]] 936 | name = "goblin" 937 | version = "0.6.1" 938 | source = "registry+https://github.com/rust-lang/crates.io-index" 939 | checksum = "0d6b4de4a8eb6c46a8c77e1d3be942cb9a8bf073c22374578e5ba4b08ed0ff68" 940 | dependencies = [ 941 | "log", 942 | "plain", 943 | "scroll", 944 | ] 945 | 946 | [[package]] 947 | name = "gtk" 948 | version = "0.18.2" 949 | source = "registry+https://github.com/rust-lang/crates.io-index" 950 | checksum = "fd56fb197bfc42bd5d2751f4f017d44ff59fbb58140c6b49f9b3b2bdab08506a" 951 | dependencies = [ 952 | "atk", 953 | "cairo-rs", 954 | "field-offset", 955 | "futures-channel", 956 | "gdk", 957 | "gdk-pixbuf", 958 | "gio", 959 | "glib", 960 | "gtk-sys", 961 | "gtk3-macros", 962 | "libc", 963 | "pango", 964 | "pkg-config", 965 | ] 966 | 967 | [[package]] 968 | name = "gtk-sys" 969 | version = "0.18.2" 970 | source = "registry+https://github.com/rust-lang/crates.io-index" 971 | checksum = "8f29a1c21c59553eb7dd40e918be54dccd60c52b049b75119d5d96ce6b624414" 972 | dependencies = [ 973 | "atk-sys", 974 | "cairo-sys-rs", 975 | "gdk-pixbuf-sys", 976 | "gdk-sys", 977 | "gio-sys", 978 | "glib-sys", 979 | "gobject-sys", 980 | "libc", 981 | "pango-sys", 982 | "system-deps", 983 | ] 984 | 985 | [[package]] 986 | name = "gtk3-macros" 987 | version = "0.18.2" 988 | source = "registry+https://github.com/rust-lang/crates.io-index" 989 | checksum = "52ff3c5b21f14f0736fed6dcfc0bfb4225ebf5725f3c0209edeec181e4d73e9d" 990 | dependencies = [ 991 | "proc-macro-crate 1.3.1", 992 | "proc-macro-error", 993 | "proc-macro2", 994 | "quote", 995 | "syn 2.0.90", 996 | ] 997 | 998 | [[package]] 999 | name = "hashbrown" 1000 | version = "0.12.3" 1001 | source = "registry+https://github.com/rust-lang/crates.io-index" 1002 | checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" 1003 | 1004 | [[package]] 1005 | name = "hashbrown" 1006 | version = "0.15.2" 1007 | source = "registry+https://github.com/rust-lang/crates.io-index" 1008 | checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" 1009 | 1010 | [[package]] 1011 | name = "heck" 1012 | version = "0.4.1" 1013 | source = "registry+https://github.com/rust-lang/crates.io-index" 1014 | checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" 1015 | 1016 | [[package]] 1017 | name = "heck" 1018 | version = "0.5.0" 1019 | source = "registry+https://github.com/rust-lang/crates.io-index" 1020 | checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" 1021 | 1022 | [[package]] 1023 | name = "hermit-abi" 1024 | version = "0.1.19" 1025 | source = "registry+https://github.com/rust-lang/crates.io-index" 1026 | checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" 1027 | dependencies = [ 1028 | "libc", 1029 | ] 1030 | 1031 | [[package]] 1032 | name = "html5ever" 1033 | version = "0.26.0" 1034 | source = "registry+https://github.com/rust-lang/crates.io-index" 1035 | checksum = "bea68cab48b8459f17cf1c944c67ddc572d272d9f2b274140f223ecb1da4a3b7" 1036 | dependencies = [ 1037 | "log", 1038 | "mac", 1039 | "markup5ever", 1040 | "proc-macro2", 1041 | "quote", 1042 | "syn 1.0.109", 1043 | ] 1044 | 1045 | [[package]] 1046 | name = "http" 1047 | version = "0.2.12" 1048 | source = "registry+https://github.com/rust-lang/crates.io-index" 1049 | checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" 1050 | dependencies = [ 1051 | "bytes", 1052 | "fnv", 1053 | "itoa 1.0.14", 1054 | ] 1055 | 1056 | [[package]] 1057 | name = "icu_collections" 1058 | version = "1.5.0" 1059 | source = "registry+https://github.com/rust-lang/crates.io-index" 1060 | checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526" 1061 | dependencies = [ 1062 | "displaydoc", 1063 | "yoke", 1064 | "zerofrom", 1065 | "zerovec", 1066 | ] 1067 | 1068 | [[package]] 1069 | name = "icu_locid" 1070 | version = "1.5.0" 1071 | source = "registry+https://github.com/rust-lang/crates.io-index" 1072 | checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637" 1073 | dependencies = [ 1074 | "displaydoc", 1075 | "litemap", 1076 | "tinystr", 1077 | "writeable", 1078 | "zerovec", 1079 | ] 1080 | 1081 | [[package]] 1082 | name = "icu_locid_transform" 1083 | version = "1.5.0" 1084 | source = "registry+https://github.com/rust-lang/crates.io-index" 1085 | checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e" 1086 | dependencies = [ 1087 | "displaydoc", 1088 | "icu_locid", 1089 | "icu_locid_transform_data", 1090 | "icu_provider", 1091 | "tinystr", 1092 | "zerovec", 1093 | ] 1094 | 1095 | [[package]] 1096 | name = "icu_locid_transform_data" 1097 | version = "1.5.0" 1098 | source = "registry+https://github.com/rust-lang/crates.io-index" 1099 | checksum = "fdc8ff3388f852bede6b579ad4e978ab004f139284d7b28715f773507b946f6e" 1100 | 1101 | [[package]] 1102 | name = "icu_normalizer" 1103 | version = "1.5.0" 1104 | source = "registry+https://github.com/rust-lang/crates.io-index" 1105 | checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f" 1106 | dependencies = [ 1107 | "displaydoc", 1108 | "icu_collections", 1109 | "icu_normalizer_data", 1110 | "icu_properties", 1111 | "icu_provider", 1112 | "smallvec", 1113 | "utf16_iter", 1114 | "utf8_iter", 1115 | "write16", 1116 | "zerovec", 1117 | ] 1118 | 1119 | [[package]] 1120 | name = "icu_normalizer_data" 1121 | version = "1.5.0" 1122 | source = "registry+https://github.com/rust-lang/crates.io-index" 1123 | checksum = "f8cafbf7aa791e9b22bec55a167906f9e1215fd475cd22adfcf660e03e989516" 1124 | 1125 | [[package]] 1126 | name = "icu_properties" 1127 | version = "1.5.1" 1128 | source = "registry+https://github.com/rust-lang/crates.io-index" 1129 | checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5" 1130 | dependencies = [ 1131 | "displaydoc", 1132 | "icu_collections", 1133 | "icu_locid_transform", 1134 | "icu_properties_data", 1135 | "icu_provider", 1136 | "tinystr", 1137 | "zerovec", 1138 | ] 1139 | 1140 | [[package]] 1141 | name = "icu_properties_data" 1142 | version = "1.5.0" 1143 | source = "registry+https://github.com/rust-lang/crates.io-index" 1144 | checksum = "67a8effbc3dd3e4ba1afa8ad918d5684b8868b3b26500753effea8d2eed19569" 1145 | 1146 | [[package]] 1147 | name = "icu_provider" 1148 | version = "1.5.0" 1149 | source = "registry+https://github.com/rust-lang/crates.io-index" 1150 | checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9" 1151 | dependencies = [ 1152 | "displaydoc", 1153 | "icu_locid", 1154 | "icu_provider_macros", 1155 | "stable_deref_trait", 1156 | "tinystr", 1157 | "writeable", 1158 | "yoke", 1159 | "zerofrom", 1160 | "zerovec", 1161 | ] 1162 | 1163 | [[package]] 1164 | name = "icu_provider_macros" 1165 | version = "1.5.0" 1166 | source = "registry+https://github.com/rust-lang/crates.io-index" 1167 | checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" 1168 | dependencies = [ 1169 | "proc-macro2", 1170 | "quote", 1171 | "syn 2.0.90", 1172 | ] 1173 | 1174 | [[package]] 1175 | name = "idna" 1176 | version = "1.0.3" 1177 | source = "registry+https://github.com/rust-lang/crates.io-index" 1178 | checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" 1179 | dependencies = [ 1180 | "idna_adapter", 1181 | "smallvec", 1182 | "utf8_iter", 1183 | ] 1184 | 1185 | [[package]] 1186 | name = "idna_adapter" 1187 | version = "1.2.0" 1188 | source = "registry+https://github.com/rust-lang/crates.io-index" 1189 | checksum = "daca1df1c957320b2cf139ac61e7bd64fed304c5040df000a745aa1de3b4ef71" 1190 | dependencies = [ 1191 | "icu_normalizer", 1192 | "icu_properties", 1193 | ] 1194 | 1195 | [[package]] 1196 | name = "include_dir" 1197 | version = "0.7.4" 1198 | source = "registry+https://github.com/rust-lang/crates.io-index" 1199 | checksum = "923d117408f1e49d914f1a379a309cffe4f18c05cf4e3d12e613a15fc81bd0dd" 1200 | dependencies = [ 1201 | "include_dir_macros", 1202 | ] 1203 | 1204 | [[package]] 1205 | name = "include_dir_macros" 1206 | version = "0.7.4" 1207 | source = "registry+https://github.com/rust-lang/crates.io-index" 1208 | checksum = "7cab85a7ed0bd5f0e76d93846e0147172bed2e2d3f859bcc33a8d9699cad1a75" 1209 | dependencies = [ 1210 | "proc-macro2", 1211 | "quote", 1212 | ] 1213 | 1214 | [[package]] 1215 | name = "indexmap" 1216 | version = "1.9.3" 1217 | source = "registry+https://github.com/rust-lang/crates.io-index" 1218 | checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" 1219 | dependencies = [ 1220 | "autocfg", 1221 | "hashbrown 0.12.3", 1222 | ] 1223 | 1224 | [[package]] 1225 | name = "indexmap" 1226 | version = "2.7.0" 1227 | source = "registry+https://github.com/rust-lang/crates.io-index" 1228 | checksum = "62f822373a4fe84d4bb149bf54e584a7f4abec90e072ed49cda0edea5b95471f" 1229 | dependencies = [ 1230 | "equivalent", 1231 | "hashbrown 0.15.2", 1232 | ] 1233 | 1234 | [[package]] 1235 | name = "itoa" 1236 | version = "0.4.8" 1237 | source = "registry+https://github.com/rust-lang/crates.io-index" 1238 | checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4" 1239 | 1240 | [[package]] 1241 | name = "itoa" 1242 | version = "1.0.14" 1243 | source = "registry+https://github.com/rust-lang/crates.io-index" 1244 | checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674" 1245 | 1246 | [[package]] 1247 | name = "javascriptcore-rs" 1248 | version = "1.1.2" 1249 | source = "registry+https://github.com/rust-lang/crates.io-index" 1250 | checksum = "ca5671e9ffce8ffba57afc24070e906da7fc4b1ba66f2cabebf61bf2ea257fcc" 1251 | dependencies = [ 1252 | "bitflags 1.3.2", 1253 | "glib", 1254 | "javascriptcore-rs-sys", 1255 | ] 1256 | 1257 | [[package]] 1258 | name = "javascriptcore-rs-sys" 1259 | version = "1.1.1" 1260 | source = "registry+https://github.com/rust-lang/crates.io-index" 1261 | checksum = "af1be78d14ffa4b75b66df31840478fef72b51f8c2465d4ca7c194da9f7a5124" 1262 | dependencies = [ 1263 | "glib-sys", 1264 | "gobject-sys", 1265 | "libc", 1266 | "system-deps", 1267 | ] 1268 | 1269 | [[package]] 1270 | name = "jni" 1271 | version = "0.21.1" 1272 | source = "registry+https://github.com/rust-lang/crates.io-index" 1273 | checksum = "1a87aa2bb7d2af34197c04845522473242e1aa17c12f4935d5856491a7fb8c97" 1274 | dependencies = [ 1275 | "cesu8", 1276 | "cfg-if", 1277 | "combine", 1278 | "jni-sys", 1279 | "log", 1280 | "thiserror", 1281 | "walkdir", 1282 | "windows-sys 0.45.0", 1283 | ] 1284 | 1285 | [[package]] 1286 | name = "jni-sys" 1287 | version = "0.3.0" 1288 | source = "registry+https://github.com/rust-lang/crates.io-index" 1289 | checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" 1290 | 1291 | [[package]] 1292 | name = "keyboard-types" 1293 | version = "0.6.2" 1294 | source = "registry+https://github.com/rust-lang/crates.io-index" 1295 | checksum = "0b7668b7cff6a51fe61cdde64cd27c8a220786f399501b57ebe36f7d8112fd68" 1296 | dependencies = [ 1297 | "bitflags 1.3.2", 1298 | "serde", 1299 | "unicode-segmentation", 1300 | ] 1301 | 1302 | [[package]] 1303 | name = "kuchikiki" 1304 | version = "0.8.2" 1305 | source = "registry+https://github.com/rust-lang/crates.io-index" 1306 | checksum = "f29e4755b7b995046f510a7520c42b2fed58b77bd94d5a87a8eb43d2fd126da8" 1307 | dependencies = [ 1308 | "cssparser", 1309 | "html5ever", 1310 | "indexmap 1.9.3", 1311 | "matches", 1312 | "selectors", 1313 | ] 1314 | 1315 | [[package]] 1316 | name = "libc" 1317 | version = "0.2.168" 1318 | source = "registry+https://github.com/rust-lang/crates.io-index" 1319 | checksum = "5aaeb2981e0606ca11d79718f8bb01164f1d6ed75080182d3abf017e6d244b6d" 1320 | 1321 | [[package]] 1322 | name = "linux-raw-sys" 1323 | version = "0.4.14" 1324 | source = "registry+https://github.com/rust-lang/crates.io-index" 1325 | checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" 1326 | 1327 | [[package]] 1328 | name = "litemap" 1329 | version = "0.7.4" 1330 | source = "registry+https://github.com/rust-lang/crates.io-index" 1331 | checksum = "4ee93343901ab17bd981295f2cf0026d4ad018c7c31ba84549a4ddbb47a45104" 1332 | 1333 | [[package]] 1334 | name = "lock_api" 1335 | version = "0.4.12" 1336 | source = "registry+https://github.com/rust-lang/crates.io-index" 1337 | checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" 1338 | dependencies = [ 1339 | "autocfg", 1340 | "scopeguard", 1341 | ] 1342 | 1343 | [[package]] 1344 | name = "log" 1345 | version = "0.4.22" 1346 | source = "registry+https://github.com/rust-lang/crates.io-index" 1347 | checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" 1348 | 1349 | [[package]] 1350 | name = "mac" 1351 | version = "0.1.1" 1352 | source = "registry+https://github.com/rust-lang/crates.io-index" 1353 | checksum = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4" 1354 | 1355 | [[package]] 1356 | name = "malloc_buf" 1357 | version = "0.0.6" 1358 | source = "registry+https://github.com/rust-lang/crates.io-index" 1359 | checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" 1360 | dependencies = [ 1361 | "libc", 1362 | ] 1363 | 1364 | [[package]] 1365 | name = "markup5ever" 1366 | version = "0.11.0" 1367 | source = "registry+https://github.com/rust-lang/crates.io-index" 1368 | checksum = "7a2629bb1404f3d34c2e921f21fd34ba00b206124c81f65c50b43b6aaefeb016" 1369 | dependencies = [ 1370 | "log", 1371 | "phf 0.10.1", 1372 | "phf_codegen 0.10.0", 1373 | "string_cache", 1374 | "string_cache_codegen", 1375 | "tendril", 1376 | ] 1377 | 1378 | [[package]] 1379 | name = "matches" 1380 | version = "0.1.10" 1381 | source = "registry+https://github.com/rust-lang/crates.io-index" 1382 | checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5" 1383 | 1384 | [[package]] 1385 | name = "memchr" 1386 | version = "2.7.4" 1387 | source = "registry+https://github.com/rust-lang/crates.io-index" 1388 | checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" 1389 | 1390 | [[package]] 1391 | name = "memoffset" 1392 | version = "0.6.5" 1393 | source = "registry+https://github.com/rust-lang/crates.io-index" 1394 | checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce" 1395 | dependencies = [ 1396 | "autocfg", 1397 | ] 1398 | 1399 | [[package]] 1400 | name = "memoffset" 1401 | version = "0.9.1" 1402 | source = "registry+https://github.com/rust-lang/crates.io-index" 1403 | checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a" 1404 | dependencies = [ 1405 | "autocfg", 1406 | ] 1407 | 1408 | [[package]] 1409 | name = "midi-consts" 1410 | version = "0.1.0" 1411 | source = "registry+https://github.com/rust-lang/crates.io-index" 1412 | checksum = "6f2dd5c7f8aaf48a76e389068ab25ed80bdbc226b887f9013844c415698c9952" 1413 | 1414 | [[package]] 1415 | name = "midiometry" 1416 | version = "0.1.0" 1417 | dependencies = [ 1418 | "include_dir", 1419 | "mime_guess", 1420 | "nih_plug", 1421 | "nih_plug_webview", 1422 | "rtrb", 1423 | "serde_json", 1424 | "triple_buffer", 1425 | ] 1426 | 1427 | [[package]] 1428 | name = "mime" 1429 | version = "0.3.17" 1430 | source = "registry+https://github.com/rust-lang/crates.io-index" 1431 | checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" 1432 | 1433 | [[package]] 1434 | name = "mime_guess" 1435 | version = "2.0.5" 1436 | source = "registry+https://github.com/rust-lang/crates.io-index" 1437 | checksum = "f7c44f8e672c00fe5308fa235f821cb4198414e1c77935c1ab6948d3fd78550e" 1438 | dependencies = [ 1439 | "mime", 1440 | "unicase", 1441 | ] 1442 | 1443 | [[package]] 1444 | name = "miniz_oxide" 1445 | version = "0.8.2" 1446 | source = "registry+https://github.com/rust-lang/crates.io-index" 1447 | checksum = "4ffbe83022cedc1d264172192511ae958937694cd57ce297164951b8b3568394" 1448 | dependencies = [ 1449 | "adler2", 1450 | ] 1451 | 1452 | [[package]] 1453 | name = "ndk" 1454 | version = "0.7.0" 1455 | source = "registry+https://github.com/rust-lang/crates.io-index" 1456 | checksum = "451422b7e4718271c8b5b3aadf5adedba43dc76312454b387e98fae0fc951aa0" 1457 | dependencies = [ 1458 | "bitflags 1.3.2", 1459 | "jni-sys", 1460 | "ndk-sys", 1461 | "num_enum", 1462 | "raw-window-handle", 1463 | "thiserror", 1464 | ] 1465 | 1466 | [[package]] 1467 | name = "ndk-context" 1468 | version = "0.1.1" 1469 | source = "registry+https://github.com/rust-lang/crates.io-index" 1470 | checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b" 1471 | 1472 | [[package]] 1473 | name = "ndk-sys" 1474 | version = "0.4.1+23.1.7779620" 1475 | source = "registry+https://github.com/rust-lang/crates.io-index" 1476 | checksum = "3cf2aae958bd232cac5069850591667ad422d263686d75b52a065f9badeee5a3" 1477 | dependencies = [ 1478 | "jni-sys", 1479 | ] 1480 | 1481 | [[package]] 1482 | name = "new_debug_unreachable" 1483 | version = "1.0.6" 1484 | source = "registry+https://github.com/rust-lang/crates.io-index" 1485 | checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" 1486 | 1487 | [[package]] 1488 | name = "nih_log" 1489 | version = "0.3.1" 1490 | source = "registry+https://github.com/rust-lang/crates.io-index" 1491 | checksum = "d0cdb52ef79af48ae110401c883bdb9c15e0306a99ab6ecf18bc52068b668e54" 1492 | dependencies = [ 1493 | "atty", 1494 | "log", 1495 | "once_cell", 1496 | "termcolor", 1497 | "time", 1498 | "windows 0.44.0", 1499 | ] 1500 | 1501 | [[package]] 1502 | name = "nih_plug" 1503 | version = "0.0.0" 1504 | source = "git+https://github.com/robbert-vdh/nih-plug.git#40269e13940689c6b5432cc16782964ae33f3d12" 1505 | dependencies = [ 1506 | "anyhow", 1507 | "anymap", 1508 | "atomic_float", 1509 | "atomic_refcell", 1510 | "backtrace", 1511 | "bitflags 1.3.2", 1512 | "cfg-if", 1513 | "clap-sys", 1514 | "core-foundation", 1515 | "crossbeam", 1516 | "libc", 1517 | "log", 1518 | "midi-consts", 1519 | "nih_log", 1520 | "nih_plug_derive", 1521 | "objc", 1522 | "parking_lot", 1523 | "raw-window-handle", 1524 | "serde", 1525 | "serde_json", 1526 | "vst3-sys", 1527 | "widestring", 1528 | "windows 0.44.0", 1529 | ] 1530 | 1531 | [[package]] 1532 | name = "nih_plug_derive" 1533 | version = "0.1.0" 1534 | source = "git+https://github.com/robbert-vdh/nih-plug.git#40269e13940689c6b5432cc16782964ae33f3d12" 1535 | dependencies = [ 1536 | "proc-macro2", 1537 | "quote", 1538 | "syn 1.0.109", 1539 | ] 1540 | 1541 | [[package]] 1542 | name = "nih_plug_webview" 1543 | version = "0.0.0" 1544 | source = "git+https://github.com/dvub/nih-plug-webview.git#b21f1005e0ba60c7b3c81ce4b79644919867f0b5" 1545 | dependencies = [ 1546 | "baseview", 1547 | "crossbeam", 1548 | "gtk", 1549 | "keyboard-types", 1550 | "mime_guess", 1551 | "nih_plug", 1552 | "parking_lot", 1553 | "raw-window-handle", 1554 | "serde_json", 1555 | "wry", 1556 | ] 1557 | 1558 | [[package]] 1559 | name = "nih_plug_xtask" 1560 | version = "0.1.0" 1561 | source = "git+https://github.com/robbert-vdh/nih-plug.git#40269e13940689c6b5432cc16782964ae33f3d12" 1562 | dependencies = [ 1563 | "anyhow", 1564 | "cargo_metadata", 1565 | "goblin", 1566 | "reflink", 1567 | "serde", 1568 | "toml 0.7.8", 1569 | ] 1570 | 1571 | [[package]] 1572 | name = "nix" 1573 | version = "0.22.3" 1574 | source = "registry+https://github.com/rust-lang/crates.io-index" 1575 | checksum = "e4916f159ed8e5de0082076562152a76b7a1f64a01fd9d1e0fea002c37624faf" 1576 | dependencies = [ 1577 | "bitflags 1.3.2", 1578 | "cc", 1579 | "cfg-if", 1580 | "libc", 1581 | "memoffset 0.6.5", 1582 | ] 1583 | 1584 | [[package]] 1585 | name = "nodrop" 1586 | version = "0.1.14" 1587 | source = "registry+https://github.com/rust-lang/crates.io-index" 1588 | checksum = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb" 1589 | 1590 | [[package]] 1591 | name = "num-conv" 1592 | version = "0.1.0" 1593 | source = "registry+https://github.com/rust-lang/crates.io-index" 1594 | checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" 1595 | 1596 | [[package]] 1597 | name = "num_enum" 1598 | version = "0.5.11" 1599 | source = "registry+https://github.com/rust-lang/crates.io-index" 1600 | checksum = "1f646caf906c20226733ed5b1374287eb97e3c2a5c227ce668c1f2ce20ae57c9" 1601 | dependencies = [ 1602 | "num_enum_derive", 1603 | ] 1604 | 1605 | [[package]] 1606 | name = "num_enum_derive" 1607 | version = "0.5.11" 1608 | source = "registry+https://github.com/rust-lang/crates.io-index" 1609 | checksum = "dcbff9bc912032c62bf65ef1d5aea88983b420f4f839db1e9b0c281a25c9c799" 1610 | dependencies = [ 1611 | "proc-macro-crate 1.3.1", 1612 | "proc-macro2", 1613 | "quote", 1614 | "syn 1.0.109", 1615 | ] 1616 | 1617 | [[package]] 1618 | name = "num_threads" 1619 | version = "0.1.7" 1620 | source = "registry+https://github.com/rust-lang/crates.io-index" 1621 | checksum = "5c7398b9c8b70908f6371f47ed36737907c87c52af34c268fed0bf0ceb92ead9" 1622 | dependencies = [ 1623 | "libc", 1624 | ] 1625 | 1626 | [[package]] 1627 | name = "objc" 1628 | version = "0.2.7" 1629 | source = "registry+https://github.com/rust-lang/crates.io-index" 1630 | checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" 1631 | dependencies = [ 1632 | "malloc_buf", 1633 | "objc_exception", 1634 | ] 1635 | 1636 | [[package]] 1637 | name = "objc_exception" 1638 | version = "0.1.2" 1639 | source = "registry+https://github.com/rust-lang/crates.io-index" 1640 | checksum = "ad970fb455818ad6cba4c122ad012fae53ae8b4795f86378bce65e4f6bab2ca4" 1641 | dependencies = [ 1642 | "cc", 1643 | ] 1644 | 1645 | [[package]] 1646 | name = "objc_id" 1647 | version = "0.1.1" 1648 | source = "registry+https://github.com/rust-lang/crates.io-index" 1649 | checksum = "c92d4ddb4bd7b50d730c215ff871754d0da6b2178849f8a2a2ab69712d0c073b" 1650 | dependencies = [ 1651 | "objc", 1652 | ] 1653 | 1654 | [[package]] 1655 | name = "object" 1656 | version = "0.36.5" 1657 | source = "registry+https://github.com/rust-lang/crates.io-index" 1658 | checksum = "aedf0a2d09c573ed1d8d85b30c119153926a2b36dce0ab28322c09a117a4683e" 1659 | dependencies = [ 1660 | "memchr", 1661 | ] 1662 | 1663 | [[package]] 1664 | name = "once_cell" 1665 | version = "1.20.2" 1666 | source = "registry+https://github.com/rust-lang/crates.io-index" 1667 | checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" 1668 | 1669 | [[package]] 1670 | name = "pango" 1671 | version = "0.18.3" 1672 | source = "registry+https://github.com/rust-lang/crates.io-index" 1673 | checksum = "7ca27ec1eb0457ab26f3036ea52229edbdb74dee1edd29063f5b9b010e7ebee4" 1674 | dependencies = [ 1675 | "gio", 1676 | "glib", 1677 | "libc", 1678 | "once_cell", 1679 | "pango-sys", 1680 | ] 1681 | 1682 | [[package]] 1683 | name = "pango-sys" 1684 | version = "0.18.0" 1685 | source = "registry+https://github.com/rust-lang/crates.io-index" 1686 | checksum = "436737e391a843e5933d6d9aa102cb126d501e815b83601365a948a518555dc5" 1687 | dependencies = [ 1688 | "glib-sys", 1689 | "gobject-sys", 1690 | "libc", 1691 | "system-deps", 1692 | ] 1693 | 1694 | [[package]] 1695 | name = "parking_lot" 1696 | version = "0.12.3" 1697 | source = "registry+https://github.com/rust-lang/crates.io-index" 1698 | checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" 1699 | dependencies = [ 1700 | "lock_api", 1701 | "parking_lot_core", 1702 | ] 1703 | 1704 | [[package]] 1705 | name = "parking_lot_core" 1706 | version = "0.9.10" 1707 | source = "registry+https://github.com/rust-lang/crates.io-index" 1708 | checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" 1709 | dependencies = [ 1710 | "cfg-if", 1711 | "libc", 1712 | "redox_syscall", 1713 | "smallvec", 1714 | "windows-targets 0.52.6", 1715 | ] 1716 | 1717 | [[package]] 1718 | name = "percent-encoding" 1719 | version = "2.3.1" 1720 | source = "registry+https://github.com/rust-lang/crates.io-index" 1721 | checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" 1722 | 1723 | [[package]] 1724 | name = "phf" 1725 | version = "0.8.0" 1726 | source = "registry+https://github.com/rust-lang/crates.io-index" 1727 | checksum = "3dfb61232e34fcb633f43d12c58f83c1df82962dcdfa565a4e866ffc17dafe12" 1728 | dependencies = [ 1729 | "phf_macros", 1730 | "phf_shared 0.8.0", 1731 | "proc-macro-hack", 1732 | ] 1733 | 1734 | [[package]] 1735 | name = "phf" 1736 | version = "0.10.1" 1737 | source = "registry+https://github.com/rust-lang/crates.io-index" 1738 | checksum = "fabbf1ead8a5bcbc20f5f8b939ee3f5b0f6f281b6ad3468b84656b658b455259" 1739 | dependencies = [ 1740 | "phf_shared 0.10.0", 1741 | ] 1742 | 1743 | [[package]] 1744 | name = "phf_codegen" 1745 | version = "0.8.0" 1746 | source = "registry+https://github.com/rust-lang/crates.io-index" 1747 | checksum = "cbffee61585b0411840d3ece935cce9cb6321f01c45477d30066498cd5e1a815" 1748 | dependencies = [ 1749 | "phf_generator 0.8.0", 1750 | "phf_shared 0.8.0", 1751 | ] 1752 | 1753 | [[package]] 1754 | name = "phf_codegen" 1755 | version = "0.10.0" 1756 | source = "registry+https://github.com/rust-lang/crates.io-index" 1757 | checksum = "4fb1c3a8bc4dd4e5cfce29b44ffc14bedd2ee294559a294e2a4d4c9e9a6a13cd" 1758 | dependencies = [ 1759 | "phf_generator 0.10.0", 1760 | "phf_shared 0.10.0", 1761 | ] 1762 | 1763 | [[package]] 1764 | name = "phf_generator" 1765 | version = "0.8.0" 1766 | source = "registry+https://github.com/rust-lang/crates.io-index" 1767 | checksum = "17367f0cc86f2d25802b2c26ee58a7b23faeccf78a396094c13dced0d0182526" 1768 | dependencies = [ 1769 | "phf_shared 0.8.0", 1770 | "rand 0.7.3", 1771 | ] 1772 | 1773 | [[package]] 1774 | name = "phf_generator" 1775 | version = "0.10.0" 1776 | source = "registry+https://github.com/rust-lang/crates.io-index" 1777 | checksum = "5d5285893bb5eb82e6aaf5d59ee909a06a16737a8970984dd7746ba9283498d6" 1778 | dependencies = [ 1779 | "phf_shared 0.10.0", 1780 | "rand 0.8.5", 1781 | ] 1782 | 1783 | [[package]] 1784 | name = "phf_macros" 1785 | version = "0.8.0" 1786 | source = "registry+https://github.com/rust-lang/crates.io-index" 1787 | checksum = "7f6fde18ff429ffc8fe78e2bf7f8b7a5a5a6e2a8b58bc5a9ac69198bbda9189c" 1788 | dependencies = [ 1789 | "phf_generator 0.8.0", 1790 | "phf_shared 0.8.0", 1791 | "proc-macro-hack", 1792 | "proc-macro2", 1793 | "quote", 1794 | "syn 1.0.109", 1795 | ] 1796 | 1797 | [[package]] 1798 | name = "phf_shared" 1799 | version = "0.8.0" 1800 | source = "registry+https://github.com/rust-lang/crates.io-index" 1801 | checksum = "c00cf8b9eafe68dde5e9eaa2cef8ee84a9336a47d566ec55ca16589633b65af7" 1802 | dependencies = [ 1803 | "siphasher", 1804 | ] 1805 | 1806 | [[package]] 1807 | name = "phf_shared" 1808 | version = "0.10.0" 1809 | source = "registry+https://github.com/rust-lang/crates.io-index" 1810 | checksum = "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096" 1811 | dependencies = [ 1812 | "siphasher", 1813 | ] 1814 | 1815 | [[package]] 1816 | name = "pin-project-lite" 1817 | version = "0.2.15" 1818 | source = "registry+https://github.com/rust-lang/crates.io-index" 1819 | checksum = "915a1e146535de9163f3987b8944ed8cf49a18bb0056bcebcdcece385cece4ff" 1820 | 1821 | [[package]] 1822 | name = "pin-utils" 1823 | version = "0.1.0" 1824 | source = "registry+https://github.com/rust-lang/crates.io-index" 1825 | checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" 1826 | 1827 | [[package]] 1828 | name = "pkg-config" 1829 | version = "0.3.31" 1830 | source = "registry+https://github.com/rust-lang/crates.io-index" 1831 | checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2" 1832 | 1833 | [[package]] 1834 | name = "plain" 1835 | version = "0.2.3" 1836 | source = "registry+https://github.com/rust-lang/crates.io-index" 1837 | checksum = "b4596b6d070b27117e987119b4dac604f3c58cfb0b191112e24771b2faeac1a6" 1838 | 1839 | [[package]] 1840 | name = "powerfmt" 1841 | version = "0.2.0" 1842 | source = "registry+https://github.com/rust-lang/crates.io-index" 1843 | checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" 1844 | 1845 | [[package]] 1846 | name = "ppv-lite86" 1847 | version = "0.2.20" 1848 | source = "registry+https://github.com/rust-lang/crates.io-index" 1849 | checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" 1850 | dependencies = [ 1851 | "zerocopy", 1852 | ] 1853 | 1854 | [[package]] 1855 | name = "precomputed-hash" 1856 | version = "0.1.1" 1857 | source = "registry+https://github.com/rust-lang/crates.io-index" 1858 | checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" 1859 | 1860 | [[package]] 1861 | name = "proc-macro-crate" 1862 | version = "1.3.1" 1863 | source = "registry+https://github.com/rust-lang/crates.io-index" 1864 | checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" 1865 | dependencies = [ 1866 | "once_cell", 1867 | "toml_edit 0.19.15", 1868 | ] 1869 | 1870 | [[package]] 1871 | name = "proc-macro-crate" 1872 | version = "2.0.0" 1873 | source = "registry+https://github.com/rust-lang/crates.io-index" 1874 | checksum = "7e8366a6159044a37876a2b9817124296703c586a5c92e2c53751fa06d8d43e8" 1875 | dependencies = [ 1876 | "toml_edit 0.20.7", 1877 | ] 1878 | 1879 | [[package]] 1880 | name = "proc-macro-error" 1881 | version = "1.0.4" 1882 | source = "registry+https://github.com/rust-lang/crates.io-index" 1883 | checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" 1884 | dependencies = [ 1885 | "proc-macro-error-attr", 1886 | "proc-macro2", 1887 | "quote", 1888 | "syn 1.0.109", 1889 | "version_check", 1890 | ] 1891 | 1892 | [[package]] 1893 | name = "proc-macro-error-attr" 1894 | version = "1.0.4" 1895 | source = "registry+https://github.com/rust-lang/crates.io-index" 1896 | checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" 1897 | dependencies = [ 1898 | "proc-macro2", 1899 | "quote", 1900 | "version_check", 1901 | ] 1902 | 1903 | [[package]] 1904 | name = "proc-macro-hack" 1905 | version = "0.5.20+deprecated" 1906 | source = "registry+https://github.com/rust-lang/crates.io-index" 1907 | checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068" 1908 | 1909 | [[package]] 1910 | name = "proc-macro2" 1911 | version = "1.0.92" 1912 | source = "registry+https://github.com/rust-lang/crates.io-index" 1913 | checksum = "37d3544b3f2748c54e147655edb5025752e2303145b5aefb3c3ea2c78b973bb0" 1914 | dependencies = [ 1915 | "unicode-ident", 1916 | ] 1917 | 1918 | [[package]] 1919 | name = "quote" 1920 | version = "1.0.37" 1921 | source = "registry+https://github.com/rust-lang/crates.io-index" 1922 | checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" 1923 | dependencies = [ 1924 | "proc-macro2", 1925 | ] 1926 | 1927 | [[package]] 1928 | name = "rand" 1929 | version = "0.7.3" 1930 | source = "registry+https://github.com/rust-lang/crates.io-index" 1931 | checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" 1932 | dependencies = [ 1933 | "getrandom 0.1.16", 1934 | "libc", 1935 | "rand_chacha 0.2.2", 1936 | "rand_core 0.5.1", 1937 | "rand_hc", 1938 | "rand_pcg", 1939 | ] 1940 | 1941 | [[package]] 1942 | name = "rand" 1943 | version = "0.8.5" 1944 | source = "registry+https://github.com/rust-lang/crates.io-index" 1945 | checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" 1946 | dependencies = [ 1947 | "libc", 1948 | "rand_chacha 0.3.1", 1949 | "rand_core 0.6.4", 1950 | ] 1951 | 1952 | [[package]] 1953 | name = "rand_chacha" 1954 | version = "0.2.2" 1955 | source = "registry+https://github.com/rust-lang/crates.io-index" 1956 | checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" 1957 | dependencies = [ 1958 | "ppv-lite86", 1959 | "rand_core 0.5.1", 1960 | ] 1961 | 1962 | [[package]] 1963 | name = "rand_chacha" 1964 | version = "0.3.1" 1965 | source = "registry+https://github.com/rust-lang/crates.io-index" 1966 | checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" 1967 | dependencies = [ 1968 | "ppv-lite86", 1969 | "rand_core 0.6.4", 1970 | ] 1971 | 1972 | [[package]] 1973 | name = "rand_core" 1974 | version = "0.5.1" 1975 | source = "registry+https://github.com/rust-lang/crates.io-index" 1976 | checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" 1977 | dependencies = [ 1978 | "getrandom 0.1.16", 1979 | ] 1980 | 1981 | [[package]] 1982 | name = "rand_core" 1983 | version = "0.6.4" 1984 | source = "registry+https://github.com/rust-lang/crates.io-index" 1985 | checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" 1986 | dependencies = [ 1987 | "getrandom 0.2.15", 1988 | ] 1989 | 1990 | [[package]] 1991 | name = "rand_hc" 1992 | version = "0.2.0" 1993 | source = "registry+https://github.com/rust-lang/crates.io-index" 1994 | checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" 1995 | dependencies = [ 1996 | "rand_core 0.5.1", 1997 | ] 1998 | 1999 | [[package]] 2000 | name = "rand_pcg" 2001 | version = "0.2.1" 2002 | source = "registry+https://github.com/rust-lang/crates.io-index" 2003 | checksum = "16abd0c1b639e9eb4d7c50c0b8100b0d0f849be2349829c740fe8e6eb4816429" 2004 | dependencies = [ 2005 | "rand_core 0.5.1", 2006 | ] 2007 | 2008 | [[package]] 2009 | name = "raw-window-handle" 2010 | version = "0.5.2" 2011 | source = "registry+https://github.com/rust-lang/crates.io-index" 2012 | checksum = "f2ff9a1f06a88b01621b7ae906ef0211290d1c8a168a15542486a8f61c0833b9" 2013 | 2014 | [[package]] 2015 | name = "redox_syscall" 2016 | version = "0.5.8" 2017 | source = "registry+https://github.com/rust-lang/crates.io-index" 2018 | checksum = "03a862b389f93e68874fbf580b9de08dd02facb9a788ebadaf4a3fd33cf58834" 2019 | dependencies = [ 2020 | "bitflags 2.6.0", 2021 | ] 2022 | 2023 | [[package]] 2024 | name = "reflink" 2025 | version = "0.1.3" 2026 | source = "git+https://github.com/nicokoch/reflink.git?rev=e8d93b465f5d9ad340cd052b64bbc77b8ee107e2#e8d93b465f5d9ad340cd052b64bbc77b8ee107e2" 2027 | dependencies = [ 2028 | "libc", 2029 | "winapi", 2030 | ] 2031 | 2032 | [[package]] 2033 | name = "rtrb" 2034 | version = "0.3.1" 2035 | source = "registry+https://github.com/rust-lang/crates.io-index" 2036 | checksum = "f3f94e84c073f3b85d4012b44722fa8842b9986d741590d4f2636ad0a5b14143" 2037 | 2038 | [[package]] 2039 | name = "rustc-demangle" 2040 | version = "0.1.24" 2041 | source = "registry+https://github.com/rust-lang/crates.io-index" 2042 | checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" 2043 | 2044 | [[package]] 2045 | name = "rustc_version" 2046 | version = "0.4.1" 2047 | source = "registry+https://github.com/rust-lang/crates.io-index" 2048 | checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" 2049 | dependencies = [ 2050 | "semver", 2051 | ] 2052 | 2053 | [[package]] 2054 | name = "rustix" 2055 | version = "0.38.42" 2056 | source = "registry+https://github.com/rust-lang/crates.io-index" 2057 | checksum = "f93dc38ecbab2eb790ff964bb77fa94faf256fd3e73285fd7ba0903b76bedb85" 2058 | dependencies = [ 2059 | "bitflags 2.6.0", 2060 | "errno", 2061 | "libc", 2062 | "linux-raw-sys", 2063 | "windows-sys 0.59.0", 2064 | ] 2065 | 2066 | [[package]] 2067 | name = "ryu" 2068 | version = "1.0.18" 2069 | source = "registry+https://github.com/rust-lang/crates.io-index" 2070 | checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" 2071 | 2072 | [[package]] 2073 | name = "same-file" 2074 | version = "1.0.6" 2075 | source = "registry+https://github.com/rust-lang/crates.io-index" 2076 | checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" 2077 | dependencies = [ 2078 | "winapi-util", 2079 | ] 2080 | 2081 | [[package]] 2082 | name = "scopeguard" 2083 | version = "1.2.0" 2084 | source = "registry+https://github.com/rust-lang/crates.io-index" 2085 | checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" 2086 | 2087 | [[package]] 2088 | name = "scroll" 2089 | version = "0.11.0" 2090 | source = "registry+https://github.com/rust-lang/crates.io-index" 2091 | checksum = "04c565b551bafbef4157586fa379538366e4385d42082f255bfd96e4fe8519da" 2092 | dependencies = [ 2093 | "scroll_derive", 2094 | ] 2095 | 2096 | [[package]] 2097 | name = "scroll_derive" 2098 | version = "0.11.1" 2099 | source = "registry+https://github.com/rust-lang/crates.io-index" 2100 | checksum = "1db149f81d46d2deba7cd3c50772474707729550221e69588478ebf9ada425ae" 2101 | dependencies = [ 2102 | "proc-macro2", 2103 | "quote", 2104 | "syn 2.0.90", 2105 | ] 2106 | 2107 | [[package]] 2108 | name = "selectors" 2109 | version = "0.22.0" 2110 | source = "registry+https://github.com/rust-lang/crates.io-index" 2111 | checksum = "df320f1889ac4ba6bc0cdc9c9af7af4bd64bb927bccdf32d81140dc1f9be12fe" 2112 | dependencies = [ 2113 | "bitflags 1.3.2", 2114 | "cssparser", 2115 | "derive_more", 2116 | "fxhash", 2117 | "log", 2118 | "matches", 2119 | "phf 0.8.0", 2120 | "phf_codegen 0.8.0", 2121 | "precomputed-hash", 2122 | "servo_arc", 2123 | "smallvec", 2124 | "thin-slice", 2125 | ] 2126 | 2127 | [[package]] 2128 | name = "semver" 2129 | version = "1.0.24" 2130 | source = "registry+https://github.com/rust-lang/crates.io-index" 2131 | checksum = "3cb6eb87a131f756572d7fb904f6e7b68633f09cca868c5df1c4b8d1a694bbba" 2132 | dependencies = [ 2133 | "serde", 2134 | ] 2135 | 2136 | [[package]] 2137 | name = "serde" 2138 | version = "1.0.216" 2139 | source = "registry+https://github.com/rust-lang/crates.io-index" 2140 | checksum = "0b9781016e935a97e8beecf0c933758c97a5520d32930e460142b4cd80c6338e" 2141 | dependencies = [ 2142 | "serde_derive", 2143 | ] 2144 | 2145 | [[package]] 2146 | name = "serde_derive" 2147 | version = "1.0.216" 2148 | source = "registry+https://github.com/rust-lang/crates.io-index" 2149 | checksum = "46f859dbbf73865c6627ed570e78961cd3ac92407a2d117204c49232485da55e" 2150 | dependencies = [ 2151 | "proc-macro2", 2152 | "quote", 2153 | "syn 2.0.90", 2154 | ] 2155 | 2156 | [[package]] 2157 | name = "serde_json" 2158 | version = "1.0.133" 2159 | source = "registry+https://github.com/rust-lang/crates.io-index" 2160 | checksum = "c7fceb2473b9166b2294ef05efcb65a3db80803f0b03ef86a5fc88a2b85ee377" 2161 | dependencies = [ 2162 | "itoa 1.0.14", 2163 | "memchr", 2164 | "ryu", 2165 | "serde", 2166 | ] 2167 | 2168 | [[package]] 2169 | name = "serde_spanned" 2170 | version = "0.6.8" 2171 | source = "registry+https://github.com/rust-lang/crates.io-index" 2172 | checksum = "87607cb1398ed59d48732e575a4c28a7a8ebf2454b964fe3f224f2afc07909e1" 2173 | dependencies = [ 2174 | "serde", 2175 | ] 2176 | 2177 | [[package]] 2178 | name = "servo_arc" 2179 | version = "0.1.1" 2180 | source = "registry+https://github.com/rust-lang/crates.io-index" 2181 | checksum = "d98238b800e0d1576d8b6e3de32827c2d74bee68bb97748dcf5071fb53965432" 2182 | dependencies = [ 2183 | "nodrop", 2184 | "stable_deref_trait", 2185 | ] 2186 | 2187 | [[package]] 2188 | name = "sha2" 2189 | version = "0.10.8" 2190 | source = "registry+https://github.com/rust-lang/crates.io-index" 2191 | checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" 2192 | dependencies = [ 2193 | "cfg-if", 2194 | "cpufeatures", 2195 | "digest", 2196 | ] 2197 | 2198 | [[package]] 2199 | name = "shlex" 2200 | version = "1.3.0" 2201 | source = "registry+https://github.com/rust-lang/crates.io-index" 2202 | checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" 2203 | 2204 | [[package]] 2205 | name = "siphasher" 2206 | version = "0.3.11" 2207 | source = "registry+https://github.com/rust-lang/crates.io-index" 2208 | checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" 2209 | 2210 | [[package]] 2211 | name = "slab" 2212 | version = "0.4.9" 2213 | source = "registry+https://github.com/rust-lang/crates.io-index" 2214 | checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" 2215 | dependencies = [ 2216 | "autocfg", 2217 | ] 2218 | 2219 | [[package]] 2220 | name = "smallvec" 2221 | version = "1.13.2" 2222 | source = "registry+https://github.com/rust-lang/crates.io-index" 2223 | checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" 2224 | 2225 | [[package]] 2226 | name = "soup3" 2227 | version = "0.5.0" 2228 | source = "registry+https://github.com/rust-lang/crates.io-index" 2229 | checksum = "471f924a40f31251afc77450e781cb26d55c0b650842efafc9c6cbd2f7cc4f9f" 2230 | dependencies = [ 2231 | "futures-channel", 2232 | "gio", 2233 | "glib", 2234 | "libc", 2235 | "soup3-sys", 2236 | ] 2237 | 2238 | [[package]] 2239 | name = "soup3-sys" 2240 | version = "0.5.0" 2241 | source = "registry+https://github.com/rust-lang/crates.io-index" 2242 | checksum = "7ebe8950a680a12f24f15ebe1bf70db7af98ad242d9db43596ad3108aab86c27" 2243 | dependencies = [ 2244 | "gio-sys", 2245 | "glib-sys", 2246 | "gobject-sys", 2247 | "libc", 2248 | "system-deps", 2249 | ] 2250 | 2251 | [[package]] 2252 | name = "stable_deref_trait" 2253 | version = "1.2.0" 2254 | source = "registry+https://github.com/rust-lang/crates.io-index" 2255 | checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" 2256 | 2257 | [[package]] 2258 | name = "string_cache" 2259 | version = "0.8.7" 2260 | source = "registry+https://github.com/rust-lang/crates.io-index" 2261 | checksum = "f91138e76242f575eb1d3b38b4f1362f10d3a43f47d182a5b359af488a02293b" 2262 | dependencies = [ 2263 | "new_debug_unreachable", 2264 | "once_cell", 2265 | "parking_lot", 2266 | "phf_shared 0.10.0", 2267 | "precomputed-hash", 2268 | "serde", 2269 | ] 2270 | 2271 | [[package]] 2272 | name = "string_cache_codegen" 2273 | version = "0.5.2" 2274 | source = "registry+https://github.com/rust-lang/crates.io-index" 2275 | checksum = "6bb30289b722be4ff74a408c3cc27edeaad656e06cb1fe8fa9231fa59c728988" 2276 | dependencies = [ 2277 | "phf_generator 0.10.0", 2278 | "phf_shared 0.10.0", 2279 | "proc-macro2", 2280 | "quote", 2281 | ] 2282 | 2283 | [[package]] 2284 | name = "syn" 2285 | version = "1.0.109" 2286 | source = "registry+https://github.com/rust-lang/crates.io-index" 2287 | checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" 2288 | dependencies = [ 2289 | "proc-macro2", 2290 | "quote", 2291 | "unicode-ident", 2292 | ] 2293 | 2294 | [[package]] 2295 | name = "syn" 2296 | version = "2.0.90" 2297 | source = "registry+https://github.com/rust-lang/crates.io-index" 2298 | checksum = "919d3b74a5dd0ccd15aeb8f93e7006bd9e14c295087c9896a110f490752bcf31" 2299 | dependencies = [ 2300 | "proc-macro2", 2301 | "quote", 2302 | "unicode-ident", 2303 | ] 2304 | 2305 | [[package]] 2306 | name = "synstructure" 2307 | version = "0.13.1" 2308 | source = "registry+https://github.com/rust-lang/crates.io-index" 2309 | checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" 2310 | dependencies = [ 2311 | "proc-macro2", 2312 | "quote", 2313 | "syn 2.0.90", 2314 | ] 2315 | 2316 | [[package]] 2317 | name = "system-deps" 2318 | version = "6.2.2" 2319 | source = "registry+https://github.com/rust-lang/crates.io-index" 2320 | checksum = "a3e535eb8dded36d55ec13eddacd30dec501792ff23a0b1682c38601b8cf2349" 2321 | dependencies = [ 2322 | "cfg-expr", 2323 | "heck 0.5.0", 2324 | "pkg-config", 2325 | "toml 0.8.19", 2326 | "version-compare", 2327 | ] 2328 | 2329 | [[package]] 2330 | name = "tao-macros" 2331 | version = "0.1.3" 2332 | source = "registry+https://github.com/rust-lang/crates.io-index" 2333 | checksum = "f4e16beb8b2ac17db28eab8bca40e62dbfbb34c0fcdc6d9826b11b7b5d047dfd" 2334 | dependencies = [ 2335 | "proc-macro2", 2336 | "quote", 2337 | "syn 2.0.90", 2338 | ] 2339 | 2340 | [[package]] 2341 | name = "target-lexicon" 2342 | version = "0.12.16" 2343 | source = "registry+https://github.com/rust-lang/crates.io-index" 2344 | checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1" 2345 | 2346 | [[package]] 2347 | name = "tendril" 2348 | version = "0.4.3" 2349 | source = "registry+https://github.com/rust-lang/crates.io-index" 2350 | checksum = "d24a120c5fc464a3458240ee02c299ebcb9d67b5249c8848b09d639dca8d7bb0" 2351 | dependencies = [ 2352 | "futf", 2353 | "mac", 2354 | "utf-8", 2355 | ] 2356 | 2357 | [[package]] 2358 | name = "termcolor" 2359 | version = "1.4.1" 2360 | source = "registry+https://github.com/rust-lang/crates.io-index" 2361 | checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755" 2362 | dependencies = [ 2363 | "winapi-util", 2364 | ] 2365 | 2366 | [[package]] 2367 | name = "thin-slice" 2368 | version = "0.1.1" 2369 | source = "registry+https://github.com/rust-lang/crates.io-index" 2370 | checksum = "8eaa81235c7058867fa8c0e7314f33dcce9c215f535d1913822a2b3f5e289f3c" 2371 | 2372 | [[package]] 2373 | name = "thiserror" 2374 | version = "1.0.69" 2375 | source = "registry+https://github.com/rust-lang/crates.io-index" 2376 | checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" 2377 | dependencies = [ 2378 | "thiserror-impl", 2379 | ] 2380 | 2381 | [[package]] 2382 | name = "thiserror-impl" 2383 | version = "1.0.69" 2384 | source = "registry+https://github.com/rust-lang/crates.io-index" 2385 | checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" 2386 | dependencies = [ 2387 | "proc-macro2", 2388 | "quote", 2389 | "syn 2.0.90", 2390 | ] 2391 | 2392 | [[package]] 2393 | name = "time" 2394 | version = "0.3.37" 2395 | source = "registry+https://github.com/rust-lang/crates.io-index" 2396 | checksum = "35e7868883861bd0e56d9ac6efcaaca0d6d5d82a2a7ec8209ff492c07cf37b21" 2397 | dependencies = [ 2398 | "deranged", 2399 | "itoa 1.0.14", 2400 | "libc", 2401 | "num-conv", 2402 | "num_threads", 2403 | "powerfmt", 2404 | "serde", 2405 | "time-core", 2406 | "time-macros", 2407 | ] 2408 | 2409 | [[package]] 2410 | name = "time-core" 2411 | version = "0.1.2" 2412 | source = "registry+https://github.com/rust-lang/crates.io-index" 2413 | checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" 2414 | 2415 | [[package]] 2416 | name = "time-macros" 2417 | version = "0.2.19" 2418 | source = "registry+https://github.com/rust-lang/crates.io-index" 2419 | checksum = "2834e6017e3e5e4b9834939793b282bc03b37a3336245fa820e35e233e2a85de" 2420 | dependencies = [ 2421 | "num-conv", 2422 | "time-core", 2423 | ] 2424 | 2425 | [[package]] 2426 | name = "tinystr" 2427 | version = "0.7.6" 2428 | source = "registry+https://github.com/rust-lang/crates.io-index" 2429 | checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f" 2430 | dependencies = [ 2431 | "displaydoc", 2432 | "zerovec", 2433 | ] 2434 | 2435 | [[package]] 2436 | name = "toml" 2437 | version = "0.7.8" 2438 | source = "registry+https://github.com/rust-lang/crates.io-index" 2439 | checksum = "dd79e69d3b627db300ff956027cc6c3798cef26d22526befdfcd12feeb6d2257" 2440 | dependencies = [ 2441 | "serde", 2442 | "serde_spanned", 2443 | "toml_datetime", 2444 | "toml_edit 0.19.15", 2445 | ] 2446 | 2447 | [[package]] 2448 | name = "toml" 2449 | version = "0.8.19" 2450 | source = "registry+https://github.com/rust-lang/crates.io-index" 2451 | checksum = "a1ed1f98e3fdc28d6d910e6737ae6ab1a93bf1985935a1193e68f93eeb68d24e" 2452 | dependencies = [ 2453 | "serde", 2454 | "serde_spanned", 2455 | "toml_datetime", 2456 | "toml_edit 0.22.22", 2457 | ] 2458 | 2459 | [[package]] 2460 | name = "toml_datetime" 2461 | version = "0.6.8" 2462 | source = "registry+https://github.com/rust-lang/crates.io-index" 2463 | checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41" 2464 | dependencies = [ 2465 | "serde", 2466 | ] 2467 | 2468 | [[package]] 2469 | name = "toml_edit" 2470 | version = "0.19.15" 2471 | source = "registry+https://github.com/rust-lang/crates.io-index" 2472 | checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" 2473 | dependencies = [ 2474 | "indexmap 2.7.0", 2475 | "serde", 2476 | "serde_spanned", 2477 | "toml_datetime", 2478 | "winnow 0.5.40", 2479 | ] 2480 | 2481 | [[package]] 2482 | name = "toml_edit" 2483 | version = "0.20.7" 2484 | source = "registry+https://github.com/rust-lang/crates.io-index" 2485 | checksum = "70f427fce4d84c72b5b732388bf4a9f4531b53f74e2887e3ecb2481f68f66d81" 2486 | dependencies = [ 2487 | "indexmap 2.7.0", 2488 | "toml_datetime", 2489 | "winnow 0.5.40", 2490 | ] 2491 | 2492 | [[package]] 2493 | name = "toml_edit" 2494 | version = "0.22.22" 2495 | source = "registry+https://github.com/rust-lang/crates.io-index" 2496 | checksum = "4ae48d6208a266e853d946088ed816055e556cc6028c5e8e2b84d9fa5dd7c7f5" 2497 | dependencies = [ 2498 | "indexmap 2.7.0", 2499 | "serde", 2500 | "serde_spanned", 2501 | "toml_datetime", 2502 | "winnow 0.6.20", 2503 | ] 2504 | 2505 | [[package]] 2506 | name = "triple_buffer" 2507 | version = "8.0.0" 2508 | source = "registry+https://github.com/rust-lang/crates.io-index" 2509 | checksum = "9e66931c8eca6381f0d34656a9341f09bd462010488c1a3bc0acd3f2d08dffce" 2510 | dependencies = [ 2511 | "crossbeam-utils", 2512 | ] 2513 | 2514 | [[package]] 2515 | name = "typenum" 2516 | version = "1.17.0" 2517 | source = "registry+https://github.com/rust-lang/crates.io-index" 2518 | checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" 2519 | 2520 | [[package]] 2521 | name = "unicase" 2522 | version = "2.8.0" 2523 | source = "registry+https://github.com/rust-lang/crates.io-index" 2524 | checksum = "7e51b68083f157f853b6379db119d1c1be0e6e4dec98101079dec41f6f5cf6df" 2525 | 2526 | [[package]] 2527 | name = "unicode-ident" 2528 | version = "1.0.14" 2529 | source = "registry+https://github.com/rust-lang/crates.io-index" 2530 | checksum = "adb9e6ca4f869e1180728b7950e35922a7fc6397f7b641499e8f3ef06e50dc83" 2531 | 2532 | [[package]] 2533 | name = "unicode-segmentation" 2534 | version = "1.12.0" 2535 | source = "registry+https://github.com/rust-lang/crates.io-index" 2536 | checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" 2537 | 2538 | [[package]] 2539 | name = "url" 2540 | version = "2.5.4" 2541 | source = "registry+https://github.com/rust-lang/crates.io-index" 2542 | checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" 2543 | dependencies = [ 2544 | "form_urlencoded", 2545 | "idna", 2546 | "percent-encoding", 2547 | ] 2548 | 2549 | [[package]] 2550 | name = "utf-8" 2551 | version = "0.7.6" 2552 | source = "registry+https://github.com/rust-lang/crates.io-index" 2553 | checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" 2554 | 2555 | [[package]] 2556 | name = "utf16_iter" 2557 | version = "1.0.5" 2558 | source = "registry+https://github.com/rust-lang/crates.io-index" 2559 | checksum = "c8232dd3cdaed5356e0f716d285e4b40b932ac434100fe9b7e0e8e935b9e6246" 2560 | 2561 | [[package]] 2562 | name = "utf8_iter" 2563 | version = "1.0.4" 2564 | source = "registry+https://github.com/rust-lang/crates.io-index" 2565 | checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" 2566 | 2567 | [[package]] 2568 | name = "uuid" 2569 | version = "0.8.2" 2570 | source = "registry+https://github.com/rust-lang/crates.io-index" 2571 | checksum = "bc5cf98d8186244414c848017f0e2676b3fcb46807f6668a97dfe67359a3c4b7" 2572 | dependencies = [ 2573 | "getrandom 0.2.15", 2574 | ] 2575 | 2576 | [[package]] 2577 | name = "version-compare" 2578 | version = "0.2.0" 2579 | source = "registry+https://github.com/rust-lang/crates.io-index" 2580 | checksum = "852e951cb7832cb45cb1169900d19760cfa39b82bc0ea9c0e5a14ae88411c98b" 2581 | 2582 | [[package]] 2583 | name = "version_check" 2584 | version = "0.9.5" 2585 | source = "registry+https://github.com/rust-lang/crates.io-index" 2586 | checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" 2587 | 2588 | [[package]] 2589 | name = "vst3-com" 2590 | version = "0.1.0" 2591 | source = "git+https://github.com/robbert-vdh/vst3-sys.git?branch=fix%2Fdrop-box-from-raw#b3ff4d775940f5b476b9d1cca02a90e07e1922a2" 2592 | dependencies = [ 2593 | "vst3-com-macros", 2594 | ] 2595 | 2596 | [[package]] 2597 | name = "vst3-com-macros" 2598 | version = "0.2.0" 2599 | source = "git+https://github.com/robbert-vdh/vst3-sys.git?branch=fix%2Fdrop-box-from-raw#b3ff4d775940f5b476b9d1cca02a90e07e1922a2" 2600 | dependencies = [ 2601 | "proc-macro2", 2602 | "quote", 2603 | "syn 1.0.109", 2604 | "vst3-com-macros-support", 2605 | ] 2606 | 2607 | [[package]] 2608 | name = "vst3-com-macros-support" 2609 | version = "0.2.0" 2610 | source = "git+https://github.com/robbert-vdh/vst3-sys.git?branch=fix%2Fdrop-box-from-raw#b3ff4d775940f5b476b9d1cca02a90e07e1922a2" 2611 | dependencies = [ 2612 | "proc-macro2", 2613 | "quote", 2614 | "syn 1.0.109", 2615 | ] 2616 | 2617 | [[package]] 2618 | name = "vst3-sys" 2619 | version = "0.1.0" 2620 | source = "git+https://github.com/robbert-vdh/vst3-sys.git?branch=fix%2Fdrop-box-from-raw#b3ff4d775940f5b476b9d1cca02a90e07e1922a2" 2621 | dependencies = [ 2622 | "vst3-com", 2623 | ] 2624 | 2625 | [[package]] 2626 | name = "walkdir" 2627 | version = "2.5.0" 2628 | source = "registry+https://github.com/rust-lang/crates.io-index" 2629 | checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" 2630 | dependencies = [ 2631 | "same-file", 2632 | "winapi-util", 2633 | ] 2634 | 2635 | [[package]] 2636 | name = "wasi" 2637 | version = "0.9.0+wasi-snapshot-preview1" 2638 | source = "registry+https://github.com/rust-lang/crates.io-index" 2639 | checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" 2640 | 2641 | [[package]] 2642 | name = "wasi" 2643 | version = "0.11.0+wasi-snapshot-preview1" 2644 | source = "registry+https://github.com/rust-lang/crates.io-index" 2645 | checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" 2646 | 2647 | [[package]] 2648 | name = "webkit2gtk" 2649 | version = "2.0.1" 2650 | source = "registry+https://github.com/rust-lang/crates.io-index" 2651 | checksum = "76b1bc1e54c581da1e9f179d0b38512ba358fb1af2d634a1affe42e37172361a" 2652 | dependencies = [ 2653 | "bitflags 1.3.2", 2654 | "cairo-rs", 2655 | "gdk", 2656 | "gdk-sys", 2657 | "gio", 2658 | "gio-sys", 2659 | "glib", 2660 | "glib-sys", 2661 | "gobject-sys", 2662 | "gtk", 2663 | "gtk-sys", 2664 | "javascriptcore-rs", 2665 | "libc", 2666 | "once_cell", 2667 | "soup3", 2668 | "webkit2gtk-sys", 2669 | ] 2670 | 2671 | [[package]] 2672 | name = "webkit2gtk-sys" 2673 | version = "2.0.1" 2674 | source = "registry+https://github.com/rust-lang/crates.io-index" 2675 | checksum = "62daa38afc514d1f8f12b8693d30d5993ff77ced33ce30cd04deebc267a6d57c" 2676 | dependencies = [ 2677 | "bitflags 1.3.2", 2678 | "cairo-sys-rs", 2679 | "gdk-sys", 2680 | "gio-sys", 2681 | "glib-sys", 2682 | "gobject-sys", 2683 | "gtk-sys", 2684 | "javascriptcore-rs-sys", 2685 | "libc", 2686 | "pkg-config", 2687 | "soup3-sys", 2688 | "system-deps", 2689 | ] 2690 | 2691 | [[package]] 2692 | name = "webview2-com" 2693 | version = "0.28.0" 2694 | source = "registry+https://github.com/rust-lang/crates.io-index" 2695 | checksum = "e0ae9c7e420783826cf769d2c06ac9ba462f450eca5893bb8c6c6529a4e5dd33" 2696 | dependencies = [ 2697 | "webview2-com-macros", 2698 | "webview2-com-sys", 2699 | "windows 0.52.0", 2700 | "windows-core", 2701 | "windows-implement", 2702 | "windows-interface", 2703 | ] 2704 | 2705 | [[package]] 2706 | name = "webview2-com-macros" 2707 | version = "0.7.0" 2708 | source = "registry+https://github.com/rust-lang/crates.io-index" 2709 | checksum = "ac1345798ecd8122468840bcdf1b95e5dc6d2206c5e4b0eafa078d061f59c9bc" 2710 | dependencies = [ 2711 | "proc-macro2", 2712 | "quote", 2713 | "syn 2.0.90", 2714 | ] 2715 | 2716 | [[package]] 2717 | name = "webview2-com-sys" 2718 | version = "0.28.0" 2719 | source = "registry+https://github.com/rust-lang/crates.io-index" 2720 | checksum = "d6ad85fceee6c42fa3d61239eba5a11401bf38407a849ed5ea1b407df08cca72" 2721 | dependencies = [ 2722 | "thiserror", 2723 | "windows 0.52.0", 2724 | "windows-core", 2725 | ] 2726 | 2727 | [[package]] 2728 | name = "widestring" 2729 | version = "1.1.0" 2730 | source = "registry+https://github.com/rust-lang/crates.io-index" 2731 | checksum = "7219d36b6eac893fa81e84ebe06485e7dcbb616177469b142df14f1f4deb1311" 2732 | 2733 | [[package]] 2734 | name = "winapi" 2735 | version = "0.3.9" 2736 | source = "registry+https://github.com/rust-lang/crates.io-index" 2737 | checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" 2738 | dependencies = [ 2739 | "winapi-i686-pc-windows-gnu", 2740 | "winapi-x86_64-pc-windows-gnu", 2741 | ] 2742 | 2743 | [[package]] 2744 | name = "winapi-i686-pc-windows-gnu" 2745 | version = "0.4.0" 2746 | source = "registry+https://github.com/rust-lang/crates.io-index" 2747 | checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" 2748 | 2749 | [[package]] 2750 | name = "winapi-util" 2751 | version = "0.1.9" 2752 | source = "registry+https://github.com/rust-lang/crates.io-index" 2753 | checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" 2754 | dependencies = [ 2755 | "windows-sys 0.59.0", 2756 | ] 2757 | 2758 | [[package]] 2759 | name = "winapi-x86_64-pc-windows-gnu" 2760 | version = "0.4.0" 2761 | source = "registry+https://github.com/rust-lang/crates.io-index" 2762 | checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" 2763 | 2764 | [[package]] 2765 | name = "windows" 2766 | version = "0.44.0" 2767 | source = "registry+https://github.com/rust-lang/crates.io-index" 2768 | checksum = "9e745dab35a0c4c77aa3ce42d595e13d2003d6902d6b08c9ef5fc326d08da12b" 2769 | dependencies = [ 2770 | "windows-targets 0.42.2", 2771 | ] 2772 | 2773 | [[package]] 2774 | name = "windows" 2775 | version = "0.52.0" 2776 | source = "registry+https://github.com/rust-lang/crates.io-index" 2777 | checksum = "e48a53791691ab099e5e2ad123536d0fff50652600abaf43bbf952894110d0be" 2778 | dependencies = [ 2779 | "windows-core", 2780 | "windows-implement", 2781 | "windows-interface", 2782 | "windows-targets 0.52.6", 2783 | ] 2784 | 2785 | [[package]] 2786 | name = "windows-core" 2787 | version = "0.52.0" 2788 | source = "registry+https://github.com/rust-lang/crates.io-index" 2789 | checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" 2790 | dependencies = [ 2791 | "windows-targets 0.52.6", 2792 | ] 2793 | 2794 | [[package]] 2795 | name = "windows-implement" 2796 | version = "0.52.0" 2797 | source = "registry+https://github.com/rust-lang/crates.io-index" 2798 | checksum = "12168c33176773b86799be25e2a2ba07c7aab9968b37541f1094dbd7a60c8946" 2799 | dependencies = [ 2800 | "proc-macro2", 2801 | "quote", 2802 | "syn 2.0.90", 2803 | ] 2804 | 2805 | [[package]] 2806 | name = "windows-interface" 2807 | version = "0.52.0" 2808 | source = "registry+https://github.com/rust-lang/crates.io-index" 2809 | checksum = "9d8dc32e0095a7eeccebd0e3f09e9509365ecb3fc6ac4d6f5f14a3f6392942d1" 2810 | dependencies = [ 2811 | "proc-macro2", 2812 | "quote", 2813 | "syn 2.0.90", 2814 | ] 2815 | 2816 | [[package]] 2817 | name = "windows-sys" 2818 | version = "0.45.0" 2819 | source = "registry+https://github.com/rust-lang/crates.io-index" 2820 | checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" 2821 | dependencies = [ 2822 | "windows-targets 0.42.2", 2823 | ] 2824 | 2825 | [[package]] 2826 | name = "windows-sys" 2827 | version = "0.59.0" 2828 | source = "registry+https://github.com/rust-lang/crates.io-index" 2829 | checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" 2830 | dependencies = [ 2831 | "windows-targets 0.52.6", 2832 | ] 2833 | 2834 | [[package]] 2835 | name = "windows-targets" 2836 | version = "0.42.2" 2837 | source = "registry+https://github.com/rust-lang/crates.io-index" 2838 | checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" 2839 | dependencies = [ 2840 | "windows_aarch64_gnullvm 0.42.2", 2841 | "windows_aarch64_msvc 0.42.2", 2842 | "windows_i686_gnu 0.42.2", 2843 | "windows_i686_msvc 0.42.2", 2844 | "windows_x86_64_gnu 0.42.2", 2845 | "windows_x86_64_gnullvm 0.42.2", 2846 | "windows_x86_64_msvc 0.42.2", 2847 | ] 2848 | 2849 | [[package]] 2850 | name = "windows-targets" 2851 | version = "0.48.5" 2852 | source = "registry+https://github.com/rust-lang/crates.io-index" 2853 | checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" 2854 | dependencies = [ 2855 | "windows_aarch64_gnullvm 0.48.5", 2856 | "windows_aarch64_msvc 0.48.5", 2857 | "windows_i686_gnu 0.48.5", 2858 | "windows_i686_msvc 0.48.5", 2859 | "windows_x86_64_gnu 0.48.5", 2860 | "windows_x86_64_gnullvm 0.48.5", 2861 | "windows_x86_64_msvc 0.48.5", 2862 | ] 2863 | 2864 | [[package]] 2865 | name = "windows-targets" 2866 | version = "0.52.6" 2867 | source = "registry+https://github.com/rust-lang/crates.io-index" 2868 | checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" 2869 | dependencies = [ 2870 | "windows_aarch64_gnullvm 0.52.6", 2871 | "windows_aarch64_msvc 0.52.6", 2872 | "windows_i686_gnu 0.52.6", 2873 | "windows_i686_gnullvm", 2874 | "windows_i686_msvc 0.52.6", 2875 | "windows_x86_64_gnu 0.52.6", 2876 | "windows_x86_64_gnullvm 0.52.6", 2877 | "windows_x86_64_msvc 0.52.6", 2878 | ] 2879 | 2880 | [[package]] 2881 | name = "windows-version" 2882 | version = "0.1.1" 2883 | source = "registry+https://github.com/rust-lang/crates.io-index" 2884 | checksum = "6998aa457c9ba8ff2fb9f13e9d2a930dabcea28f1d0ab94d687d8b3654844515" 2885 | dependencies = [ 2886 | "windows-targets 0.52.6", 2887 | ] 2888 | 2889 | [[package]] 2890 | name = "windows_aarch64_gnullvm" 2891 | version = "0.42.2" 2892 | source = "registry+https://github.com/rust-lang/crates.io-index" 2893 | checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" 2894 | 2895 | [[package]] 2896 | name = "windows_aarch64_gnullvm" 2897 | version = "0.48.5" 2898 | source = "registry+https://github.com/rust-lang/crates.io-index" 2899 | checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" 2900 | 2901 | [[package]] 2902 | name = "windows_aarch64_gnullvm" 2903 | version = "0.52.6" 2904 | source = "registry+https://github.com/rust-lang/crates.io-index" 2905 | checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" 2906 | 2907 | [[package]] 2908 | name = "windows_aarch64_msvc" 2909 | version = "0.42.2" 2910 | source = "registry+https://github.com/rust-lang/crates.io-index" 2911 | checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" 2912 | 2913 | [[package]] 2914 | name = "windows_aarch64_msvc" 2915 | version = "0.48.5" 2916 | source = "registry+https://github.com/rust-lang/crates.io-index" 2917 | checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" 2918 | 2919 | [[package]] 2920 | name = "windows_aarch64_msvc" 2921 | version = "0.52.6" 2922 | source = "registry+https://github.com/rust-lang/crates.io-index" 2923 | checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" 2924 | 2925 | [[package]] 2926 | name = "windows_i686_gnu" 2927 | version = "0.42.2" 2928 | source = "registry+https://github.com/rust-lang/crates.io-index" 2929 | checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" 2930 | 2931 | [[package]] 2932 | name = "windows_i686_gnu" 2933 | version = "0.48.5" 2934 | source = "registry+https://github.com/rust-lang/crates.io-index" 2935 | checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" 2936 | 2937 | [[package]] 2938 | name = "windows_i686_gnu" 2939 | version = "0.52.6" 2940 | source = "registry+https://github.com/rust-lang/crates.io-index" 2941 | checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" 2942 | 2943 | [[package]] 2944 | name = "windows_i686_gnullvm" 2945 | version = "0.52.6" 2946 | source = "registry+https://github.com/rust-lang/crates.io-index" 2947 | checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" 2948 | 2949 | [[package]] 2950 | name = "windows_i686_msvc" 2951 | version = "0.42.2" 2952 | source = "registry+https://github.com/rust-lang/crates.io-index" 2953 | checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" 2954 | 2955 | [[package]] 2956 | name = "windows_i686_msvc" 2957 | version = "0.48.5" 2958 | source = "registry+https://github.com/rust-lang/crates.io-index" 2959 | checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" 2960 | 2961 | [[package]] 2962 | name = "windows_i686_msvc" 2963 | version = "0.52.6" 2964 | source = "registry+https://github.com/rust-lang/crates.io-index" 2965 | checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" 2966 | 2967 | [[package]] 2968 | name = "windows_x86_64_gnu" 2969 | version = "0.42.2" 2970 | source = "registry+https://github.com/rust-lang/crates.io-index" 2971 | checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" 2972 | 2973 | [[package]] 2974 | name = "windows_x86_64_gnu" 2975 | version = "0.48.5" 2976 | source = "registry+https://github.com/rust-lang/crates.io-index" 2977 | checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" 2978 | 2979 | [[package]] 2980 | name = "windows_x86_64_gnu" 2981 | version = "0.52.6" 2982 | source = "registry+https://github.com/rust-lang/crates.io-index" 2983 | checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" 2984 | 2985 | [[package]] 2986 | name = "windows_x86_64_gnullvm" 2987 | version = "0.42.2" 2988 | source = "registry+https://github.com/rust-lang/crates.io-index" 2989 | checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" 2990 | 2991 | [[package]] 2992 | name = "windows_x86_64_gnullvm" 2993 | version = "0.48.5" 2994 | source = "registry+https://github.com/rust-lang/crates.io-index" 2995 | checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" 2996 | 2997 | [[package]] 2998 | name = "windows_x86_64_gnullvm" 2999 | version = "0.52.6" 3000 | source = "registry+https://github.com/rust-lang/crates.io-index" 3001 | checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" 3002 | 3003 | [[package]] 3004 | name = "windows_x86_64_msvc" 3005 | version = "0.42.2" 3006 | source = "registry+https://github.com/rust-lang/crates.io-index" 3007 | checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" 3008 | 3009 | [[package]] 3010 | name = "windows_x86_64_msvc" 3011 | version = "0.48.5" 3012 | source = "registry+https://github.com/rust-lang/crates.io-index" 3013 | checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" 3014 | 3015 | [[package]] 3016 | name = "windows_x86_64_msvc" 3017 | version = "0.52.6" 3018 | source = "registry+https://github.com/rust-lang/crates.io-index" 3019 | checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" 3020 | 3021 | [[package]] 3022 | name = "winnow" 3023 | version = "0.5.40" 3024 | source = "registry+https://github.com/rust-lang/crates.io-index" 3025 | checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" 3026 | dependencies = [ 3027 | "memchr", 3028 | ] 3029 | 3030 | [[package]] 3031 | name = "winnow" 3032 | version = "0.6.20" 3033 | source = "registry+https://github.com/rust-lang/crates.io-index" 3034 | checksum = "36c1fec1a2bb5866f07c25f68c26e565c4c200aebb96d7e55710c19d3e8ac49b" 3035 | dependencies = [ 3036 | "memchr", 3037 | ] 3038 | 3039 | [[package]] 3040 | name = "write16" 3041 | version = "1.0.0" 3042 | source = "registry+https://github.com/rust-lang/crates.io-index" 3043 | checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936" 3044 | 3045 | [[package]] 3046 | name = "writeable" 3047 | version = "0.5.5" 3048 | source = "registry+https://github.com/rust-lang/crates.io-index" 3049 | checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" 3050 | 3051 | [[package]] 3052 | name = "wry" 3053 | version = "0.35.2" 3054 | source = "registry+https://github.com/rust-lang/crates.io-index" 3055 | checksum = "d3016c47c9b6f7029a9da7cd48af8352327226bba0e955f3c92e2966651365a9" 3056 | dependencies = [ 3057 | "base64", 3058 | "block", 3059 | "cfg_aliases", 3060 | "cocoa 0.25.0", 3061 | "core-graphics 0.23.2", 3062 | "crossbeam-channel", 3063 | "dunce", 3064 | "gdkx11", 3065 | "gtk", 3066 | "html5ever", 3067 | "http", 3068 | "javascriptcore-rs", 3069 | "jni", 3070 | "kuchikiki", 3071 | "libc", 3072 | "log", 3073 | "ndk", 3074 | "ndk-context", 3075 | "ndk-sys", 3076 | "objc", 3077 | "objc_id", 3078 | "once_cell", 3079 | "raw-window-handle", 3080 | "serde", 3081 | "serde_json", 3082 | "sha2", 3083 | "soup3", 3084 | "tao-macros", 3085 | "thiserror", 3086 | "url", 3087 | "webkit2gtk", 3088 | "webkit2gtk-sys", 3089 | "webview2-com", 3090 | "windows 0.52.0", 3091 | "windows-implement", 3092 | "windows-version", 3093 | "x11-dl", 3094 | ] 3095 | 3096 | [[package]] 3097 | name = "x11" 3098 | version = "2.21.0" 3099 | source = "registry+https://github.com/rust-lang/crates.io-index" 3100 | checksum = "502da5464ccd04011667b11c435cb992822c2c0dbde1770c988480d312a0db2e" 3101 | dependencies = [ 3102 | "libc", 3103 | "pkg-config", 3104 | ] 3105 | 3106 | [[package]] 3107 | name = "x11-dl" 3108 | version = "2.21.0" 3109 | source = "registry+https://github.com/rust-lang/crates.io-index" 3110 | checksum = "38735924fedd5314a6e548792904ed8c6de6636285cb9fec04d5b1db85c1516f" 3111 | dependencies = [ 3112 | "libc", 3113 | "once_cell", 3114 | "pkg-config", 3115 | ] 3116 | 3117 | [[package]] 3118 | name = "x11rb" 3119 | version = "0.13.1" 3120 | source = "registry+https://github.com/rust-lang/crates.io-index" 3121 | checksum = "5d91ffca73ee7f68ce055750bf9f6eca0780b8c85eff9bc046a3b0da41755e12" 3122 | dependencies = [ 3123 | "as-raw-xcb-connection", 3124 | "gethostname", 3125 | "libc", 3126 | "rustix", 3127 | "x11rb-protocol", 3128 | ] 3129 | 3130 | [[package]] 3131 | name = "x11rb-protocol" 3132 | version = "0.13.1" 3133 | source = "registry+https://github.com/rust-lang/crates.io-index" 3134 | checksum = "ec107c4503ea0b4a98ef47356329af139c0a4f7750e621cf2973cd3385ebcb3d" 3135 | 3136 | [[package]] 3137 | name = "xtask" 3138 | version = "0.1.0" 3139 | dependencies = [ 3140 | "nih_plug_xtask", 3141 | ] 3142 | 3143 | [[package]] 3144 | name = "yoke" 3145 | version = "0.7.5" 3146 | source = "registry+https://github.com/rust-lang/crates.io-index" 3147 | checksum = "120e6aef9aa629e3d4f52dc8cc43a015c7724194c97dfaf45180d2daf2b77f40" 3148 | dependencies = [ 3149 | "serde", 3150 | "stable_deref_trait", 3151 | "yoke-derive", 3152 | "zerofrom", 3153 | ] 3154 | 3155 | [[package]] 3156 | name = "yoke-derive" 3157 | version = "0.7.5" 3158 | source = "registry+https://github.com/rust-lang/crates.io-index" 3159 | checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" 3160 | dependencies = [ 3161 | "proc-macro2", 3162 | "quote", 3163 | "syn 2.0.90", 3164 | "synstructure", 3165 | ] 3166 | 3167 | [[package]] 3168 | name = "zerocopy" 3169 | version = "0.7.35" 3170 | source = "registry+https://github.com/rust-lang/crates.io-index" 3171 | checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" 3172 | dependencies = [ 3173 | "byteorder", 3174 | "zerocopy-derive", 3175 | ] 3176 | 3177 | [[package]] 3178 | name = "zerocopy-derive" 3179 | version = "0.7.35" 3180 | source = "registry+https://github.com/rust-lang/crates.io-index" 3181 | checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" 3182 | dependencies = [ 3183 | "proc-macro2", 3184 | "quote", 3185 | "syn 2.0.90", 3186 | ] 3187 | 3188 | [[package]] 3189 | name = "zerofrom" 3190 | version = "0.1.5" 3191 | source = "registry+https://github.com/rust-lang/crates.io-index" 3192 | checksum = "cff3ee08c995dee1859d998dea82f7374f2826091dd9cd47def953cae446cd2e" 3193 | dependencies = [ 3194 | "zerofrom-derive", 3195 | ] 3196 | 3197 | [[package]] 3198 | name = "zerofrom-derive" 3199 | version = "0.1.5" 3200 | source = "registry+https://github.com/rust-lang/crates.io-index" 3201 | checksum = "595eed982f7d355beb85837f651fa22e90b3c044842dc7f2c2842c086f295808" 3202 | dependencies = [ 3203 | "proc-macro2", 3204 | "quote", 3205 | "syn 2.0.90", 3206 | "synstructure", 3207 | ] 3208 | 3209 | [[package]] 3210 | name = "zerovec" 3211 | version = "0.10.4" 3212 | source = "registry+https://github.com/rust-lang/crates.io-index" 3213 | checksum = "aa2b893d79df23bfb12d5461018d408ea19dfafe76c2c7ef6d4eba614f8ff079" 3214 | dependencies = [ 3215 | "yoke", 3216 | "zerofrom", 3217 | "zerovec-derive", 3218 | ] 3219 | 3220 | [[package]] 3221 | name = "zerovec-derive" 3222 | version = "0.10.3" 3223 | source = "registry+https://github.com/rust-lang/crates.io-index" 3224 | checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" 3225 | dependencies = [ 3226 | "proc-macro2", 3227 | "quote", 3228 | "syn 2.0.90", 3229 | ] 3230 | -------------------------------------------------------------------------------- /Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "midiometry" 3 | version = "0.1.0" 4 | edition = "2021" 5 | authors = ["dvub "] 6 | license = "GPL-3.0-or-later" 7 | homepage = "todo.todo" 8 | description = "A cool plugin for vis midi input" 9 | 10 | [workspace] 11 | members = ["xtask"] 12 | 13 | [lib] 14 | crate-type = ["cdylib"] 15 | 16 | [dependencies] 17 | include_dir = "0.7.4" 18 | mime_guess = "2.0.5" 19 | nih_plug = { git = "https://github.com/robbert-vdh/nih-plug.git" } 20 | # Remove the `assert_process_allocs` feature to allow allocations on the audio 21 | # thread in debug builds. 22 | # Uncomment the below line to disable the on-by-default VST3 feature to remove 23 | # the GPL compatibility requirement 24 | # nih_plug = { git = "https://github.com/robbert-vdh/nih-plug.git", default-features = false, features = ["assert_process_allocs"] } 25 | 26 | nih_plug_webview = { git = "https://github.com/dvub/nih-plug-webview.git" } 27 | # nih_plug_webview = { path = "../dvub-nih-plug-webview" } 28 | rtrb = "0.3.1" 29 | serde_json = "1.0.133" 30 | triple_buffer = "8.0.0" 31 | 32 | [profile.release] 33 | lto = "thin" 34 | strip = "symbols" 35 | 36 | [profile.profiling] 37 | inherits = "release" 38 | debug = true 39 | strip = "none" 40 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | GNU GENERAL PUBLIC LICENSE 2 | Version 3, 29 June 2007 3 | 4 | Copyright (C) 2007 Free Software Foundation, Inc. 5 | Everyone is permitted to copy and distribute verbatim copies 6 | of this license document, but changing it is not allowed. 7 | 8 | Preamble 9 | 10 | The GNU General Public License is a free, copyleft license for 11 | software and other kinds of works. 12 | 13 | The licenses for most software and other practical works are designed 14 | to take away your freedom to share and change the works. By contrast, 15 | the GNU General Public License is intended to guarantee your freedom to 16 | share and change all versions of a program--to make sure it remains free 17 | software for all its users. We, the Free Software Foundation, use the 18 | GNU General Public License for most of our software; it applies also to 19 | any other work released this way by its authors. You can apply it to 20 | your programs, too. 21 | 22 | When we speak of free software, we are referring to freedom, not 23 | price. Our General Public Licenses are designed to make sure that you 24 | have the freedom to distribute copies of free software (and charge for 25 | them if you wish), that you receive source code or can get it if you 26 | want it, that you can change the software or use pieces of it in new 27 | free programs, and that you know you can do these things. 28 | 29 | To protect your rights, we need to prevent others from denying you 30 | these rights or asking you to surrender the rights. Therefore, you have 31 | certain responsibilities if you distribute copies of the software, or if 32 | you modify it: responsibilities to respect the freedom of others. 33 | 34 | For example, if you distribute copies of such a program, whether 35 | gratis or for a fee, you must pass on to the recipients the same 36 | freedoms that you received. You must make sure that they, too, receive 37 | or can get the source code. And you must show them these terms so they 38 | know their rights. 39 | 40 | Developers that use the GNU GPL protect your rights with two steps: 41 | (1) assert copyright on the software, and (2) offer you this License 42 | giving you legal permission to copy, distribute and/or modify it. 43 | 44 | For the developers' and authors' protection, the GPL clearly explains 45 | that there is no warranty for this free software. For both users' and 46 | authors' sake, the GPL requires that modified versions be marked as 47 | changed, so that their problems will not be attributed erroneously to 48 | authors of previous versions. 49 | 50 | Some devices are designed to deny users access to install or run 51 | modified versions of the software inside them, although the manufacturer 52 | can do so. This is fundamentally incompatible with the aim of 53 | protecting users' freedom to change the software. The systematic 54 | pattern of such abuse occurs in the area of products for individuals to 55 | use, which is precisely where it is most unacceptable. Therefore, we 56 | have designed this version of the GPL to prohibit the practice for those 57 | products. If such problems arise substantially in other domains, we 58 | stand ready to extend this provision to those domains in future versions 59 | of the GPL, as needed to protect the freedom of users. 60 | 61 | Finally, every program is threatened constantly by software patents. 62 | States should not allow patents to restrict development and use of 63 | software on general-purpose computers, but in those that do, we wish to 64 | avoid the special danger that patents applied to a free program could 65 | make it effectively proprietary. To prevent this, the GPL assures that 66 | patents cannot be used to render the program non-free. 67 | 68 | The precise terms and conditions for copying, distribution and 69 | modification follow. 70 | 71 | TERMS AND CONDITIONS 72 | 73 | 0. Definitions. 74 | 75 | "This License" refers to version 3 of the GNU General Public License. 76 | 77 | "Copyright" also means copyright-like laws that apply to other kinds of 78 | works, such as semiconductor masks. 79 | 80 | "The Program" refers to any copyrightable work licensed under this 81 | License. Each licensee is addressed as "you". "Licensees" and 82 | "recipients" may be individuals or organizations. 83 | 84 | To "modify" a work means to copy from or adapt all or part of the work 85 | in a fashion requiring copyright permission, other than the making of an 86 | exact copy. The resulting work is called a "modified version" of the 87 | earlier work or a work "based on" the earlier work. 88 | 89 | A "covered work" means either the unmodified Program or a work based 90 | on the Program. 91 | 92 | To "propagate" a work means to do anything with it that, without 93 | permission, would make you directly or secondarily liable for 94 | infringement under applicable copyright law, except executing it on a 95 | computer or modifying a private copy. Propagation includes copying, 96 | distribution (with or without modification), making available to the 97 | public, and in some countries other activities as well. 98 | 99 | To "convey" a work means any kind of propagation that enables other 100 | parties to make or receive copies. Mere interaction with a user through 101 | a computer network, with no transfer of a copy, is not conveying. 102 | 103 | An interactive user interface displays "Appropriate Legal Notices" 104 | to the extent that it includes a convenient and prominently visible 105 | feature that (1) displays an appropriate copyright notice, and (2) 106 | tells the user that there is no warranty for the work (except to the 107 | extent that warranties are provided), that licensees may convey the 108 | work under this License, and how to view a copy of this License. If 109 | the interface presents a list of user commands or options, such as a 110 | menu, a prominent item in the list meets this criterion. 111 | 112 | 1. Source Code. 113 | 114 | The "source code" for a work means the preferred form of the work 115 | for making modifications to it. "Object code" means any non-source 116 | form of a work. 117 | 118 | A "Standard Interface" means an interface that either is an official 119 | standard defined by a recognized standards body, or, in the case of 120 | interfaces specified for a particular programming language, one that 121 | is widely used among developers working in that language. 122 | 123 | The "System Libraries" of an executable work include anything, other 124 | than the work as a whole, that (a) is included in the normal form of 125 | packaging a Major Component, but which is not part of that Major 126 | Component, and (b) serves only to enable use of the work with that 127 | Major Component, or to implement a Standard Interface for which an 128 | implementation is available to the public in source code form. A 129 | "Major Component", in this context, means a major essential component 130 | (kernel, window system, and so on) of the specific operating system 131 | (if any) on which the executable work runs, or a compiler used to 132 | produce the work, or an object code interpreter used to run it. 133 | 134 | The "Corresponding Source" for a work in object code form means all 135 | the source code needed to generate, install, and (for an executable 136 | work) run the object code and to modify the work, including scripts to 137 | control those activities. However, it does not include the work's 138 | System Libraries, or general-purpose tools or generally available free 139 | programs which are used unmodified in performing those activities but 140 | which are not part of the work. For example, Corresponding Source 141 | includes interface definition files associated with source files for 142 | the work, and the source code for shared libraries and dynamically 143 | linked subprograms that the work is specifically designed to require, 144 | such as by intimate data communication or control flow between those 145 | subprograms and other parts of the work. 146 | 147 | The Corresponding Source need not include anything that users 148 | can regenerate automatically from other parts of the Corresponding 149 | Source. 150 | 151 | The Corresponding Source for a work in source code form is that 152 | same work. 153 | 154 | 2. Basic Permissions. 155 | 156 | All rights granted under this License are granted for the term of 157 | copyright on the Program, and are irrevocable provided the stated 158 | conditions are met. This License explicitly affirms your unlimited 159 | permission to run the unmodified Program. The output from running a 160 | covered work is covered by this License only if the output, given its 161 | content, constitutes a covered work. This License acknowledges your 162 | rights of fair use or other equivalent, as provided by copyright law. 163 | 164 | You may make, run and propagate covered works that you do not 165 | convey, without conditions so long as your license otherwise remains 166 | in force. You may convey covered works to others for the sole purpose 167 | of having them make modifications exclusively for you, or provide you 168 | with facilities for running those works, provided that you comply with 169 | the terms of this License in conveying all material for which you do 170 | not control copyright. Those thus making or running the covered works 171 | for you must do so exclusively on your behalf, under your direction 172 | and control, on terms that prohibit them from making any copies of 173 | your copyrighted material outside their relationship with you. 174 | 175 | Conveying under any other circumstances is permitted solely under 176 | the conditions stated below. Sublicensing is not allowed; section 10 177 | makes it unnecessary. 178 | 179 | 3. Protecting Users' Legal Rights From Anti-Circumvention Law. 180 | 181 | No covered work shall be deemed part of an effective technological 182 | measure under any applicable law fulfilling obligations under article 183 | 11 of the WIPO copyright treaty adopted on 20 December 1996, or 184 | similar laws prohibiting or restricting circumvention of such 185 | measures. 186 | 187 | When you convey a covered work, you waive any legal power to forbid 188 | circumvention of technological measures to the extent such circumvention 189 | is effected by exercising rights under this License with respect to 190 | the covered work, and you disclaim any intention to limit operation or 191 | modification of the work as a means of enforcing, against the work's 192 | users, your or third parties' legal rights to forbid circumvention of 193 | technological measures. 194 | 195 | 4. Conveying Verbatim Copies. 196 | 197 | You may convey verbatim copies of the Program's source code as you 198 | receive it, in any medium, provided that you conspicuously and 199 | appropriately publish on each copy an appropriate copyright notice; 200 | keep intact all notices stating that this License and any 201 | non-permissive terms added in accord with section 7 apply to the code; 202 | keep intact all notices of the absence of any warranty; and give all 203 | recipients a copy of this License along with the Program. 204 | 205 | You may charge any price or no price for each copy that you convey, 206 | and you may offer support or warranty protection for a fee. 207 | 208 | 5. Conveying Modified Source Versions. 209 | 210 | You may convey a work based on the Program, or the modifications to 211 | produce it from the Program, in the form of source code under the 212 | terms of section 4, provided that you also meet all of these conditions: 213 | 214 | a) The work must carry prominent notices stating that you modified 215 | it, and giving a relevant date. 216 | 217 | b) The work must carry prominent notices stating that it is 218 | released under this License and any conditions added under section 219 | 7. This requirement modifies the requirement in section 4 to 220 | "keep intact all notices". 221 | 222 | c) You must license the entire work, as a whole, under this 223 | License to anyone who comes into possession of a copy. This 224 | License will therefore apply, along with any applicable section 7 225 | additional terms, to the whole of the work, and all its parts, 226 | regardless of how they are packaged. This License gives no 227 | permission to license the work in any other way, but it does not 228 | invalidate such permission if you have separately received it. 229 | 230 | d) If the work has interactive user interfaces, each must display 231 | Appropriate Legal Notices; however, if the Program has interactive 232 | interfaces that do not display Appropriate Legal Notices, your 233 | work need not make them do so. 234 | 235 | A compilation of a covered work with other separate and independent 236 | works, which are not by their nature extensions of the covered work, 237 | and which are not combined with it such as to form a larger program, 238 | in or on a volume of a storage or distribution medium, is called an 239 | "aggregate" if the compilation and its resulting copyright are not 240 | used to limit the access or legal rights of the compilation's users 241 | beyond what the individual works permit. Inclusion of a covered work 242 | in an aggregate does not cause this License to apply to the other 243 | parts of the aggregate. 244 | 245 | 6. Conveying Non-Source Forms. 246 | 247 | You may convey a covered work in object code form under the terms 248 | of sections 4 and 5, provided that you also convey the 249 | machine-readable Corresponding Source under the terms of this License, 250 | in one of these ways: 251 | 252 | a) Convey the object code in, or embodied in, a physical product 253 | (including a physical distribution medium), accompanied by the 254 | Corresponding Source fixed on a durable physical medium 255 | customarily used for software interchange. 256 | 257 | b) Convey the object code in, or embodied in, a physical product 258 | (including a physical distribution medium), accompanied by a 259 | written offer, valid for at least three years and valid for as 260 | long as you offer spare parts or customer support for that product 261 | model, to give anyone who possesses the object code either (1) a 262 | copy of the Corresponding Source for all the software in the 263 | product that is covered by this License, on a durable physical 264 | medium customarily used for software interchange, for a price no 265 | more than your reasonable cost of physically performing this 266 | conveying of source, or (2) access to copy the 267 | Corresponding Source from a network server at no charge. 268 | 269 | c) Convey individual copies of the object code with a copy of the 270 | written offer to provide the Corresponding Source. This 271 | alternative is allowed only occasionally and noncommercially, and 272 | only if you received the object code with such an offer, in accord 273 | with subsection 6b. 274 | 275 | d) Convey the object code by offering access from a designated 276 | place (gratis or for a charge), and offer equivalent access to the 277 | Corresponding Source in the same way through the same place at no 278 | further charge. You need not require recipients to copy the 279 | Corresponding Source along with the object code. If the place to 280 | copy the object code is a network server, the Corresponding Source 281 | may be on a different server (operated by you or a third party) 282 | that supports equivalent copying facilities, provided you maintain 283 | clear directions next to the object code saying where to find the 284 | Corresponding Source. Regardless of what server hosts the 285 | Corresponding Source, you remain obligated to ensure that it is 286 | available for as long as needed to satisfy these requirements. 287 | 288 | e) Convey the object code using peer-to-peer transmission, provided 289 | you inform other peers where the object code and Corresponding 290 | Source of the work are being offered to the general public at no 291 | charge under subsection 6d. 292 | 293 | A separable portion of the object code, whose source code is excluded 294 | from the Corresponding Source as a System Library, need not be 295 | included in conveying the object code work. 296 | 297 | A "User Product" is either (1) a "consumer product", which means any 298 | tangible personal property which is normally used for personal, family, 299 | or household purposes, or (2) anything designed or sold for incorporation 300 | into a dwelling. In determining whether a product is a consumer product, 301 | doubtful cases shall be resolved in favor of coverage. For a particular 302 | product received by a particular user, "normally used" refers to a 303 | typical or common use of that class of product, regardless of the status 304 | of the particular user or of the way in which the particular user 305 | actually uses, or expects or is expected to use, the product. A product 306 | is a consumer product regardless of whether the product has substantial 307 | commercial, industrial or non-consumer uses, unless such uses represent 308 | the only significant mode of use of the product. 309 | 310 | "Installation Information" for a User Product means any methods, 311 | procedures, authorization keys, or other information required to install 312 | and execute modified versions of a covered work in that User Product from 313 | a modified version of its Corresponding Source. The information must 314 | suffice to ensure that the continued functioning of the modified object 315 | code is in no case prevented or interfered with solely because 316 | modification has been made. 317 | 318 | If you convey an object code work under this section in, or with, or 319 | specifically for use in, a User Product, and the conveying occurs as 320 | part of a transaction in which the right of possession and use of the 321 | User Product is transferred to the recipient in perpetuity or for a 322 | fixed term (regardless of how the transaction is characterized), the 323 | Corresponding Source conveyed under this section must be accompanied 324 | by the Installation Information. But this requirement does not apply 325 | if neither you nor any third party retains the ability to install 326 | modified object code on the User Product (for example, the work has 327 | been installed in ROM). 328 | 329 | The requirement to provide Installation Information does not include a 330 | requirement to continue to provide support service, warranty, or updates 331 | for a work that has been modified or installed by the recipient, or for 332 | the User Product in which it has been modified or installed. Access to a 333 | network may be denied when the modification itself materially and 334 | adversely affects the operation of the network or violates the rules and 335 | protocols for communication across the network. 336 | 337 | Corresponding Source conveyed, and Installation Information provided, 338 | in accord with this section must be in a format that is publicly 339 | documented (and with an implementation available to the public in 340 | source code form), and must require no special password or key for 341 | unpacking, reading or copying. 342 | 343 | 7. Additional Terms. 344 | 345 | "Additional permissions" are terms that supplement the terms of this 346 | License by making exceptions from one or more of its conditions. 347 | Additional permissions that are applicable to the entire Program shall 348 | be treated as though they were included in this License, to the extent 349 | that they are valid under applicable law. If additional permissions 350 | apply only to part of the Program, that part may be used separately 351 | under those permissions, but the entire Program remains governed by 352 | this License without regard to the additional permissions. 353 | 354 | When you convey a copy of a covered work, you may at your option 355 | remove any additional permissions from that copy, or from any part of 356 | it. (Additional permissions may be written to require their own 357 | removal in certain cases when you modify the work.) You may place 358 | additional permissions on material, added by you to a covered work, 359 | for which you have or can give appropriate copyright permission. 360 | 361 | Notwithstanding any other provision of this License, for material you 362 | add to a covered work, you may (if authorized by the copyright holders of 363 | that material) supplement the terms of this License with terms: 364 | 365 | a) Disclaiming warranty or limiting liability differently from the 366 | terms of sections 15 and 16 of this License; or 367 | 368 | b) Requiring preservation of specified reasonable legal notices or 369 | author attributions in that material or in the Appropriate Legal 370 | Notices displayed by works containing it; or 371 | 372 | c) Prohibiting misrepresentation of the origin of that material, or 373 | requiring that modified versions of such material be marked in 374 | reasonable ways as different from the original version; or 375 | 376 | d) Limiting the use for publicity purposes of names of licensors or 377 | authors of the material; or 378 | 379 | e) Declining to grant rights under trademark law for use of some 380 | trade names, trademarks, or service marks; or 381 | 382 | f) Requiring indemnification of licensors and authors of that 383 | material by anyone who conveys the material (or modified versions of 384 | it) with contractual assumptions of liability to the recipient, for 385 | any liability that these contractual assumptions directly impose on 386 | those licensors and authors. 387 | 388 | All other non-permissive additional terms are considered "further 389 | restrictions" within the meaning of section 10. If the Program as you 390 | received it, or any part of it, contains a notice stating that it is 391 | governed by this License along with a term that is a further 392 | restriction, you may remove that term. If a license document contains 393 | a further restriction but permits relicensing or conveying under this 394 | License, you may add to a covered work material governed by the terms 395 | of that license document, provided that the further restriction does 396 | not survive such relicensing or conveying. 397 | 398 | If you add terms to a covered work in accord with this section, you 399 | must place, in the relevant source files, a statement of the 400 | additional terms that apply to those files, or a notice indicating 401 | where to find the applicable terms. 402 | 403 | Additional terms, permissive or non-permissive, may be stated in the 404 | form of a separately written license, or stated as exceptions; 405 | the above requirements apply either way. 406 | 407 | 8. Termination. 408 | 409 | You may not propagate or modify a covered work except as expressly 410 | provided under this License. Any attempt otherwise to propagate or 411 | modify it is void, and will automatically terminate your rights under 412 | this License (including any patent licenses granted under the third 413 | paragraph of section 11). 414 | 415 | However, if you cease all violation of this License, then your 416 | license from a particular copyright holder is reinstated (a) 417 | provisionally, unless and until the copyright holder explicitly and 418 | finally terminates your license, and (b) permanently, if the copyright 419 | holder fails to notify you of the violation by some reasonable means 420 | prior to 60 days after the cessation. 421 | 422 | Moreover, your license from a particular copyright holder is 423 | reinstated permanently if the copyright holder notifies you of the 424 | violation by some reasonable means, this is the first time you have 425 | received notice of violation of this License (for any work) from that 426 | copyright holder, and you cure the violation prior to 30 days after 427 | your receipt of the notice. 428 | 429 | Termination of your rights under this section does not terminate the 430 | licenses of parties who have received copies or rights from you under 431 | this License. If your rights have been terminated and not permanently 432 | reinstated, you do not qualify to receive new licenses for the same 433 | material under section 10. 434 | 435 | 9. Acceptance Not Required for Having Copies. 436 | 437 | You are not required to accept this License in order to receive or 438 | run a copy of the Program. Ancillary propagation of a covered work 439 | occurring solely as a consequence of using peer-to-peer transmission 440 | to receive a copy likewise does not require acceptance. However, 441 | nothing other than this License grants you permission to propagate or 442 | modify any covered work. These actions infringe copyright if you do 443 | not accept this License. Therefore, by modifying or propagating a 444 | covered work, you indicate your acceptance of this License to do so. 445 | 446 | 10. Automatic Licensing of Downstream Recipients. 447 | 448 | Each time you convey a covered work, the recipient automatically 449 | receives a license from the original licensors, to run, modify and 450 | propagate that work, subject to this License. You are not responsible 451 | for enforcing compliance by third parties with this License. 452 | 453 | An "entity transaction" is a transaction transferring control of an 454 | organization, or substantially all assets of one, or subdividing an 455 | organization, or merging organizations. If propagation of a covered 456 | work results from an entity transaction, each party to that 457 | transaction who receives a copy of the work also receives whatever 458 | licenses to the work the party's predecessor in interest had or could 459 | give under the previous paragraph, plus a right to possession of the 460 | Corresponding Source of the work from the predecessor in interest, if 461 | the predecessor has it or can get it with reasonable efforts. 462 | 463 | You may not impose any further restrictions on the exercise of the 464 | rights granted or affirmed under this License. For example, you may 465 | not impose a license fee, royalty, or other charge for exercise of 466 | rights granted under this License, and you may not initiate litigation 467 | (including a cross-claim or counterclaim in a lawsuit) alleging that 468 | any patent claim is infringed by making, using, selling, offering for 469 | sale, or importing the Program or any portion of it. 470 | 471 | 11. Patents. 472 | 473 | A "contributor" is a copyright holder who authorizes use under this 474 | License of the Program or a work on which the Program is based. The 475 | work thus licensed is called the contributor's "contributor version". 476 | 477 | A contributor's "essential patent claims" are all patent claims 478 | owned or controlled by the contributor, whether already acquired or 479 | hereafter acquired, that would be infringed by some manner, permitted 480 | by this License, of making, using, or selling its contributor version, 481 | but do not include claims that would be infringed only as a 482 | consequence of further modification of the contributor version. For 483 | purposes of this definition, "control" includes the right to grant 484 | patent sublicenses in a manner consistent with the requirements of 485 | this License. 486 | 487 | Each contributor grants you a non-exclusive, worldwide, royalty-free 488 | patent license under the contributor's essential patent claims, to 489 | make, use, sell, offer for sale, import and otherwise run, modify and 490 | propagate the contents of its contributor version. 491 | 492 | In the following three paragraphs, a "patent license" is any express 493 | agreement or commitment, however denominated, not to enforce a patent 494 | (such as an express permission to practice a patent or covenant not to 495 | sue for patent infringement). To "grant" such a patent license to a 496 | party means to make such an agreement or commitment not to enforce a 497 | patent against the party. 498 | 499 | If you convey a covered work, knowingly relying on a patent license, 500 | and the Corresponding Source of the work is not available for anyone 501 | to copy, free of charge and under the terms of this License, through a 502 | publicly available network server or other readily accessible means, 503 | then you must either (1) cause the Corresponding Source to be so 504 | available, or (2) arrange to deprive yourself of the benefit of the 505 | patent license for this particular work, or (3) arrange, in a manner 506 | consistent with the requirements of this License, to extend the patent 507 | license to downstream recipients. "Knowingly relying" means you have 508 | actual knowledge that, but for the patent license, your conveying the 509 | covered work in a country, or your recipient's use of the covered work 510 | in a country, would infringe one or more identifiable patents in that 511 | country that you have reason to believe are valid. 512 | 513 | If, pursuant to or in connection with a single transaction or 514 | arrangement, you convey, or propagate by procuring conveyance of, a 515 | covered work, and grant a patent license to some of the parties 516 | receiving the covered work authorizing them to use, propagate, modify 517 | or convey a specific copy of the covered work, then the patent license 518 | you grant is automatically extended to all recipients of the covered 519 | work and works based on it. 520 | 521 | A patent license is "discriminatory" if it does not include within 522 | the scope of its coverage, prohibits the exercise of, or is 523 | conditioned on the non-exercise of one or more of the rights that are 524 | specifically granted under this License. You may not convey a covered 525 | work if you are a party to an arrangement with a third party that is 526 | in the business of distributing software, under which you make payment 527 | to the third party based on the extent of your activity of conveying 528 | the work, and under which the third party grants, to any of the 529 | parties who would receive the covered work from you, a discriminatory 530 | patent license (a) in connection with copies of the covered work 531 | conveyed by you (or copies made from those copies), or (b) primarily 532 | for and in connection with specific products or compilations that 533 | contain the covered work, unless you entered into that arrangement, 534 | or that patent license was granted, prior to 28 March 2007. 535 | 536 | Nothing in this License shall be construed as excluding or limiting 537 | any implied license or other defenses to infringement that may 538 | otherwise be available to you under applicable patent law. 539 | 540 | 12. No Surrender of Others' Freedom. 541 | 542 | If conditions are imposed on you (whether by court order, agreement or 543 | otherwise) that contradict the conditions of this License, they do not 544 | excuse you from the conditions of this License. If you cannot convey a 545 | covered work so as to satisfy simultaneously your obligations under this 546 | License and any other pertinent obligations, then as a consequence you may 547 | not convey it at all. For example, if you agree to terms that obligate you 548 | to collect a royalty for further conveying from those to whom you convey 549 | the Program, the only way you could satisfy both those terms and this 550 | License would be to refrain entirely from conveying the Program. 551 | 552 | 13. Use with the GNU Affero General Public License. 553 | 554 | Notwithstanding any other provision of this License, you have 555 | permission to link or combine any covered work with a work licensed 556 | under version 3 of the GNU Affero General Public License into a single 557 | combined work, and to convey the resulting work. The terms of this 558 | License will continue to apply to the part which is the covered work, 559 | but the special requirements of the GNU Affero General Public License, 560 | section 13, concerning interaction through a network will apply to the 561 | combination as such. 562 | 563 | 14. Revised Versions of this License. 564 | 565 | The Free Software Foundation may publish revised and/or new versions of 566 | the GNU General Public License from time to time. Such new versions will 567 | be similar in spirit to the present version, but may differ in detail to 568 | address new problems or concerns. 569 | 570 | Each version is given a distinguishing version number. If the 571 | Program specifies that a certain numbered version of the GNU General 572 | Public License "or any later version" applies to it, you have the 573 | option of following the terms and conditions either of that numbered 574 | version or of any later version published by the Free Software 575 | Foundation. If the Program does not specify a version number of the 576 | GNU General Public License, you may choose any version ever published 577 | by the Free Software Foundation. 578 | 579 | If the Program specifies that a proxy can decide which future 580 | versions of the GNU General Public License can be used, that proxy's 581 | public statement of acceptance of a version permanently authorizes you 582 | to choose that version for the Program. 583 | 584 | Later license versions may give you additional or different 585 | permissions. However, no additional obligations are imposed on any 586 | author or copyright holder as a result of your choosing to follow a 587 | later version. 588 | 589 | 15. Disclaimer of Warranty. 590 | 591 | THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY 592 | APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT 593 | HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY 594 | OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, 595 | THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 596 | PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM 597 | IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF 598 | ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 599 | 600 | 16. Limitation of Liability. 601 | 602 | IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING 603 | WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS 604 | THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY 605 | GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE 606 | USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF 607 | DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD 608 | PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), 609 | EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF 610 | SUCH DAMAGES. 611 | 612 | 17. Interpretation of Sections 15 and 16. 613 | 614 | If the disclaimer of warranty and limitation of liability provided 615 | above cannot be given local legal effect according to their terms, 616 | reviewing courts shall apply local law that most closely approximates 617 | an absolute waiver of all civil liability in connection with the 618 | Program, unless a warranty or assumption of liability accompanies a 619 | copy of the Program in return for a fee. 620 | 621 | END OF TERMS AND CONDITIONS 622 | 623 | How to Apply These Terms to Your New Programs 624 | 625 | If you develop a new program, and you want it to be of the greatest 626 | possible use to the public, the best way to achieve this is to make it 627 | free software which everyone can redistribute and change under these terms. 628 | 629 | To do so, attach the following notices to the program. It is safest 630 | to attach them to the start of each source file to most effectively 631 | state the exclusion of warranty; and each file should have at least 632 | the "copyright" line and a pointer to where the full notice is found. 633 | 634 | 635 | Copyright (C) 636 | 637 | This program is free software: you can redistribute it and/or modify 638 | it under the terms of the GNU General Public License as published by 639 | the Free Software Foundation, either version 3 of the License, or 640 | (at your option) any later version. 641 | 642 | This program is distributed in the hope that it will be useful, 643 | but WITHOUT ANY WARRANTY; without even the implied warranty of 644 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 645 | GNU General Public License for more details. 646 | 647 | You should have received a copy of the GNU General Public License 648 | along with this program. If not, see . 649 | 650 | Also add information on how to contact you by electronic and paper mail. 651 | 652 | If the program does terminal interaction, make it output a short 653 | notice like this when it starts in an interactive mode: 654 | 655 | Copyright (C) 656 | This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. 657 | This is free software, and you are welcome to redistribute it 658 | under certain conditions; type `show c' for details. 659 | 660 | The hypothetical commands `show w' and `show c' should show the appropriate 661 | parts of the General Public License. Of course, your program's commands 662 | might be different; for a GUI interface, you would use an "about box". 663 | 664 | You should also get your employer (if you work as a programmer) or school, 665 | if any, to sign a "copyright disclaimer" for the program, if necessary. 666 | For more information on this, and how to apply and follow the GNU GPL, see 667 | . 668 | 669 | The GNU General Public License does not permit incorporating your program 670 | into proprietary programs. If your program is a subroutine library, you 671 | may consider it more useful to permit linking proprietary applications with 672 | the library. If this is what you want to do, use the GNU Lesser General 673 | Public License instead of this License. But first, please read 674 | . 675 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # MIDIOMETRY 2 | 3 |

4 | 5 |

6 | 7 | This is MIDIOMETRY, a free & open-source plugin that visualizes your playing. (This plugin does NOT visualize audio, just MIDI inputs!) 8 | 9 | ### Installation 10 | 11 | (This guide assumes you already know how to add VST3/CLAP plugins to your DAW.) 12 | 13 | To install MIDIOMETRY, go to the ["Actions" tab](https://github.com/dvub/midiometry/actions) of this repository, click on a build (you probably want the most recent build, assuming it passed), and scroll down to the "Artifacts" section. From here, download the zip file for your platform\* and extract the contents. 14 | 15 | Then, follow your normal process for adding plugins to your DAW, whether it be adding the plugin files to your OS's default plugin locations, or to a custom location. 16 | 17 | \*If you're not running Windows, Mac, or Ubuntu, you can try downloading the source code and building the project yourself. However, this might not work. 18 | 19 | ### DAW-Specific Notes & Usage 20 | 21 | #### Ableton 22 | 23 | Ableton doesn't have very good support for _pure MIDI plugins_ - **you'll probably have to use a workaround,** e.g. where MIDIOMETRY has its own track, and you send the MIDI out to another track with an instrument on it. 24 | 25 | #### FL Studio 26 | 27 | I haven't tested FL studio at all. 28 | 29 | #### Bitwig 30 | 31 | Bitwig has the best support for MIDI-related plugins and **should work seamlessly**. 32 | 33 | ### OS Notes 34 | 35 | #### Linux 36 | 37 | This plugin **may or may not work if you're on Linux.** In my testing with Bitwig (individually sandboxed plugins), everything has worked fine. However, if you're not using the same sandboxing, or if you're using a different DAW (Reaper, etc.) this might work sometimes or not at all. Good luck. 38 | 39 | ### Issues 40 | 41 | Please open an issue on this repository if something isn't working, and I'll do my best to respond and work on it. 42 | -------------------------------------------------------------------------------- /bundler.toml: -------------------------------------------------------------------------------- 1 | # This provides metadata for NIH-plug's `cargo xtask bundle ` plugin 2 | # bundler. This file's syntax is as follows: 3 | # 4 | # [package_name] 5 | # name = "Human Readable Plugin Name" # defaults to 6 | 7 | [midiometry] 8 | name = "midiometry" 9 | -------------------------------------------------------------------------------- /gui/.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.* 7 | .yarn/* 8 | !.yarn/patches 9 | !.yarn/plugins 10 | !.yarn/releases 11 | !.yarn/versions 12 | 13 | # testing 14 | /coverage 15 | 16 | # next.js 17 | /.next/ 18 | /out/ 19 | 20 | # production 21 | /build 22 | 23 | # misc 24 | .DS_Store 25 | *.pem 26 | 27 | # debug 28 | npm-debug.log* 29 | yarn-debug.log* 30 | yarn-error.log* 31 | .pnpm-debug.log* 32 | 33 | # env files (can opt-in for committing if needed) 34 | .env* 35 | 36 | # vercel 37 | .vercel 38 | 39 | # typescript 40 | *.tsbuildinfo 41 | next-env.d.ts 42 | -------------------------------------------------------------------------------- /gui/README.md: -------------------------------------------------------------------------------- 1 | GUI 2 | -------------------------------------------------------------------------------- /gui/app/globals.css: -------------------------------------------------------------------------------- 1 | @tailwind base; 2 | @tailwind components; 3 | @tailwind utilities; 4 | /* 5 | :root { 6 | --background: #ffffff; 7 | --foreground: #171717; 8 | } 9 | 10 | @media (prefers-color-scheme: dark) { 11 | :root { 12 | --background: #0a0a0a; 13 | --foreground: #ededed; 14 | } 15 | } 16 | 17 | 18 | body { 19 | color: var(--foreground); 20 | background: var(--background); 21 | font-family: Arial, Helvetica, sans-serif; 22 | } 23 | */ 24 | -------------------------------------------------------------------------------- /gui/app/index.ts: -------------------------------------------------------------------------------- 1 | declare global { 2 | interface Window { 3 | 4 | ipc: { postMessage: (message: string) => void }; 5 | // when the plugin backend (audio thread) sends a message to the GUI thread 6 | onPluginMessage: (message: number[]) => void; 7 | } 8 | } 9 | 10 | export function sendToPlugin(msg: string) { 11 | window.ipc.postMessage(JSON.stringify(msg)); 12 | } -------------------------------------------------------------------------------- /gui/app/layout.tsx: -------------------------------------------------------------------------------- 1 | import { Inter } from 'next/font/google'; 2 | import './globals.css'; 3 | 4 | const inter = Inter({ variable: '--font-inter', subsets: ['latin'] }); 5 | 6 | export default function RootLayout({ 7 | children, 8 | }: Readonly<{ 9 | children: React.ReactNode; 10 | }>) { 11 | return ( 12 | 13 | {children} 14 | 15 | ); 16 | } 17 | -------------------------------------------------------------------------------- /gui/app/page.tsx: -------------------------------------------------------------------------------- 1 | 'use client'; 2 | 3 | import React, { useEffect, useRef, useState } from 'react'; 4 | 5 | const NOTE_ON = 144; 6 | const NOTE_OFF = 128; 7 | const NOTE_NAMES = [ 8 | 'C', 9 | 'G', 10 | 'D', 11 | 'A', 12 | 'E', 13 | 'B', 14 | 'F#/Gb', 15 | 'C#/Db', 16 | 'Ab', 17 | 'Eb', 18 | 'Bb', 19 | 'F', 20 | ]; 21 | // https://colorkit.co/palette/00202e-003f5c-2c4875-8a508f-bc5090-ff6361-ff8531-ffa600-ffd380/ 22 | // #ffadad, #ffd6a5, #fdffb6, #caffbf, #9bf6ff, #a0c4ff, #bdb2ff and #ffc6ff. 23 | const COLORS = [ 24 | '255,173,173', 25 | '255,214,165', 26 | '253,255,182', 27 | '202,255,191', 28 | '155,246,255', 29 | '160,196,255', 30 | '189,178,255', 31 | '255,198,255', 32 | ]; 33 | 34 | export default function Home() { 35 | const [notes, setNotes] = useState([]); 36 | 37 | useEffect(() => { 38 | window.onPluginMessage = (message: number[]) => { 39 | const noteStatus = message[0]; 40 | 41 | // TODO: 42 | // make use of velocity! 43 | //const velocity = message[2]; 44 | const noteNumber = message[1]; 45 | 46 | if (noteStatus === NOTE_ON) { 47 | console.log('NOTE ON:', message); 48 | 49 | setNotes((prevState) => [...prevState, noteNumber]); 50 | } else if (noteStatus === NOTE_OFF) { 51 | console.log('NOTE OFF:', message); 52 | // 0 velocity = note OFF 53 | setNotes((prevState) => 54 | prevState.filter((note) => note !== noteNumber) 55 | ); 56 | } 57 | }; 58 | }, []); 59 | 60 | return ( 61 |
62 | {/* --- background title text thingy --- */} 63 |
64 |

MIDIOMETRY

65 |
66 | 67 | {/* --- credits! --- */} 68 |
69 |

a plugin by dvub

70 |
71 | 72 | 73 |
74 | ); 75 | } 76 | 77 | const Dodecagon = (props: { notes: number[] }) => { 78 | const { notes } = props; 79 | 80 | const canvasRef = useRef(null); 81 | 82 | useEffect(() => { 83 | // --- init setup --- // 84 | const refCurrent = canvasRef.current!; 85 | const ctx = refCurrent.getContext('2d')!; 86 | 87 | ctx.clearRect(0, 0, refCurrent.width, refCurrent.height); 88 | ctx.textAlign = 'center'; 89 | 90 | const centerX = refCurrent.width / 2; 91 | const centerY = refCurrent.height / 2; 92 | const radius = Math.min(refCurrent.width, refCurrent.height) * 0.33; 93 | 94 | // this has to be here because we need canvas context for center coords and radius 95 | const coordinates = generateCoordinates( 96 | { x: centerX, y: centerY }, 97 | radius 98 | ); 99 | 100 | // --- add note names in slightly larger circle --- // 101 | const textOffset = 25; 102 | generateCoordinates( 103 | { x: centerX, y: centerY }, 104 | radius + textOffset 105 | ).forEach((coordinate, index) => { 106 | const text = NOTE_NAMES[index]; 107 | ctx.fillStyle = 'white'; 108 | ctx.fillText(text, coordinate.x, coordinate.y); 109 | }); 110 | 111 | // --- draw dots to represent when notes are played --- // 112 | notes.map((note) => { 113 | const octave = Math.floor(note / 12); 114 | 115 | const resultCoordinates = findNoteCoordinates(note, coordinates); 116 | const radius = octave / 10; 117 | 118 | ctx.strokeStyle = `rgba(255,255,255,0.25)`; 119 | ctx.lineWidth = 1; 120 | 121 | ctx.beginPath(); 122 | ctx.arc( 123 | resultCoordinates.x, 124 | resultCoordinates.y, 125 | 25 * radius, 126 | 0, 127 | Math.PI * 2 128 | ); 129 | ctx.stroke(); 130 | }); 131 | 132 | // --- CONNECTING LINES --- // 133 | const lineOpacity = 0.5; 134 | const lineWidth = 2; 135 | 136 | for (let i = 0; i < notes.length - 1; i++) { 137 | // this is a stupidly overcomplicated wawy to do shit 138 | const results = Array(2) 139 | .fill(0) 140 | .map((_, j) => { 141 | const note = notes[i + j]; 142 | return findNoteCoordinates(note, coordinates); 143 | }); 144 | 145 | ctx.lineWidth = lineWidth; 146 | 147 | const color = 148 | COLORS[Math.abs(notes[i] - notes[i + 1]) % COLORS.length]; 149 | ctx.strokeStyle = `rgba(${color},${lineOpacity}`; 150 | 151 | ctx.beginPath(); 152 | 153 | ctx.moveTo(results[0].x, results[0].y); 154 | ctx.lineTo(results[1].x, results[1].y); 155 | 156 | ctx.stroke(); 157 | } 158 | }, [notes]); 159 | 160 | return ( 161 |
162 | 163 |
164 | ); 165 | }; 166 | 167 | function generateCoordinates( 168 | center: { x: number; y: number }, 169 | radius: number 170 | ): Array<{ x: number; y: number }> { 171 | const coordinates = []; 172 | for (let i = 0; i < 12; i++) { 173 | const angle = (i * Math.PI) / 6; 174 | const x = center.x + radius * Math.cos(angle); 175 | const y = center.y + radius * Math.sin(angle); 176 | coordinates.push({ x, y }); 177 | } 178 | return coordinates; 179 | } 180 | 181 | function findNoteCoordinates( 182 | note: number, 183 | coordinates: Array<{ x: number; y: number }> 184 | ) { 185 | const normalizedNote = note % 12; 186 | return coordinates.find((_, i) => (i * 7) % 12 === normalizedNote)!; 187 | } 188 | -------------------------------------------------------------------------------- /gui/bun.lockb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dvub/midiometry/9ad554d286d4eb5a4591b6eb5f998729249a9c27/gui/bun.lockb -------------------------------------------------------------------------------- /gui/eslint.config.mjs: -------------------------------------------------------------------------------- 1 | import { dirname } from "path"; 2 | import { fileURLToPath } from "url"; 3 | import { FlatCompat } from "@eslint/eslintrc"; 4 | 5 | const __filename = fileURLToPath(import.meta.url); 6 | const __dirname = dirname(__filename); 7 | 8 | const compat = new FlatCompat({ 9 | baseDirectory: __dirname, 10 | }); 11 | 12 | const eslintConfig = [ 13 | ...compat.extends("next/core-web-vitals", "next/typescript"), 14 | ]; 15 | 16 | export default eslintConfig; 17 | -------------------------------------------------------------------------------- /gui/next.config.ts: -------------------------------------------------------------------------------- 1 | import type { NextConfig } from 'next'; 2 | 3 | const nextConfig: NextConfig = { 4 | /* config options here */ 5 | output: 'export', 6 | distDir: '../assets', 7 | }; 8 | 9 | export default nextConfig; 10 | -------------------------------------------------------------------------------- /gui/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "circleof5ths", 3 | "version": "0.1.0", 4 | "private": true, 5 | "scripts": { 6 | "dev": "next dev --turbopack", 7 | "build": "next build", 8 | "start": "next start", 9 | "lint": "next lint" 10 | }, 11 | "dependencies": { 12 | "react": "^19.0.0", 13 | "react-dom": "^19.0.0", 14 | "next": "15.1.0" 15 | }, 16 | "devDependencies": { 17 | "typescript": "^5", 18 | "@types/node": "^20", 19 | "@types/react": "^19", 20 | "@types/react-dom": "^19", 21 | "postcss": "^8", 22 | "tailwindcss": "^3.4.1", 23 | "eslint": "^9", 24 | "eslint-config-next": "15.1.0", 25 | "@eslint/eslintrc": "^3" 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /gui/postcss.config.mjs: -------------------------------------------------------------------------------- 1 | /** @type {import('postcss-load-config').Config} */ 2 | const config = { 3 | plugins: { 4 | tailwindcss: {}, 5 | }, 6 | }; 7 | 8 | export default config; 9 | -------------------------------------------------------------------------------- /gui/tailwind.config.ts: -------------------------------------------------------------------------------- 1 | import type { Config } from "tailwindcss"; 2 | 3 | export default { 4 | content: [ 5 | "./pages/**/*.{js,ts,jsx,tsx,mdx}", 6 | "./components/**/*.{js,ts,jsx,tsx,mdx}", 7 | "./app/**/*.{js,ts,jsx,tsx,mdx}", 8 | ], 9 | theme: { 10 | extend: { 11 | colors: { 12 | background: "var(--background)", 13 | foreground: "var(--foreground)", 14 | }, 15 | }, 16 | }, 17 | plugins: [], 18 | } satisfies Config; 19 | -------------------------------------------------------------------------------- /gui/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "ES2017", 4 | "lib": [ 5 | "dom", 6 | "dom.iterable", 7 | "esnext" 8 | ], 9 | "allowJs": true, 10 | "skipLibCheck": true, 11 | "strict": true, 12 | "noEmit": true, 13 | "esModuleInterop": true, 14 | "module": "esnext", 15 | "moduleResolution": "bundler", 16 | "resolveJsonModule": true, 17 | "isolatedModules": true, 18 | "jsx": "preserve", 19 | "incremental": true, 20 | "plugins": [ 21 | { 22 | "name": "next" 23 | } 24 | ], 25 | "paths": { 26 | "@/*": [ 27 | "./*" 28 | ] 29 | } 30 | }, 31 | "include": [ 32 | "**/*.ts", 33 | "**/*.tsx", 34 | ".next/types/**/*.ts", 35 | // "dist/types/**/*.ts", 36 | "next-env.d.ts", 37 | // "../assets/types/**/*.ts" 38 | "dist/types/**/*.ts" 39 | ], 40 | "exclude": [ 41 | "node_modules" 42 | ] 43 | } 44 | -------------------------------------------------------------------------------- /media/image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dvub/midiometry/9ad554d286d4eb5a4591b6eb5f998729249a9c27/media/image.png -------------------------------------------------------------------------------- /src/editor.rs: -------------------------------------------------------------------------------- 1 | use std::{ 2 | path::Path, 3 | sync::{Arc, Mutex}, 4 | }; 5 | 6 | use include_dir::include_dir; 7 | use nih_plug::midi::{MidiResult, NoteEvent}; 8 | use nih_plug_webview::{ 9 | http::Response, DropData, DropEffect, EventStatus, HTMLSource, Key, MouseEvent, WebViewEditor, 10 | }; 11 | use rtrb::Consumer; 12 | use serde_json::json; 13 | 14 | pub fn create_editor(buffer: Consumer>) -> WebViewEditor { 15 | let output = Arc::new(Mutex::new(buffer)); 16 | 17 | let size = (400, 400); 18 | 19 | let src = HTMLSource::URL("http://localhost:3000".to_owned()); 20 | let mut editor = WebViewEditor::new(src, size); 21 | 22 | #[cfg(not(debug_assertions))] 23 | { 24 | editor = { 25 | let protocol_name = "assets"; 26 | 27 | #[cfg(target_os = "windows")] 28 | let url_scheme = format!("http://{}.localhost", protocol_name); 29 | 30 | #[cfg(not(target_os = "windows"))] 31 | let url_scheme = format!("{}://localhost", protocol_name); 32 | 33 | let src = HTMLSource::URL(url_scheme); 34 | let mut editor = WebViewEditor::new(src, size); 35 | 36 | editor = editor.with_custom_protocol(protocol_name.to_string(), move |req| { 37 | let path = req.uri().path(); 38 | let file = if path == "/" { 39 | "index.html" 40 | } else { 41 | &path[1..] 42 | }; 43 | 44 | let dir = include_dir!("$CARGO_MANIFEST_DIR/assets/"); 45 | 46 | // mime guess is awesome! 47 | let mime_type = 48 | mime_guess::from_ext(Path::new(file).extension().unwrap().to_str().unwrap()) 49 | .first_or_text_plain() // TODO: fix _or_... 50 | .to_string(); 51 | if let Some(result_file) = dir.get_file(file) { 52 | return Response::builder() 53 | .header("content-type", mime_type) 54 | .header("Access-Control-Allow-Origin", "*") 55 | .body(result_file.contents().into()) 56 | .map_err(Into::into); 57 | } 58 | panic!("Web asset not found.") 59 | }); 60 | editor 61 | }; 62 | } 63 | 64 | editor = editor 65 | .with_developer_mode(true) 66 | .with_keyboard_handler(move |event| { 67 | println!("keyboard event: {event:#?}"); 68 | event.key == Key::Escape 69 | }) 70 | .with_mouse_handler(|event| match event { 71 | MouseEvent::DragEntered { .. } => { 72 | println!("drag entered"); 73 | EventStatus::AcceptDrop(DropEffect::Copy) 74 | } 75 | MouseEvent::DragMoved { .. } => { 76 | println!("drag moved"); 77 | EventStatus::AcceptDrop(DropEffect::Copy) 78 | } 79 | MouseEvent::DragLeft => { 80 | println!("drag left"); 81 | EventStatus::Ignored 82 | } 83 | MouseEvent::DragDropped { data, .. } => { 84 | if let DropData::Files(files) = data { 85 | println!("drag dropped: {:?}", files); 86 | } 87 | EventStatus::AcceptDrop(DropEffect::Copy) 88 | } 89 | _ => EventStatus::Ignored, 90 | }) 91 | .with_event_loop(move |ctx, _setter, _window| { 92 | while let Ok(_value) = ctx.next_event() {} 93 | 94 | // TODO: 95 | // does unwrap need to be fixed? 96 | let mut output_buffer_lock = output.lock().unwrap(); 97 | 98 | if let Ok(raw_midi_data) = output_buffer_lock.pop() { 99 | if let Some(MidiResult::Basic(midi_data_array)) = raw_midi_data.as_midi() { 100 | ctx.send_json(json!(midi_data_array)).unwrap(); 101 | } 102 | } 103 | }); 104 | editor 105 | } 106 | -------------------------------------------------------------------------------- /src/lib.rs: -------------------------------------------------------------------------------- 1 | mod editor; 2 | 3 | use editor::create_editor; 4 | use nih_plug::prelude::*; 5 | use rtrb::{Producer, RingBuffer}; 6 | use std::sync::Arc; 7 | 8 | // This is a shortened version of the gain example with most comments removed, check out 9 | // https://github.com/robbert-vdh/nih-plug/blob/master/plugins/examples/gain/src/lib.rs to get 10 | // started 11 | 12 | struct PluginStruct { 13 | params: Arc, 14 | input_buffer: Option>>, 15 | } 16 | 17 | #[derive(Params, Default)] 18 | struct PluginStructParams {} 19 | 20 | impl Default for PluginStruct { 21 | fn default() -> Self { 22 | Self { 23 | params: Arc::new(PluginStructParams::default()), 24 | input_buffer: None, 25 | } 26 | } 27 | } 28 | 29 | impl Plugin for PluginStruct { 30 | const NAME: &'static str = "MIDIOMETRY"; 31 | const VENDOR: &'static str = "dvub"; 32 | const URL: &'static str = env!("CARGO_PKG_HOMEPAGE"); 33 | const EMAIL: &'static str = "dvubdevs@gmail.com"; 34 | 35 | const VERSION: &'static str = env!("CARGO_PKG_VERSION"); 36 | 37 | // The first audio IO layout is used as the default. The other layouts may be selected either 38 | // explicitly or automatically by the host or the user depending on the plugin API/backend. 39 | const AUDIO_IO_LAYOUTS: &'static [AudioIOLayout] = &[AudioIOLayout { 40 | main_input_channels: NonZeroU32::new(2), 41 | main_output_channels: NonZeroU32::new(2), 42 | 43 | aux_input_ports: &[], 44 | aux_output_ports: &[], 45 | 46 | // Individual ports and the layout as a whole can be named here. By default these names 47 | // are generated as needed. This layout will be called 'Stereo', while a layout with 48 | // only one input and output channel would be called 'Mono'. 49 | names: PortNames::const_default(), 50 | }]; 51 | 52 | const MIDI_INPUT: MidiConfig = MidiConfig::Basic; 53 | const MIDI_OUTPUT: MidiConfig = MidiConfig::Basic; 54 | 55 | const SAMPLE_ACCURATE_AUTOMATION: bool = true; 56 | 57 | // If the plugin can send or receive SysEx messages, it can define a type to wrap around those 58 | // messages here. The type implements the `SysExMessage` trait, which allows conversion to and 59 | // from plain byte buffers. 60 | type SysExMessage = (); 61 | // More advanced plugins can use this to run expensive background tasks. See the field's 62 | // documentation for more information. `()` means that the plugin does not have any background 63 | // tasks. 64 | type BackgroundTask = (); 65 | 66 | fn params(&self) -> Arc { 67 | self.params.clone() 68 | } 69 | 70 | fn initialize( 71 | &mut self, 72 | _audio_io_layout: &AudioIOLayout, 73 | _buffer_config: &BufferConfig, 74 | _context: &mut impl InitContext, 75 | ) -> bool { 76 | // Resize buffers and perform other potentially expensive initialization operations here. 77 | // The `reset()` function is always called right after this function. You can remove this 78 | // function if you do not need it. 79 | true 80 | } 81 | 82 | fn reset(&mut self) { 83 | // Reset buffers and envelopes here. This can be called from the audio thread and may not 84 | // allocate. You can remove this function if you do not need it. 85 | } 86 | 87 | fn process( 88 | &mut self, 89 | buffer: &mut Buffer, 90 | _aux: &mut AuxiliaryBuffers, 91 | context: &mut impl ProcessContext, 92 | ) -> ProcessStatus { 93 | for channel_samples in buffer.iter_samples() { 94 | // NOT SURE IF THIS IS NEEDED... 95 | for sample in channel_samples { 96 | *sample *= 1.0; 97 | } 98 | // TODO: 99 | // does it matter where this goes? 100 | if let Some(event) = context.next_event() { 101 | if let Some(buffer) = &mut self.input_buffer { 102 | buffer.push(event).unwrap(); 103 | } 104 | // im fairly sure this is necessary 105 | context.send_event(event); 106 | } 107 | } 108 | 109 | ProcessStatus::Normal 110 | } 111 | 112 | fn editor(&mut self, _async_executor: AsyncExecutor) -> Option> { 113 | // 114 | // TODO: 115 | // the capacity is important 116 | // this is the max number of midi events we can pass through from audio -> GUI at one time 117 | // 118 | let (producer, consumer) = RingBuffer::new(20); 119 | 120 | self.input_buffer = Some(producer); 121 | Some(Box::new(create_editor(consumer))) 122 | } 123 | } 124 | 125 | impl ClapPlugin for PluginStruct { 126 | const CLAP_ID: &'static str = "com.your-domain.midiometry"; 127 | const CLAP_DESCRIPTION: Option<&'static str> = Some("A cool plugin for vis midi input"); 128 | const CLAP_MANUAL_URL: Option<&'static str> = Some(Self::URL); 129 | const CLAP_SUPPORT_URL: Option<&'static str> = None; 130 | 131 | // Don't forget to change these features 132 | const CLAP_FEATURES: &'static [ClapFeature] = &[ClapFeature::AudioEffect, ClapFeature::Stereo]; 133 | } 134 | 135 | impl Vst3Plugin for PluginStruct { 136 | const VST3_CLASS_ID: [u8; 16] = *b"Exactly16Chars!!"; 137 | 138 | // And also don't forget to change these categories 139 | const VST3_SUBCATEGORIES: &'static [Vst3SubCategory] = 140 | &[Vst3SubCategory::Fx, Vst3SubCategory::Dynamics]; 141 | } 142 | 143 | nih_export_clap!(PluginStruct); 144 | nih_export_vst3!(PluginStruct); 145 | -------------------------------------------------------------------------------- /xtask/Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "xtask" 3 | version = "0.1.0" 4 | edition = "2021" 5 | 6 | [dependencies] 7 | nih_plug_xtask = { git = "https://github.com/robbert-vdh/nih-plug.git" } 8 | -------------------------------------------------------------------------------- /xtask/src/main.rs: -------------------------------------------------------------------------------- 1 | fn main() -> nih_plug_xtask::Result<()> { 2 | nih_plug_xtask::main() 3 | } 4 | --------------------------------------------------------------------------------