record 4.3.1
record: ^4.3.1 copied to clipboard
Audio recorder from microphone to a given file path with multiple codecs, bit rate and sampling rate options.
Audio recorder from microphone to a given file path.
No external dependencies, MediaRecorder is used for Android an AVAudioRecorder for iOS.
On Windows and linux, encoding is provided by fmedia.
On macOS, AVCaptureSession (included in SDK).
On web, well... your browser!
Options #
- bit rate (where applicable)
- sampling rate
- encoder
- Number of channels
- Input device selection
Platforms #
Android #
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<!-- Optional, you'll have to check this permission by yourself. -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
min SDK: 19 (maybe higher => encoder dependent)
iOS #
<key>NSMicrophoneUsageDescription</key>
<string>We need to access to the microphone to record audio file</string>
min SDK: 11.0
macOS #
<key>NSMicrophoneUsageDescription</key>
<string>We need to access to the microphone to record audio file</string>
In capabilities, activate "Audio input" in debug AND release schemes
min SDK: 10.15
Platform feature parity matrix #
Feature | Android | iOS | web | Windows | macOS | linux |
---|---|---|---|---|---|---|
pause/resume | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
amplitude(dBFS) | ✔️ | ✔️ | ✔️ | |||
permission check | ✔️ | ✔️ | ✔️ | ✔️ | ||
num of channels | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
device selection | (auto BT/mic) | ✔️ | ✔️ | ✔️ | ✔️ |
Encoder | Android | iOS | web | Windows | macOS | linux |
---|---|---|---|---|---|---|
aacLc | ✔️ | ✔️ | ? | ✔️ | ✔️ | ✔️ |
aacEld | ✔️ | ✔️ | ? | ✔️ | ||
aacHe | ✔️ | ✔️ | ? | ✔️ | ✔️ | ✔️ |
amrNb | ✔️ | ✔️ | ? | ✔️ | ||
amrWb | ✔️ | ✔️ | ? | ✔️ | ||
opus | ✔️ | ✔️ | ? | ✔️ | ✔️ | ✔️ |
vorbisOgg | ?(optional) | ? | ✔️ | ✔️ | ||
wav | ✔️ | ? | ✔️ | ✔️ | ||
flac | ✔️ | ? | ✔️ | ✔️ | ✔️ | |
pcm8bit | ✔️ | ✔️ | ? | ✔️ | ||
pcm16bit | ✔️ | ✔️ | ? | ✔️ |
For every encoder, you should be really careful with given sampling rates. For example, opus could or could not be recorded at 44100Hz.
If a given encoder is not supported when starting recording on platform, the fallbacks are:
Platform | encoder |
---|---|
Android | AAC LC |
iOS | AAC LC |
web | OPUS OGG (not guaranteed => choice is made by the browser) |
Windows | AAC LC |
macOS | AAC LC |
linux | AAC LC |
Encoding API levels documentation #
Android #
iOS #
Usage #
// Import package
import 'package:record/record.dart';
final record = Record();
// Check and request permission
if (await record.hasPermission()) {
// Start recording
await record.start(
path: 'aFullPath/myFile.m4a',
encoder: AudioEncoder.aacLc, // by default
bitRate: 128000, // by default
sampleRate: 44100, // by default
);
}
// Get the state of the recorder
bool isRecording = await record.isRecording();
// Stop recording
await record.stop();
Warnings #
Be sure to check supported values from the given links above.
Roadmap #
- Allow to choose the capture device.
- Format vs. container accuracy.
- Bug fixes.