Search packages, repositories and app categories

Package detailsv0.7.2

mic_stream

A plugin to receive raw byte streams from a device's microphone. Audio is returned as `Stream`.

AndroidiOSmacOS
30-day downloads
725
Likes
99
Pub points
130

Install package

flutter pub add mic_stream

Package Overview

Package selection guidance compiled from public package information, community data, and project usage.

The mic_stream package provides a straightforward way to access raw audio data from a device's microphone using a Dart Stream. It enables real-time audio capture on Android, iOS, and macOS, making it ideal for applications requiring low-level audio processing such as voice recognition, sound visualization, or live audio analysis. The plugin delivers audio bytes directly, allowing developers to handle encoding, filtering, or transmission as needed. With minimal setup via Flutter pub add, it integrates seamlessly into existing projects.

Use cases

  • Real-time voice processing
  • Audio visualization
  • Voice-controlled apps
  • Live audio streaming
  • Sound analysis

Key features

  • Raw byte stream output
  • Cross-platform support (Android, iOS, macOS)
  • Real-time audio capture
  • Simple Stream-based API
  • Lightweight and minimal dependencies

Suitable for

  • Developers building audio analysis tools
  • Apps requiring low-latency microphone input
  • Projects involving custom audio processing
  • Prototyping voice-enabled features
  • Mobile audio applications

Considerations

  • Requires microphone permissions on all platforms
  • Limited to raw byte data (no built-in decoding)
  • May require additional audio format handling
  • Performance depends on device capabilities
  • Background audio may be restricted on some platforms

Original README

Original README snapshot from the linked source repository. Visit the repository for the latest content.

mic_stream: 0.7.2

[Flutter Plugin] Provides a tool to get the microphone input as 8 or 16 bit PCM Stream. 32 bit and floating point PCM are experimental WIP.

About mic_stream:

As Flutter still lacks some functionality, this plugin aims to provide the possibility to easily get an audio stream from the microphone of mobile devices.

How to use:

The plugin mainly provides one method to provide a raw audio stream:

Stream<UInt8List> MicStream.microphone({options})

and a StreamTransformer to provide a Stream of individual samples (not lists of samples):

MicStream.toSampleStream

that you can use to transform your mic stream:

stream.transform(MicStream.toSampleStream)

Listening to this stream starts the audio recorder while cancelling the subscription stops the stream.

Available options are as follows:

audioSource: AudioSource      // The microphone you want to record from
sampleRate: int               // The amount of data points to record per second
channelConfig: ChannelConfig  // Mono or Stereo
audioFormat: AudioFormat      // 8 bit PCM or 16 bit PCM. Other formats are not yet supported

Some configuration options are platform dependent and can differ from the originally configured ones. You can check the real values using:

Future<int> sampleRate = await MicStream.sampleRate;
Future<int> bitDepth = await MicStream.bitDepth;
Future<int> bufferSize = await MicStream.bufferSize;
Permissions

Make sure you have microphone recording permissions enabled for your project. To do so, add this line to the AndroidManifest.xml:

<uses-permission android:name="android.permission.RECORD_AUDIO"/>

In the Info.plist:

<key>NSMicrophoneUsageDescription</key>
<string>Microphone access required</string>

You can disable the permission request dialogue by calling MicStream.shouldRequestPermission(false) This will lead to an error if no permission to record audio has been requested, though.

For MacOS:

Open macos/Runner.xcworkspace click Runner -> Signing & Capabilities -> Check "Audio Input"

Example:
// Init a new Stream
Stream<List<int>> stream = await MicStream.microphone(sampleRate: 44100);

// Start listening to the stream
StreamSubscription<List<int>> listener = stream.listen((samples) => print(samples));
// Transform the stream and print each sample individually
stream.transform(MicStream.toSampleStream).listen(print);
// Cancel the subscription
listener.cancel()

Note: This plugin is still under development, and some APIs might not be available yet. Feedback and Pull Requests are most welcome!

Categories

Dependencies

Dependency list 1 items

Source repository

Projects using this package

No data available yet.