English | 简体中文
Flutter Audio Record Plugin that supports Record
Pause
Resume
Stop
and provide access to audio level metering properties average power
peak power
add another_audio_recorder
to your pubspec.yaml
- Add usage description to plist
<key>NSMicrophoneUsageDescription</key>
<string>Can We Use Your Microphone Please</string>
- Then use
hasPermission
api to ask user for permission when needed
- Add
uses-permission
to./android/app/src/main/AndroidManifest.xml
in xml root level like below
...
</application>
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
...
</manifest>
- Then use
hasPermission
api to ask user for permission when needed
- AndroidX: use latest version (
0.5.x
) - Legacy Android: use old version (
0.4.9
)
Recommended API Usage: hasPermission
=> init
> start
-> (pause
<-> resume
) * n -> stop
, call init
again before start
another recording
Always check permission first(it will request permission if permission has not been set to true/false yet, otherwise it will return the result of recording permission)
bool hasPermission = await AnotherAudioRecorder.hasPermissions;
var recorder = AnotherAudioRecorder("file_path.mp4"); // .wav .aac .m4a
await recorder.initialized;
or
var recorder = AnotherAudioRecorder("file_path", audioFormat: AudioFormat.AAC); // or AudioFormat.WAV
await recorder.initialized;
var recorder = AnotherAudioRecorder("file_path", audioFormat: AudioFormat.AAC, sampleRate: 22000); // sampleRate is 16000 by default
await recorder.initialized;
Audio Format | Audio Extension List |
---|---|
AAC | .m4a .aac .mp4 |
WAV | .wav |
await recorder.start();
var recording = await recorder.current(channel: 0);
var current = await recording.current(channel: 0);
// print(current.status);
You could use a timer to access details every 50ms(simply cancel the timer when recording is done)
new Timer.periodic(tick, (Timer t) async {
var current = await recording.current(channel: 0);
// print(current.status);
setState(() {
});
});
Name | Description |
---|---|
path | String |
extension | String |
duration | Duration |
audioFormat | AudioFormat |
metering | AudioMetering |
status | RecordingStatus |
Name | Description |
---|---|
peakPower | double |
averagePower | double |
isMeteringEnabled | bool |
Unset
,Initialized
,Recording
,Paused
,Stopped
await recorder.pause();
await recorder.resume();
var result = await recorder.stop();
File file = widget.localFileSystem.file(result.path);
Please check example app using Xcode.
This project is a starting point for a Flutter plug-in package, a specialized package that includes platform-specific implementation code for Android and/or iOS.
For help getting started with Flutter, view our online documentation, which offers tutorials, samples, guidance on mobile development, and a full API reference.
- This plugin is based on the flutter_audio_recorder, because they stopped updating their plugin and answering/accepting PR's (https://github.com/rmbrone/flutter_audio_recorder)
- @hnvn - Migrate to Android embedding v2 + Support AAC codec (rmbrone#52)
- @PerrchicK - error handling instead of app crash (https://github.com/rmbrone/flutter_audio_recorder/pull/45/files)