Flutter Realtime Voice AI

A Flutter package for streaming voice recording, WebSocket connectivity, and audio playback with focus on real-time voice interactions.

Features

  • 🎀 Stream Recording: Record audio from device microphones with permission handling
  • πŸ”Š Streaming Playback: Play incoming audio chunks with buffering support
  • πŸ“Š State Management: State tracking for recorder and player
  • ⚑ Real-time Processing: Optimized for low-latency voice interactions
  • πŸ“ Logging: logging for debugging and monitoring

Installation

Add this to your package's pubspec.yaml file:

dependencies:
  flutter_realtime_voice_ai: ^0.1.0

Then run:

flutter pub get

Custom Configuration

final config = StreamConfig(
  sampleRate: 16000,
  channels: 1,
  encoder: AudioEncoder.pcm16bits,
  enableNoiseSuppression: true,
  enableEchoCancellation: true,
);

final voiceService = VoiceStreamingService(config: config);

Handling Audio Chunks

// Listen to incoming audio chunks
voiceService.onAudioChunkReceived = (chunk) {
  print('Received audio chunk: ${chunk.size} bytes');
};

// Send custom audio data
await voiceService.sendAudioChunk(Uint8List.fromList(audioData));

State Management

// Monitor all states
voiceService.recorderStateStream.listen((state) {
  switch (state) {
    case VoiceRecorderState.recording:
      // Handle recording state
      break;
    case VoiceRecorderState.stopped:
      // Handle stopped state
      break;
    case VoiceRecorderState.error:
      // Handle error state
      break;
  }
});

voiceService.connectionStateStream.listen((state) {
  switch (state) {
    case ConnectionState.connected:
      // Connection established
      break;
    case ConnectionState.disconnected:
      // Connection lost
      break;
    case ConnectionState.error:
      // Connection error
      break;
  }
});

API Reference

VoiceStreamingService

The main service that coordinates all voice operations.

Constructor

VoiceStreamingService({
  StreamConfig? config,
  Logger? logger,
})

Methods

  • Future<void> initialize({required String websocketUrl, required String jwtToken, StreamConfig? config}) - Initialize the service
  • Future<void> startStreaming() - Start recording and streaming
  • Future<void> stopStreaming() - Stop recording and streaming
  • Future<bool> checkPermissions() - Check microphone permissions

Streams

  • Stream<VoiceRecorderState> recorderStateStream - Recorder state changes
  • Stream<VoicePlayerState> playerStateStream - Player state changes

Enums

VoiceRecorderState

  • idle - Not recording
  • recording - Currently recording
  • paused - Recording paused
  • error - Recording error

VoicePlayerState

  • idle - Not playing
  • buffering - Buffering audio
  • playing - Currently playing
  • paused - Playback paused
  • stopped - Playback stopped
  • error - Playback error

ConnectionState

  • disconnected - Not connected
  • streaming - Actively streaming
  • error - Connection error

Permissions

Add these permissions to your platform-specific files:

Android (android/app/src/main/AndroidManifest.xml)

<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

Platform Support

  • βœ… Android
  • βœ… iOS

Dependencies

This package depends on:

  • flutter_sound for audio playback
  • record for audio recording
  • logger for logging

Example

See the example/ directory for a complete Flutter app demonstrating all package features.

Libraries

flutter_realtime_voice_ai
A Flutter package for streaming voice recording and comprehensive audio playback with focus on real-time voice interactions.