setAudioEnabled method
- bool enabled
Enables/disables local audio stream based on enabled.
Implementation
Future<void> setAudioEnabled(bool enabled) async {
Log.debug('setAudioEnabled($enabled)', '$runtimeType');
switch (audioState.value) {
case LocalTrackState.disabled:
case LocalTrackState.disabling:
if (enabled) {
audioState.value = LocalTrackState.enabling;
try {
if (!hasAudio) {
await _room?.enableAudio(MediaSourceKind.device);
await _updateSettings(
audio: true,
audioDevice: audioDevice.value,
);
}
await _room?.unmuteAudio(MediaSourceKind.device);
audioState.value = LocalTrackState.enabled;
} on MediaStateTransitionException catch (_) {
// No-op.
} on LocalMediaInitException catch (e) {
audioState.value = LocalTrackState.disabled;
if (e.message().contains('Permission denied') ||
e.message().contains('NotAllowedError')) {
_notifications.add(MicrophonePermissionDeniedNotification());
} else {
_notifications.add(MicrophoneDeviceFailedNotification());
Log.warning('unmuteAudio() call failed with $e', '$runtimeType');
rethrow;
}
} catch (e) {
audioState.value = LocalTrackState.disabled;
_notifications.add(MicrophoneDeviceFailedNotification());
Log.warning('unmuteAudio() call failed with $e', '$runtimeType');
rethrow;
}
}
break;
case LocalTrackState.enabled:
case LocalTrackState.enabling:
if (!enabled) {
audioState.value = LocalTrackState.disabling;
try {
await _room?.muteAudio(MediaSourceKind.device);
audioState.value = LocalTrackState.disabled;
} on MediaStateTransitionException catch (_) {
// No-op.
} catch (e) {
audioState.value = LocalTrackState.enabled;
addError('muteAudio() call failed with $e');
rethrow;
}
}
break;
}
}