noise_meter

pub package

Install

Add noise_meter as a dependency in pubspec.yaml. For help on adding as a dependency, view the documentation.

On Android you need to add a permission to AndroidManifest.xml:

<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

On iOS enable the following:

  • Capabilities > Background Modes > Audio, AirPlay and Picture in Picture
  • In the Runner Xcode project edit the Info.plist file. Add an entry for 'Privacy - Microphone Usage Description'

Usage

Initalization

Keep these three variables accessible:

bool _isRecording = false;
StreamSubscription<NoiseReading> _noiseSubscription;
NoiseMeter _noiseMeter;

Start listening

The easiest thing to do is to create a new instance of the NoiseMeter every time a new recording is started.

void startRecorder() async {
  try {
    _noiseMeter = new NoiseMeter();
    _noiseSubscription = _noiseMeter.noiseStream.listen(onData);
  } on NoiseMeterException catch (exception) {
    print(exception);
  }
}

On data

When data comes in through the stream, it will be caught by the onData method, specified when the subscription was created. The incoming data points are of type NoiseReading which have a single field with a getter, namely the db value of type double.

void onData(NoiseReading noiseReading) {
  this.setState(() {
    if (!this._isRecording) {
      this._isRecording = true;
    }
  });
  /// Do someting with the noiseReading object
  print(noiseReading.toString());
}

Stop listening

To stop listening, the .cancel() method is called on the subscription object.

void stopRecorder() async {
  try {
    if (_noiseSubscription != null) {
      _noiseSubscription.cancel();
      _noiseSubscription = null;
    }
    this.setState(() {
      this._isRecording = false;
    });
  } catch (err) {
    print('stopRecorder error: $err');
  }
}

Libraries

noise_meter