Skip to content

Commit 1dbb196

Browse files
Merge pull request #38 from GoXLR-on-Linux/dev-0.7.0
Dev 0.7.0
2 parents 7015d42 + 47625f4 commit 1dbb196

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

47 files changed

+2632
-514
lines changed

Cargo.lock

Lines changed: 698 additions & 81 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,5 @@ members = [
99
"types",
1010
"profile",
1111
"initialiser",
12+
"scribbles",
1213
]

ROADMAP.md

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# Roadmap
2-
*Last Updated for 0.6.0 Release*
2+
*Last Updated for 0.7.0 Release*
33

44
## Completed Features
55
* Initialisation of Devices under Linux<sup>1</sup>
@@ -16,13 +16,12 @@
1616
* The Voice Effects Panel
1717
* Full Lighting Configuration
1818
* Sampler Support<sup>4</sup>
19+
* Scribbles<sup>4</sup>
1920

2021
<sup>1</sup> Depending on how your GoXLR works, this may require a reboot.
2122
<sup>2</sup> Profiles are 'cross platform', so Windows profiles should work with the util, and vice versa
22-
<sup>3</sup> Currently only configurable via the `goxlr-client`
23-
<sup>4</sup> UI is not complete (and is messy), but all functionality is present
23+
<sup>3</sup> Currently only configurable via the `goxlr-client`
24+
<sup>4</sup> UI is not complete (and is messy), but all functionality is present
2425

2526
## Not Completed
26-
* Scribbles
27-
* Generally just a low priority, not overly complicated to achieve, but also not really that important,
28-
will arrive soon!
27+
* Lighting Animations

audio/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "goxlr-audio"
3-
version = "0.6.0"
3+
version = "0.7.0"
44
edition = "2021"
55

66
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

