cjpais/Handy · error · std::io::Error

NotFound

NotFound

Error message

No input device found

What it means

Error "No input device found" thrown in cjpais/Handy.

Source

Thrown at src-tauri/src/audio_toolkit/audio/recorder.rs:172

                return Ok(()); // already open
            }
            // The worker exited on its own (see `is_capture_worker_dead`). Reap
            // it so we rebuild the stream below instead of handing the caller
            // back a recorder whose channels are already closed.
            log::warn!("Capture worker exited; rebuilding microphone stream");
            let _ = self.close();
        }

        let (sample_tx, sample_rx) = mpsc::channel::<AudioChunk>();
        let (cmd_tx, cmd_rx) = mpsc::channel::<Cmd>();
        let (init_tx, init_rx) = mpsc::sync_channel::<Result<(), String>>(1);

        let host = crate::audio_toolkit::get_cpal_host();
        let device = match device {
            Some(dev) => dev,
            None => host
                .default_input_device()
                .ok_or_else(|| Error::new(std::io::ErrorKind::NotFound, "No input device found"))?,
        };

        let thread_device = device.clone();
        let vad = self.vad.clone();
        // Move the optional level callback into the worker thread
        let level_cb = self.level_cb.clone();
        // Move the optional real-time audio frame callback into the worker thread
        let audio_cb = self.audio_cb.clone();
        let selected_channel = self.selected_channel;
        let config_cache = Arc::clone(&self.config_cache);

        let worker = std::thread::spawn(move || {
            let stop_flag = Arc::new(AtomicBool::new(false));
            let stop_flag_for_stream = stop_flag.clone();
            let init_result = (|| -> Result<(cpal::Stream, u32), String> {
                let config_started = Instant::now();
                let device_name = thread_device.name().unwrap_or_default();
                let cached_config = config_cache

View on GitHub (pinned to 98a4d80cce)

When it happens

Trigger: Thrown at src-tauri/src/audio_toolkit/audio/recorder.rs:172 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of cjpais/Handy@98a4d80cce (2026-08-16). Data as JSON: /api/errors/81d479b8fdfbee0f. Report an issue: GitHub.