@@ -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