record 6.0.0 copy "record: ^6.0.0" to clipboard
record: ^6.0.0 copied to clipboard

Audio recorder from microphone to file or stream with multiple codecs, bit rate and sampling rate options.

Audio recorder from microphone to a given file path or stream.

No external dependencies:

  • On Android, AudioRecord and MediaCodec or MediaRecorder.
  • On iOS and macOS, AVFoundation.
  • On Windows, MediaFoundation.
  • On web, well... your browser! (and its underlying platform).

External dependencies:

  • On linux, encoding is provided by parecord and ffmpeg. It must be installed separately.

Platform feature parity matrix #

Feature Android iOS web Windows macOS linux
pause/resume ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
amplitude(dBFS) ✔️ ✔️ ✔️ ✔️ ✔️
permission check ✔️ ✔️ ✔️ ✔️
num of channels ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
device selection ✔️ 1 / 2 (auto BT/mic) ✔️ ✔️ ✔️ ✔️
auto gain ✔️ 2 ✔️ 3 ✔️ ✔️ 3
echo cancel ✔️ 2 ✔️ 3 ✔️ ✔️ 3
noise suppresion ✔️ 2 ✔️

File #

Encoder Android iOS web Windows macOS linux
aacLc ✔️ ✔️ ? ✔️ ✔️ ✔️
aacEld ✔️ ✔️ ? ✔️
aacHe ✔️ ?
amrNb ✔️ ? ✔️
amrWb ✔️ ?
opus ✔️ ? ✔️
wav ✔️ 2 ✔️ ✔️ ✔️ ✔️ ✔️
flac ✔️ 2 ✔️ ? ✔️ ✔️ ✔️
pcm16bits ✔️ 2 ✔️ ✔️ ✔️ ✔️

?: from my testings:

Encoder Firefox Chrome based Safari
aacLc ✔️*
opus ✔️* ✔️*
wav ✔️ ✔️ ✔️
pcm16bits ✔️ ✔️ ✔️

* Sample rate output is determined by your settings in OS. Bit depth is likely 32 bits.

wav and pcm16bits are provided by the package directly.

Stream #

Encoder Android iOS web Windows macOS linux
aacLc * ✔️ 2
aacEld * ✔️ 2
aacHe * ✔️ 2
pcm16bits ✔️ 2 ✔️ ✔️ ✔️ ✔️

* AAC is streamed with raw AAC with ADTS headers, so it's directly readable through a file!

  1. Bluetooth telephony device link (SCO) is automatically done but there's no phone call management.
  2. Unsupported on legacy Android recorder.
  3. Stream mode only.

Usage #

import 'package:record/record.dart';

final record = AudioRecorder();

// Check and request permission if needed
if (await record.hasPermission()) {
  // Start recording to file
  await record.start(const RecordConfig(), path: 'aFullPath/myFile.m4a');
  // ... or to stream
  final stream = await record.startStream(const RecordConfig(encoder: AudioEncoder.pcm16bits));
}

// Stop recording...
final path = await record.stop();
// ... or cancel it (and implicitly remove file/blob).
await record.cancel();

record.dispose(); // As always, don't forget this one.
copied to clipboard

Setup, permissions and others #

Android #

Setup.

  • min SDK: 23 (amrNb/amrWb: 26, Opus: 29)

iOS #

<key>NSMicrophoneUsageDescription</key>
<string>Some message to describe why you need this permission</string>
copied to clipboard
  • min SDK: 12.0

macOS #

<key>NSMicrophoneUsageDescription</key>
<string>Some message to describe why you need this permission</string>
copied to clipboard
  • In capabilities, activate "Audio input" in debug AND release schemes.
  • or directly in *.entitlements files
<key>com.apple.security.device.audio-input</key>
<true/>
copied to clipboard
  • min SDK: 10.15
732
likes
160
points
184k
downloads

Publisher

verified publisheropenapi4j.org

Weekly Downloads

2024.09.10 - 2025.03.25

Audio recorder from microphone to file or stream with multiple codecs, bit rate and sampling rate options.

Repository (GitHub)

Documentation

API reference

License

BSD-3-Clause (license)

Dependencies

flutter, record_android, record_ios, record_linux, record_macos, record_platform_interface, record_web, record_windows, uuid

More

Packages that depend on record