updateMicLevel function

void updateMicLevel(
  1. Producer? audioProducer,
  2. void updateAudioLevel(
    1. double level
    )
)

Updates the microphone audio level periodically.

This function retrieves stats from the audio producer's RTP sender every 1 second, calculates the audio level, and calls the provided updateAudioLevel callback.

Parameters:

  • audioSender: The RTCRtpSender instance for the audio producer.
  • updateAudioLevel: A callback function to handle the updated audio level.

Example usage:

updateMicLevel(audioSender, (level) {
  print('Current audio level: $level');
});

Implementation

void updateMicLevel(
    Producer? audioProducer, void Function(double level) updateAudioLevel) {
  if (audioProducer == null) {
    return;
  }

  final audioSender = audioProducer.rtpSender;

  Timer.periodic(const Duration(seconds: 1), (timer) async {
    try {
      final stats = await audioSender?.getStats();

      if (stats == null) {
        return;
      }

      for (var report in stats) {
        if (report.type == 'media-source' &&
            report.values['audioLevel'] != null) {
          final double audioLevel = report.values['audioLevel'] as double;
          final double newLevel = 127.5 + (audioLevel * 127.5);
          updateAudioLevel(newLevel);
        }
      }
    } catch (_) {
      // Handle error if showAlert is available
    }
  });
}