Skip to main content

Record or stream audio input

Learn how to record or stream audio input in your Flutter app using the record package.

This recipe demonstrates how to use the record package to add audio recording and streaming capabilities to your Flutter app. Here is an overview of the steps involved in implementing audio input:

  1. Add the package dependency
  2. Initialize an AudioRecorder object
  3. Request user permission
  4. Create and configure a RecordConfig
  5. Start recording to a file
  6. Control an ongoing recording
  7. [Optional] Record to an audio stream
  8. Stop the recording
  9. Dispose of the recorder

1. Add the package dependency

#

To add package:record as a dependency, use flutter pub add:

flutter pub add record

Then run flutter pub get

2. Initialize an AudioRecorder

#

Initialize an AudioRecorder object. This is the primary object that controls the recording process.

dart
import 'package:record/record.dart';

final recorder = AudioRecorder();

3. Request user permission

#

Before recording, you need to request user permission. You might also need to add platform-specific permission configurations. Refer to the record package documentation for details.

dart
final recorder = AudioRecorder();
if (await recorder.hasPermission()) {
  // Permission granted, proceed with recording
} else {
  // Permission denied
}

4. Create and configure a recorder

#

Create and configure a RecordConfig object to specify the record settings, such as the encoder, sample rate, and channel number. You can also enable features like auto gain, echo cancellation, and noise suppression.

dart
final recordConfig = RecordConfig(
  encoder: AudioEncoder.pcm16bits,
  sampleRate: 24000,
  numChannels: 1,
  autoGain: true,
  echoCancel: true,
  noiseSuppress: true,
);

5. Start recording to a file

#

Get the desired file path and call the start method on the AudioRecorder, passing in the recordConfig and the path where the file should be stored.

dart
import 'package:path_provider/path_provider.dart'; // For getting a temporary directory

final directory = await getTemporaryDirectory();
final path = '${directory.path}/myRecord.m4a';
await recorder.start(recordConfig, path: path);
print('Recording started to: $path');

6. Control an ongoing recording

#

You can control an ongoing recording using pause(), resume(), and stop().

dart
await recorder.pause();
await recorder.resume();
await recorder.stop();

7. [Optional] Record to an audio stream

#

To stream audio, use the startStream method. This returns a stream of audio data.

dart
final stream = await recorder.startStream(recordConfig);
stream.listen((audioChunk) {
  // Process audioChunk (e.g., send to a server)
});

8. Stop recording

#

To stop the recording and get the path to the saved file, call the asynchronous stop method on the AudioRecorder.

dart
final path = await recorder.stop();
print('Recording stopped. File saved to: $path');

9. Dispose of the recorder

#

When you are finished using the AudioRecorder, remember to call its dispose method to release its resources.

dart
await recorder.dispose();

Supported formats and encodings

#

The record package supports various encoders and file formats, but support varies by platform. For the full list of supported encoders per platform, check out the package's encoding support table.

For more detailed information and the full list of supported options, visit the record package page on pub.dev or check out the record Package of the Week video.