getAvailableMicrophones method

  1. @override
Future<List<AudioInputDevice>> getAvailableMicrophones()
override

Gets the list of available microphone / audio input devices.

Implementation

@override
Future<List<AudioInputDevice>> getAvailableMicrophones() async {
  final List<AudioInputDevice> devices = [];
  try {
    final mediaDevices = web.window.navigator.mediaDevices;
    final jsDevices = await mediaDevices.enumerateDevices().toDart;
    final count = jsDevices.length;
    for (var i = 0; i < count; i++) {
      final device = jsDevices[i];
      if (device.kind == 'audioinput') {
        final id = device.deviceId;
        final label = device.label.isNotEmpty
            ? device.label
            : 'Microphone ${devices.length + 1}';
        devices.add(
          AudioInputDevice(
            id: id,
            name: label,
            type: AudioInputType.builtInMic,
            isSelected: devices.isEmpty,
          ),
        );
      }
    }
  } catch (_) {}

  if (devices.isEmpty) {
    devices.add(
      const AudioInputDevice(
        id: 'default',
        name: 'Default Microphone',
        type: AudioInputType.builtInMic,
        isSelected: true,
      ),
    );
  }

  return devices;
}