record

Creator: coderz1093

Last updated:

Add to Cart

Description:

record

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 fmedia. 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
(always active?)
✔️





echo cancel
✔️ 2

✔️





noise suppresion
✔️ 2

✔️






File #



Encoder
Android
iOS
web
Windows
macOS
linux




aacLc
✔️
✔️
?
✔️
✔️
✔️


aacEld
✔️
✔️
?

✔️



aacHe
✔️

?


✔️


amrNb
✔️

?
✔️




amrWb
✔️

?





opus
✔️

✔️ 3


✔️


wav
✔️ 2
✔️
✔️
✔️
✔️
✔️


flac
✔️ 2
✔️
?
✔️
✔️
✔️


pcm16bits
✔️ 2
✔️
✔️
✔️
✔️





Question marks (?) in web column mean that the formats are supported by the plugin
but are not available in current (and tested) browsers (Chrome / Firefox).

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!

Bluetooth telephony device link (SCO) is automatically done but there's no phone call management.
Unsupported on legacy Android recorder.
Sample rate output is determined by your settings in OS. Bit depth is likely 32 bits.

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(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 #
Plugin targets API level 34 and uses Java 17. Follow Gradle setup if needed.
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<!-- Optional: Add this permission if you want to use bluetooth telephony device like headset/earbuds -->
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<!-- Optional: Add this permission if you want to save your recordings in public folders -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
copied to clipboard

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


Audio formats sample rate hints

iOS #
<key>NSMicrophoneUsageDescription</key>
<string>Some message to describe why you need this permission</string>
copied to clipboard

min SDK: 11.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

Web #
Web platform uses package web >=0.5.1 which is shipped with Flutter >=3.22.
This platform is still available with previous Flutter versions but continuous work is done from this version only.

License

For personal and professional use. You cannot resell or redistribute these repositories in their original state.

Customer Reviews

There are no reviews.