audio/src/recorder.rs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
use crate::audio::get_input;
22
use anyhow::Result;
3+
use ebur128::{EbuR128, Mode};
4+
use log::info;
5+
use std::fs;
36
use std::path::{Path, PathBuf};
47
use std::sync::atomic::{AtomicBool, Ordering};
58
use std::sync::Arc;
@@ -32,9 +35,14 @@ impl Recorder {
3235
// Grab the Audio Reader..
3336
let mut input = get_input(self.device.clone())?;
3437

38+
// We're going to use the normaliser to ensure that something loud was recorded.
39+
let mut ebu_r128 = EbuR128::new(2, 48000, Mode::I)?;
40+
3541
// Being the Read Loop..
3642
while !self.stop.load(Ordering::Relaxed) {
3743
if let Ok(samples) = input.read() {
44+
ebu_r128.add_frames_f32(samples.as_slice())?;
45+
3846
for sample in samples {
3947
writer.write_sample(sample)?;
4048
}
@@ -45,6 +53,14 @@ impl Recorder {
4553
writer.flush()?;
4654
writer.finalize()?;
4755

56+
// Before we do anything else, was any noise recorded?
57+
if let Ok(loudness) = ebu_r128.loudness_global() {
58+
if loudness == f64::NEG_INFINITY {
59+
// No noise received..
60+
info!("No Noise Received in recording, Cancelling.");
61+
fs::remove_file(&self.file)?;
62+
}
63+
}
4864
Ok(())
4965
}
5066

client/Cargo.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "goxlr-client"
3-
version = "0.6.0"
3+
version = "0.7.0"
44
edition = "2021"
55
build = "build.rs"
66
authors = ["Nathan Adams <[email protected]>", "Craig McLure <[email protected]>", "Lars Mühlbauer <[email protected]>"]
@@ -21,7 +21,7 @@ clap = { version = "3.0.0", features = ["derive"] }
2121
strum = { version = "0.23"}
2222
serde_json = { version = "1.0" }
2323
tokio-serde = { version = "0.8.0", features=["json"]}
24-
24+
interprocess = { version = "1.2.0", features=["tokio_support"] }
2525
[build-dependencies]
2626
clap = { version = "3.0.0", features = ["derive"] }
2727
clap_complete = "3.0.0"

client/src/cli.rs

Lines changed: 131 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ use goxlr_types::{
55
EncoderColourTargets, EqFrequencies, FaderDisplayStyle, FaderName, GateTimes, GenderStyle,
66
HardTuneSource, HardTuneStyle, InputDevice, MegaphoneStyle, MiniEqFrequencies, MuteFunction,
77
OutputDevice, PitchStyle, ReverbStyle, RobotRange, RobotStyle, SampleBank, SampleButtons,
8-
SimpleColourTargets,
8+
SamplePlayOrder, SamplePlaybackMode, SimpleColourTargets,
99
};
1010
use std::str::FromStr;
1111

@@ -143,6 +143,20 @@ fn percent_value(s: &str) -> Result<u8, String> {
143143
Ok(value)
144144
}
145145

146+
fn percent_value_float(s: &str) -> Result<f32, String> {
147+
let value = f32::from_str(s);
148+
if value.is_err() {
149+
return Err(String::from("Value must be between 0 and 100"));
150+
}
151+
152+
let value = value.unwrap();
153+
if !(0.0..=100.0).contains(&value) {
154+
return Err(String::from("Value must be between 0 and 100"));
155+
}
156+
157+
Ok(value)
158+
}
159+
146160
#[derive(Subcommand, Debug)]
147161
#[clap(setting = AppSettings::DeriveDisplayOrder)]
148162
#[clap(setting = AppSettings::ArgRequiredElseHelp)]
@@ -466,6 +480,37 @@ pub enum FaderCommands {
466480
#[clap(arg_enum)]
467481
mute_behaviour: MuteFunction,
468482
},
483+
484+
Scribbles {
485+
#[clap(subcommand)]
486+
command: Scribbles,
487+
},
488+
}
489+
#[derive(Subcommand, Debug)]
490+
pub enum Scribbles {
491+
Icon {
492+
#[clap(arg_enum)]
493+
fader: FaderName,
494+
name: String,
495+
},
496+
497+
Text {
498+
#[clap(arg_enum)]
499+
fader: FaderName,
500+
text: String,
501+
},
502+
503+
Number {
504+
#[clap(arg_enum)]
505+
fader: FaderName,
506+
text: String,
507+
},
508+
509+
Invert {
510+
#[clap(arg_enum)]
511+
fader: FaderName,
512+
inverted: bool,
513+
},
469514
}
470515

471516
#[derive(Subcommand, Debug)]
@@ -913,6 +958,15 @@ pub enum HardTune {
913958
#[derive(Subcommand, Debug)]
914959
#[clap(setting = AppSettings::DeriveDisplayOrder)]
915960
#[clap(setting = AppSettings::ArgRequiredElseHelp)]
961+
962+
/**
963+
Reference Commands:
964+
965+
RemoveSampleByIndex(SampleBank, SampleButtons, usize),
966+
PlaySampleByIndex(SampleBank, SampleButtons, usize),
967+
StopSamplePlayback(SampleBank, SampleButtons),
968+
*/
969+
916970
pub enum SamplerCommands {
917971
Add {
918972
#[clap(arg_enum)]
@@ -923,4 +977,80 @@ pub enum SamplerCommands {
923977

924978
file: String,
925979
},
980+
981+
RemoveByIndex {
982+
#[clap(arg_enum)]
983+
bank: SampleBank,
984+
985+
#[clap(arg_enum)]
986+
button: SampleButtons,
987+
988+
index: usize,
989+
},
990+
991+
PlayByIndex {
992+
#[clap(arg_enum)]
993+
bank: SampleBank,
994+
995+
#[clap(arg_enum)]
996+
button: SampleButtons,
997+
998+
index: usize,
999+
},
1000+
1001+
StopPlayback {
1002+
#[clap(arg_enum)]
1003+
bank: SampleBank,
1004+
1005+
#[clap(arg_enum)]
1006+
button: SampleButtons,
1007+
},
1008+
1009+
PlaybackMode {
1010+
#[clap(arg_enum)]
1011+
bank: SampleBank,
1012+
1013+
#[clap(arg_enum)]
1014+
button: SampleButtons,
1015+
1016+
#[clap(arg_enum)]
1017+
mode: SamplePlaybackMode,
1018+
},
1019+
1020+
PlaybackOrder {
1021+
#[clap(arg_enum)]
1022+
bank: SampleBank,
1023+
1024+
#[clap(arg_enum)]
1025+
button: SampleButtons,
1026+
1027+
#[clap(arg_enum)]
1028+
mode: SamplePlayOrder,
1029+
},
1030+
1031+
StartPercent {
1032+
#[clap(arg_enum)]
1033+
bank: SampleBank,
1034+
1035+
#[clap(arg_enum)]
1036+
button: SampleButtons,
1037+
1038+
sample_id: usize,
1039+
1040+
#[clap(parse(try_from_str=percent_value_float))]
1041+
start_position: f32,
1042+
},
1043+
1044+
StopPercent {
1045+
#[clap(arg_enum)]
1046+
bank: SampleBank,
1047+
1048+
#[clap(arg_enum)]
1049+
button: SampleButtons,
1050+
1051+
sample_id: usize,
1052+
1053+
#[clap(parse(try_from_str=percent_value_float))]
1054+
stop_position: f32,
1055+
},
9261056
}

0 commit comments

Comments
 (0)