Skip to content

Commit 61be763

Browse files
authored
Add pink noise control to use-pawdio-lab
1 parent 4c4f41c commit 61be763

File tree

1 file changed

+93
-0
lines changed

1 file changed

+93
-0
lines changed

src/ui/use-pawdio-lab.ts

Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -198,6 +198,7 @@ export function usePawdioLabController() {
198198
const [sweepRequest, setSweepRequest] = useState<SweepRequest>(defaultSweepRequest);
199199
const [sweepLastResult, setSweepLastResult] = useState<TestPayload | null>(null);
200200
const [inputMonitor, setInputMonitor] = useState<InputMonitorState>(DEFAULT_INPUT_MONITOR);
201+
const [pinkNoisePlaying, setPinkNoisePlaying] = useState(false);
201202

202203
const [balanceRequest, setBalanceRequest] = useState(defaultBalanceRequest);
203204
const [crosstalkRequest, setCrosstalkRequest] = useState<CrosstalkRequest>(defaultCrosstalkRequest);
@@ -338,6 +339,12 @@ export function usePawdioLabController() {
338339
} catch {
339340
// no-op
340341
}
342+
try {
343+
await invoke("stop_pink_noise");
344+
} catch {
345+
// no-op
346+
}
347+
setPinkNoisePlaying(false);
341348
setInputMonitor((prev) => ({
342349
...prev,
343350
monitoring: false,
@@ -405,6 +412,12 @@ export function usePawdioLabController() {
405412
} catch {
406413
// no-op
407414
}
415+
try {
416+
await invoke("stop_pink_noise");
417+
} catch {
418+
// no-op
419+
}
420+
setPinkNoisePlaying(false);
408421
setInputMonitor((prev) => ({
409422
...prev,
410423
monitoring: false,
@@ -441,6 +454,12 @@ export function usePawdioLabController() {
441454
} catch {
442455
// no-op
443456
}
457+
try {
458+
await invoke("stop_pink_noise");
459+
} catch {
460+
// no-op
461+
}
462+
setPinkNoisePlaying(false);
444463
setInputMonitor((prev) => ({
445464
...prev,
446465
monitoring: false,
@@ -495,6 +514,12 @@ export function usePawdioLabController() {
495514
} catch {
496515
// no-op
497516
}
517+
try {
518+
await invoke("stop_pink_noise");
519+
} catch {
520+
// no-op
521+
}
522+
setPinkNoisePlaying(false);
498523
setInputMonitor((prev) => ({
499524
...prev,
500525
monitoring: false,
@@ -553,6 +578,12 @@ export function usePawdioLabController() {
553578
} catch {
554579
// no-op
555580
}
581+
try {
582+
await invoke("stop_pink_noise");
583+
} catch {
584+
// no-op
585+
}
586+
setPinkNoisePlaying(false);
556587
setInputMonitor((prev) => ({
557588
...prev,
558589
monitoring: false,
@@ -600,6 +631,12 @@ export function usePawdioLabController() {
600631
} catch {
601632
// no-op
602633
}
634+
try {
635+
await invoke("stop_pink_noise");
636+
} catch {
637+
// no-op
638+
}
639+
setPinkNoisePlaying(false);
603640
setInputMonitor((prev) => ({
604641
...prev,
605642
monitoring: false,
@@ -664,6 +701,48 @@ export function usePawdioLabController() {
664701
}
665702
}
666703

704+
async function startPinkNoise() {
705+
if (running) {
706+
appendLog("[pink-noise] cannot start while a test is running");
707+
return;
708+
}
709+
try {
710+
try {
711+
await invoke("stop_pink_noise");
712+
} catch {
713+
// no-op
714+
}
715+
await new Promise<void>((resolve) => {
716+
window.setTimeout(resolve, 80);
717+
});
718+
await invoke("start_pink_noise");
719+
setPinkNoisePlaying(true);
720+
setInputMonitor((prev) => ({
721+
...prev,
722+
status: prev.monitoring ? prev.status : "Playing pink noise..."
723+
}));
724+
appendLog("[pink-noise] started");
725+
} catch (err) {
726+
setError(String(err));
727+
appendLog(`[error] ${String(err)}`);
728+
}
729+
}
730+
731+
async function stopPinkNoise() {
732+
try {
733+
await invoke("stop_pink_noise");
734+
setPinkNoisePlaying(false);
735+
setInputMonitor((prev) => ({
736+
...prev,
737+
status: prev.monitoring ? prev.status : "Pink noise stopped."
738+
}));
739+
appendLog("[pink-noise] stopped");
740+
} catch (err) {
741+
setError(String(err));
742+
appendLog(`[error] ${String(err)}`);
743+
}
744+
}
745+
667746
async function resetInputMonitorPeak() {
668747
try {
669748
await invoke("reset_input_monitor_peak");
@@ -721,6 +800,7 @@ export function usePawdioLabController() {
721800
async function stopTest() {
722801
try {
723802
await invoke("stop_test");
803+
setPinkNoisePlaying(false);
724804
setInputMonitor((prev) => ({
725805
...prev,
726806
monitoring: false,
@@ -811,6 +891,16 @@ export function usePawdioLabController() {
811891
status: "Monitor error. Check input device/sample rate."
812892
}));
813893
}
894+
if (
895+
event.payload.test === "pink_noise" &&
896+
event.payload.message.toLowerCase().includes("error")
897+
) {
898+
setPinkNoisePlaying(false);
899+
setInputMonitor((prev) => ({
900+
...prev,
901+
status: "Pink noise error. Check output device/sample rate."
902+
}));
903+
}
814904
})
815905
.then((off) => {
816906
offProgress = off;
@@ -869,8 +959,11 @@ export function usePawdioLabController() {
869959
setSweepRequest,
870960
sweepLastResult,
871961
inputMonitor,
962+
pinkNoisePlaying,
872963
startInputMonitor,
873964
stopInputMonitor,
965+
startPinkNoise,
966+
stopPinkNoise,
874967
resetInputMonitorPeak,
875968
balanceRequest,
876969
setBalanceRequest,

0 commit comments

Comments
 (0)