Skip to content

feat(native): Add audio capture module for real-time streaming #130

@noahgift

Description

@noahgift

Summary

Add aprender::native::audio module for cross-platform audio capture to support whisper-apr CLI commands (stream, command, record).

Blocking

This feature blocks the following whisper-apr CLI commands:

  • whisper-apr stream - Real-time microphone transcription
  • whisper-apr command - Voice command recognition
  • whisper-apr record - Audio capture to file

See: whisper-cli-parity.md §15.2.1

Required API

pub mod native {
    pub mod audio {
        /// List available audio input devices
        pub fn list_devices() -> Result<Vec<AudioDevice>, AudioError>;

        /// Open audio capture stream at specified sample rate
        pub fn open_capture(
            device: Option<&str>,
            sample_rate: u32,
        ) -> Result<AudioCapture, AudioError>;

        /// Audio capture handle for streaming input
        pub struct AudioCapture {
            /// Read samples into buffer, returns samples read
            pub fn read(&mut self, buffer: &mut [f32]) -> Result<usize, AudioError>;

            /// Close the capture stream
            pub fn close(self) -> Result<(), AudioError>;
        }

        /// Audio device information
        pub struct AudioDevice {
            pub id: String,
            pub name: String,
            pub sample_rates: Vec<u32>,
            pub channels: u8,
        }
    }
}

Implementation Requirements

  • Sample Rate: Must support 16kHz (Whisper requirement)
  • Cross-Platform: Linux (ALSA/PulseAudio), macOS (CoreAudio), Windows (WASAPI)
  • Low-Latency: Configurable buffer sizes for real-time streaming
  • Pure Ecosystem: No external crate dependencies (pure Rust or FFI to system APIs)

Acceptance Criteria

  • list_devices() returns available audio input devices
  • open_capture() opens capture stream at 16kHz
  • AudioCapture::read() streams audio samples in f32 format
  • Works on Linux, macOS, Windows
  • Unit tests achieve ≥80% coverage
  • No external crate dependencies

Labels

enhancement, whisper-apr-dependency

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions