tinyhumansai/openhuman · error

[ptt] audio start failed

Error message

[ptt] audio start failed

What it means

Starting the microphone capture for a new push-to-talk session failed: deps.audioCapture.start({sessionTag}) threw after the session claimed the active slot, played the open chime, and showed the overlay. The session is left in a broken claimed state (audio never starts), so the user sees/heard a session begin that cannot record.

Source

Thrown at app/src/services/pttService.ts:213

        startedAtMs: deps.now(),
        watchdogTimer: null,
        finalizedByWatchdog: false,
      };
      const claimed = active;

      await deps.playChime('open');
      await deps.showOverlay(true, sessionId);

      // If a concurrent onStart preempted us during the awaits, our claim was
      // replaced. Stop here — the new claim owns the slot.
      if (active !== claimed) {
        return;
      }

      try {
        await deps.audioCapture.start({ sessionTag: `ptt:${sessionId}` });
      } catch (err) {
        deps.logger.warn('[ptt] audio start failed', { sessionId, err: String(err) });
        if (active === claimed) {
          active = null;
        }
        await deps.playChime('error');
        await deps.showOverlay(false, sessionId);
        return;
      }

      // Re-check after the audio.start await.
      if (active !== claimed) {
        // Concurrent preempt replaced our claim mid-flight; we already started
        // audio for an orphan session. Best-effort cancel and exit — cancellation
        // failure here is non-actionable (the orphan session is already detached).
        try {
          await deps.audioCapture.cancel();
        } catch (_) {
          // ignore: orphan-session cleanup is best-effort
        }

View on GitHub (pinned to 7491200858)

Solutions

  1. Check the err string for the capture backend's reason — device busy, permission denied, or no device found
  2. Verify OS microphone permission has been granted to the app (the inference-gate mic-permission probe reports Unknown when compiled out)
  3. Confirm no other application holds exclusive access to the input device
  4. Restart the app if the audio subsystem is in a bad state — the active session slot is not automatically released on this failure
Defensive patterns

Strategy: try-catch

When it happens

Trigger: Thrown at app/src/services/pttService.ts:213 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of tinyhumansai/openhuman@7491200858 (2026-08-17). Data as JSON: /api/errors/0177db577b59eba0. Report an issue: GitHub.