switchAudio function

Future<void> switchAudio(
  1. SwitchAudioOptions options
)

Switches the audio input device based on user preference.

This function updates the user's default audio input device and the previous audio input device. It also calls the switchUserAudio function to perform the actual audio device switching. If the audioPreference is the same as the default audio ID, no switching is performed.

Parameters:

  • options (SwitchAudioOptions): Contains the audioPreference and parameters required for switching audio.

Example:

final switchAudioOptions = SwitchAudioOptions(
  audioPreference: "newAudioDeviceID",
  parameters: SwitchAudioParameters(
    defAudioID: "defaultAudioDeviceID",
    userDefaultAudioInputDevice: "currentAudioDeviceID",
    prevAudioInputDevice: "previousAudioDeviceID",
    updateUserDefaultAudioInputDevice: (deviceId) => setUserDefaultAudio(deviceId),
    updatePrevAudioInputDevice: (deviceId) => setPrevAudioDevice(deviceId),
    switchUserAudio: switchUserAudioFunction,
  ),
);

await switchAudio(switchAudioOptions);

Implementation

Future<void> switchAudio(SwitchAudioOptions options) async {
  final parameters = options.parameters.getUpdatedAllParams();

  String defAudioID = parameters.defAudioID;
  String userDefaultAudioInputDevice = parameters.userDefaultAudioInputDevice;
  String prevAudioInputDevice = parameters.prevAudioInputDevice;
  final void Function(String) updateUserDefaultAudioInputDevice =
      parameters.updateUserDefaultAudioInputDevice;
  final void Function(String) updatePrevAudioInputDevice =
      parameters.updatePrevAudioInputDevice;

  // mediasfu functions
  final SwitchUserAudioType switchUserAudio = parameters.switchUserAudio;

  if (options.audioPreference != defAudioID) {
    // Update previous audio input device
    prevAudioInputDevice = userDefaultAudioInputDevice;
    updatePrevAudioInputDevice(prevAudioInputDevice);

    // Update current audio input device
    userDefaultAudioInputDevice = options.audioPreference;
    updateUserDefaultAudioInputDevice(userDefaultAudioInputDevice);

    // Perform the audio switch
    if (defAudioID.isNotEmpty) {
      final optionsSwitch = SwitchUserAudioOptions(
        parameters: parameters,
        audioPreference: options.audioPreference,
      );
      await switchUserAudio(
        options: optionsSwitch,
      );
    }
  }
}