better_audio_capture

A simple Audio Capture for Flutter.

Install Started

  1. Add this to your pubspec.yaml file:
dependencies:
  better_audio_capture: ^0.0.1
  1. Install it
$ flutter packages get

Normal usage

  @override
  void initState() {
    super.initState();

    betterAudioCapture.init();
  }

  @override
  void dispose() {
    subscription?.cancel();
    betterAudioCapture.dispose();

    super.dispose();
  }

  
  CupertinoButton(
    child: Text("start capture"),
    onPressed: () async {
      bytesBuilder.clear();

      // request audio session
      final session = await AudioSession.instance;
      await session.configure(AudioSessionConfiguration(
        avAudioSessionCategory: AVAudioSessionCategory.record,
        avAudioSessionMode: AVAudioSessionMode.measurement,
        avAudioSessionRouteSharingPolicy: AVAudioSessionRouteSharingPolicy.defaultPolicy,
        avAudioSessionSetActiveOptions: AVAudioSessionSetActiveOptions.none,
      ));
      if (await session.setActive(true)) {

        betterAudioCapture.startCapture().then((Stream<Uint8List> stream) {
          subscription = stream.listen((event) {
            bytesBuilder.add(event);
          });
        });
      }
    },
  ),

  CupertinoButton(
    child: Text("stop capture"),
    onPressed: () async {
      betterAudioCapture.stopCapture();
      subscription?.cancel();

      Directory tempDir = await getTemporaryDirectory();
      File waveFile = File(tempDir.path + "/record.wav");
      if (waveFile.existsSync()) {
        waveFile.deleteSync();
      }

      IOSink waveFileSink = waveFile.openWrite();
      waveFileSink.add(betterAudioCapture.waveHeader(bytesBuilder.length));
      waveFileSink.add(bytesBuilder.takeBytes());
      await waveFileSink.close();
    },
  ),

Feature

  • x audio capture by microphone
  • x set audio stream sampleRate
  • x set audio stream channelNumber

Libraries

better_audio_capture
better_audio_capture_api
better_audio_capture_helper