audio_streamer 3.1.0 copy "audio_streamer: ^3.1.0" to clipboard
audio_streamer: ^3.1.0 copied to clipboard

Streaming of Pulse-code modulation (PCM) audio from Android and iOS

Audio Streamer #

Streaming of PCM audio from Android and iOS with a customizable sampling rate.

Permissions #

On Android add the audio recording permission to AndroidManifest.xml.

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

On iOS enable the following:

  • Capabilities > Background Modes > Audio, AirPlay and Picture in Picture
  • In the Runner Xcode project edit the Info.plist file. Add an entry for 'Privacy - Microphone Usage Description'

When editing the Info.plist file manually, the entries needed are:

<key>NSMicrophoneUsageDescription</key>
<string>YOUR DESCRIPTION</string>
<key>UIBackgroundModes</key>
<array>
  <string>audio</string>
</array>
  • Edit the Podfile to include the permission for the microphone:
post_install do |installer|
  installer.pods_project.targets.each do |target|
    flutter_additional_ios_build_settings(target)

    target.build_configurations.each do |config|
      # for more infomation: https://github.com/BaseflowIT/flutter-permission-handler/blob/master/permission_handler/ios/Classes/PermissionHandlerEnums.h
      config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= [
        '$(inherited)',
        'PERMISSION_MICROPHONE=1',]
    end
  end
end

Example #

See the file example/lib/main.dart for a fully fledged example app using the plugin. Note that on iOS the sample rate will not necessarily change, as there is only the option to set a preferred one.

  // Note that AudioStreamer works as a singleton.
  AudioStreamer streamer = AudioStreamer();
  bool _isRecording = false;
  List<double> _audio = [];

  void onAudio(List<double> buffer) async {
    _audio.addAll(buffer);
    var sampleRate = await streamer.actualSampleRate;
    double secondsRecorded = _audio.length.toDouble() / sampleRate;
    print('Max amp: ${buffer.reduce(max)}');
    print('Min amp: ${buffer.reduce(min)}');
    print('$secondsRecorded seconds recorded.');
    print('-' * 50);
  }

  void handleError(PlatformException error) {
    print(error);
  }

  void start() async {
    try {
      // start streaming using default sample rate of 44100 Hz
      streamer.start(onAudio, handleError);

      setState(() {
        _isRecording = true;
      });
    } catch (error) {
      print(error);
    }
  }

  void stop() async {
    bool stopped = await streamer.stop();
    setState(() {
      _isRecording = stopped;
    });
  }
33
likes
130
pub points
86%
popularity

Publisher

verified publishercachet.dk

Streaming of Pulse-code modulation (PCM) audio from Android and iOS

Repository (GitHub)
View/report issues

Documentation

API reference

License

MIT (LICENSE)

Dependencies

flutter, permission_handler

More

Packages that depend on audio_streamer