[INFO] cloning repository https://github.com/pupgrammer/open303rs
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/pupgrammer/open303rs" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fpupgrammer%2Fopen303rs", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fpupgrammer%2Fopen303rs'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] 96786b0050bc5d4e5445f0bd0732b9fa4f62f010
[INFO] checking pupgrammer/open303rs against eca445e5ae4a6679cc27d3a09106ce245e13a5a6 for pr-162478
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fpupgrammer%2Fopen303rs" "/workspace/builds/worker-2-tc1/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-2-tc1/source'...
[INFO] [stderr] done.
[INFO] started tweaking git repo https://github.com/pupgrammer/open303rs
[INFO] finished tweaking git repo https://github.com/pupgrammer/open303rs
[INFO] tweaked toml for git repo https://github.com/pupgrammer/open303rs written to /workspace/builds/worker-2-tc1/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/pupgrammer/open303rs on toolchain eca445e5ae4a6679cc27d3a09106ce245e13a5a6
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+eca445e5ae4a6679cc27d3a09106ce245e13a5a6" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate git repo https://github.com/pupgrammer/open303rs already has a lockfile, it will not be regenerated
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+eca445e5ae4a6679cc27d3a09106ce245e13a5a6" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] [stderr]     Updating crates.io index
[INFO] [stderr]  Downloading crates ...
[INFO] [stderr]   Downloaded midly v0.5.3
[INFO] [stderr]   Downloaded midir v0.10.3
[INFO] [stderr]   Downloaded coremidi v0.8.0
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-m" "1610612736" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:8683fc1fc2eb5c9ac98e0d076ab094b2ffac7f99da555d2b6a2e27f346de2ec7" "sleep" "infinity", kill_on_drop: false }`
[INFO] [stdout] 54fc2b458d0bdae20342486fef35b736d09b96d40f3f557119ba4113f176e695
[INFO] running `Command { std: "docker" "start" "54fc2b458d0bdae20342486fef35b736d09b96d40f3f557119ba4113f176e695", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "54fc2b458d0bdae20342486fef35b736d09b96d40f3f557119ba4113f176e695", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-w" "/opt/rustwide/workdir" "--user" "0:0" "54fc2b458d0bdae20342486fef35b736d09b96d40f3f557119ba4113f176e695" "/opt/rustwide/cargo-home/bin/cargo" "+eca445e5ae4a6679cc27d3a09106ce245e13a5a6" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "54fc2b458d0bdae20342486fef35b736d09b96d40f3f557119ba4113f176e695", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-w" "/opt/rustwide/workdir" "--user" "0:0" "54fc2b458d0bdae20342486fef35b736d09b96d40f3f557119ba4113f176e695" "/opt/rustwide/cargo-home/bin/cargo" "+eca445e5ae4a6679cc27d3a09106ce245e13a5a6" "check" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }`
[INFO] [stderr]    Compiling libc v0.2.179
[INFO] [stderr]    Compiling proc-macro2 v1.0.105
[INFO] [stderr]    Compiling quote v1.0.43
[INFO] [stderr]    Compiling nix v0.30.1
[INFO] [stderr]     Checking clap_lex v0.7.6
[INFO] [stderr]    Compiling cpal v0.15.3
[INFO] [stderr]     Checking num-integer v0.1.46
[INFO] [stderr]     Checking num-complex v0.4.6
[INFO] [stderr]     Checking midly v0.5.3
[INFO] [stderr]     Checking transpose v0.2.3
[INFO] [stderr]     Checking primal-check v0.3.4
[INFO] [stderr]     Checking clap_builder v4.5.54
[INFO] [stderr]     Checking rustfft v6.4.1
[INFO] [stderr]    Compiling syn v2.0.113
[INFO] [stderr]     Checking alsa-sys v0.3.1
[INFO] [stderr]     Checking alsa v0.9.1
[INFO] [stderr]     Checking ctrlc v3.5.1
[INFO] [stderr]     Checking midir v0.10.3
[INFO] [stderr]    Compiling clap_derive v4.5.49
[INFO] [stderr]     Checking clap v4.5.54
[INFO] [stderr]     Checking open303rs v0.1.0 (/opt/rustwide/workdir)
[INFO] [stdout] warning: field `sample_rate` is never read
[INFO] [stdout]   --> src/audio.rs:30:5
[INFO] [stdout]    |
[INFO] [stdout] 27 | pub struct AudioEngine {
[INFO] [stdout]    |            ----------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 30 |     sample_rate: u32,
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `sample_rate`, `stop`, `send_midi`, and `send_midi_bytes` are never used
[INFO] [stdout]    --> src/audio.rs:52:12
[INFO] [stdout]     |
[INFO] [stdout]  33 | impl AudioEngine {
[INFO] [stdout]     | ---------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  52 |     pub fn sample_rate(&self) -> u32 {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  98 |     pub fn stop(&mut self) {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 103 |     pub fn send_midi(&self, msg: MidiMessage) {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 111 |     pub fn send_midi_bytes(&self, data: &[u8]) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_to_buffer` is never used
[INFO] [stdout]    --> src/audio.rs:149:8
[INFO] [stdout]     |
[INFO] [stdout] 149 | pub fn render_to_buffer(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `velocity` is never read
[INFO] [stdout]   --> src/midi.rs:35:38
[INFO] [stdout]    |
[INFO] [stdout] 35 |     NoteOff { channel: u8, note: u8, velocity: u8 },
[INFO] [stdout]    |     ------- field in this variant    ^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `MidiMessage` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `program` is never read
[INFO] [stdout]   --> src/midi.rs:38:34
[INFO] [stdout]    |
[INFO] [stdout] 38 |     ProgramChange { channel: u8, program: u8 },
[INFO] [stdout]    |     -------------                ^^^^^^^
[INFO] [stdout]    |     |
[INFO] [stdout]    |     field in this variant
[INFO] [stdout]    |
[INFO] [stdout]    = note: `MidiMessage` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `set_channel` and `set_pitch_bend_range` are never used
[INFO] [stdout]    --> src/midi.rs:124:12
[INFO] [stdout]     |
[INFO] [stdout] 113 | impl MidiHandler {
[INFO] [stdout]     | ---------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 124 |     pub fn set_channel(&mut self, channel: u8) {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 129 |     pub fn set_pitch_bend_range(&mut self, semitones: f64) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `BREATH` is never used
[INFO] [stdout]   --> src/midi.rs:11:15
[INFO] [stdout]    |
[INFO] [stdout] 11 |     pub const BREATH: u8 = 2;
[INFO] [stdout]    |               ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `PAN` is never used
[INFO] [stdout]   --> src/midi.rs:13:15
[INFO] [stdout]    |
[INFO] [stdout] 13 |     pub const PAN: u8 = 10;
[INFO] [stdout]    |               ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `EXPRESSION` is never used
[INFO] [stdout]   --> src/midi.rs:14:15
[INFO] [stdout]    |
[INFO] [stdout] 14 |     pub const EXPRESSION: u8 = 11;
[INFO] [stdout]    |               ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `disconnect` and `is_connected` are never used
[INFO] [stdout]    --> src/midi_device.rs:98:12
[INFO] [stdout]     |
[INFO] [stdout]  18 | impl MidiInputDevice {
[INFO] [stdout]     | -------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  98 |     pub fn disconnect(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 103 |     pub fn is_connected(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `connection` is never read
[INFO] [stdout]    --> src/midi_device.rs:110:5
[INFO] [stdout]     |
[INFO] [stdout] 109 | pub struct MidiOutputDevice {
[INFO] [stdout]     |            ---------------- field in this struct
[INFO] [stdout] 110 |     connection: Option<MidiOutputConnection>,
[INFO] [stdout]     |     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `connect`, `send`, and `disconnect` are never used
[INFO] [stdout]    --> src/midi_device.rs:114:12
[INFO] [stdout]     |
[INFO] [stdout] 113 | impl MidiOutputDevice {
[INFO] [stdout]     | --------------------- associated items in this implementation
[INFO] [stdout] 114 |     pub fn new() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 132 |     pub fn connect(&mut self, port_index: usize) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 152 |     pub fn send(&mut self, data: &[u8]) -> Result<()> {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 160 |     pub fn disconnect(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `set_sample_rate` and `end_is_reached` are never used
[INFO] [stdout]   --> src/synth/envelope.rs:31:12
[INFO] [stdout]    |
[INFO] [stdout] 17 | impl DecayEnvelope {
[INFO] [stdout]    | ------------------ methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 31 |     pub fn set_sample_rate(&mut self, sample_rate: f64) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 58 |     pub fn end_is_reached(&self, threshold: f64) -> bool {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `peak_by_vel`, `peak_by_key`, `time_scale_by_vel`, and `time_scale_by_key` are never read
[INFO] [stdout]   --> src/synth/envelope.rs:94:5
[INFO] [stdout]    |
[INFO] [stdout] 80 | pub struct AnalogEnvelope {
[INFO] [stdout]    |            -------------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 94 |     peak_by_vel: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] 95 |     peak_by_key: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] 96 |     time_scale_by_vel: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 97 |     time_scale_by_key: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]    --> src/synth/envelope.rs:164:12
[INFO] [stdout]     |
[INFO] [stdout] 122 | impl AnalogEnvelope {
[INFO] [stdout]     | ------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 164 |     pub fn set_sample_rate(&mut self, sample_rate: f64) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 174 |     pub fn set_start_level(&mut self, level: f64) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 178 |     pub fn set_start_in_decibels(&mut self, db: f64) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 182 |     pub fn set_start_in_semitones(&mut self, semitones: f64) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 186 |     pub fn set_peak_level(&mut self, level: f64) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 190 |     pub fn set_peak_in_decibels(&mut self, db: f64) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 194 |     pub fn set_peak_in_semitones(&mut self, semitones: f64) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 198 |     pub fn set_peak_level_by_vel(&mut self, peak_by_vel: f64) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 202 |     pub fn set_peak_by_vel_in_decibels(&mut self, db: f64) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 210 |     pub fn set_sustain_in_decibels(&mut self, db: f64) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 214 |     pub fn set_end_level(&mut self, level: f64) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 218 |     pub fn set_end_in_decibels(&mut self, db: f64) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 234 |     pub fn set_hold(&mut self, time_ms: f64) {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 265 |     pub fn set_time_scale(&mut self, scale: f64) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 284 |     pub fn set_peak_scale(&mut self, scale: f64) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 290 |     pub fn set_internal_state(&mut self, state: f64) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 294 |     pub fn get_attack(&self) -> f64 {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 298 |     pub fn get_decay(&self) -> f64 {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 302 |     pub fn get_sustain(&self) -> f64 {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 306 |     pub fn get_release(&self) -> f64 {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 363 |     pub fn reset(&mut self) {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `set_sample_rate` and `reset` are never used
[INFO] [stdout]   --> src/synth/filters.rs:28:12
[INFO] [stdout]    |
[INFO] [stdout] 16 | impl LeakyIntegrator {
[INFO] [stdout]    | -------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 28 |     pub fn set_sample_rate(&mut self, sample_rate: f64) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 56 |     pub fn reset(&mut self) {
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `Lowpass`, `LowShelv`, and `HighShelv` are never constructed
[INFO] [stdout]    --> src/synth/filters.rs:111:5
[INFO] [stdout]     |
[INFO] [stdout] 109 | pub enum OnePoleMode {
[INFO] [stdout]     |          ----------- variants in this enum
[INFO] [stdout] 110 |     Bypass,
[INFO] [stdout] 111 |     Lowpass,
[INFO] [stdout]     |     ^^^^^^^
[INFO] [stdout] 112 |     Highpass,
[INFO] [stdout] 113 |     LowShelv,
[INFO] [stdout]     |     ^^^^^^^^
[INFO] [stdout] 114 |     HighShelv,
[INFO] [stdout]     |     ^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `OnePoleMode` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `sample_rate` is never read
[INFO] [stdout]    --> src/synth/filters.rs:128:5
[INFO] [stdout]     |
[INFO] [stdout] 119 | pub struct OnePoleFilter {
[INFO] [stdout]     |            ------------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 128 |     sample_rate: f64,
[INFO] [stdout]     |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]    --> src/synth/filters.rs:150:12
[INFO] [stdout]     |
[INFO] [stdout] 132 | impl OnePoleFilter {
[INFO] [stdout]     | ------------------ methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 150 |     pub fn set_sample_rate(&mut self, sample_rate: f64) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 172 |     pub fn get_cutoff(&self) -> f64 {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 176 |     pub fn set_lowpass_time_constant(&mut self, tau: f64) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 180 |     pub fn set_shelving_gain(&mut self, gain: f64) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 187 |     pub fn set_shelving_gain_db(&mut self, gain_db: f64) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 191 |     pub fn set_coefficients(&mut self, b0: f64, b1: f64, a1: f64) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 197 |     pub fn set_internal_state(&mut self, x1: f64, y1: f64) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `Lowpass6`, `Highpass6`, `Highpass12`, `Bandpass`, `Peak`, and `LowShelf` are never constructed
[INFO] [stdout]    --> src/synth/filters.rs:272:5
[INFO] [stdout]     |
[INFO] [stdout] 270 | pub enum BiquadMode {
[INFO] [stdout]     |          ---------- variants in this enum
[INFO] [stdout] 271 |     Bypass,
[INFO] [stdout] 272 |     Lowpass6,
[INFO] [stdout]     |     ^^^^^^^^
[INFO] [stdout] 273 |     Lowpass12,
[INFO] [stdout] 274 |     Highpass6,
[INFO] [stdout]     |     ^^^^^^^^^
[INFO] [stdout] 275 |     Highpass12,
[INFO] [stdout]     |     ^^^^^^^^^^
[INFO] [stdout] 276 |     Bandpass,
[INFO] [stdout]     |     ^^^^^^^^
[INFO] [stdout] 277 |     Bandreject,
[INFO] [stdout] 278 |     Peak,
[INFO] [stdout]     |     ^^^^
[INFO] [stdout] 279 |     LowShelf,
[INFO] [stdout]     |     ^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `BiquadMode` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `set_sample_rate`, `get_mode`, `get_frequency`, `get_gain`, and `get_bandwidth` are never used
[INFO] [stdout]    --> src/synth/filters.rs:325:12
[INFO] [stdout]     |
[INFO] [stdout] 300 | impl BiquadFilter {
[INFO] [stdout]     | ----------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 325 |     pub fn set_sample_rate(&mut self, sample_rate: f64) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 337 |     pub fn get_mode(&self) -> BiquadMode {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 346 |     pub fn get_frequency(&self) -> f64 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 355 |     pub fn get_gain(&self) -> f64 {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 364 |     pub fn get_bandwidth(&self) -> f64 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `EULER` is never used
[INFO] [stdout]  --> src/synth/math.rs:7:11
[INFO] [stdout]   |
[INFO] [stdout] 7 | pub const EULER: f64 = std::f64::consts::E;
[INFO] [stdout]   |           ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `ONE_OVER_SQRT2` is never used
[INFO] [stdout]  --> src/synth/math.rs:8:11
[INFO] [stdout]   |
[INFO] [stdout] 8 | pub const ONE_OVER_SQRT2: f64 = 1.0 / SQRT_2;
[INFO] [stdout]   |           ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `ONE_OVER_LN10` is never used
[INFO] [stdout]  --> src/synth/math.rs:9:11
[INFO] [stdout]   |
[INFO] [stdout] 9 | pub const ONE_OVER_LN10: f64 = 1.0 / LN_10;
[INFO] [stdout]   |           ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `ONE_OVER_LN2` is never used
[INFO] [stdout]   --> src/synth/math.rs:10:11
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub const ONE_OVER_LN2: f64 = 1.0 / LN_2;
[INFO] [stdout]    |           ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `SEMITONE_FACTOR` is never used
[INFO] [stdout]   --> src/synth/math.rs:11:11
[INFO] [stdout]    |
[INFO] [stdout] 11 | pub const SEMITONE_FACTOR: f64 = 1.0594630943592952645618252949463;
[INFO] [stdout]    |           ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `EPS` is never used
[INFO] [stdout]   --> src/synth/math.rs:13:11
[INFO] [stdout]    |
[INFO] [stdout] 13 | pub const EPS: f64 = f64::EPSILON;
[INFO] [stdout]    |           ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `AMP_TO_DB_FACTOR` is never used
[INFO] [stdout]   --> src/synth/math.rs:17:7
[INFO] [stdout]    |
[INFO] [stdout] 17 | const AMP_TO_DB_FACTOR: f64 = 8.6858896380650365530225783783321;
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `FREQ_C_MINUS1` is never used
[INFO] [stdout]   --> src/synth/math.rs:23:7
[INFO] [stdout]    |
[INFO] [stdout] 23 | const FREQ_C_MINUS1: f64 = 8.1757989156437073336828122976033;
[INFO] [stdout]    |       ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `amp_to_db` is never used
[INFO] [stdout]   --> src/synth/math.rs:27:8
[INFO] [stdout]    |
[INFO] [stdout] 27 | pub fn amp_to_db(amp: f64) -> f64 {
[INFO] [stdout]    |        ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `amp_to_db_with_check` is never used
[INFO] [stdout]   --> src/synth/math.rs:34:8
[INFO] [stdout]    |
[INFO] [stdout] 34 | pub fn amp_to_db_with_check(amp: f64, low_amplitude: f64) -> f64 {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `freq_to_pitch` is never used
[INFO] [stdout]   --> src/synth/math.rs:50:8
[INFO] [stdout]    |
[INFO] [stdout] 50 | pub fn freq_to_pitch(freq: f64) -> f64 {
[INFO] [stdout]    |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `freq_to_pitch_tuned` is never used
[INFO] [stdout]   --> src/synth/math.rs:56:8
[INFO] [stdout]    |
[INFO] [stdout] 56 | pub fn freq_to_pitch_tuned(freq: f64, master_tune_a4: f64) -> f64 {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `pitch_to_freq` is never used
[INFO] [stdout]   --> src/synth/math.rs:62:8
[INFO] [stdout]    |
[INFO] [stdout] 62 | pub fn pitch_to_freq(pitch: f64) -> f64 {
[INFO] [stdout]    |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `lin_to_exp` is never used
[INFO] [stdout]   --> src/synth/math.rs:88:8
[INFO] [stdout]    |
[INFO] [stdout] 88 | pub fn lin_to_exp(input: f64, in_min: f64, in_max: f64, out_min: f64, out_max: f64) -> f64 {
[INFO] [stdout]    |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `clip` is never used
[INFO] [stdout]    --> src/synth/math.rs:102:8
[INFO] [stdout]     |
[INFO] [stdout] 102 | pub fn clip(x: f64, min: f64, max: f64) -> f64 {
[INFO] [stdout]     |        ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `tanh_approx` is never used
[INFO] [stdout]    --> src/synth/math.rs:114:8
[INFO] [stdout]     |
[INFO] [stdout] 114 | pub fn tanh_approx(x: f64) -> f64 {
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `asinh` is never used
[INFO] [stdout]    --> src/synth/math.rs:122:8
[INFO] [stdout]     |
[INFO] [stdout] 122 | pub fn asinh(x: f64) -> f64 {
[INFO] [stdout]     |        ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `exp10` is never used
[INFO] [stdout]    --> src/synth/math.rs:128:8
[INFO] [stdout]     |
[INFO] [stdout] 128 | pub fn exp10(x: f64) -> f64 {
[INFO] [stdout]     |        ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `exp2` is never used
[INFO] [stdout]    --> src/synth/math.rs:134:8
[INFO] [stdout]     |
[INFO] [stdout] 134 | pub fn exp2(x: f64) -> f64 {
[INFO] [stdout]     |        ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `log2` is never used
[INFO] [stdout]    --> src/synth/math.rs:140:8
[INFO] [stdout]     |
[INFO] [stdout] 140 | pub fn log2(x: f64) -> f64 {
[INFO] [stdout]     |        ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `sign` is never used
[INFO] [stdout]    --> src/synth/math.rs:146:8
[INFO] [stdout]     |
[INFO] [stdout] 146 | pub fn sign(x: f64) -> f64 {
[INFO] [stdout]     |        ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `beats_to_seconds` is never used
[INFO] [stdout]    --> src/synth/math.rs:158:8
[INFO] [stdout]     |
[INFO] [stdout] 158 | pub fn beats_to_seconds(beat: f64, bpm: f64) -> f64 {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `seconds_to_beats` is never used
[INFO] [stdout]    --> src/synth/math.rs:164:8
[INFO] [stdout]     |
[INFO] [stdout] 164 | pub fn seconds_to_beats(time_in_seconds: f64, bpm: f64) -> f64 {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `evaluate_quartic` is never used
[INFO] [stdout]    --> src/synth/math.rs:170:8
[INFO] [stdout]     |
[INFO] [stdout] 170 | pub fn evaluate_quartic(x: f64, a0: f64, a1: f64, a2: f64, a3: f64, a4: f64) -> f64 {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `integer_power` is never used
[INFO] [stdout]    --> src/synth/math.rs:177:8
[INFO] [stdout]     |
[INFO] [stdout] 177 | pub fn integer_power(x: f64, exponent: u32) -> f64 {
[INFO] [stdout]     |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `fold_over` is never used
[INFO] [stdout]    --> src/synth/math.rs:187:8
[INFO] [stdout]     |
[INFO] [stdout] 187 | pub fn fold_over(x: f64, min: f64, max: f64) -> f64 {
[INFO] [stdout]     |        ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `below_or_above` is never used
[INFO] [stdout]    --> src/synth/math.rs:199:8
[INFO] [stdout]     |
[INFO] [stdout] 199 | pub fn below_or_above(x: f64, low: f64, high: f64) -> f64 {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_close_to` is never used
[INFO] [stdout]    --> src/synth/math.rs:211:8
[INFO] [stdout]     |
[INFO] [stdout] 211 | pub fn is_close_to(x: f64, target_value: f64, tolerance: f64) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `next_power_of_two` is never used
[INFO] [stdout]    --> src/synth/math.rs:217:8
[INFO] [stdout]     |
[INFO] [stdout] 217 | pub fn next_power_of_two(x: usize) -> usize {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_power_of_two` is never used
[INFO] [stdout]    --> src/synth/math.rs:227:8
[INFO] [stdout]     |
[INFO] [stdout] 227 | pub fn is_power_of_two(x: usize) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `saw_wave` is never used
[INFO] [stdout]    --> src/synth/math.rs:233:8
[INFO] [stdout]     |
[INFO] [stdout] 233 | pub fn saw_wave(x: f64) -> f64 {
[INFO] [stdout]     |        ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `sqr_wave` is never used
[INFO] [stdout]    --> src/synth/math.rs:244:8
[INFO] [stdout]     |
[INFO] [stdout] 244 | pub fn sqr_wave(x: f64) -> f64 {
[INFO] [stdout]     |        ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `tri_wave` is never used
[INFO] [stdout]    --> src/synth/math.rs:255:8
[INFO] [stdout]     |
[INFO] [stdout] 255 | pub fn tri_wave(x: f64) -> f64 {
[INFO] [stdout]     |        ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `env_up_fraction`, `normal_attack`, and `accent_attack` are never read
[INFO] [stdout]   --> src/synth/open303.rs:41:5
[INFO] [stdout]    |
[INFO] [stdout] 15 | pub struct Open303 {
[INFO] [stdout]    |            ------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 41 |     env_up_fraction: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 44 |     normal_attack: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout] 45 |     accent_attack: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]    --> src/synth/open303.rs:142:12
[INFO] [stdout]     |
[INFO] [stdout]  58 | impl Open303 {
[INFO] [stdout]     | ------------ methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 142 |     pub fn set_sample_rate(&mut self, sample_rate: f64) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 195 |     pub fn set_amp_sustain(&mut self, sustain_db: f64) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 206 |     pub fn set_normal_attack(&mut self, attack_ms: f64) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 211 |     pub fn set_accent_attack(&mut self, attack_ms: f64) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 216 |     pub fn set_accent_decay(&mut self, decay_ms: f64) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 220 |     pub fn set_amp_decay(&mut self, decay_ms: f64) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 224 |     pub fn set_amp_release(&mut self, release_ms: f64) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 233 |     pub fn get_waveform(&self) -> f64 {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 237 |     pub fn get_tuning(&self) -> f64 {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 257 |     pub fn get_accent(&self) -> f64 {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 261 |     pub fn get_volume(&self) -> f64 {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `sample_rate` is never read
[INFO] [stdout]   --> src/synth/oscillator.rs:16:5
[INFO] [stdout]    |
[INFO] [stdout]  9 | pub struct BlendOscillator {
[INFO] [stdout]    |            --------------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 16 |     sample_rate: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]    --> src/synth/oscillator.rs:48:12
[INFO] [stdout]     |
[INFO] [stdout]  22 | impl BlendOscillator {
[INFO] [stdout]     | -------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  48 |     pub fn set_sample_rate(&mut self, sample_rate: f64) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  64 |     pub fn set_start_phase(&mut self, phase_degrees: f64) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  74 |     pub fn get_blend_factor(&self) -> f64 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  92 |     pub fn set_increment(&mut self, increment: f64) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  97 |     pub fn get_increment(&self) -> f64 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 141 |     pub fn set_phase(&mut self, phase_index: f64) {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 161 |     pub fn wavetable1_mut(&mut self) -> &mut MipMappedWaveTable {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 166 |     pub fn wavetable2_mut(&mut self) -> &mut MipMappedWaveTable {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 171 |     pub fn wavetable1(&self) -> &MipMappedWaveTable {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple variants are never constructed
[INFO] [stdout]   --> src/synth/teebee_filter.rs:13:5
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub enum TeeBeeFilterMode {
[INFO] [stdout]    |          ---------------- variants in this enum
[INFO] [stdout] 13 |     Flat,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 14 |     Lp6,
[INFO] [stdout]    |     ^^^
[INFO] [stdout] 15 |     Lp12,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 16 |     Lp18,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 17 |     Lp24,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 18 |     Hp6,
[INFO] [stdout]    |     ^^^
[INFO] [stdout] 19 |     Hp12,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 20 |     Hp18,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 21 |     Hp24,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 22 |     Bp12_12,
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout] 23 |     Bp6_18,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] 24 |     Bp18_6,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] 25 |     Bp6_12,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] 26 |     Bp12_6,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] 27 |     Bp6_6,
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `TeeBeeFilterMode` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `drive` and `sample_rate` are never read
[INFO] [stdout]   --> src/synth/teebee_filter.rs:55:5
[INFO] [stdout]    |
[INFO] [stdout] 32 | pub struct TeeBeeFilter {
[INFO] [stdout]    |            ------------ fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 55 |     drive: f64,
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 58 |     sample_rate: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]    --> src/synth/teebee_filter.rs:101:12
[INFO] [stdout]     |
[INFO] [stdout]  65 | impl TeeBeeFilter {
[INFO] [stdout]     | ----------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 101 |     pub fn set_sample_rate(&mut self, sample_rate: f64) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 116 |     pub fn set_cutoff_no_update(&mut self, cutoff: f64) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 143 |     pub fn set_resonance_no_update(&mut self, resonance: f64) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 156 |     pub fn set_drive(&mut self, drive_db: f64) {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 280 |     pub fn get_cutoff(&self) -> f64 {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 288 |     pub fn get_drive(&self) -> f64 {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 292 |     pub fn get_mode(&self) -> TeeBeeFilterMode {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 296 |     pub fn get_feedback_highpass_cutoff(&self) -> f64 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `Sine`, `Triangle`, `Square`, and `Saw` are never constructed
[INFO] [stdout]   --> src/synth/wavetable.rs:16:5
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub enum Waveform {
[INFO] [stdout]    |          -------- variants in this enum
[INFO] [stdout] 15 |     Silence,
[INFO] [stdout] 16 |     Sine,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 17 |     Triangle,
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] 18 |     Square,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] 19 |     Saw,
[INFO] [stdout]    |     ^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `Waveform` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]    --> src/synth/wavetable.rs:61:12
[INFO] [stdout]     |
[INFO] [stdout]  38 | impl MipMappedWaveTable {
[INFO] [stdout]     | ----------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  61 |     pub fn set_waveform_data(&mut self, data: &[f64]) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  73 |     pub fn set_tanh_shaper_drive_for_303_square(&mut self, drive_db: f64) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  78 |     pub fn set_tanh_shaper_offset_for_303_square(&mut self, offset: f64) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  83 |     pub fn set_303_square_phase_shift(&mut self, shift: f64) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  88 |     pub fn get_tanh_shaper_drive_for_303_square(&self) -> f64 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  92 |     pub fn get_tanh_shaper_offset_for_303_square(&self) -> f64 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  96 |     pub fn get_303_square_phase_shift(&self) -> f64 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 108 |     pub fn get_value_linear_phase(&self, phase_index: f64, table_index: usize) -> f64 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 114 |     pub fn table_length(&self) -> usize {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 118 |     pub fn num_tables(&self) -> usize {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `sample_rate` is never read
[INFO] [stdout]   --> src/audio.rs:30:5
[INFO] [stdout]    |
[INFO] [stdout] 27 | pub struct AudioEngine {
[INFO] [stdout]    |            ----------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 30 |     sample_rate: u32,
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `sample_rate`, `stop`, `send_midi`, and `send_midi_bytes` are never used
[INFO] [stdout]    --> src/audio.rs:52:12
[INFO] [stdout]     |
[INFO] [stdout]  33 | impl AudioEngine {
[INFO] [stdout]     | ---------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  52 |     pub fn sample_rate(&self) -> u32 {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  98 |     pub fn stop(&mut self) {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 103 |     pub fn send_midi(&self, msg: MidiMessage) {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 111 |     pub fn send_midi_bytes(&self, data: &[u8]) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_to_buffer` is never used
[INFO] [stdout]    --> src/audio.rs:149:8
[INFO] [stdout]     |
[INFO] [stdout] 149 | pub fn render_to_buffer(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `velocity` is never read
[INFO] [stdout]   --> src/midi.rs:35:38
[INFO] [stdout]    |
[INFO] [stdout] 35 |     NoteOff { channel: u8, note: u8, velocity: u8 },
[INFO] [stdout]    |     ------- field in this variant    ^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `MidiMessage` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `program` is never read
[INFO] [stdout]   --> src/midi.rs:38:34
[INFO] [stdout]    |
[INFO] [stdout] 38 |     ProgramChange { channel: u8, program: u8 },
[INFO] [stdout]    |     -------------                ^^^^^^^
[INFO] [stdout]    |     |
[INFO] [stdout]    |     field in this variant
[INFO] [stdout]    |
[INFO] [stdout]    = note: `MidiMessage` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `set_channel` and `set_pitch_bend_range` are never used
[INFO] [stdout]    --> src/midi.rs:124:12
[INFO] [stdout]     |
[INFO] [stdout] 113 | impl MidiHandler {
[INFO] [stdout]     | ---------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 124 |     pub fn set_channel(&mut self, channel: u8) {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 129 |     pub fn set_pitch_bend_range(&mut self, semitones: f64) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `BREATH` is never used
[INFO] [stdout]   --> src/midi.rs:11:15
[INFO] [stdout]    |
[INFO] [stdout] 11 |     pub const BREATH: u8 = 2;
[INFO] [stdout]    |               ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `PAN` is never used
[INFO] [stdout]   --> src/midi.rs:13:15
[INFO] [stdout]    |
[INFO] [stdout] 13 |     pub const PAN: u8 = 10;
[INFO] [stdout]    |               ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `EXPRESSION` is never used
[INFO] [stdout]   --> src/midi.rs:14:15
[INFO] [stdout]    |
[INFO] [stdout] 14 |     pub const EXPRESSION: u8 = 11;
[INFO] [stdout]    |               ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `disconnect` and `is_connected` are never used
[INFO] [stdout]    --> src/midi_device.rs:98:12
[INFO] [stdout]     |
[INFO] [stdout]  18 | impl MidiInputDevice {
[INFO] [stdout]     | -------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  98 |     pub fn disconnect(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 103 |     pub fn is_connected(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `connection` is never read
[INFO] [stdout]    --> src/midi_device.rs:110:5
[INFO] [stdout]     |
[INFO] [stdout] 109 | pub struct MidiOutputDevice {
[INFO] [stdout]     |            ---------------- field in this struct
[INFO] [stdout] 110 |     connection: Option<MidiOutputConnection>,
[INFO] [stdout]     |     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `connect`, `send`, and `disconnect` are never used
[INFO] [stdout]    --> src/midi_device.rs:114:12
[INFO] [stdout]     |
[INFO] [stdout] 113 | impl MidiOutputDevice {
[INFO] [stdout]     | --------------------- associated items in this implementation
[INFO] [stdout] 114 |     pub fn new() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 132 |     pub fn connect(&mut self, port_index: usize) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 152 |     pub fn send(&mut self, data: &[u8]) -> Result<()> {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 160 |     pub fn disconnect(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `set_sample_rate` and `end_is_reached` are never used
[INFO] [stdout]   --> src/synth/envelope.rs:31:12
[INFO] [stdout]    |
[INFO] [stdout] 17 | impl DecayEnvelope {
[INFO] [stdout]    | ------------------ methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 31 |     pub fn set_sample_rate(&mut self, sample_rate: f64) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 58 |     pub fn end_is_reached(&self, threshold: f64) -> bool {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `peak_by_vel`, `peak_by_key`, `time_scale_by_vel`, and `time_scale_by_key` are never read
[INFO] [stdout]   --> src/synth/envelope.rs:94:5
[INFO] [stdout]    |
[INFO] [stdout] 80 | pub struct AnalogEnvelope {
[INFO] [stdout]    |            -------------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 94 |     peak_by_vel: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] 95 |     peak_by_key: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] 96 |     time_scale_by_vel: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 97 |     time_scale_by_key: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]    --> src/synth/envelope.rs:164:12
[INFO] [stdout]     |
[INFO] [stdout] 122 | impl AnalogEnvelope {
[INFO] [stdout]     | ------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 164 |     pub fn set_sample_rate(&mut self, sample_rate: f64) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 174 |     pub fn set_start_level(&mut self, level: f64) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 178 |     pub fn set_start_in_decibels(&mut self, db: f64) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 182 |     pub fn set_start_in_semitones(&mut self, semitones: f64) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 186 |     pub fn set_peak_level(&mut self, level: f64) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 190 |     pub fn set_peak_in_decibels(&mut self, db: f64) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 194 |     pub fn set_peak_in_semitones(&mut self, semitones: f64) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 198 |     pub fn set_peak_level_by_vel(&mut self, peak_by_vel: f64) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 202 |     pub fn set_peak_by_vel_in_decibels(&mut self, db: f64) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 210 |     pub fn set_sustain_in_decibels(&mut self, db: f64) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 214 |     pub fn set_end_level(&mut self, level: f64) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 218 |     pub fn set_end_in_decibels(&mut self, db: f64) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 234 |     pub fn set_hold(&mut self, time_ms: f64) {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 265 |     pub fn set_time_scale(&mut self, scale: f64) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 284 |     pub fn set_peak_scale(&mut self, scale: f64) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 290 |     pub fn set_internal_state(&mut self, state: f64) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 294 |     pub fn get_attack(&self) -> f64 {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 298 |     pub fn get_decay(&self) -> f64 {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 302 |     pub fn get_sustain(&self) -> f64 {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 306 |     pub fn get_release(&self) -> f64 {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 363 |     pub fn reset(&mut self) {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `set_sample_rate` and `reset` are never used
[INFO] [stdout]   --> src/synth/filters.rs:28:12
[INFO] [stdout]    |
[INFO] [stdout] 16 | impl LeakyIntegrator {
[INFO] [stdout]    | -------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 28 |     pub fn set_sample_rate(&mut self, sample_rate: f64) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 56 |     pub fn reset(&mut self) {
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `Lowpass`, `LowShelv`, and `HighShelv` are never constructed
[INFO] [stdout]    --> src/synth/filters.rs:111:5
[INFO] [stdout]     |
[INFO] [stdout] 109 | pub enum OnePoleMode {
[INFO] [stdout]     |          ----------- variants in this enum
[INFO] [stdout] 110 |     Bypass,
[INFO] [stdout] 111 |     Lowpass,
[INFO] [stdout]     |     ^^^^^^^
[INFO] [stdout] 112 |     Highpass,
[INFO] [stdout] 113 |     LowShelv,
[INFO] [stdout]     |     ^^^^^^^^
[INFO] [stdout] 114 |     HighShelv,
[INFO] [stdout]     |     ^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `OnePoleMode` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `sample_rate` is never read
[INFO] [stdout]    --> src/synth/filters.rs:128:5
[INFO] [stdout]     |
[INFO] [stdout] 119 | pub struct OnePoleFilter {
[INFO] [stdout]     |            ------------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 128 |     sample_rate: f64,
[INFO] [stdout]     |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]    --> src/synth/filters.rs:150:12
[INFO] [stdout]     |
[INFO] [stdout] 132 | impl OnePoleFilter {
[INFO] [stdout]     | ------------------ methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 150 |     pub fn set_sample_rate(&mut self, sample_rate: f64) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 172 |     pub fn get_cutoff(&self) -> f64 {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 176 |     pub fn set_lowpass_time_constant(&mut self, tau: f64) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 180 |     pub fn set_shelving_gain(&mut self, gain: f64) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 187 |     pub fn set_shelving_gain_db(&mut self, gain_db: f64) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 191 |     pub fn set_coefficients(&mut self, b0: f64, b1: f64, a1: f64) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 197 |     pub fn set_internal_state(&mut self, x1: f64, y1: f64) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `Lowpass6`, `Highpass6`, `Highpass12`, `Bandpass`, `Peak`, and `LowShelf` are never constructed
[INFO] [stdout]    --> src/synth/filters.rs:272:5
[INFO] [stdout]     |
[INFO] [stdout] 270 | pub enum BiquadMode {
[INFO] [stdout]     |          ---------- variants in this enum
[INFO] [stdout] 271 |     Bypass,
[INFO] [stdout] 272 |     Lowpass6,
[INFO] [stdout]     |     ^^^^^^^^
[INFO] [stdout] 273 |     Lowpass12,
[INFO] [stdout] 274 |     Highpass6,
[INFO] [stdout]     |     ^^^^^^^^^
[INFO] [stdout] 275 |     Highpass12,
[INFO] [stdout]     |     ^^^^^^^^^^
[INFO] [stdout] 276 |     Bandpass,
[INFO] [stdout]     |     ^^^^^^^^
[INFO] [stdout] 277 |     Bandreject,
[INFO] [stdout] 278 |     Peak,
[INFO] [stdout]     |     ^^^^
[INFO] [stdout] 279 |     LowShelf,
[INFO] [stdout]     |     ^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `BiquadMode` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `set_sample_rate`, `get_mode`, `get_frequency`, `get_gain`, and `get_bandwidth` are never used
[INFO] [stdout]    --> src/synth/filters.rs:325:12
[INFO] [stdout]     |
[INFO] [stdout] 300 | impl BiquadFilter {
[INFO] [stdout]     | ----------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 325 |     pub fn set_sample_rate(&mut self, sample_rate: f64) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 337 |     pub fn get_mode(&self) -> BiquadMode {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 346 |     pub fn get_frequency(&self) -> f64 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 355 |     pub fn get_gain(&self) -> f64 {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 364 |     pub fn get_bandwidth(&self) -> f64 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `EULER` is never used
[INFO] [stdout]  --> src/synth/math.rs:7:11
[INFO] [stdout]   |
[INFO] [stdout] 7 | pub const EULER: f64 = std::f64::consts::E;
[INFO] [stdout]   |           ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `ONE_OVER_SQRT2` is never used
[INFO] [stdout]  --> src/synth/math.rs:8:11
[INFO] [stdout]   |
[INFO] [stdout] 8 | pub const ONE_OVER_SQRT2: f64 = 1.0 / SQRT_2;
[INFO] [stdout]   |           ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `ONE_OVER_LN10` is never used
[INFO] [stdout]  --> src/synth/math.rs:9:11
[INFO] [stdout]   |
[INFO] [stdout] 9 | pub const ONE_OVER_LN10: f64 = 1.0 / LN_10;
[INFO] [stdout]   |           ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `ONE_OVER_LN2` is never used
[INFO] [stdout]   --> src/synth/math.rs:10:11
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub const ONE_OVER_LN2: f64 = 1.0 / LN_2;
[INFO] [stdout]    |           ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `SEMITONE_FACTOR` is never used
[INFO] [stdout]   --> src/synth/math.rs:11:11
[INFO] [stdout]    |
[INFO] [stdout] 11 | pub const SEMITONE_FACTOR: f64 = 1.0594630943592952645618252949463;
[INFO] [stdout]    |           ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `EPS` is never used
[INFO] [stdout]   --> src/synth/math.rs:13:11
[INFO] [stdout]    |
[INFO] [stdout] 13 | pub const EPS: f64 = f64::EPSILON;
[INFO] [stdout]    |           ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `AMP_TO_DB_FACTOR` is never used
[INFO] [stdout]   --> src/synth/math.rs:17:7
[INFO] [stdout]    |
[INFO] [stdout] 17 | const AMP_TO_DB_FACTOR: f64 = 8.6858896380650365530225783783321;
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `FREQ_C_MINUS1` is never used
[INFO] [stdout]   --> src/synth/math.rs:23:7
[INFO] [stdout]    |
[INFO] [stdout] 23 | const FREQ_C_MINUS1: f64 = 8.1757989156437073336828122976033;
[INFO] [stdout]    |       ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `amp_to_db` is never used
[INFO] [stdout]   --> src/synth/math.rs:27:8
[INFO] [stdout]    |
[INFO] [stdout] 27 | pub fn amp_to_db(amp: f64) -> f64 {
[INFO] [stdout]    |        ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `amp_to_db_with_check` is never used
[INFO] [stdout]   --> src/synth/math.rs:34:8
[INFO] [stdout]    |
[INFO] [stdout] 34 | pub fn amp_to_db_with_check(amp: f64, low_amplitude: f64) -> f64 {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `freq_to_pitch` is never used
[INFO] [stdout]   --> src/synth/math.rs:50:8
[INFO] [stdout]    |
[INFO] [stdout] 50 | pub fn freq_to_pitch(freq: f64) -> f64 {
[INFO] [stdout]    |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `freq_to_pitch_tuned` is never used
[INFO] [stdout]   --> src/synth/math.rs:56:8
[INFO] [stdout]    |
[INFO] [stdout] 56 | pub fn freq_to_pitch_tuned(freq: f64, master_tune_a4: f64) -> f64 {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `pitch_to_freq` is never used
[INFO] [stdout]   --> src/synth/math.rs:62:8
[INFO] [stdout]    |
[INFO] [stdout] 62 | pub fn pitch_to_freq(pitch: f64) -> f64 {
[INFO] [stdout]    |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `lin_to_exp` is never used
[INFO] [stdout]   --> src/synth/math.rs:88:8
[INFO] [stdout]    |
[INFO] [stdout] 88 | pub fn lin_to_exp(input: f64, in_min: f64, in_max: f64, out_min: f64, out_max: f64) -> f64 {
[INFO] [stdout]    |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `clip` is never used
[INFO] [stdout]    --> src/synth/math.rs:102:8
[INFO] [stdout]     |
[INFO] [stdout] 102 | pub fn clip(x: f64, min: f64, max: f64) -> f64 {
[INFO] [stdout]     |        ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `tanh_approx` is never used
[INFO] [stdout]    --> src/synth/math.rs:114:8
[INFO] [stdout]     |
[INFO] [stdout] 114 | pub fn tanh_approx(x: f64) -> f64 {
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `asinh` is never used
[INFO] [stdout]    --> src/synth/math.rs:122:8
[INFO] [stdout]     |
[INFO] [stdout] 122 | pub fn asinh(x: f64) -> f64 {
[INFO] [stdout]     |        ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `exp10` is never used
[INFO] [stdout]    --> src/synth/math.rs:128:8
[INFO] [stdout]     |
[INFO] [stdout] 128 | pub fn exp10(x: f64) -> f64 {
[INFO] [stdout]     |        ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `exp2` is never used
[INFO] [stdout]    --> src/synth/math.rs:134:8
[INFO] [stdout]     |
[INFO] [stdout] 134 | pub fn exp2(x: f64) -> f64 {
[INFO] [stdout]     |        ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `log2` is never used
[INFO] [stdout]    --> src/synth/math.rs:140:8
[INFO] [stdout]     |
[INFO] [stdout] 140 | pub fn log2(x: f64) -> f64 {
[INFO] [stdout]     |        ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `sign` is never used
[INFO] [stdout]    --> src/synth/math.rs:146:8
[INFO] [stdout]     |
[INFO] [stdout] 146 | pub fn sign(x: f64) -> f64 {
[INFO] [stdout]     |        ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `beats_to_seconds` is never used
[INFO] [stdout]    --> src/synth/math.rs:158:8
[INFO] [stdout]     |
[INFO] [stdout] 158 | pub fn beats_to_seconds(beat: f64, bpm: f64) -> f64 {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `seconds_to_beats` is never used
[INFO] [stdout]    --> src/synth/math.rs:164:8
[INFO] [stdout]     |
[INFO] [stdout] 164 | pub fn seconds_to_beats(time_in_seconds: f64, bpm: f64) -> f64 {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `evaluate_quartic` is never used
[INFO] [stdout]    --> src/synth/math.rs:170:8
[INFO] [stdout]     |
[INFO] [stdout] 170 | pub fn evaluate_quartic(x: f64, a0: f64, a1: f64, a2: f64, a3: f64, a4: f64) -> f64 {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `integer_power` is never used
[INFO] [stdout]    --> src/synth/math.rs:177:8
[INFO] [stdout]     |
[INFO] [stdout] 177 | pub fn integer_power(x: f64, exponent: u32) -> f64 {
[INFO] [stdout]     |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `fold_over` is never used
[INFO] [stdout]    --> src/synth/math.rs:187:8
[INFO] [stdout]     |
[INFO] [stdout] 187 | pub fn fold_over(x: f64, min: f64, max: f64) -> f64 {
[INFO] [stdout]     |        ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `below_or_above` is never used
[INFO] [stdout]    --> src/synth/math.rs:199:8
[INFO] [stdout]     |
[INFO] [stdout] 199 | pub fn below_or_above(x: f64, low: f64, high: f64) -> f64 {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_close_to` is never used
[INFO] [stdout]    --> src/synth/math.rs:211:8
[INFO] [stdout]     |
[INFO] [stdout] 211 | pub fn is_close_to(x: f64, target_value: f64, tolerance: f64) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `next_power_of_two` is never used
[INFO] [stdout]    --> src/synth/math.rs:217:8
[INFO] [stdout]     |
[INFO] [stdout] 217 | pub fn next_power_of_two(x: usize) -> usize {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_power_of_two` is never used
[INFO] [stdout]    --> src/synth/math.rs:227:8
[INFO] [stdout]     |
[INFO] [stdout] 227 | pub fn is_power_of_two(x: usize) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `saw_wave` is never used
[INFO] [stdout]    --> src/synth/math.rs:233:8
[INFO] [stdout]     |
[INFO] [stdout] 233 | pub fn saw_wave(x: f64) -> f64 {
[INFO] [stdout]     |        ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `sqr_wave` is never used
[INFO] [stdout]    --> src/synth/math.rs:244:8
[INFO] [stdout]     |
[INFO] [stdout] 244 | pub fn sqr_wave(x: f64) -> f64 {
[INFO] [stdout]     |        ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `tri_wave` is never used
[INFO] [stdout]    --> src/synth/math.rs:255:8
[INFO] [stdout]     |
[INFO] [stdout] 255 | pub fn tri_wave(x: f64) -> f64 {
[INFO] [stdout]     |        ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `env_up_fraction`, `normal_attack`, and `accent_attack` are never read
[INFO] [stdout]   --> src/synth/open303.rs:41:5
[INFO] [stdout]    |
[INFO] [stdout] 15 | pub struct Open303 {
[INFO] [stdout]    |            ------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 41 |     env_up_fraction: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 44 |     normal_attack: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout] 45 |     accent_attack: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]    --> src/synth/open303.rs:142:12
[INFO] [stdout]     |
[INFO] [stdout]  58 | impl Open303 {
[INFO] [stdout]     | ------------ methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 142 |     pub fn set_sample_rate(&mut self, sample_rate: f64) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 195 |     pub fn set_amp_sustain(&mut self, sustain_db: f64) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 206 |     pub fn set_normal_attack(&mut self, attack_ms: f64) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 211 |     pub fn set_accent_attack(&mut self, attack_ms: f64) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 216 |     pub fn set_accent_decay(&mut self, decay_ms: f64) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 220 |     pub fn set_amp_decay(&mut self, decay_ms: f64) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 224 |     pub fn set_amp_release(&mut self, release_ms: f64) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 233 |     pub fn get_waveform(&self) -> f64 {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 237 |     pub fn get_tuning(&self) -> f64 {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 257 |     pub fn get_accent(&self) -> f64 {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 261 |     pub fn get_volume(&self) -> f64 {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `sample_rate` is never read
[INFO] [stdout]   --> src/synth/oscillator.rs:16:5
[INFO] [stdout]    |
[INFO] [stdout]  9 | pub struct BlendOscillator {
[INFO] [stdout]    |            --------------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 16 |     sample_rate: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]    --> src/synth/oscillator.rs:48:12
[INFO] [stdout]     |
[INFO] [stdout]  22 | impl BlendOscillator {
[INFO] [stdout]     | -------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  48 |     pub fn set_sample_rate(&mut self, sample_rate: f64) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  64 |     pub fn set_start_phase(&mut self, phase_degrees: f64) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  74 |     pub fn get_blend_factor(&self) -> f64 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  92 |     pub fn set_increment(&mut self, increment: f64) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  97 |     pub fn get_increment(&self) -> f64 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 141 |     pub fn set_phase(&mut self, phase_index: f64) {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 161 |     pub fn wavetable1_mut(&mut self) -> &mut MipMappedWaveTable {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 166 |     pub fn wavetable2_mut(&mut self) -> &mut MipMappedWaveTable {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 171 |     pub fn wavetable1(&self) -> &MipMappedWaveTable {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple variants are never constructed
[INFO] [stdout]   --> src/synth/teebee_filter.rs:13:5
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub enum TeeBeeFilterMode {
[INFO] [stdout]    |          ---------------- variants in this enum
[INFO] [stdout] 13 |     Flat,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 14 |     Lp6,
[INFO] [stdout]    |     ^^^
[INFO] [stdout] 15 |     Lp12,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 16 |     Lp18,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 17 |     Lp24,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 18 |     Hp6,
[INFO] [stdout]    |     ^^^
[INFO] [stdout] 19 |     Hp12,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 20 |     Hp18,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 21 |     Hp24,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 22 |     Bp12_12,
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout] 23 |     Bp6_18,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] 24 |     Bp18_6,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] 25 |     Bp6_12,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] 26 |     Bp12_6,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] 27 |     Bp6_6,
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `TeeBeeFilterMode` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `drive` and `sample_rate` are never read
[INFO] [stdout]   --> src/synth/teebee_filter.rs:55:5
[INFO] [stdout]    |
[INFO] [stdout] 32 | pub struct TeeBeeFilter {
[INFO] [stdout]    |            ------------ fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 55 |     drive: f64,
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 58 |     sample_rate: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]    --> src/synth/teebee_filter.rs:101:12
[INFO] [stdout]     |
[INFO] [stdout]  65 | impl TeeBeeFilter {
[INFO] [stdout]     | ----------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 101 |     pub fn set_sample_rate(&mut self, sample_rate: f64) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 116 |     pub fn set_cutoff_no_update(&mut self, cutoff: f64) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 143 |     pub fn set_resonance_no_update(&mut self, resonance: f64) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 156 |     pub fn set_drive(&mut self, drive_db: f64) {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 280 |     pub fn get_cutoff(&self) -> f64 {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 288 |     pub fn get_drive(&self) -> f64 {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 292 |     pub fn get_mode(&self) -> TeeBeeFilterMode {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 296 |     pub fn get_feedback_highpass_cutoff(&self) -> f64 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `Sine`, `Triangle`, `Square`, and `Saw` are never constructed
[INFO] [stdout]   --> src/synth/wavetable.rs:16:5
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub enum Waveform {
[INFO] [stdout]    |          -------- variants in this enum
[INFO] [stdout] 15 |     Silence,
[INFO] [stdout] 16 |     Sine,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 17 |     Triangle,
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] 18 |     Square,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] 19 |     Saw,
[INFO] [stdout]    |     ^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `Waveform` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]    --> src/synth/wavetable.rs:61:12
[INFO] [stdout]     |
[INFO] [stdout]  38 | impl MipMappedWaveTable {
[INFO] [stdout]     | ----------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  61 |     pub fn set_waveform_data(&mut self, data: &[f64]) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  73 |     pub fn set_tanh_shaper_drive_for_303_square(&mut self, drive_db: f64) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  78 |     pub fn set_tanh_shaper_offset_for_303_square(&mut self, offset: f64) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  83 |     pub fn set_303_square_phase_shift(&mut self, shift: f64) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  88 |     pub fn get_tanh_shaper_drive_for_303_square(&self) -> f64 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  92 |     pub fn get_tanh_shaper_offset_for_303_square(&self) -> f64 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  96 |     pub fn get_303_square_phase_shift(&self) -> f64 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 108 |     pub fn get_value_linear_phase(&self, phase_index: f64, table_index: usize) -> f64 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 114 |     pub fn table_length(&self) -> usize {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 118 |     pub fn num_tables(&self) -> usize {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 10.69s
[INFO] [stderr] warning: the following packages contain code that will be rejected by a future version of Rust: nix v0.30.1
[INFO] [stderr] note: to see what the problems were, use the option `--future-incompat-report`, or run `cargo report future-incompatibilities --id 5`
[INFO] running `Command { std: "docker" "inspect" "54fc2b458d0bdae20342486fef35b736d09b96d40f3f557119ba4113f176e695", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "54fc2b458d0bdae20342486fef35b736d09b96d40f3f557119ba4113f176e695", kill_on_drop: false }`
[INFO] [stdout] 54fc2b458d0bdae20342486fef35b736d09b96d40f3f557119ba4113f176e695
