krosai_audio_client 0.1.0 copy "krosai_audio_client: ^0.1.0" to clipboard
krosai_audio_client: ^0.1.0 copied to clipboard

A Flutter package for implementing real-time audio communication using Krosai's audio infrastructure. Provides a simple interface for audio rooms, microphone control, and automatic reconnection handling.

example/lib/main.dart

import 'package:flutter/material.dart';
import 'package:krosai_audio_client/krosai_audio_client.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Krosai Audio Example',
      theme: ThemeData(primarySwatch: Colors.blue),
      home: const AudioRoomPage(),
    );
  }
}

class AudioRoomPage extends StatefulWidget {
  const AudioRoomPage({super.key});

  @override
  State<AudioRoomPage> createState() => _AudioRoomPageState();
}

class _AudioRoomPageState extends State<AudioRoomPage> {
  final _audioClient = KrosaiAudioClient();
  bool _isConnected = false;
  bool _isMicrophoneEnabled = false;
  String _connectionStatus = 'Disconnected';
  String _roomName = '';
  String _token = '';

  @override
  void dispose() {
    _audioClient.disconnect();
    super.dispose();
  }

  Future<void> _connectToRoom() async {
    if (_roomName.isEmpty || _token.isEmpty) {
      ScaffoldMessenger.of(context).showSnackBar(
        const SnackBar(content: Text('Please enter room name and token')),
      );
      return;
    }

    setState(() {
      _connectionStatus = 'Connecting...';
    });

    try {
      await _audioClient.connect(
        url: 'wss://your-krosai-server.com', // Replace with your server URL
        token: _token,
        enableMicrophone: true,
      );

      setState(() {
        _isConnected = true;
        _isMicrophoneEnabled = true;
        _connectionStatus = 'Connected';
      });
    } catch (e) {
      setState(() {
        _connectionStatus = 'Connection failed: $e';
      });
    }
  }

  Future<void> _disconnectFromRoom() async {
    try {
      await _audioClient.disconnect();
      setState(() {
        _isConnected = false;
        _isMicrophoneEnabled = false;
        _connectionStatus = 'Disconnected';
      });
    } catch (e) {
      setState(() {
        _connectionStatus = 'Disconnection failed: $e';
      });
    }
  }

  Future<void> _toggleMicrophone() async {
    try {
      if (_isMicrophoneEnabled) {
        await _audioClient.disableMicrophone();
      } else {
        await _audioClient.enableMicrophone();
      }
      setState(() {
        _isMicrophoneEnabled = !_isMicrophoneEnabled;
      });
    } catch (e) {
      ScaffoldMessenger.of(context).showSnackBar(
        SnackBar(content: Text('Failed to toggle microphone: $e')),
      );
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text('Krosai Audio Room')),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.stretch,
          children: [
            TextField(
              decoration: const InputDecoration(
                labelText: 'Room Name',
                border: OutlineInputBorder(),
              ),
              onChanged: (value) => _roomName = value,
            ),
            const SizedBox(height: 16),
            TextField(
              decoration: const InputDecoration(
                labelText: 'Token',
                border: OutlineInputBorder(),
              ),
              onChanged: (value) => _token = value,
            ),
            const SizedBox(height: 24),
            Text(
              'Status: $_connectionStatus',
              style: Theme.of(context).textTheme.titleLarge,
              textAlign: TextAlign.center,
            ),
            const SizedBox(height: 24),
            Row(
              mainAxisAlignment: MainAxisAlignment.spaceEvenly,
              children: [
                ElevatedButton(
                  onPressed:
                      _isConnected ? _disconnectFromRoom : _connectToRoom,
                  child: Text(_isConnected ? 'Disconnect' : 'Connect'),
                ),
                ElevatedButton(
                  onPressed: _isConnected ? _toggleMicrophone : null,
                  child: Text(_isMicrophoneEnabled ? 'Mute' : 'Unmute'),
                ),
              ],
            ),
            if (_isConnected) ...[
              const SizedBox(height: 24),
              const Text(
                'Connected Participants:',
                style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold),
              ),
              const SizedBox(height: 8),
              // This would be populated with actual participants
              const Text('No other participants'),
            ],
          ],
        ),
      ),
    );
  }
}
0
likes
130
points
33
downloads

Publisher

unverified uploader

Weekly Downloads

A Flutter package for implementing real-time audio communication using Krosai's audio infrastructure. Provides a simple interface for audio rooms, microphone control, and automatic reconnection handling.

Documentation

API reference

License

MIT (license)

Dependencies

flutter, livekit_client, permission_handler

More

Packages that depend on krosai_audio_client