Flutter plugin for sound. Audio recorder and player.

Last update: May 5, 2022

Sounds

Sounds is a Flutter package allowing you to play and record audio for both the android and ios platforms.

Sounds provides both a high level API and widgets for:

  • play audio
  • record audio

Sounds can be used to play a beep from an asset all the way up to implementing a complete media player.

The API is designed so you can use the supplied widgets or roll your own. The Sounds package supports playback from:

  • Assets
  • Files
  • URL

Documentation:

The primary documentation for Sounds is now hosted on gitbooks

pub version

Overview

The Sounds package is a Flutter package that provides audio recording and playback functionality for both the android and ios platforms.

Sounds provides both a high level api and widgets for recording and playback.

The api is designed so you can use the supplied widgets or roll your own.

The Sounds package supports playback from:

  • Assets
  • Files
  • URL
  • Native Streams (with sync).

Features

The Sounds package includes the following features

  • Play audio without any UI
  • Play audio using the built in SoundPlayerUI Widget.
  • Play audio using the OSs' Media Player
  • Roll your own UI utilising the Sounds api.
  • Record audio without any UI
  • Record audio using the builtin SoundRecorderUI Widget.
  • Roll your own Recording UI utilising the Sounds api.
  • Support for releasing/resuming resources when the app pauses/resumes.

The core classes are:

Class Usage
SoundPlayerUI A Flutter Widget Audio Player
SoundRecorderUI A Flutter Widget for recording
QuickPlay Plays an audio file without a UI.
SoudPlayer.noUI API to playback audio with fine grained control
SoundPlayer.withShadeUI API to playback audio using the OS's Shade (media player)
SoundRecorder API to record audio with fine grained control.
Track Container for audio used by all of the above classes.
MediaFormat Defines what MediaFormat is being used.
RecorderPlaybackController Flutter InheritedWidget used to co-ordinate Recording and Playback in a single UI.
Albums Play a sequence of Tracks via the OS's Shade (media player)

Help

Audio is a fundemental building block needed by almost every flutter project.

I'm looking to make Sounds the go to project for Flutter Audio with support for each of the Flutter supported platforms.

Sounds is a large and complex project which requires me to maintain multiple hardware platforms and test environments.

I greatly appreciate any contributions to the project which can be as simiple as providing feedback on the api or documentation.

See the Contributing section below for details.

Sponsorship

If you can't help out by directly contributing code maybe you could Sponsor me so I can spend more time improving Sounds.

Sounds is a large commitment and I'm maintaining several other dart related projects so any support would be greatly appreciated.

Key short term goals are:

  • Hire a graphics designer to improve the look of the widgets
  • Provide support for the web
  • Provide support for a wider range of Codecs
  • Provide support for streaming

If I can get enough sponsorship I intend hiring a grad to do a chunk of the dirty work so I can focus on some of the larger features such as Web Support.

You can find the purple heart Sponser button at the top of the page.

If you can't afford a coffee then show your support by 'liking' the Sounds project on the pub.dev site.

Documentation

Install

Wiki High level guide to using Sounds.

API Reference

Roadmap

See the Roadmap for details on the future of Sounds.

Contributing

See the Contributing guide for details on contributing to Sounds.

The key classes are:

Api classes

QuickPlay - instantly play an audio file (no ui). Perfect for the odd beep.

Track - Defines a track including the artist details and the audio media.

Album - play a collection of tracks via the OSs' audio UI.

SoundPlayer - provides an api for playing audio including pause/resume/seek.

SoundRecorder - api for recording audio.

Widgets

SoundPlayerUI - displays an HTML 5 style audio controller widget.

SoundRecorderUI - displays a recording widget.

RecorderPlaybackController - pairs a SoundPlayerUI and SoundRecorderUI to provide a co-ordinated recording/playback UI.

Note: there are some limitations on the supported MediaFormat. See the [MediaFormat] section below.

Demo

GitHub

https://github.com/bsutton/sounds
Comments
  • 1. [HELP] Unable to play remote file due to AudioPlayer initialisation timeout

    I need Help for :

    • Debugging my App ?

    Here is my question:

    I'm trying to play play() a track from a remote url using Track.fromURL(). When I feed this track to my SoundPlayer().play(track), I'm getting an error due to AudioPlayer initialisation timeout from the SoundPlayer's _initializeAndRun method. I'm not sure why it's failing. It appears to be happening on both an iOS simulator and an Android device. If I don't provide a coded or provide a Codec.fromExtension, I get a uri error: The uri's extension does not match any of the supported extensions. You must pass in a codec.. I'm trying to play files from Firebase Storage, so the links don't have a file extension in the url.

    Reviewed by kbanta11 at 2020-06-24 02:20
  • 2. [HELP] BackgroundAudioService causing problems with another package

    I am using the Sounds package primarily for the recorder. I am not using the SoundPlayer (since it requires the file to be completely downloaded before playing, which isn't viable for a podcast app when the download delay could take 10+minutes), but am instead using a different audio player (audioplayers) and audio_service for the notification state. This appears to all be working fine, except for the media buttons in the notification state don't work because both audio_service (correctly) and sounds (incorrectly since I'm not using the player or shade player) are registering to the same media buttons which is causing errors.

    Does anyone know how to prevent sounds from registering the background audio service/notification area so I can handle this with the audio_service package?

    Reviewed by kbanta11 at 2020-10-28 15:40
  • 3. [BUG] - Unable to Build on iOS due to FFmpegPlugin

    Sounds Version : latest (0.8.2)

    • FULL or LITE flavor ? Full version

    Severity - High

    • Crash ? Prevents building app for iOS

    • Cannot build my App for iOS


    Primary error: error: no visible @interface for 'FFmpegPlugin' declares the selector 'alloc' FFmpegPlugin* FFmpegPlugin = [[FFmpegPlugin alloc] init]; // The singleton

    Logs

    (This is very important. Most of the time we cannot do anything if we do not have information on your bug):

    Running Xcode build...
    Xcode build done.                                           82.0s
    Failed to build iOS app
    Error output from Xcode build:
    ↳
        ** BUILD FAILED **
    
    
    Xcode's output:
    ↳
        In file included from /Users/mbpro/Downloads/flutter/.pub-cache/hosted/pub.dartlang.org/sounds-0.8.2/ios/Classes/TrackPlayer.m:24:
        In file included from /Users/mbpro/Downloads/flutter/.pub-cache/hosted/pub.dartlang.org/sounds-0.8.2/ios/Classes/TrackPlayer.h:22:
        /Users/mbpro/Downloads/flutter/.pub-cache/hosted/pub.dartlang.org/sounds-0.8.2/ios/Classes/SoundPlayer.h:33:60: warning: pointer is missing a nullability type specifier (_Nonnull, _Nullable, or _Null_unspecified) [-Wnullability-completeness]
        extern void SoundPlayerReg(NSObject<FlutterPluginRegistrar>* registrar);
                                                                   ^
        /Users/mbpro/Downloads/flutter/.pub-cache/hosted/pub.dartlang.org/sounds-0.8.2/ios/Classes/SoundPlayer.h:33:60: note: insert '_Nullable' if the pointer may be null
        extern void SoundPlayerReg(NSObject<FlutterPluginRegistrar>* registrar);
                                                                   ^
                                                                     _Nullable
        /Users/mbpro/Downloads/flutter/.pub-cache/hosted/pub.dartlang.org/sounds-0.8.2/ios/Classes/SoundPlayer.h:33:60: note: insert '_Nonnull' if the pointer should never be null
        extern void SoundPlayerReg(NSObject<FlutterPluginRegistrar>* registrar);
                                                                   ^
                                                                     _Nonnull
        /Users/mbpro/Downloads/flutter/.pub-cache/hosted/pub.dartlang.org/sounds-0.8.2/ios/Classes/SoundPlayer.h:70:56: warning: block pointer is missing a nullability type specifier (_Nonnull, _Nullable, or _Null_unspecified) [-Wnullability-completeness]
        - (void)seekToPlayer:(nonnull NSNumber*) time result: (FlutterResult)result;
                                                               ^
        /Users/mbpro/Downloads/flutter/.pub-cache/hosted/pub.dartlang.org/sounds-0.8.2/ios/Classes/SoundPlayer.h:70:56: note: insert '_Nullable' if the block pointer may be null
        - (void)seekToPlayer:(nonnull NSNumber*) time result: (FlutterResult)result;
                                                               ^
                                                                             _Nullable 
        /Users/mbpro/Downloads/flutter/.pub-cache/hosted/pub.dartlang.org/sounds-0.8.2/ios/Classes/SoundPlayer.h:70:56: note: insert '_Nonnull' if the block pointer should never be null
        - (void)seekToPlayer:(nonnull NSNumber*) time result: (FlutterResult)result;
                                                               ^
                                                                             _Nonnull 
        /Users/mbpro/Downloads/flutter/.pub-cache/hosted/pub.dartlang.org/sounds-0.8.2/ios/Classes/SoundPlayer.h:71:59: warning: block pointer is missing a nullability type specifier (_Nonnull, _Nullable, or _Null_unspecified) [-Wnullability-completeness]
        - (void)setSubscriptionDuration:(double)duration result: (FlutterResult)result;
                                                                  ^
        /Users/mbpro/Downloads/flutter/.pub-cache/hosted/pub.dartlang.org/sounds-0.8.2/ios/Classes/SoundPlayer.h:71:59: note: insert '_Nullable' if the block pointer may be null
        - (void)setSubscriptionDuration:(double)duration result: (FlutterResult)result;
                                                                  ^
                                                                                _Nullable 
        /Users/mbpro/Downloads/flutter/.pub-cache/hosted/pub.dartlang.org/sounds-0.8.2/ios/Classes/SoundPlayer.h:71:59: note: insert '_Nonnull' if the block pointer should never be null
        - (void)setSubscriptionDuration:(double)duration result: (FlutterResult)result;
                                                                  ^
                                                                                _Nonnull 
        /Users/mbpro/Downloads/flutter/.pub-cache/hosted/pub.dartlang.org/sounds-0.8.2/ios/Classes/SoundPlayer.h:72:44: warning: block pointer is missing a nullability type specifier (_Nonnull, _Nullable, or _Null_unspecified) [-Wnullability-completeness]
        - (void)setVolume:(double) volume result: (FlutterResult)result;
                                                   ^
        /Users/mbpro/Downloads/flutter/.pub-cache/hosted/pub.dartlang.org/sounds-0.8.2/ios/Classes/SoundPlayer.h:72:44: note: insert '_Nullable' if the block pointer may be null
        - (void)setVolume:(double) volume result: (FlutterResult)result;
                                                   ^
                                                                 _Nullable 
        /Users/mbpro/Downloads/flutter/.pub-cache/hosted/pub.dartlang.org/sounds-0.8.2/ios/Classes/SoundPlayer.h:72:44: note: insert '_Nonnull' if the block pointer should never be null
        - (void)setVolume:(double) volume result: (FlutterResult)result;
                                                   ^
                                                                 _Nonnull 
        /Users/mbpro/Downloads/flutter/.pub-cache/hosted/pub.dartlang.org/sounds-0.8.2/ios/Classes/SoundPlayer.h:73:31: warning: pointer is missing a nullability type specifier (_Nonnull, _Nullable, or _Null_unspecified) [-Wnullability-completeness]
        - (void)setCategory: (NSString*)categ mode:(NSString*)mode options:(int)options result:(FlutterResult)result;
                                      ^
        /Users/mbpro/Downloads/flutter/.pub-cache/hosted/pub.dartlang.org/sounds-0.8.2/ios/Classes/SoundPlayer.h:73:31: note: insert '_Nullable' if the pointer may be null
        - (void)setCategory: (NSString*)categ mode:(NSString*)mode options:(int)options result:(FlutterResult)result;
                                      ^
                                       _Nullable
        /Users/mbpro/Downloads/flutter/.pub-cache/hosted/pub.dartlang.org/sounds-0.8.2/ios/Classes/SoundPlayer.h:73:31: note: insert '_Nonnull' if the pointer should never be null
        - (void)setCategory: (NSString*)categ mode:(NSString*)mode options:(int)options result:(FlutterResult)result;
                                      ^
                                       _Nonnull
        /Users/mbpro/Downloads/flutter/.pub-cache/hosted/pub.dartlang.org/sounds-0.8.2/ios/Classes/SoundPlayer.h:73:53: warning: pointer is missing a nullability type specifier (_Nonnull, _Nullable, or _Null_unspecified) [-Wnullability-completeness]
        - (void)setCategory: (NSString*)categ mode:(NSString*)mode options:(int)options result:(FlutterResult)result;
                                                            ^
        /Users/mbpro/Downloads/flutter/.pub-cache/hosted/pub.dartlang.org/sounds-0.8.2/ios/Classes/SoundPlayer.h:73:53: note: insert '_Nullable' if the pointer may be null
        - (void)setCategory: (NSString*)categ mode:(NSString*)mode options:(int)options result:(FlutterResult)result;
                                                            ^
                                                             _Nullable
        /Users/mbpro/Downloads/flutter/.pub-cache/hosted/pub.dartlang.org/sounds-0.8.2/ios/Classes/SoundPlayer.h:73:53: note: insert '_Nonnull' if the pointer should never be null
        - (void)setCategory: (NSString*)categ mode:(NSString*)mode options:(int)options result:(FlutterResult)result;
                                                            ^
                                                             _Nonnull
        /Users/mbpro/Downloads/flutter/.pub-cache/hosted/pub.dartlang.org/sounds-0.8.2/ios/Classes/SoundPlayer.h:73:89: warning: block pointer is missing a nullability type specifier (_Nonnull, _Nullable, or _Null_unspecified) [-Wnullability-completeness]
        - (void)setCategory: (NSString*)categ mode:(NSString*)mode options:(int)options result:(FlutterResult)result;
                                                                                                ^
        /Users/mbpro/Downloads/flutter/.pub-cache/hosted/pub.dartlang.org/sounds-0.8.2/ios/Classes/SoundPlayer.h:73:89: note: insert '_Nullable' if the block pointer may be null
        - (void)setCategory: (NSString*)categ mode:(NSString*)mode options:(int)options result:(FlutterResult)result;
                                                                                                ^
                                                                                                              _Nullable 
        /Users/mbpro/Downloads/flutter/.pub-cache/hosted/pub.dartlang.org/sounds-0.8.2/ios/Classes/SoundPlayer.h:73:89: note: insert '_Nonnull' if the block pointer should never be null
        - (void)setCategory: (NSString*)categ mode:(NSString*)mode options:(int)options result:(FlutterResult)result;
                                                                                                ^
                                                                                                              _Nonnull 
        /Users/mbpro/Downloads/flutter/.pub-cache/hosted/pub.dartlang.org/sounds-0.8.2/ios/Classes/SoundPlayer.h:74:41: warning: block pointer is missing a nullability type specifier (_Nonnull, _Nullable, or _Null_unspecified) [-Wnullability-completeness]
        - (void)setActive:(BOOL)enabled result:(FlutterResult)result;
                                                ^
        /Users/mbpro/Downloads/flutter/.pub-cache/hosted/pub.dartlang.org/sounds-0.8.2/ios/Classes/SoundPlayer.h:74:41: note: insert '_Nullable' if the block pointer may be null
        - (void)setActive:(BOOL)enabled result:(FlutterResult)result;
                                                ^
                                                              _Nullable 
        /Users/mbpro/Downloads/flutter/.pub-cache/hosted/pub.dartlang.org/sounds-0.8.2/ios/Classes/SoundPlayer.h:74:41: note: insert '_Nonnull' if the block pointer should never be null
        - (void)setActive:(BOOL)enabled result:(FlutterResult)result;
                                                ^
                                                              _Nonnull 
        /Users/mbpro/Downloads/flutter/.pub-cache/hosted/pub.dartlang.org/sounds-0.8.2/ios/Classes/SoundPlayer.h:75:50: warning: pointer is missing a nullability type specifier (_Nonnull, _Nullable, or _Null_unspecified) [-Wnullability-completeness]
        - (void)initializeSoundPlayer: (FlutterMethodCall*)call result: (FlutterResult)result;
                                                         ^
        /Users/mbpro/Downloads/flutter/.pub-cache/hosted/pub.dartlang.org/sounds-0.8.2/ios/Classes/SoundPlayer.h:75:50: note: insert '_Nullable' if the pointer may be null
        - (void)initializeSoundPlayer: (FlutterMethodCall*)call result: (FlutterResult)result;
                                                         ^
                                                          _Nullable
        /Users/mbpro/Downloads/flutter/.pub-cache/hosted/pub.dartlang.org/sounds-0.8.2/ios/Classes/SoundPlayer.h:75:50: note: insert '_Nonnull' if the pointer should never be null
        - (void)initializeSoundPlayer: (FlutterMethodCall*)call result: (FlutterResult)result;
                                                         ^
                                                          _Nonnull
        /Users/mbpro/Downloads/flutter/.pub-cache/hosted/pub.dartlang.org/sounds-0.8.2/ios/Classes/SoundPlayer.h:75:66: warning: block pointer is missing a nullability type specifier (_Nonnull, _Nullable, or _Null_unspecified) [-Wnullability-completeness]
        - (void)initializeSoundPlayer: (FlutterMethodCall*)call result: (FlutterResult)result;
                                                                         ^
        /Users/mbpro/Downloads/flutter/.pub-cache/hosted/pub.dartlang.org/sounds-0.8.2/ios/Classes/SoundPlayer.h:75:66: note: insert '_Nullable' if the block pointer may be null
        - (void)initializeSoundPlayer: (FlutterMethodCall*)call result: (FlutterResult)result;
                                                                         ^
                                                                                       _Nullable 
        /Users/mbpro/Downloads/flutter/.pub-cache/hosted/pub.dartlang.org/sounds-0.8.2/ios/Classes/SoundPlayer.h:75:66: note: insert '_Nonnull' if the block pointer should never be null
        - (void)initializeSoundPlayer: (FlutterMethodCall*)call result: (FlutterResult)result;
                                                                         ^
                                                                                       _Nonnull 
        /Users/mbpro/Downloads/flutter/.pub-cache/hosted/pub.dartlang.org/sounds-0.8.2/ios/Classes/SoundPlayer.h:76:47: warning: pointer is missing a nullability type specifier (_Nonnull, _Nullable, or _Null_unspecified) [-Wnullability-completeness]
        - (void)releaseSoundPlayer: (FlutterMethodCall*)call result: (FlutterResult)result;
                                                      ^
        /Users/mbpro/Downloads/flutter/.pub-cache/hosted/pub.dartlang.org/sounds-0.8.2/ios/Classes/SoundPlayer.h:76:47: note: insert '_Nullable' if the pointer may be null
        - (void)releaseSoundPlayer: (FlutterMethodCall*)call result: (FlutterResult)result;
                                                      ^
                                                       _Nullable
        /Users/mbpro/Downloads/flutter/.pub-cache/hosted/pub.dartlang.org/sounds-0.8.2/ios/Classes/SoundPlayer.h:76:47: note: insert '_Nonnull' if the pointer should never be null
        - (void)releaseSoundPlayer: (FlutterMethodCall*)call result: (FlutterResult)result;
                                                      ^
                                                       _Nonnull
        /Users/mbpro/Downloads/flutter/.pub-cache/hosted/pub.dartlang.org/sounds-0.8.2/ios/Classes/SoundPlayer.h:76:63: warning: block pointer is missing a nullability type specifier (_Nonnull, _Nullable, or _Null_unspecified) [-Wnullability-completeness]
        - (void)releaseSoundPlayer: (FlutterMethodCall*)call result: (FlutterResult)result;
                                                                      ^
        /Users/mbpro/Downloads/flutter/.pub-cache/hosted/pub.dartlang.org/sounds-0.8.2/ios/Classes/SoundPlayer.h:76:63: note: insert '_Nullable' if the block pointer may be null
        - (void)releaseSoundPlayer: (FlutterMethodCall*)call result: (FlutterResult)result;
                                                                      ^
                                                                                    _Nullable 
        /Users/mbpro/Downloads/flutter/.pub-cache/hosted/pub.dartlang.org/sounds-0.8.2/ios/Classes/SoundPlayer.h:76:63: note: insert '_Nonnull' if the block pointer should never be null
        - (void)releaseSoundPlayer: (FlutterMethodCall*)call result: (FlutterResult)result;
                                                                      ^
                                                                                    _Nonnull 
        /Users/mbpro/Downloads/flutter/.pub-cache/hosted/pub.dartlang.org/sounds-0.8.2/ios/Classes/TrackPlayer.m:276:55: warning: block implicitly retains 'self'; explicitly mention 'self' to indicate this is intended behavior [-Wimplicit-retain-self]
                                                              audioPlayer = [[AVAudioPlayer alloc] initWithData:data error:nil];
                                                              ^
                                                              self->
        /Users/mbpro/Downloads/flutter/.pub-cache/hosted/pub.dartlang.org/sounds-0.8.2/ios/Classes/TrackPlayer.m:277:55: warning: block implicitly retains 'self'; explicitly mention 'self' to indicate this is intended behavior [-Wimplicit-retain-self]
                                                              audioPlayer.delegate = self;
                                                              ^
                                                              self->
        /Users/mbpro/Downloads/flutter/.pub-cache/hosted/pub.dartlang.org/sounds-0.8.2/ios/Classes/TrackPlayer.m:283:56: warning: block implicitly retains 'self'; explicitly mention 'self' to indicate this is intended behavior [-Wimplicit-retain-self]
                                                              [audioPlayer play];
                                                               ^
                                                               self->
        /Users/mbpro/Downloads/flutter/.pub-cache/hosted/pub.dartlang.org/sounds-0.8.2/ios/Classes/TrackPlayer.m:439:39: warning: unused variable 'result' [-Wunused-variable]
                                FlutterResult result;
                                              ^
        /Users/mbpro/Downloads/flutter/.pub-cache/hosted/pub.dartlang.org/sounds-0.8.2/ios/Classes/TrackPlayer.m:440:35: warning: block implicitly retains 'self'; explicitly mention 'self' to indicate this is intended behavior [-Wimplicit-retain-self]
                                bool b = [audioPlayer isPlaying];
                                          ^
                                          self->
        /Users/mbpro/Downloads/flutter/.pub-cache/hosted/pub.dartlang.org/sounds-0.8.2/ios/Classes/TrackPlayer.m:127:17: warning: method definition for 'freeSlot:' not found [-Wincomplete-implementation]
        @implementation TrackPlayer
                        ^
        In file included from /Users/mbpro/Downloads/flutter/.pub-cache/hosted/pub.dartlang.org/sounds-0.8.2/ios/Classes/TrackPlayer.m:24:
        /Users/mbpro/Downloads/flutter/.pub-cache/hosted/pub.dartlang.org/sounds-0.8.2/ios/Classes/TrackPlayer.h:44:1: note: method 'freeSlot:' declared here
        - (void)freeSlot: (int)slotNo;
        ^
        18 warnings generated.
        /Users/mbpro/Downloads/flutter/.pub-cache/hosted/pub.dartlang.org/sounds-0.8.2/ios/Classes/Track.m:61:19: warning: unused variable 'albumArtFileString' [-Wunused-variable]
                NSString *albumArtFileString = [responseObj objectForKey:@"albumArtFile"];
                          ^
        1 warning generated.
        /Users/mbpro/Downloads/flutter/.pub-cache/hosted/pub.dartlang.org/sounds-0.8.2/ios/Classes/Sounds.m:24:9: warning: non-portable path to file '"FFmpegPlugin.h"'; specified path differs in case from file name on disk [-Wnonportable-include-path]
        #import "FfmpegPlugin.h"
                ^~~~~~~~~~~~~~~~
                "FFmpegPlugin.h"
        In file included from /Users/mbpro/Downloads/flutter/.pub-cache/hosted/pub.dartlang.org/sounds-0.8.2/ios/Classes/Sounds.m:27:
        /Users/mbpro/Downloads/flutter/.pub-cache/hosted/pub.dartlang.org/sounds-0.8.2/ios/Classes/SoundPlayer.h:33:60: warning: pointer is missing a nullability type specifier (_Nonnull, _Nullable, or _Null_unspecified) [-Wnullability-completeness]
        extern void SoundPlayerReg(NSObject<FlutterPluginRegistrar>* registrar);
                                                                   ^
        /Users/mbpro/Downloads/flutter/.pub-cache/hosted/pub.dartlang.org/sounds-0.8.2/ios/Classes/SoundPlayer.h:33:60: note: insert '_Nullable' if the pointer may be null
        extern void SoundPlayerReg(NSObject<FlutterPluginRegistrar>* registrar);
                                                                   ^
                                                                     _Nullable
        /Users/mbpro/Downloads/flutter/.pub-cache/hosted/pub.dartlang.org/sounds-0.8.2/ios/Classes/SoundPlayer.h:33:60: note: insert '_Nonnull' if the pointer should never be null
        extern void SoundPlayerReg(NSObject<FlutterPluginRegistrar>* registrar);
                                                                   ^
                                                                     _Nonnull
        /Users/mbpro/Downloads/flutter/.pub-cache/hosted/pub.dartlang.org/sounds-0.8.2/ios/Classes/SoundPlayer.h:70:56: warning: block pointer is missing a nullability type specifier (_Nonnull, _Nullable, or _Null_unspecified) [-Wnullability-completeness]
        - (void)seekToPlayer:(nonnull NSNumber*) time result: (FlutterResult)result;
                                                               ^
        /Users/mbpro/Downloads/flutter/.pub-cache/hosted/pub.dartlang.org/sounds-0.8.2/ios/Classes/SoundPlayer.h:70:56: note: insert '_Nullable' if the block pointer may be null
        - (void)seekToPlayer:(nonnull NSNumber*) time result: (FlutterResult)result;
                                                               ^
                                                                             _Nullable 
        /Users/mbpro/Downloads/flutter/.pub-cache/hosted/pub.dartlang.org/sounds-0.8.2/ios/Classes/SoundPlayer.h:70:56: note: insert '_Nonnull' if the block pointer should never be null
        - (void)seekToPlayer:(nonnull NSNumber*) time result: (FlutterResult)result;
                                                               ^
                                                                             _Nonnull 
        /Users/mbpro/Downloads/flutter/.pub-cache/hosted/pub.dartlang.org/sounds-0.8.2/ios/Classes/SoundPlayer.h:71:59: warning: block pointer is missing a nullability type specifier (_Nonnull, _Nullable, or _Null_unspecified) [-Wnullability-completeness]
        - (void)setSubscriptionDuration:(double)duration result: (FlutterResult)result;
                                                                  ^
        /Users/mbpro/Downloads/flutter/.pub-cache/hosted/pub.dartlang.org/sounds-0.8.2/ios/Classes/SoundPlayer.h:71:59: note: insert '_Nullable' if the block pointer may be null
        - (void)setSubscriptionDuration:(double)duration result: (FlutterResult)result;
                                                                  ^
                                                                                _Nullable 
        /Users/mbpro/Downloads/flutter/.pub-cache/hosted/pub.dartlang.org/sounds-0.8.2/ios/Classes/SoundPlayer.h:71:59: note: insert '_Nonnull' if the block pointer should never be null
        - (void)setSubscriptionDuration:(double)duration result: (FlutterResult)result;
                                                                  ^
                                                                                _Nonnull 
        /Users/mbpro/Downloads/flutter/.pub-cache/hosted/pub.dartlang.org/sounds-0.8.2/ios/Classes/SoundPlayer.h:72:44: warning: block pointer is missing a nullability type specifier (_Nonnull, _Nullable, or _Null_unspecified) [-Wnullability-completeness]
        - (void)setVolume:(double) volume result: (FlutterResult)result;
                                                   ^
        /Users/mbpro/Downloads/flutter/.pub-cache/hosted/pub.dartlang.org/sounds-0.8.2/ios/Classes/SoundPlayer.h:72:44: note: insert '_Nullable' if the block pointer may be null
        - (void)setVolume:(double) volume result: (FlutterResult)result;
                                                   ^
                                                                 _Nullable 
        /Users/mbpro/Downloads/flutter/.pub-cache/hosted/pub.dartlang.org/sounds-0.8.2/ios/Classes/SoundPlayer.h:72:44: note: insert '_Nonnull' if the block pointer should never be null
        - (void)setVolume:(double) volume result: (FlutterResult)result;
                                                   ^
                                                                 _Nonnull 
        /Users/mbpro/Downloads/flutter/.pub-cache/hosted/pub.dartlang.org/sounds-0.8.2/ios/Classes/SoundPlayer.h:73:31: warning: pointer is missing a nullability type specifier (_Nonnull, _Nullable, or _Null_unspecified) [-Wnullability-completeness]
        - (void)setCategory: (NSString*)categ mode:(NSString*)mode options:(int)options result:(FlutterResult)result;
                                      ^
        /Users/mbpro/Downloads/flutter/.pub-cache/hosted/pub.dartlang.org/sounds-0.8.2/ios/Classes/SoundPlayer.h:73:31: note: insert '_Nullable' if the pointer may be null
        - (void)setCategory: (NSString*)categ mode:(NSString*)mode options:(int)options result:(FlutterResult)result;
                                      ^
                                       _Nullable
        /Users/mbpro/Downloads/flutter/.pub-cache/hosted/pub.dartlang.org/sounds-0.8.2/ios/Classes/SoundPlayer.h:73:31: note: insert '_Nonnull' if the pointer should never be null
        - (void)setCategory: (NSString*)categ mode:(NSString*)mode options:(int)options result:(FlutterResult)result;
                                      ^
                                       _Nonnull
        /Users/mbpro/Downloads/flutter/.pub-cache/hosted/pub.dartlang.org/sounds-0.8.2/ios/Classes/SoundPlayer.h:73:53: warning: pointer is missing a nullability type specifier (_Nonnull, _Nullable, or _Null_unspecified) [-Wnullability-completeness]
        - (void)setCategory: (NSString*)categ mode:(NSString*)mode options:(int)options result:(FlutterResult)result;
                                                            ^
        /Users/mbpro/Downloads/flutter/.pub-cache/hosted/pub.dartlang.org/sounds-0.8.2/ios/Classes/SoundPlayer.h:73:53: note: insert '_Nullable' if the pointer may be null
        - (void)setCategory: (NSString*)categ mode:(NSString*)mode options:(int)options result:(FlutterResult)result;
                                                            ^
                                                             _Nullable
        /Users/mbpro/Downloads/flutter/.pub-cache/hosted/pub.dartlang.org/sounds-0.8.2/ios/Classes/SoundPlayer.h:73:53: note: insert '_Nonnull' if the pointer should never be null
        - (void)setCategory: (NSString*)categ mode:(NSString*)mode options:(int)options result:(FlutterResult)result;
                                                            ^
                                                             _Nonnull
        /Users/mbpro/Downloads/flutter/.pub-cache/hosted/pub.dartlang.org/sounds-0.8.2/ios/Classes/SoundPlayer.h:73:89: warning: block pointer is missing a nullability type specifier (_Nonnull, _Nullable, or _Null_unspecified) [-Wnullability-completeness]
        - (void)setCategory: (NSString*)categ mode:(NSString*)mode options:(int)options result:(FlutterResult)result;
                                                                                                ^
        /Users/mbpro/Downloads/flutter/.pub-cache/hosted/pub.dartlang.org/sounds-0.8.2/ios/Classes/SoundPlayer.h:73:89: note: insert '_Nullable' if the block pointer may be null
        - (void)setCategory: (NSString*)categ mode:(NSString*)mode options:(int)options result:(FlutterResult)result;
                                                                                                ^
                                                                                                              _Nullable 
        /Users/mbpro/Downloads/flutter/.pub-cache/hosted/pub.dartlang.org/sounds-0.8.2/ios/Classes/SoundPlayer.h:73:89: note: insert '_Nonnull' if the block pointer should never be null
        - (void)setCategory: (NSString*)categ mode:(NSString*)mode options:(int)options result:(FlutterResult)result;
                                                                                                ^
                                                                                                              _Nonnull 
        /Users/mbpro/Downloads/flutter/.pub-cache/hosted/pub.dartlang.org/sounds-0.8.2/ios/Classes/SoundPlayer.h:74:41: warning: block pointer is missing a nullability type specifier (_Nonnull, _Nullable, or _Null_unspecified) [-Wnullability-completeness]
        - (void)setActive:(BOOL)enabled result:(FlutterResult)result;
                                                ^
        /Users/mbpro/Downloads/flutter/.pub-cache/hosted/pub.dartlang.org/sounds-0.8.2/ios/Classes/SoundPlayer.h:74:41: note: insert '_Nullable' if the block pointer may be null
        - (void)setActive:(BOOL)enabled result:(FlutterResult)result;
                                                ^
                                                              _Nullable 
        /Users/mbpro/Downloads/flutter/.pub-cache/hosted/pub.dartlang.org/sounds-0.8.2/ios/Classes/SoundPlayer.h:74:41: note: insert '_Nonnull' if the block pointer should never be null
        - (void)setActive:(BOOL)enabled result:(FlutterResult)result;
                                                ^
                                                              _Nonnull 
        /Users/mbpro/Downloads/flutter/.pub-cache/hosted/pub.dartlang.org/sounds-0.8.2/ios/Classes/SoundPlayer.h:75:50: warning: pointer is missing a nullability type specifier (_Nonnull, _Nullable, or _Null_unspecified) [-Wnullability-completeness]
        - (void)initializeSoundPlayer: (FlutterMethodCall*)call result: (FlutterResult)result;
                                                         ^
        /Users/mbpro/Downloads/flutter/.pub-cache/hosted/pub.dartlang.org/sounds-0.8.2/ios/Classes/SoundPlayer.h:75:50: note: insert '_Nullable' if the pointer may be null
        - (void)initializeSoundPlayer: (FlutterMethodCall*)call result: (FlutterResult)result;
                                                         ^
                                                          _Nullable
        /Users/mbpro/Downloads/flutter/.pub-cache/hosted/pub.dartlang.org/sounds-0.8.2/ios/Classes/SoundPlayer.h:75:50: note: insert '_Nonnull' if the pointer should never be null
        - (void)initializeSoundPlayer: (FlutterMethodCall*)call result: (FlutterResult)result;
                                                         ^
                                                          _Nonnull
        /Users/mbpro/Downloads/flutter/.pub-cache/hosted/pub.dartlang.org/sounds-0.8.2/ios/Classes/SoundPlayer.h:75:66: warning: block pointer is missing a nullability type specifier (_Nonnull, _Nullable, or _Null_unspecified) [-Wnullability-completeness]
        - (void)initializeSoundPlayer: (FlutterMethodCall*)call result: (FlutterResult)result;
                                                                         ^
        /Users/mbpro/Downloads/flutter/.pub-cache/hosted/pub.dartlang.org/sounds-0.8.2/ios/Classes/SoundPlayer.h:75:66: note: insert '_Nullable' if the block pointer may be null
        - (void)initializeSoundPlayer: (FlutterMethodCall*)call result: (FlutterResult)result;
                                                                         ^
                                                                                       _Nullable 
        /Users/mbpro/Downloads/flutter/.pub-cache/hosted/pub.dartlang.org/sounds-0.8.2/ios/Classes/SoundPlayer.h:75:66: note: insert '_Nonnull' if the block pointer should never be null
        - (void)initializeSoundPlayer: (FlutterMethodCall*)call result: (FlutterResult)result;
                                                                         ^
                                                                                       _Nonnull 
        /Users/mbpro/Downloads/flutter/.pub-cache/hosted/pub.dartlang.org/sounds-0.8.2/ios/Classes/SoundPlayer.h:76:47: warning: pointer is missing a nullability type specifier (_Nonnull, _Nullable, or _Null_unspecified) [-Wnullability-completeness]
        - (void)releaseSoundPlayer: (FlutterMethodCall*)call result: (FlutterResult)result;
                                                      ^
        /Users/mbpro/Downloads/flutter/.pub-cache/hosted/pub.dartlang.org/sounds-0.8.2/ios/Classes/SoundPlayer.h:76:47: note: insert '_Nullable' if the pointer may be null
        - (void)releaseSoundPlayer: (FlutterMethodCall*)call result: (FlutterResult)result;
                                                      ^
                                                       _Nullable
        /Users/mbpro/Downloads/flutter/.pub-cache/hosted/pub.dartlang.org/sounds-0.8.2/ios/Classes/SoundPlayer.h:76:47: note: insert '_Nonnull' if the pointer should never be null
        - (void)releaseSoundPlayer: (FlutterMethodCall*)call result: (FlutterResult)result;
                                                      ^
                                                       _Nonnull
        /Users/mbpro/Downloads/flutter/.pub-cache/hosted/pub.dartlang.org/sounds-0.8.2/ios/Classes/SoundPlayer.h:76:63: warning: block pointer is missing a nullability type specifier (_Nonnull, _Nullable, or _Null_unspecified) [-Wnullability-completeness]
        - (void)releaseSoundPlayer: (FlutterMethodCall*)call result: (FlutterResult)result;
                                                                      ^
        /Users/mbpro/Downloads/flutter/.pub-cache/hosted/pub.dartlang.org/sounds-0.8.2/ios/Classes/SoundPlayer.h:76:63: note: insert '_Nullable' if the block pointer may be null
        - (void)releaseSoundPlayer: (FlutterMethodCall*)call result: (FlutterResult)result;
                                                                      ^
                                                                                    _Nullable 
        /Users/mbpro/Downloads/flutter/.pub-cache/hosted/pub.dartlang.org/sounds-0.8.2/ios/Classes/SoundPlayer.h:76:63: note: insert '_Nonnull' if the block pointer should never be null
        - (void)releaseSoundPlayer: (FlutterMethodCall*)call result: (FlutterResult)result;
                                                                      ^
                                                                                    _Nonnull 
        13 warnings generated.
        /Users/mbpro/Downloads/flutter/.pub-cache/hosted/pub.dartlang.org/sounds-0.8.2/ios/Classes/FfmpegPlugin.m:80:49: error: no visible @interface for 'FFmpegPlugin' declares the selector 'alloc'
            FFmpegPlugin* FFmpegPlugin = [[FFmpegPlugin alloc] init]; // The singleton
                                           ~~~~~~~~~~~~ ^~~~~
        /Users/mbpro/Downloads/flutter/.pub-cache/hosted/pub.dartlang.org/sounds-0.8.2/ios/Classes/FfmpegPlugin.m:93:15: warning: unused variable 'command' [-Wunused-variable]
            NSString* command = call.arguments[@"command"];
                      ^
        /Users/mbpro/Downloads/flutter/.pub-cache/hosted/pub.dartlang.org/sounds-0.8.2/ios/Classes/FfmpegPlugin.m:94:15: warning: unused variable 'delimiter' [-Wunused-variable]
            NSString* delimiter = call.arguments[@"delimiter"];
                      ^
        2 warnings and 1 error generated.
        note: Using new build system
        note: Building targets in parallel
        note: Planning build
        note: Constructing build description
        warning: Mapping architecture armv7 to i386. Ensure that this target's Architectures and Valid Architectures build settings are configured correctly for the iOS Simulator platform. (in target 'image_picker' from project 'Pods')
        warning: Mapping architecture arm64 to x86_64. Ensure that this target's Architectures and Valid Architectures build settings are configured correctly for the iOS Simulator platform. (in target 'image_picker' from project 'Pods')
    
    Could not build the application for the simulator.
    Error launching application on iPhone SE (2nd generation).
    

    flutter doctor :

    Doctor summary (to see all details, run flutter doctor -v):
    [✓] Flutter (Channel stable, v1.17.3, on Mac OS X 10.15.5 19F101, locale en-US)
     
    [✓] Android toolchain - develop for Android devices (Android SDK version 29.0.2)
    [✓] Xcode - develop for iOS and macOS (Xcode 11.5)
    [✓] Android Studio (version 3.5)
    [✓] Connected device (2 available)
    
    • No issues found!
    

    flutter pub deps :

    cloud_firestore:
    firebase_auth:
    firebase_core:
    firebase_database:
    firebase_storage:
    firebase_messaging:
    google_sign_in:
    image_picker:
    image_cropper:
    intl:
    # flutter_sound: ^5.0.0
    sounds:
    flutter_launcher_icons:
    flushbar:
    file_picker:
    path_provider:
    audioplayers:
    provider:
    sliding_up_panel:
    font_awesome_flutter:
    marquee:
    
    

    Describe the bug I'm unable to get my app to build for iOS (seems to work for Android) due to the above error when building. I am trying to switch over from using Flutter Sound since I've updated my flutter version. I'm excited about this fork and having a cleaner API for the sound system! Would love to help contribute any way I can (I'll admit, I know very little about iOS development, however).

    Reviewed by kbanta11 at 2020-06-16 19:27
  • 4. [BUG] SoundRecorder stopes when playing asset with SoundPlayer at the same time

    Sounds Version :

    • Released or Beta version ? -Beta

    • Version number ?

    • 1.0.0-beta13

    • FULL or LITE flavor ?

    • Full


    Severity

    • Result is not what expected ?

    Platforms you faced the error

    • iOS real device, simulator works fine

    Logs

    starting ProgressTimer interval:0.800000 2021-01-09 14:46:04.501054-0700 Runner[3810:1561402] setProgressInterval called interval:0.100000 2021-01-09 14:46:04.968316-0700 Runner[3810:1561402] starting ProgressTimer interval:0.100000 2021-01-09 14:46:04.968397-0700 Runner[3810:1561402] started ProgressTimer 2021-01-09 14:46:05.069459-0700 Runner[3810:1561402] entered updateProgress 2021-01-09 14:46:05.069798-0700 Runner[3810:1561402] sending updateProgress: {"duration": "381.1337868480726", "current_position": "57.18820861678005"} 2021-01-09 14:46:05.169471-0700 Runner[3810:1561402] entered updateProgress 2021-01-09 14:46:05.169776-0700 Runner[3810:1561402] sending updateProgress: {"duration": "381.1337868480726", "current_position": "157.1655328798186"} 2021-01-09 14:46:05.269253-0700 Runner[3810:1561402] entered updateProgress 2021-01-09 14:46:05.269494-0700 Runner[3810:1561402] sending updateProgress: {"duration": "381.1337868480726", "current_position": "256.8934240362812"} 2021-01-09 14:46:05.299052-0700 Runner[3810:1561402] updateProgress: {"current_position": "816.5625", "decibels":"23.187123"} 2021-01-09 14:46:05.369524-0700 Runner[3810:1561402] entered updateProgress 2021-01-09 14:46:05.370126-0700 Runner[3810:1561402] sending updateProgress: {"duration": "381.1337868480726", "current_position": "357.4149659863946"} 2021-01-09 14:46:05.400350-0700 Runner[3810:1561402] audioPlayerDidFinishPlaying 2021-01-09 14:46:05.400759-0700 Runner[3810:1561402] stopping ProgressTimer 2021-01-09 14:46:05.457127-0700 Runner[3810:1561609] flutter: chat conversationScreen _scheduleSetSeen 2021-01-09 14:46:06.089833-0700 Runner[3810:1561402] [avas] AVAudioSession_iOS.mm:1149 Deactivating an audio session that has running I/O. All I/O should be stopped or paused prior to deactivating the audio session. 2021-01-09 14:46:06.098291-0700 Runner[3810:1561402] updateProgress: {"current_position": "1442.4375", "decibels":"11.733077"} 2021-01-09 14:46:06.456124-0700 Runner[3810:1561609] flutter: chat conversationScreen _scheduleSetSeen 2021-01-09 14:46:06.898842-0700 Runner[3810:1561402] updateProgress: {"current_position": "1442.4375", "decibels":"11.733077"} 2021-01-09 14:46:07.458808-0700 Runner[3810:1561609] flutter: chat conversationScreen _scheduleSetSeen 2021-01-09 14:46:07.697862-0700 Runner[3810:1561402] updateProgress: {"current_position": "1442.4375", "decibels":"11.733077"} 2021-01-09 14:46:08.460349-0700 Runner[3810:1561609] flutter: chat conversationScreen _scheduleSetSeen 2021-01-09 14:46:08.498798-0700 Runner[3810:1561402] updateProgress: {"current_position": "1442.4375", "decibels":"11.733077"} 2021-01-09 14:46:08.849750-0700 Runner[3810:1561609] flutter: onComplete 2021-01-09 14:46:08.862511-0700 Runner[3810:1561609] flutter: ending recording 2021-01-09 14:46:08.862743-0700 Runner[3810:1561609] flutter: stopRecorder save true duration: 4 2021-01-09 14:46:08.862818-0700 Runner[3810:1561609] flutter: 4 2021-01-09 14:46:09.086798-0700 Runner[3810:1561402] starting ProgressTimer interval:0.100000 2021-01-09 14:46:09.086887-0700 Runner[3810:1561402] started ProgressTimer 2021-01-09 14:46:09.187941-0700 Runner[3810:1561402] entered updateProgress 2021-01-09 14:46:09.188329-0700 Runner[3810:1561402] sending updateProgress: {"duration": "420.125", "current_position": "58.8125"} 2021-01-09 14:46:09.288007-0700 Runner[3810:1561402] entered updateProgress 2021-01-09 14:46:09.288461-0700 Runner[3810:1561402] sending updateProgress: {"duration": "420.125", "current_position": "158.875"} 2021-01-09 14:46:09.380888-0700 Runner[3810:1561609] flutter: chat conversationScreen _scheduleSetSeen 2021-01-09 14:46:09.387035-0700 Runner[3810:1561402] entered updateProgress 2021-01-09 14:46:09.387322-0700 Runner[3810:1561402] sending updateProgress: {"duration": "420.125", "current_position": "257.84375"} 2021-01-09 14:46:09.488004-0700 Runner[3810:1561402] entered updateProgress 2021-01-09 14:46:09.488299-0700 Runner[3810:1561402] sending updateProgress: {"duration": "420.125", "current_position": "358.78125"} 2021-01-09 14:46:09.559103-0700 Runner[3810:1561402] audioPlayerDidFinishPlaying 2021-01-09 14:46:09.559250-0700 Runner[3810:1561402] stopping ProgressTimer 2021-01-09 14:46:10.374906-0700 Runner[3810:1561634] BackgroundSession <00AC9947-A361-4FCA-8255-2C93A76A022F> connection to background transfer daemon invalidated


    flutter doctor :

    [✓] Flutter (Channel stable, 1.22.5, on macOS 11.1 20C69 darwin-x64, locale en-MX)

    [✓] Android toolchain - develop for Android devices (Android SDK version 30.0.2) [✓] Xcode - develop for iOS and macOS (Xcode 12.3) [✓] Android Studio (version 4.1) [✓] VS Code (version 1.52.1) [✓] Connected device (4 available)

    flutter pub deps :


    Describe the bug I am using this package for a chat messages, I also want to play a sound when the recording starts. But when I play the recording, the soundrecorder stops recording.

    To Reproduce

    1. Start recording
    2. Play small asset audio
    3. Record for a longer time that the player audio
    4. Stop recording
    5. see recorded length

    Expected behavior Recorder should still record after audio file is played


    Additional context**

    This is my recorder

    class VoiceRecorder extends ChangeNotifier {
      SoundRecorder _mRecorder = SoundRecorder();
    
      String _mPath;
    
      File get audioFile => File(_mPath);
    
      VoiceRecorder() {
        _mPath = Track.tempFile(WellKnownMediaFormats.adtsAac);
        print("open recorder");
    
        // openTheRecorder();
      }
      var duration = 0;
      var isRecording = false;
    
      Timer timer;
    
      startRecording() async {
        // assert(_mPlayer.isStopped);
    
        final track =
            Track.fromFile(_mPath, mediaFormat: WellKnownMediaFormats.adtsAac);
        resetTimer();
        timer = Timer.periodic(Duration(seconds: 1), (timer) {
          duration += 1;
          notifyListeners();
        });
    
        _mRecorder.record(track);
        // MyPlayer.SoundPlayer.playSound(MyPlayer.SoundEffect.Start);
        playSoundEffect(SoundEffect.Start);
        isRecording = true;
        notifyListeners();
      }
    
      String get recordedSeconds {
        final minutes = duration / 60 % 60;
        final seconds = duration % 60;
        return "${minutes.toInt()}:${seconds.toString().padLeft(2, "0")}";
      }
    
      Future<bool> stopRecorder(bool save) async {
        var shouldSave = false;
    
        try {
          await _mRecorder.stop();
          if (save && duration > 1) {
            print("ending recording");
            playSoundEffect(SoundEffect.End);
            shouldSave = true;
          } else {
            print("canceling recording");
            playSoundEffect(SoundEffect.Error);
          }
        } on Object catch (err) {
          print('stopRecorder error: $err');
          playSoundEffect(SoundEffect.Error);
        }
        timer?.cancel();
        isRecording = false;
        notifyListeners();
        print("stopRecorder save $save duration: $duration");
        return shouldSave;
      }
    
      resetTimer() {
        timer?.cancel();
        duration = 0;
      }
    
      var player = SoundPlayer.noUI();
      playSoundEffect(SoundEffect effect) {
        // return; // when uncommented, recorder works fine
        String soundStr;
        switch (effect) {
          case SoundEffect.Start:
            soundStr = "assets/sounds/record_start.wav";
            break;
          case SoundEffect.End:
            soundStr = "assets/sounds/record_finished.wav";
            break;
          case SoundEffect.Error:
            soundStr = "assets/sounds/record_error.wav";
            break;
        }
        if (soundStr != null) {
          var track = Track.fromAsset(soundStr);
          player.play(track);
        }
      }
    
      @override
      dispose() {
        _mRecorder?.release();
        player.release();
        _mRecorder = null;
        if (_mPath != null) {
          var outputFile = File(_mPath);
          if (outputFile.existsSync()) {
            outputFile.delete();
          }
        }
        super.dispose();
      }
    }
    
    Reviewed by diegogarciar at 2021-01-09 21:54
  • 5. [HELP] QuickPlay failing due to assertion error

    I need Help for :

    • Using the API ?

    Here is my question : Hi, I'm a new flutter dev so this might be trivially answered...

    I'm trying to use the quickplay class to play from a .wav file. I know the file is legit...and the app works otherwise, so here is the relevant piece of code:

        var test_track = Track.fromAsset('assets/sound/track.wav');
        QuickPlay.fromTrack(test_track);
    

    I just call that when a button is pressed (the callback registered to onpressed has these 2 lines in it).

    my dir structure for assets: image

    and the relevant part of my pubspec...

    flutter:
    
      # The following line ensures that the Material Icons font is
      # included with your application, so that you can use the icons in
      # the material Icons class.
      uses-material-design: true
    
      # To add assets to your application, add an assets section, like this:
      assets:
        - assets/sounds/track.wav
    

    And the stacktrace:

    E/flutter (24392): [ERROR:flutter/lib/ui/ui_dart_state.cc(184)] Unhandled Exception: 'package:sounds/src/sound_player.dart': Failed assertion: line 309 pos 12: 'track != null': is not true.
    E/flutter (24392): #0      _AssertionError._doThrowNew (dart:core-patch/errors_patch.dart:46:39)
    E/flutter (24392): #1      _AssertionError._throwNew (dart:core-patch/errors_patch.dart:36:5)
    E/flutter (24392): #2      SoundPlayer.play (package:sounds/src/sound_player.dart:309:12)
    E/flutter (24392): #3      QuickPlay._play (package:sounds/src/quick_play.dart:159:20)
    E/flutter (24392): #4      new QuickPlay._internal (package:sounds/src/quick_play.dart:75:5)
    E/flutter (24392): #5      new QuickPlay.fromTrack (package:sounds/src/quick_play.dart:62:15)
    E/flutter (24392): #6      MyAppState.answerPrinter (package:flutter_complete_guide/main.dart:52:15)
    E/flutter (24392): #7      MyAppState.build.<anonymous closure>.<anonymous closure> (package:flutter_complete_guide/main.dart:87:57)
    E/flutter (24392): #8      _InkResponseState._handleTap (package:flutter/src/material/ink_well.dart:991:20)
    E/flutter (24392): #9      GestureRecognizer.invokeCallback (package:flutter/src/gestures/recognizer.dart:183:24)
    E/flutter (24392): #10     TapGestureRecognizer.handleTapUp (package:flutter/src/gestures/tap.dart:598:11)
    E/flutter (24392): #11     BaseTapGestureRecognizer._checkUp (package:flutter/src/gestures/tap.dart:287:5)
    E/flutter (24392): #12     BaseTapGestureRecognizer.handlePrimaryPointer (package:flutter/src/gestures/tap.dart:222:7)
    E/flutter (24392): #13     PrimaryPointerGestureRecognizer.handleEvent (package:flutter/src/gestures/recognizer.dart:476:9)
    E/flutter (24392): #14     PointerRouter._dispatch (package:flutter/src/gestures/pointer_router.dart:93:12)
    E/flutter (24392): #15     PointerRouter._dispatchEventToRoutes.<anonymous closure> (package:flutter/src/gestures/pointer_router.dart:138:9)
    E/flutter (24392): #16     _LinkedHashMapMixin.forEach (dart:collection-patch/compact_hash.dart:387:8)
    E/flutter (24392): #17     PointerRouter._dispatchEventToRoutes (package:flutter/src/gestures/pointer_router.dart:136:18)
    E/flutter (24392): #18     PointerRouter.route (package:flutter/src/gestures/pointer_router.dart:122:7)
    E/flutter (24392): #19     GestureBinding.handleEvent (package:flutter/src/gestures/binding.dart:381:19)
    E/flutter (24392): #20     GestureBinding.dispatchEvent (package:flutter/src/gestures/binding.dart:361:22)
    E/flutter (24392): #21     RendererBinding.dispatchEvent (package:flutter/src/rendering/binding.dart:279:11)
    E/flutter (24392): #22     GestureBinding._handlePointerEventImmediately (package:flutter/src/gestures/binding.dart:316:7)
    E/flutter (24392): #23     GestureBinding.handlePointerEvent (package:flutter/src/gestures/binding.dart:280:5)
    E/flutter (24392): #24     GestureBinding._flushPointerEventQueue (package:flutter/src/gestures/binding.dart:238:7)
    E/flutter (24392): #25     GestureBinding._handlePointerDataPacket (package:flutter/src/gestures/binding.dart:221:7)
    E/flutter (24392): #26     _rootRunUnary (dart:async/zone.dart:1202:13)
    E/flutter (24392): #27     _CustomZone.runUnary (dart:async/zone.dart:1097:19)
    E/flutter (24392): #28     _CustomZone.runUnaryGuarded (dart:async/zone.dart:1002:7)
    E/flutter (24392): #29     _invoke1 (dart:ui/hooks.dart:176:10)
    E/flutter (24392): #30     PlatformDispatcher._dispatchPointerDataPacket (dart:ui/platform_dispatcher.dart:276:7)
    E/flutter (24392): #31     _dispatchPointerDataPacket (dart:ui/hooks.dart:96:31)
    
    ...
    
    E/flutter (24392): [ERROR:flutter/lib/ui/ui_dart_state.cc(184)] Unhandled Exception: PlatformException(ERR_PLAYER_IS_NULL, setVolume(), ERR_PLAYER_IS_NULL, null)
    E/flutter (24392): #0      StandardMethodCodec.decodeEnvelope (package:flutter/src/services/message_codecs.dart:582:7)
    E/flutter (24392): #1      MethodChannel._invokeMethod (package:flutter/src/services/platform_channel.dart:159:18)
    E/flutter (24392): <asynchronous suspension>
    E/flutter (24392): #2      PlayerBasePlugin.setVolume (package:sounds/src/plugins/player_base_plugin.dart:123:5)
    E/flutter (24392): <asynchronous suspension>
    E/flutter (24392): #3      SoundPlayer.setVolume.<anonymous closure> (package:sounds/src/sound_player.dart:450:7)
    E/flutter (24392): <asynchronous suspension>
    
    Reviewed by RevanthRameshkumar at 2020-12-31 02:36
  • 6. [BUG] AppData\Local\Pub\Cache\hosted\pub.dartlang.org\sounds-0.9.2\.packages does not exist.

    Sounds Version :

    0.9.2


    Severity

    • Cannot build my App

    Platforms you faced the error

    • Android

    Logs

    C:\...\AppData\Local\Pub\Cache\hosted\pub.dartlang.org\sounds-0.9.2\.packages does not exist.
    Did you run "flutter pub get" in this directory?
    
    
    FAILURE: Build failed with an exception.
    
    * Where:
    Script 'C:\flutter\packages\flutter_tools\gradle\flutter.gradle' line: 896
    
    * What went wrong:
    Execution failed for task ':sounds:compileFlutterBuildDebug'.
    > Process 'command 'C:\flutter\bin\flutter.bat'' finished with non-zero exit value 1
    
    * Try:
    Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.
    
    * Get more help at https://help.gradle.org
    
    BUILD FAILED in 15s
    Exception: Gradle task assembleDebug failed with exit code 1
    

    When I go to the C:\...\AppData\Local\Pub\Cache\hosted\pub.dartlang.org\sounds-0.9.2\ directory and run flutter pub get I get:

    Cannot open file, path = 'C:\...\AppData\Local\Pub\Cache\global_packages\sounds\pubspec.lock' (OS Error: The system cannot find the path specified.
    , errno = 3)
    

    flutter doctor :

    [√] Flutter (Channel beta, 1.20.0-7.2.pre, on Microsoft Windows [Version 10.0.19041.388], locale en-US)
        • Flutter version 1.20.0-7.2.pre at C:\flutter
        • Framework revision a2bde82fbd (7 days ago), 2020-07-18 15:16:35 -0700
        • Engine revision 60b269d898
        • Dart version 2.9.0 (build 2.9.0-21.2.beta)
    
     
    [√] Android toolchain - develop for Android devices (Android SDK version 29.0.3)
        • Android SDK at C:\Users\marti\AppData\Local\Android\sdk
        • Platform android-29, build-tools 29.0.3
        • Java binary at: C:\Program Files\Android\Android Studio\jre\bin\java
        • Java version OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b01)
        • All Android licenses accepted.
    
    [√] Chrome - develop for the web
        • Chrome at C:\Program Files (x86)\Google\Chrome\Application\chrome.exe
    
    [√] Android Studio (version 4.0)
        • Android Studio at C:\Program Files\Android\Android Studio
        • Flutter plugin version 47.1.2
        • Dart plugin version 193.7361
        • Java version OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b01)
    
    [√] VS Code (version 1.47.2)
        • VS Code at C:\Users\marti\AppData\Local\Programs\Microsoft VS Code
        • Flutter extension version 3.12.2
    
    [√] Connected device (4 available)
        • SM N960U1 (mobile) • 276ade38b4217ece • android-arm64  • Android 10 (API 29)
        • Web Server (web)   • web-server       • web-javascript • Flutter Tools
        • Chrome (web)       • chrome           • web-javascript • Google Chrome 84.0.4147.89
        • Edge (web)         • edge             • web-javascript • Microsoft Edge 83.0.478.56
    
    

    flutter pub deps :

    Dart SDK 2.9.0-21.2.beta   
    Flutter SDK 1.20.0-7.2.pre 
    record_bloc_example 1.0.0+1
    |-- bloc 6.0.1
    |   '-- meta...
    |-- equatable 1.2.2        
    |   |-- collection...      
    |   '-- meta...
    |-- flutter 0.0.0
    |   |-- characters 1.0.0   
    |   |-- collection 1.14.13 
    |   |-- meta 1.1.8
    |   |-- sky_engine 0.0.99  
    |   |-- typed_data 1.2.0   
    |   |   '-- collection...  
    |   '-- vector_math 2.0.8  
    |-- flutter_bloc 6.0.1     
    |   |-- bloc...
    |   |-- flutter...
    |   '-- provider 4.3.1     
    |       |-- collection...  
    |       |-- flutter...     
    |       '-- nested 0.0.4   
    |           '-- flutter... 
    |-- flutter_test 0.0.0     
    |   |-- async 2.4.2        
    |   |   '-- collection...
    |   |-- boolean_selector 2.0.0
    |   |   |-- source_span...
    |   |   '-- string_scanner...
    |   |-- characters...
    |   |-- charcode 1.1.3
    |   |-- clock 1.0.1
    |   |   '-- meta...
    |   |-- collection...
    |   |-- fake_async 1.1.0
    |   |   |-- clock...
    |   |   '-- collection...
    |   |-- flutter...
    |   |-- matcher 0.12.8
    |   |   '-- stack_trace...
    |   |-- meta...
    |   |-- path...
    |   |-- source_span 1.7.0
    |   |   |-- charcode...
    |   |   |-- collection...
    |   |   |-- meta...
    |   |   |-- path...
    |   |   '-- term_glyph...
    |   |-- stack_trace 1.9.5
    |   |   '-- path...
    |   |-- stream_channel 2.0.0
    |   |   '-- async...
    |   |-- string_scanner 1.0.5
    |   |   |-- charcode...
    |   |   |-- meta...
    |   |   '-- source_span...
    |   |-- term_glyph 1.1.0
    |   |-- test_api 0.2.17
    |   |   |-- async...
    |   |   |-- boolean_selector...
    |   |   |-- collection...
    |   |   |-- matcher...
    |   |   |-- meta...
    |   |   |-- path...
    |   |   |-- source_span...
    |   |   |-- stack_trace...
    |   |   |-- stream_channel...
    |   |   |-- string_scanner...
    |   |   '-- term_glyph...
    |   |-- typed_data...
    |   '-- vector_math...
    |-- path_provider 1.6.11
    |   |-- flutter...
    |   |-- path_provider_linux 0.0.1+2
    |   |   |-- flutter...
    |   |   |-- path...
    |   |   |-- path_provider_platform_interface...
    |   |   '-- xdg_directories 0.1.0
    |   |       |-- flutter...
    |   |       |-- path...
    |   |       '-- process 3.0.13
    |   |           |-- file 5.2.1
    |   |           |   |-- intl...
    |   |           |   |-- meta...
    |   |           |   '-- path...
    |   |           |-- intl...
    |   |           |-- meta...
    |   |           |-- path...
    |   |           '-- platform...
    |   |-- path_provider_macos 0.0.4+3
    |   |   '-- flutter...
    |   '-- path_provider_platform_interface 1.0.2
    |       |-- flutter...
    |       |-- meta...
    |       |-- platform 2.2.1
    |       '-- plugin_platform_interface 1.0.2
    |           '-- meta...
    |-- permission_handler 5.0.1+1
    |   |-- flutter...
    |   |-- meta...
    |   '-- permission_handler_platform_interface 2.0.1
    |       |-- flutter...
    |       |-- meta...
    |       '-- plugin_platform_interface...
    '-- sounds 0.9.2
        |-- device_info 0.4.2+4
        |   '-- flutter...
        |-- flutter...
        |-- flutter_spinkit 4.1.2+1
        |   '-- flutter...
        |-- meta...
        |-- path 1.7.0
        |-- path_provider...
        |-- provider...
        |-- sounds_common 1.0.6
        |   |-- flutter...
        |   |-- intl 0.16.1
        |   |   '-- path...
        |   |-- logger 0.7.0+2
        |   |-- meta...
        |   |-- path...
        |   |-- pedantic 1.9.0
        |   '-- uuid...
        '-- uuid 2.2.0
            |-- convert 2.1.1
            |   |-- charcode...
            |   '-- typed_data...
            '-- crypto 2.1.5
                |-- collection...
                |-- convert...
                '-- typed_data...
    

    Screenshots

    (If applicable, add screenshots to help explain your problem).


    Describe the bug In a new project, I can't deploy because of this. Just build and try to run.

    Expected behavior My App to build


    Additional context**

    Windows 10, VSCode. Tried changing flutter versions but not

    Reviewed by mdkess at 2020-07-25 18:52
  • 7. [BUG] Android SoundPlayer not working along firebase_messaging

    Sounds Version :

    sounds: ^1.0.0-beta13


    Severity

    • Result is not what expected
    • Minor issue

    Platforms you faced the error

    • Android

    Logs

    (This is very important. Most of the time we cannot do anything if we do not have information on your bug)


    flutter doctor :

    [✓] Flutter (Channel stable, 1.22.5, on macOS 11.1 20C69 darwin-x64, locale en-MX)

    [✓] Android toolchain - develop for Android devices (Android SDK version 30.0.2) [✓] Xcode - develop for iOS and macOS (Xcode 12.3) [✓] Android Studio (version 4.1) [✓] VS Code (version 1.52.1) [✓] Connected device (3 available)


    flutter pub deps :

    just firebase_messaging, here is a repo of a project replicating the issue https://github.com/markusaksli-nc/sounds-messaging-issue


    Screenshots


    Describe the bug I submitted this bug on firebase a while ago but I think it is also worth it to mention it here. Theres a firebase_messaging function to receive background notifications and when the function is registered, the communication from Android to Dart stops working in this plugin. I honestly don't know which package to blame, but I think a lot of us might use this combination of plugins and the bug took me hours to detect that could save time to others.

    The issue is well described in the original firebase issue. so I'll keep it short here

    To Reproduce Steps to reproduce the behavior:

    1. Register onBackgroundMessage function from firebase_messaging
    2. Play audio file
    3. See error

    Expected behavior A clear and concise description of what you expected to happen. The progress indicator would not move, it seems that android is indeed sending updates of the progress but dart is not receiving them. After commenting the registration of the background message, the progress indicators works as expected.


    Additional context**

    I did some research on their plugin and it seems that they are creating a new FlutterEngine on that function, maybe this plugin (or all plugins) are confusing it with the original FlutterEngine?

    Reviewed by diegogarciar at 2021-01-14 16:18
  • 8. [BUG] Player is not playing while seeking

    Sounds Version :

    ^1.0.0-beta.7


    Severity

    • Minor issue

    Platforms you faced the error

    Android pixel 3a emulator.


    Logs

    E/flutter (18016): [ERROR:flutter/lib/ui/ui_dart_state.cc(171)] Unhandled Exception: Player is not playing.
    E/flutter (18016): #0      SoundPlayer.pause (package:sounds/src/sound_player.dart:394:7)
    E/flutter (18016): #1      SoundPlayer._onSystemPaused (package:sounds/src/sound_player.dart:521:5)
    E/flutter (18016): #2      onSystemPaused (package:sounds/src/sound_player.dart:874:51)
    E/flutter (18016): #3      SoundPlayerShadePlugin.onMethodCallback (package:sounds/src/plugins/sound_player_shade_plugin.dart:73:11)
    E/flutter (18016): #4      BasePlugin._onMethodCallback (package:sounds/src/plugins/base_plugin.dart:96:12)
    E/flutter (18016): #5      MethodChannel._handleAsMethodCall (package:flutter/src/services/platform_channel.dart:431:55)
    E/flutter (18016): #6      MethodChannel.setMethodCallHandler.<anonymous closure> (package:flutter/src/services/platform_channel.dart:384:34)
    E/flutter (18016): #7      _DefaultBinaryMessenger.handlePlatformMessage (package:flutter/src/services/binding.dart:283:33)
    E/flutter (18016): #8      _invoke3.<anonymous closure> (dart:ui/hooks.dart:282:15)
    E/flutter (18016): #9      _rootRun (dart:async/zone.dart:1190:13)
    E/flutter (18016): #10     _CustomZone.run (dart:async/zone.dart:1093:19)
    E/flutter (18016): #11     _CustomZone.runGuarded (dart:async/zone.dart:997:7)
    E/flutter (18016): #12     _invoke3 (dart:ui/hooks.dart:281:10)
    E/flutter (18016): #13     _dispatchPlatformMessage (dart:ui/hooks.dart:156:5)
    

    flutter doctor :

    [√] Flutter (Channel master, 1.21.0-8.0.pre.122, on Microsoft Windows [Version 10.0.19041.388], locale en-US)
    
    [√] Android toolchain - develop for Android devices (Android SDK version 30.0.1)
    [√] Chrome - develop for the web
    [!] Android Studio (not installed)
    [√] Connected device (4 available)
    
    ! Doctor found issues in 1 category.
    

    (using android studio beta, weird bug in flutter doctor)

    flutter pub deps :

    Dart SDK 2.10.0-4.0.dev.flutter-0341576448
    Flutter SDK 1.21.0-8.0.pre.122
    
    |-- animations 1.1.2
    |   '-- flutter...
    |-- async 2.5.0-nullsafety
    |   '-- collection...
    |-- bloc 6.0.1
    |   '-- meta...
    |-- blurhash 0.2.0
    |   '-- flutter...
    |-- blurhash_dart 0.2.3
    |-- build_runner 1.10.2
    |   |-- args 1.6.0
    |   |-- async...
    |   |-- build...
    |   |-- build_config 0.4.2
    |   |   |-- checked_yaml 1.0.2
    |   |   |   |-- json_annotation...
    |   |   |   |-- source_span...
    |   |   |   '-- yaml...
    |   |   |-- json_annotation...
    |   |   |-- meta...
    |   |   |-- path...
    |   |   |-- pubspec_parse...
    |   |   '-- yaml...
    |   |-- build_daemon 2.1.4
    |   |   |-- built_collection 4.3.2
    |   |   |   |-- collection...
    |   |   |   '-- quiver...
    |   |   |-- built_value 7.1.0
    |   |   |   |-- built_collection...
    |   |   |   |-- collection...
    |   |   |   |-- fixnum 0.10.11
    |   |   |   '-- quiver...
    |   |   |-- http_multi_server...
    |   |   |-- logging...
    |   |   |-- path...
    |   |   |-- pedantic...
    |   |   |-- pool...
    |   |   |-- shelf...
    |   |   |-- shelf_web_socket...
    |   |   |-- stream_transform...
    |   |   |-- watcher...
    |   |   '-- web_socket_channel...
    |   |-- build_resolvers 1.3.11
    |   |   |-- analyzer...
    |   |   |-- build...
    |   |   |-- crypto...
    |   |   |-- graphs...
    |   |   |-- logging...
    |   |   |-- package_config...
    |   |   |-- path...
    |   |   '-- pub_semver...
    |   |-- build_runner_core 6.0.1
    |   |   |-- async...
    |   |   |-- build...
    |   |   |-- build_config...
    |   |   |-- build_resolvers...
    |   |   |-- collection...
    |   |   |-- convert...
    |   |   |-- crypto...
    |   |   |-- glob...
    |   |   |-- graphs...
    |   |   |-- json_annotation...
    |   |   |-- logging...
    |   |   |-- meta...
    |   |   |-- package_config...
    |   |   |-- path...
    |   |   |-- pedantic...
    |   |   |-- pool...
    |   |   |-- timing...
    |   |   |-- watcher...
    |   |   '-- yaml...
    |   |-- code_builder 3.4.0
    |   |   |-- built_collection...
    |   |   |-- built_value...
    |   |   |-- collection...
    |   |   |-- matcher...
    |   |   '-- meta...
    |   |-- collection...
    |   |-- crypto...
    |   |-- dart_style 1.3.6
    |   |   |-- analyzer...
    |   |   |-- args...
    |   |   |-- path...
    |   |   '-- source_span...
    |   |-- glob 1.2.0
    |   |   |-- async...
    |   |   |-- collection...
    |   |   |-- node_io 1.1.1
    |   |   |   |-- node_interop 1.1.1
    |   |   |   |   '-- js...
    |   |   |   '-- path...
    |   |   |-- path...
    |   |   |-- pedantic...
    |   |   '-- string_scanner...
    |   |-- graphs 0.2.0
    |   |-- http_multi_server 2.2.0
    |   |   '-- async...
    |   |-- io 0.3.4
    |   |   |-- charcode...
    |   |   |-- meta...
    |   |   |-- path...
    |   |   '-- string_scanner...
    |   |-- js 0.6.2
    |   |-- logging 0.11.4
    |   |-- meta...
    |   |-- mime 0.9.7
    |   |-- path...
    |   |-- pedantic...
    |   |-- pool 1.4.0
    |   |   |-- async...
    |   |   '-- stack_trace...
    |   |-- pub_semver 1.4.4
    |   |   '-- collection...
    |   |-- pubspec_parse 0.1.5
    |   |   |-- checked_yaml...
    |   |   |-- json_annotation...
    |   |   |-- pub_semver...
    |   |   '-- yaml...
    |   |-- shelf 0.7.7
    |   |   |-- async...
    |   |   |-- collection...
    |   |   |-- http_parser...
    |   |   |-- path...
    |   |   |-- stack_trace...
    |   |   '-- stream_channel...
    |   |-- shelf_web_socket 0.2.3
    |   |   |-- shelf...
    |   |   |-- stream_channel...
    |   |   '-- web_socket_channel...
    |   |-- stack_trace...
    |   |-- stream_transform 1.2.0
    |   |-- timing 0.1.1+2
    |   |   '-- json_annotation...
    |   |-- watcher...
    |   |-- web_socket_channel 1.1.0
    |   |   |-- async...
    |   |   |-- crypto...
    |   |   '-- stream_channel...
    |   '-- yaml 2.2.1
    |       |-- charcode...
    |       |-- collection...
    |       |-- source_span...
    |       '-- string_scanner...
    |-- cloud_firestore 0.13.7
    |   |-- cloud_firestore_platform_interface 1.1.2
    |   |   |-- collection...
    |   |   |-- firebase_core...
    |   |   |-- flutter...
    |   |   |-- meta...
    |   |   '-- plugin_platform_interface...
    |   |-- cloud_firestore_web 0.1.1+2
    |   |   |-- cloud_firestore_platform_interface...
    |   |   |-- firebase 7.3.0
    |   |   |   |-- http...
    |   |   |   |-- http_parser...
    |   |   |   '-- js...
    |   |   |-- firebase_core...
    |   |   |-- flutter...
    |   |   |-- flutter_web_plugins 0.0.0
    |   |   |   |-- characters...
    |   |   |   |-- collection...
    |   |   |   |-- flutter...
    |   |   |   |-- meta...
    |   |   |   |-- typed_data...
    |   |   |   '-- vector_math...
    |   |   |-- http_parser...
    |   |   |-- js...
    |   |   '-- meta...
    |   |-- firebase_core 0.4.5
    |   |   |-- firebase_core_platform_interface 1.0.4
    |   |   |   |-- flutter...
    |   |   |   |-- meta...
    |   |   |   |-- plugin_platform_interface...
    |   |   |   '-- quiver...
    |   |   |-- firebase_core_web 0.1.1+2
    |   |   |   |-- firebase...
    |   |   |   |-- firebase_core_platform_interface...
    |   |   |   |-- flutter...
    |   |   |   |-- flutter_web_plugins...
    |   |   |   |-- js...
    |   |   |   '-- meta...
    |   |   |-- flutter...
    |   |   '-- meta...
    |   |-- flutter...
    |   '-- meta...
    |-- connectivity 0.4.9
    |   |-- connectivity_for_web 0.3.1
    |   |   |-- connectivity_platform_interface...
    |   |   |-- flutter...
    |   |   '-- flutter_web_plugins...
    |   |-- connectivity_macos 0.1.0+3
    |   |   '-- flutter...
    |   |-- connectivity_platform_interface 1.0.6
    |   |   |-- flutter...
    |   |   |-- meta...
    |   |   '-- plugin_platform_interface...
    |   |-- flutter...
    |   '-- meta...
    |-- data_connection_checker 0.3.4
    |-- dio 3.0.10
    |   |-- http_parser 3.1.4
    |   |   |-- charcode...
    |   |   |-- collection...
    |   |   |-- source_span...
    |   |   |-- string_scanner...
    |   |   '-- typed_data...
    |   '-- path 1.8.0-nullsafety
    |-- dotted_border 1.0.6
    |   |-- flutter...
    |   '-- path_drawing 0.4.1
    |       |-- flutter...
    |       |-- meta...
    |       |-- path_parsing 0.1.4
    |       |   |-- meta...
    |       |   '-- vector_math...
    |       '-- vector_math...
    |-- equatable 1.2.3
    |   |-- collection...
    |   '-- meta...
    |-- firebase_auth 0.16.1
    |   |-- firebase_auth_platform_interface 1.1.8
    |   |   |-- flutter...
    |   |   |-- meta...
    |   |   '-- plugin_platform_interface...
    |   |-- firebase_auth_web 0.1.3+1
    |   |   |-- firebase...
    |   |   |-- firebase_auth_platform_interface...
    |   |   |-- flutter...
    |   |   |-- flutter_web_plugins...
    |   |   |-- http_parser...
    |   |   |-- js...
    |   |   '-- meta...
    |   |-- firebase_core...
    |   |-- flutter...
    |   '-- meta...
    |-- firebase_crashlytics 0.1.4+1
    |   |-- flutter...
    |   '-- stack_trace 1.10.0-nullsafety
    |       '-- path...
    |-- firebase_dynamic_links 0.5.3
    |   '-- flutter...
    |-- flutter 0.0.0
    |   |-- characters 1.1.0-nullsafety.2
    |   |-- collection 1.15.0-nullsafety.2
    |   |-- meta...
    |   |-- sky_engine 0.0.99
    |   |-- typed_data 1.3.0-nullsafety.2
    |   |   '-- collection...
    |   '-- vector_math 2.1.0-nullsafety.2
    |-- flutter_bloc 6.0.1
    |   |-- bloc...
    |   |-- flutter...
    |   '-- provider...
    |-- flutter_blurhash 0.5.0
    |   |-- flutter...
    |   '-- meta...
    |-- flutter_downloader 1.5.0
    |   '-- flutter...
    |-- flutter_test 0.0.0
    |   |-- async...
    |   |-- boolean_selector 2.1.0-nullsafety
    |   |   |-- source_span...
    |   |   '-- string_scanner...
    |   |-- characters...
    |   |-- charcode 1.2.0-nullsafety
    |   |-- clock 1.1.0-nullsafety
    |   |-- collection...
    |   |-- fake_async 1.1.0-nullsafety
    |   |   |-- clock...
    |   |   '-- collection...
    |   |-- flutter...
    |   |-- matcher 0.12.10-nullsafety
    |   |   '-- stack_trace...
    |   |-- meta...
    |   |-- path...
    |   |-- source_span 1.8.0-nullsafety
    |   |   |-- charcode...
    |   |   |-- collection...
    |   |   |-- path...
    |   |   '-- term_glyph...
    |   |-- stack_trace...
    |   |-- stream_channel 2.1.0-nullsafety
    |   |   '-- async...
    |   |-- string_scanner 1.1.0-nullsafety
    |   |   |-- charcode...
    |   |   '-- source_span...
    |   |-- term_glyph 1.2.0-nullsafety
    |   |-- test_api 0.2.19-nullsafety
    |   |   |-- async...
    |   |   |-- boolean_selector...
    |   |   |-- collection...
    |   |   |-- matcher...
    |   |   |-- meta...
    |   |   |-- path...
    |   |   |-- source_span...
    |   |   |-- stack_trace...
    |   |   |-- stream_channel...
    |   |   |-- string_scanner...
    |   |   '-- term_glyph...
    |   |-- typed_data...
    |   '-- vector_math...
    |-- flutter_widgets 0.1.12
    |   |-- collection...
    |   |-- flutter...
    |   |-- html 0.14.0+3
    |   |   |-- csslib 0.16.2
    |   |   |   '-- source_span...
    |   |   '-- source_span...
    |   |-- meta...
    |   '-- quiver 2.1.3
    |       |-- matcher...
    |       '-- meta...
    |-- google_fonts 1.1.0
    |   |-- crypto...
    |   |-- flutter...
    |   |-- http 0.12.2
    |   |   |-- http_parser...
    |   |   |-- path...
    |   |   '-- pedantic...
    |   |-- path_provider...
    |   '-- pedantic...
    |-- google_sign_in 4.5.1
    |   |-- flutter...
    |   |-- google_sign_in_platform_interface 1.1.2
    |   |   |-- flutter...
    |   |   |-- meta...
    |   |   '-- quiver...
    |   |-- google_sign_in_web 0.9.1+1
    |   |   |-- flutter...
    |   |   |-- flutter_web_plugins...
    |   |   |-- google_sign_in_platform_interface...
    |   |   |-- js...
    |   |   '-- meta...
    |   '-- meta...
    |-- hive 1.4.3
    |   |-- crypto...
    |   '-- meta...
    |-- hive_flutter 0.3.1
    |   |-- flutter...
    |   |-- hive...
    |   |-- path...
    |   '-- path_provider...
    |-- hive_generator 0.7.1
    |   |-- analyzer 0.39.17
    |   |   |-- _fe_analyzer_shared 7.0.0
    |   |   |   '-- meta...
    |   |   |-- args...
    |   |   |-- charcode...
    |   |   |-- cli_util 0.2.0
    |   |   |   '-- path...
    |   |   |-- collection...
    |   |   |-- convert...
    |   |   |-- crypto...
    |   |   |-- glob...
    |   |   |-- html...
    |   |   |-- meta...
    |   |   |-- package_config 1.9.3
    |   |   |   |-- charcode...
    |   |   |   '-- path...
    |   |   |-- path...
    |   |   |-- pub_semver...
    |   |   |-- source_span...
    |   |   |-- watcher...
    |   |   '-- yaml...
    |   |-- build 1.3.0
    |   |   |-- analyzer...
    |   |   |-- async...
    |   |   |-- convert...
    |   |   |-- crypto...
    |   |   |-- glob...
    |   |   |-- logging...
    |   |   |-- meta...
    |   |   '-- path...
    |   |-- dartx 0.5.0
    |   |   |-- characters...
    |   |   |-- collection...
    |   |   |-- crypto...
    |   |   |-- meta...
    |   |   |-- path...
    |   |   '-- time 1.3.0
    |   |-- hive...
    |   '-- source_gen 0.9.6
    |       |-- analyzer...
    |       |-- async...
    |       |-- build...
    |       |-- dart_style...
    |       |-- glob...
    |       |-- meta...
    |       |-- path...
    |       |-- pedantic...
    |       '-- source_span...
    |-- howler 1.1.2
    |   '-- swiss_knife 2.5.8
    |       |-- intl...
    |       '-- resource_portable 2.1.7
    |           '-- typed_data...
    |-- html_unescape 1.0.1+3
    |-- meta 1.3.0-nullsafety.2
    |-- network_image_to_byte 0.0.1
    |   '-- flutter...
    |-- path_provider 1.6.11
    |   |-- flutter...
    |   |-- path_provider_linux 0.0.1+2
    |   |   |-- flutter...
    |   |   |-- path...
    |   |   |-- path_provider_platform_interface...
    |   |   '-- xdg_directories 0.1.0
    |   |       |-- flutter...
    |   |       |-- path...
    |   |       '-- process 3.0.13
    |   |           |-- file 5.2.1
    |   |           |   |-- intl...
    |   |           |   |-- meta...
    |   |           |   '-- path...
    |   |           |-- intl...
    |   |           |-- meta...
    |   |           |-- path...
    |   |           '-- platform...
    |   |-- path_provider_macos 0.0.4+3
    |   |   '-- flutter...
    |   '-- path_provider_platform_interface 1.0.2
    |       |-- flutter...
    |       |-- meta...
    |       |-- platform 2.2.1
    |       '-- plugin_platform_interface 1.0.2
    |           '-- meta...
    |-- pedantic 1.9.2
    |   '-- meta...
    |-- preload_page_view 0.1.4
    |   '-- flutter...
    |-- provider 4.3.2
    |   |-- collection...
    |   |-- flutter...
    |   '-- nested 0.0.4
    |       '-- flutter...
    |-- salsa_entities 0.0.0
    |   |-- json_annotation 3.0.1
    |   '-- meta...
    |-- sounds 1.0.0-beta.7
    |   |-- device_info 0.4.2+4
    |   |   '-- flutter...
    |   |-- flutter...
    |   |-- flutter_spinkit 4.1.2+1
    |   |   '-- flutter...
    |   |-- meta...
    |   |-- path...
    |   |-- path_provider...
    |   |-- provider...
    |   |-- sounds_common 1.0.7
    |   |   |-- flutter...
    |   |   |-- intl 0.16.1
    |   |   |   '-- path...
    |   |   |-- logger 0.9.2
    |   |   |-- meta...
    |   |   |-- path...
    |   |   |-- pedantic...
    |   |   '-- uuid...
    |   '-- uuid...
    |-- string_validator 0.1.4
    |-- transparent_image 1.0.0
    |-- uni_links 0.4.0
    |   '-- flutter...
    |-- url_launcher 5.5.0
    |   |-- flutter...
    |   |-- url_launcher_linux 0.0.1+1
    |   |   '-- flutter...
    |   |-- url_launcher_macos 0.0.1+7
    |   |   '-- flutter...
    |   |-- url_launcher_platform_interface 1.0.7
    |   |   |-- flutter...
    |   |   |-- meta...
    |   |   '-- plugin_platform_interface...
    |   '-- url_launcher_web 0.1.2
    |       |-- flutter...
    |       |-- flutter_web_plugins...
    |       |-- meta...
    |       |-- platform_detect 1.4.0
    |       |   |-- meta...
    |       |   '-- pub_semver...
    |       '-- url_launcher_platform_interface...
    |-- uuid 2.2.0
    |   |-- convert 2.1.1
    |   |   |-- charcode...
    |   |   '-- typed_data...
    |   '-- crypto 2.1.5
    |       |-- collection...
    |       |-- convert...
    |       '-- typed_data...
    '-- watcher 0.9.7+15
        |-- async...
        |-- path...
        '-- pedantic...
    
    

    Describe the bug For every Slider widget update, i seek the player. It happened to throw this error with no reference to my code.

    Reviewed by SwissCheese5 at 2020-08-12 17:36
  • 9. [HELP] Play raw Opus frames from websocket stream

    Hey, thanks for the great library, I'm really pleased with it! I would like to ask for help related to these questions:

    I'm streaming from my server raw Opus frames, without OGG or CAF container. Since iOS uses CAF instead of the standard OGG container, I'm trying to play the raw frames, so maybe somehow both of them can play my stream. But if necessary I can encapsulate it in a container. Is it possible to play raw Opus? Or somehow play CAF/Opus on Android maybe?

    My app receives audio data periodically through the websocket. I would like to redirect this audio stream to the player so it can play it continously. Is it somehow possible?

    Thank you very much in advance!

    Reviewed by Wyctus at 2020-08-04 22:11
  • 10. [Feature Request] Ability to change OS shade's play/pause/stopped state at any time

    Is your feature request related to a problem? Please describe. My use case as an example is playing a playlist, with each "track" consisting of several files with blank space between each file and the user can pause the "playlist" at any point (when the files are actively playing or when the files have naturally stopped and they are in the blank/delay between sound files playing). The shade can't accurately show that the user paused the playlist unless the user happened to hit pause in the midst of an actual sound playing. Everything seems to work really well as far as functionality of the player/events propagating from the shade/etc. it's just the visual state of the shade needs to be able to be updated to accurately show what the user would expect in a scenario like this.

    Describe the solution you'd like Ability to change state of play/pause/stopped OS shade's UI separately from the actual state of sound files.

    Describe alternatives you've considered The only alternative I've found is triggering a small/blank sound to play if no sound is playing when they hit pause, so it triggers "play" and then immediately triggers "pause" which makes the shade show the correct state.

    Reviewed by japhiaolson at 2020-06-29 14:08
  • 11. Wrap Codec in a MediaFormat

    I've been looking into the issues around #344 (re-architect codec support) and have come to the realisation that we have a number of problems with how we are using the Codec class.

    Reference material: https://developer.android.com/guide/topics/media/media-formats

    The Codec class has morphed into an object that attempts to describe both the Codec and the media container.

    This appears problematic as the Codec is not able to fully describe a media's format and the class name is misleading as it describes more than just a Codec.

    I'm proposing that we create a new class MediaFormat.

    class MediaFormat
    {
     Codec codec;
     MediaContainer container;
    int sampleRate = 16000,
    int numChannels = 1,
    int bitRate = 16000,
    Quality quality = Quality.low,
    }
    

    Note: I'm uncertain whether quality belongs here, its taken from the SoundRecorder.record method.

    The MediaFormat would replace Codec in the public api so when creating a Track you would now use something like:

    var format = MediaFormat.default;
    var track = Track.fromPath(path, format);
    
    var format = MediaFormat(Codecs.byName('mpeg'), MediaContainer.byName('mpeg'));
    format.sampleRate = 1000;
    format.numChannels = 2;
    
    track  = Track.fromBuffer(buffer, format);
    

    I believe this method has a number of advantages:

    1. we are now accurately describing the users requested media format.
    2. when doing codec conversions we would use the MediaFormat rather than just the Codec. This allows conversions to fully describe the desired target format. (e.g. stereo to mono, down sampling etc).
    3. We change the SoundRecorder.record method to take a MediaFormat which makes the api consistent.
    4. we future proof the api as MediaFormat accurately describes the format which means we are less likely to have to change the api. With the current implementation this is highly likely as the current Codec is a enum which means we can't add additional properties.

    The down side is that it probably makes our life harder as we need to deal with users passing formats that are not supported or inconsistent. Inconsistency is perhaps a problem with the SoundPlayer as it would essentially ignore the properties. The flip side is that I can't think of why this would be an actual problem. We also make the users life slightly harder as it takes more lines of code to describe a MediaFormat than a Codec. Having a number of default MediaFormats would mitigate this problem.

    Thoughts?

    Reviewed by bsutton at 2020-06-14 13:30
  • 12. Null safety support.

    Please provide null safety support. Also few months back you told you are releasing version 1 but on pub.dev it's still not version 1. It's a good project. Please update soon. Thanks

    Reviewed by SatyamKr07 at 2021-06-12 15:47
  • 13. [Question] Min API level

    Sounds is a fork of the Flutter Sound project.

    In Flutter Sound we have

    Flutter Sound requires an iOS 10.0 SDK (or later) Flutter Sound requires an Android API level 21 (or later)

    What about sounds ?

    Reviewed by sm2017 at 2021-04-12 06:12
  • 14. [BUG] can't run ios app after installing this lib

    After installing this lib and trying to run in ios simulator app crashes

    Running "flutter pub get" in rexi-app...
    Launching lib/main_dev.dart on iPhone 8 in debug mode...
    Running pod install...
    Running Xcode build...
    Xcode build done.                                           15.1s
    Failed to build iOS app
    Error output from Xcode build:
    ↳
        2021-03-27 01:01:07.923 xcodebuild[51809:3524288] apply_selection_policy_once: avoid use of removable GPUs (via com.apple.dt.xcodebuild:GPUSelectionPolicy->avoidRemovable)
        ** BUILD FAILED **
    
    
    Xcode's output:
    ↳
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/ShadePlayer.swift:50:101: error: editor placeholder in source file
                registrar?.addMethodCallDelegate(shadePlayerManager as! FlutterPlugin, channel: _channel ?? <#default value#>)
                                                                                              ^
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/ShadePlayer.swift:63:46: error: editor placeholder in source file
                _channel?.invokeMethod(methodName ?? <#default value#>, arguments: call)
                                                     ^
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/ShadePlayer.swift:247:51: error: expected expression in list of expressions
                    let bufferData = dataBuffer?.type(of: init)()
                                                          ^
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/ShadePlayer.swift:247:50: error: consecutive statements on a line must be separated by ';'
                    let bufferData = dataBuffer?.type(of: init)()
                                                         ^
                                                         ;
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/ShadePlayer.swift:247:55: error: initializers may only be declared within a type
                    let bufferData = dataBuffer?.type(of: init)()
                                                              ^
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/ShadePlayer.swift:247:55: error: expected '(' for initializer parameters
                    let bufferData = dataBuffer?.type(of: init)()
                                                              ^
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/SoundPlayer.swift:291:78: error: editor placeholder in source file
                let currentTime = NSNumber(value: Double(audioPlayer?.currentTime ?? <#default value#> * 1000))
                                                                                     ^
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/SoundRecorder.swift:51:85: error: editor placeholder in source file
                registrar.addMethodCallDelegate(soundRecorderManager!, channel: _channel ?? <#default value#>)
                                                                                            ^
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/SoundRecorder.swift:97:46: error: editor placeholder in source file
                _channel?.invokeMethod(methodName ?? <#default value#>, arguments: call)
                                                     ^
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/SoundRecorder.swift:263:81: error: editor placeholder in source file
                let currentTime = NSNumber(value: Double?(audioRecorder?.currentTime ?? <#default value#> * 1000) ?? <#default value#>)
                                                                                        ^
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/SoundRecorder.swift:263:110: error: editor placeholder in source file
                let currentTime = NSNumber(value: Double?(audioRecorder?.currentTime ?? <#default value#> * 1000) ?? <#default value#>)
                                                                                              ^
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/ShadePlayer.swift:45:25: error: argument labels for method 'register(withRegistrar:)' do not match those of overridden method 'register(with:)'
            override class func register(withRegistrar registrar: (NSObjectProtocol & FlutterPluginRegistrar)?) {
                                ^        ~~~~~~~~~~~~~
                                         with
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/ShadePlayer.swift:117:18: error: cannot override with a stored property 'setCategoryDone'
            internal var setCategoryDone: t_SET_CATEGORY_DONE!
                         ^
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/SoundPlayer.swift:172:9: note: attempt to override property here
            var setCategoryDone: t_SET_CATEGORY_DONE!
                ^
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/ShadePlayer.swift:118:18: error: cannot override with a stored property 'setActiveDone'
            internal var setActiveDone: t_SET_CATEGORY_DONE!
                         ^
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/SoundPlayer.swift:173:9: note: attempt to override property here
            var setActiveDone: t_SET_CATEGORY_DONE!
                ^
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/ShadePlayer.swift:48:41: error: argument type 'FlutterBinaryMessenger?' does not conform to expected type 'FlutterBinaryMessenger'
                    binaryMessenger: registrar?.messenger())
                                                ^
                                                            as! FlutterBinaryMessenger
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/ShadePlayer.swift:50:61: warning: forced cast from 'ShadePlayerManager?' to 'FlutterPlugin' only unwraps optionals; did you mean to use '!'?
                registrar?.addMethodCallDelegate(shadePlayerManager as! FlutterPlugin, channel: _channel ?? <#default value#>)
                                                 ~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~
                                                                   ! 
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/ShadePlayer.swift:71:38: error: value of type 'Any?' has no subscripts
                var slotNo = (call?.arguments["slotNo"] as? NSNumber)?.intValue ?? 0
                              ~~~~~~~~~~~~~~~^
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/ShadePlayer.swift:126:40: error: value of type 'Any?' has no subscripts
                let trackDict = call?.arguments["track"] as? [AnyHashable : Any]
                                ~~~~~~~~~~~~~~~^
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/ShadePlayer.swift:128:40: error: value of type 'Any?' has no subscripts
                let canPause = (call?.arguments["canPause"] as? NSNumber)?.boolValue ?? false
                                ~~~~~~~~~~~~~~~^
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/ShadePlayer.swift:129:46: error: value of type 'Any?' has no subscripts
                let canSkipForward = (call?.arguments["canSkipForward"] as? NSNumber)?.boolValue ?? false
                                      ~~~~~~~~~~~~~~~^
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/ShadePlayer.swift:130:47: error: value of type 'Any?' has no subscripts
                let canSkipBackward = (call?.arguments["canSkipBackward"] as? NSNumber)?.boolValue ?? false
                                       ~~~~~~~~~~~~~~~^
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/ShadePlayer.swift:168:16: error: ambiguous use of 'setCategoryDone'
                    if setCategoryDone == .not_SET {
                       ^
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/ShadePlayer.swift:117:18: note: found this candidate
            internal var setCategoryDone: t_SET_CATEGORY_DONE!
                         ^
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/SoundPlayer.swift:172:9: note: found this candidate
            var setCategoryDone: t_SET_CATEGORY_DONE!
                ^
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/ShadePlayer.swift:171:26: error: type 'String' has no member 'playback'
                                .playback)
                                ~^~~~~~~~
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/ShadePlayer.swift:174:17: error: ambiguous use of 'setCategoryDone'
                        setCategoryDone = .for_PLAYING
                        ^
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/ShadePlayer.swift:117:18: note: found this candidate
            internal var setCategoryDone: t_SET_CATEGORY_DONE!
                         ^
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/SoundPlayer.swift:172:9: note: found this candidate
            var setCategoryDone: t_SET_CATEGORY_DONE!
                ^
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/ShadePlayer.swift:178:16: error: ambiguous use of 'setActiveDone'
                    if setActiveDone == .not_SET {
                       ^
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/ShadePlayer.swift:118:18: note: found this candidate
            internal var setActiveDone: t_SET_CATEGORY_DONE!
                         ^
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/SoundPlayer.swift:173:9: note: found this candidate
            var setActiveDone: t_SET_CATEGORY_DONE!
                ^
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/ShadePlayer.swift:183:17: error: ambiguous use of 'setActiveDone'
                        setActiveDone = .for_PLAYING
                        ^
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/ShadePlayer.swift:118:18: note: found this candidate
            internal var setActiveDone: t_SET_CATEGORY_DONE!
                         ^
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/SoundPlayer.swift:173:9: note: found this candidate
            var setActiveDone: t_SET_CATEGORY_DONE!
                ^
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/ShadePlayer.swift:247:42: error: cannot call value of non-function type 'FlutterStandardDataType'
                    let bufferData = dataBuffer?.type(of: init)()
                                                 ^   ~~~~
    
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/ShadePlayer.swift:272:9: error: ambiguous use of 'setCategoryDone'
                setCategoryDone = .not_SET
                ^
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/ShadePlayer.swift:117:18: note: found this candidate
            internal var setCategoryDone: t_SET_CATEGORY_DONE!
                         ^
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/SoundPlayer.swift:172:9: note: found this candidate
            var setCategoryDone: t_SET_CATEGORY_DONE!
                ^
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/ShadePlayer.swift:273:9: error: ambiguous use of 'setActiveDone'
                setActiveDone = .not_SET
                ^
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/ShadePlayer.swift:118:18: note: found this candidate
            internal var setActiveDone: t_SET_CATEGORY_DONE!
                         ^
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/SoundPlayer.swift:173:9: note: found this candidate
            var setActiveDone: t_SET_CATEGORY_DONE!
                ^
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/ShadePlayer.swift:343:31: error: initializer for conditional binding must have Optional type, not 'Data'
                    if let url = url, let data = Data(contentsOf: url) {
                                      ^          ~~~~~~~~~~~~~~~~~~~~~
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/ShadePlayer.swift:343:42: error: call can throw, but it is not marked with 'try' and the error is not handled
                    if let url = url, let data = Data(contentsOf: url) {
                                                 ^
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/ShadePlayer.swift:443:30: error: value of optional type 'AVAudioPlayer?' must be unwrapped to refer to member 'isPlaying' of wrapped base type 'AVAudioPlayer'
                        let b = self.audioPlayer.isPlaying
                                     ^
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/ShadePlayer.swift:443:30: note: chain the optional using '?' to access member 'isPlaying' only for non-'nil' base values
                        let b = self.audioPlayer.isPlaying
                                     ^
                                                ?
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/ShadePlayer.swift:443:30: note: force-unwrap using '!' to abort execution if the optional value contains 'nil'
                        let b = self.audioPlayer.isPlaying
                                     ^
                                                !
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/ShadePlayer.swift:455:30: warning: result of call to 'resume()' is unused
                                self.resume()
                                     ^     ~~
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/ShadePlayer.swift:487:13: error: ambiguous use of 'setActiveDone'
                if (setActiveDone != .by_USER /* The caller did it himself : Sounds must not change that) */) && (setActiveDone != .not_SET) {
                    ^
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/ShadePlayer.swift:118:18: note: found this candidate
            internal var setActiveDone: t_SET_CATEGORY_DONE!
                         ^
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/SoundPlayer.swift:173:9: note: found this candidate
            var setActiveDone: t_SET_CATEGORY_DONE!
                ^
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/ShadePlayer.swift:493:13: error: ambiguous use of 'setActiveDone'
                    setActiveDone = .not_SET
                    ^
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/ShadePlayer.swift:118:18: note: found this candidate
            internal var setActiveDone: t_SET_CATEGORY_DONE!
                         ^
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/SoundPlayer.swift:173:9: note: found this candidate
            var setActiveDone: t_SET_CATEGORY_DONE!
                ^
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/ShadePlayer.swift:50:101: error: editor placeholder in source file
                registrar?.addMethodCallDelegate(shadePlayerManager as! FlutterPlugin, channel: _channel ?? <#default value#>)
                                                                                              ^
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/ShadePlayer.swift:63:46: error: editor placeholder in source file
                _channel?.invokeMethod(methodName ?? <#default value#>, arguments: call)
                                                     ^
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/SoundPlayer.swift:291:78: error: editor placeholder in source file
                let currentTime = NSNumber(value: Double(audioPlayer?.currentTime ?? <#default value#> * 1000))
                                                                                     ^
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/SoundRecorder.swift:51:85: error: editor placeholder in source file
                registrar.addMethodCallDelegate(soundRecorderManager!, channel: _channel ?? <#default value#>)
                                                                                            ^
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/SoundRecorder.swift:97:46: error: editor placeholder in source file
                _channel?.invokeMethod(methodName ?? <#default value#>, arguments: call)
                                                     ^
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/SoundRecorder.swift:263:81: error: editor placeholder in source file
                let currentTime = NSNumber(value: Double?(audioRecorder?.currentTime ?? <#default value#> * 1000) ?? <#default value#>)
                                                                                        ^
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/SoundRecorder.swift:263:110: error: editor placeholder in source file
                let currentTime = NSNumber(value: Double?(audioRecorder?.currentTime ?? <#default value#> * 1000) ?? <#default value#>)
                                                                                              ^
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/SoundPlayer.swift:36:16: warning: parameter of 'register(with:)' has different optionality than expected by protocol 'FlutterPlugin'
            class func register(with registrar: (NSObjectProtocol & FlutterPluginRegistrar)?) {
                       ^                                                                   ~
    
        Flutter.FlutterPlugin:2:17: note: requirement 'register(with:)' declared here
            static func register(with registrar: FlutterPluginRegistrar)
                        ^
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/SoundPlayer.swift:45:10: warning: parameter of 'handle(_:result:)' has different optionality than expected by protocol 'FlutterPlugin'
            func handle(_ call: FlutterMethodCall?, result: FlutterResult) {
                 ^                               ~
    
        Flutter.FlutterPlugin:6:19: note: requirement 'handle(_:result:)' declared here
            optional func handle(_ call: FlutterMethodCall, result: @escaping FlutterResult)
                          ^
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/SoundPlayer.swift:39:53: warning: forced cast from 'FlutterBinaryMessenger?' to 'FlutterBinaryMessenger' only unwraps optionals; did you mean to use '!'?
                    binaryMessenger: registrar?.messenger() as! FlutterBinaryMessenger)
                                     ~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~
                                                           ! 
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/SoundPlayer.swift:42:61: warning: forced cast from 'SoundPlayerManager?' to 'FlutterPlugin' only unwraps optionals; did you mean to use '!'?
                registrar?.addMethodCallDelegate(soundPlayerManager as! FlutterPlugin, channel: _channel)
                                                 ~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~
                                                                   ! 
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/SoundPlayer.swift:37:12: warning: variable '_channel' was never mutated; consider changing to 'let' constant
               var _channel = FlutterMethodChannel(
               ~~~ ^
               let
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/SoundPlayer.swift:46:38: error: value of type 'Any?' has no subscripts
                let slotNo = (call?.arguments["slotNo"] as? NSNumber)?.intValue ?? 0
                              ~~~~~~~~~~~~~~~^
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/SoundPlayer.swift:47:35: error: value of type 'Any?' has no subscripts
                let test = call?.arguments["slotNo"]
                           ~~~~~~~~~~~~~~~^
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/SoundPlayer.swift:72:39: error: value of type 'Any?' has no subscripts
                    let path = call?.arguments["path"] as? String
                               ~~~~~~~~~~~~~~~^
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/SoundPlayer.swift:73:47: error: value of type 'Any?' has no subscripts
                    let callbackUuid = call?.arguments["callbackUuid"] as? String
                                       ~~~~~~~~~~~~~~~^
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/SoundPlayer.swift:76:39: error: value of type 'Any?' has no subscripts
                    let path = call?.arguments["path"] as? String
                               ~~~~~~~~~~~~~~~^
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/SoundPlayer.swift:79:45: error: value of type 'Any?' has no subscripts
                    let dataBuffer = call?.arguments["dataBuffer"] as? FlutterStandardTypedData
                                     ~~~~~~~~~~~~~~~^
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/SoundPlayer.swift:89:50: error: value of type 'Any?' has no subscripts
                    let positionInMilli = call?.arguments["milli"] as? NSNumber
                                          ~~~~~~~~~~~~~~~^
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/SoundPlayer.swift:92:50: error: value of type 'Any?' has no subscripts
                    let intervalInMilli = call?.arguments["milli"] as? NSNumber
                                          ~~~~~~~~~~~~~~~^
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/SoundPlayer.swift:95:41: error: value of type 'Any?' has no subscripts
                    let volume = call?.arguments["volume"] as? NSNumber
                                 ~~~~~~~~~~~~~~~^
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/SoundPlayer.swift:98:40: error: value of type 'Any?' has no subscripts
                    let categ = call?.arguments["category"] as? String
                                ~~~~~~~~~~~~~~~^
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/SoundPlayer.swift:99:39: error: value of type 'Any?' has no subscripts
                    let mode = call?.arguments["mode"] as? String
                               ~~~~~~~~~~~~~~~^
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/SoundPlayer.swift:100:42: error: value of type 'Any?' has no subscripts
                    let options = call?.arguments["options"] as? NSNumber
                                  ~~~~~~~~~~~~~~~^
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/SoundPlayer.swift:103:43: error: value of type 'Any?' has no subscripts
                    let enabled = (call?.arguments["enabled"] as? NSNumber)?.boolValue ?? false
                                   ~~~~~~~~~~~~~~~^
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/SoundPlayer.swift:113:9: error: cannot find '_channel' in scope
                _channel?.invokeMethod(methodName, arguments: call)
                ^~~~~~~~
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/SoundPlayer.swift:130:85: warning: initialization of 'UnsafeMutablePointer<UInt32>' results in a dangling pointer
                status = AudioFileGetProperty(wfileID, kAudioFilePropertyEstimatedDuration, UnsafeMutablePointer<UInt32>(mutating: &thePropSize), UnsafeMutableRawPointer(mutating: &outDataSize))
                                                                                            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/SoundPlayer.swift:130:124: note: implicit argument conversion from 'UInt32' to 'UnsafePointer<UInt32>' produces a pointer valid only for the duration of the call to 'init(mutating:)'
                status = AudioFileGetProperty(wfileID, kAudioFilePropertyEstimatedDuration, UnsafeMutablePointer<UInt32>(mutating: &thePropSize), UnsafeMutableRawPointer(mutating: &outDataSize))
                                                                                              ^~~~~~~~~~~~
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/SoundPlayer.swift:130:124: note: use 'withUnsafePointer' in order to explicitly convert argument to pointer valid for a defined scope
                status = AudioFileGetProperty(wfileID, kAudioFilePropertyEstimatedDuration, UnsafeMutablePointer<UInt32>(mutating: &thePropSize), UnsafeMutableRawPointer(mutating: &outDataSize))
                                                                                              ^
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/SoundPlayer.swift:130:139: warning: initialization of 'UnsafeMutableRawPointer' results in a dangling pointer
                status = AudioFileGetProperty(wfileID, kAudioFilePropertyEstimatedDuration, UnsafeMutablePointer<UInt32>(mutating: &thePropSize), UnsafeMutableRawPointer(mutating: &outDataSize))
                                                                                              ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/SoundPlayer.swift:130:173: note: implicit argument conversion from 'Float64' (aka 'Double') to 'UnsafeRawPointer' produces a pointer valid only for the duration of the call to 'init(mutating:)'
                status = AudioFileGetProperty(wfileID, kAudioFilePropertyEstimatedDuration, UnsafeMutablePointer<UInt32>(mutating: &thePropSize), UnsafeMutableRawPointer(mutating: &outDataSize))
                                                                                              ^~~~~~~~~~~~
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/SoundPlayer.swift:130:173: note: use 'withUnsafeBytes' in order to explicitly convert argument to buffer pointer valid for a defined scope
                status = AudioFileGetProperty(wfileID, kAudioFilePropertyEstimatedDuration, UnsafeMutablePointer<UInt32>(mutating: &thePropSize), UnsafeMutableRawPointer(mutating: &outDataSize))
                                                                                              ^
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/SoundPlayer.swift:139:90: warning: forced cast from 'String?' to 'CVarArg' only unwraps optionals; did you mean to use '!'?
                        format: "{\"callbackUuid\": \"%@\", \"milliseconds\": %d}", callbackUuid as! CVarArg, milliseconds)
                                                                                    ~~~~~~~~~~~~~^~~~~~~~~~~
                                                                                              ! 
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/SoundPlayer.swift:141:23: error: heterogeneous collection literal could only be inferred to '[String : Any]'; add explicit type annotation if this is intentional
                    let dic = [
                              ^
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/SoundPlayer.swift:149:93: warning: forced cast from 'String?' to 'CVarArg' only unwraps optionals; did you mean to use '!'?
                        format: "{\"callbackUuid\": \"%@\", \"description\": \"%d\"}", callbackUuid as! CVarArg, Int(status))
                                                                                       ~~~~~~~~~~~~~^~~~~~~~~~~
                                                                                              ! 
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/SoundPlayer.swift:150:23: error: heterogeneous collection literal could only be inferred to '[String : Any]'; add explicit type annotation if this is intentional
                    let dic = [
                              ^
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/SoundPlayer.swift:290:60: error: value of optional type 'Double?' must be unwrapped to a value of type 'Double'
                let duration = NSNumber(value: Double(audioPlayer?.duration * 1000))
                                                                   ^
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/SoundPlayer.swift:290:60: note: coalesce using '??' to provide a default when the optional value contains 'nil'
                let duration = NSNumber(value: Double(audioPlayer?.duration * 1000))
                                                                   ^
                                                                            ?? <#default value#>
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/SoundPlayer.swift:290:60: note: force-unwrap using '!' to abort execution if the optional value contains 'nil'
                let duration = NSNumber(value: Double(audioPlayer?.duration * 1000))
                                                                 ~ ^
                                                                 !
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/SoundPlayer.swift:374:22: error: type 'String' has no member 'playback'
                            .playback)
                            ~^~~~~~~~
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/SoundPlayer.swift:411:30: warning: result of 'FlutterError' initializer is unused
                                    (FlutterError(
                                     ^           ~
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/SoundPlayer.swift:436:18: warning: result of 'FlutterError' initializer is unused
                        (FlutterError(
                         ^           ~
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/SoundPlayer.swift:450:37: error: static member 'init' cannot be used on instance of type 'FlutterStandardTypedData'
                    if let data = dataBuffer?.init() {
                                  ~~~~~~~~~~^
                                              type(of:  )
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/SoundPlayer.swift:460:22: error: type 'String' has no member 'playback'
                            .playback)
                            ~^~~~~~~~
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/SoundPlayer.swift:477:14: warning: result of 'FlutterError' initializer is unused
                    (FlutterError(
                     ^           ~
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/SoundPlayer.swift:525:25: error: 'AVAudioSession.Category' (aka 'NSString') is not implicitly convertible to 'String'; did you mean to use 'as' to explicitly convert?
                                AVAudioSession.Category(categ /* AVAudioSessionCategoryPlayback */),
                                ^
                                                                                              as String
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/SoundPlayer.swift:526:31: error: 'AVAudioSession.Mode' (aka 'NSString') is not implicitly convertible to 'String'; did you mean to use 'as' to explicitly convert?
                                mode: AVAudioSession.Mode(mode),
                                      ^
                                                                as String
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/SoundPlayer.swift:525:49: error: missing argument label 'string:' in call
                                AVAudioSession.Category(categ /* AVAudioSessionCategoryPlayback */),
                                                        ^
                                                        string: 
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/SoundPlayer.swift:525:49: error: value of optional type 'String?' must be unwrapped to a value of type 'String'
                                AVAudioSession.Category(categ /* AVAudioSessionCategoryPlayback */),
                                                        ^
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/SoundPlayer.swift:525:49: note: coalesce using '??' to provide a default when the optional value contains 'nil'
                                AVAudioSession.Category(categ /* AVAudioSessionCategoryPlayback */),
                                                        ^
                                                              ?? <#default value#>
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/SoundPlayer.swift:525:49: note: force-unwrap using '!' to abort execution if the optional value contains 'nil'
                                AVAudioSession.Category(categ /* AVAudioSessionCategoryPlayback */),
                                                        ^
                                                             !
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/SoundPlayer.swift:526:51: error: missing argument label 'string:' in call
                                mode: AVAudioSession.Mode(mode),
                                                          ^
                                                          string: 
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/SoundPlayer.swift:526:51: error: value of optional type 'String?' must be unwrapped to a value of type 'String'
                                mode: AVAudioSession.Mode(mode),
                                                          ^
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/SoundPlayer.swift:526:51: note: coalesce using '??' to provide a default when the optional value contains 'nil'
                                mode: AVAudioSession.Mode(mode),
                                                          ^
                                                               ?? <#default value#>
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/SoundPlayer.swift:526:51: note: force-unwrap using '!' to abort execution if the optional value contains 'nil'
                                mode: AVAudioSession.Mode(mode),
                                                          ^
                                                              !
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/SoundPlayer.swift:527:75: error: cannot convert value of type 'Int' to expected argument type 'UInt'
                                options: AVAudioSession.CategoryOptions(rawValue: options))
                                                                                  ^
                                                                                  UInt(  )
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/SoundPlayer.swift:577:19: error: heterogeneous collection literal could only be inferred to '[String : Any]'; add explicit type annotation if this is intentional
                let dic = [
                          ^
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/ShadePlayer.swift:50:101: error: editor placeholder in source file
                registrar?.addMethodCallDelegate(shadePlayerManager as! FlutterPlugin, channel: _channel ?? <#default value#>)
                                                                                              ^
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/ShadePlayer.swift:63:46: error: editor placeholder in source file
                _channel?.invokeMethod(methodName ?? <#default value#>, arguments: call)
                                                     ^
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/SoundPlayer.swift:291:78: error: editor placeholder in source file
                let currentTime = NSNumber(value: Double(audioPlayer?.currentTime ?? <#default value#> * 1000))
                                                                                     ^
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/SoundRecorder.swift:51:85: error: editor placeholder in source file
                registrar.addMethodCallDelegate(soundRecorderManager!, channel: _channel ?? <#default value#>)
                                                                                            ^
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/SoundRecorder.swift:97:46: error: editor placeholder in source file
                _channel?.invokeMethod(methodName ?? <#default value#>, arguments: call)
                                                     ^
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/SoundRecorder.swift:263:81: error: editor placeholder in source file
                let currentTime = NSNumber(value: Double?(audioRecorder?.currentTime ?? <#default value#> * 1000) ?? <#default value#>)
                                                                                        ^
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/SoundRecorder.swift:263:110: error: editor placeholder in source file
                let currentTime = NSNumber(value: Double?(audioRecorder?.currentTime ?? <#default value#> * 1000) ?? <#default value#>)
                                                                                              ^
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/SoundRecorder.swift:66:22: error: referencing operator function '>=' on 'BinaryInteger' requires that 'NSNumber' conform to 'BinaryInteger'
                while slotNo >= (soundRecorderSlots?.count ?? 0) {
                             ^
        Swift.BinaryInteger:1:11: note: where 'Self' = 'NSNumber'
        extension BinaryInteger {
                  ^
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/SoundRecorder.swift:70:49: error: subscript 'subscript(_:)' requires that 'NSNumber' conform to 'RangeExpression'
                var aSoundRecorder = soundRecorderSlots?[slotNo] as? SoundRecorder
                                                        ^
        Swift.MutableCollection:2:23: note: where 'R' = 'NSNumber'
            @inlinable public subscript<R>(r: R) -> Self.SubSequence where R : RangeExpression, Self.Index == R.Bound { get set }
                              ^
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/SoundRecorder.swift:73:39: error: subscript 'subscript(_:)' requires that 'NSNumber' conform to 'RangeExpression'
                    assert(soundRecorderSlots?[slotNo] == NSNull())
                                              ^
        Swift.MutableCollection:2:23: note: where 'R' = 'NSNumber'
            @inlinable public subscript<R>(r: R) -> Self.SubSequence where R : RangeExpression, Self.Index == R.Bound { get set }
                              ^
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/SoundRecorder.swift:167:22: error: type 'String' has no member 'playAndRecord'
                            .playAndRecord,
                            ~^~~~~~~~~~~~~
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/SoundRecorder.swift:177:58: error: cannot find 'AVAudioSessionPortOverrideSpeaker' in scope
                        try audioSession.overrideOutputAudioPort(AVAudioSessionPortOverrideSpeaker)
                                                                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/SoundRecorder.swift:186:83: warning: conditional cast from '[String : NSNumber]' to '[String : Any]' always succeeds
                    if let audioFileURL = audioFileURL, let audioSettings = audioSettings as? [String : Any] {
                                                                                          ^
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/SoundRecorder.swift:303:18: error: type 'ExpressibleByStringLiteral' does not conform to protocol 'Hashable'
                var dic: [ExpressibleByStringLiteral : NSNumber]? = nil
                         ^
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/SoundRecorder.swift:303:19: error: protocol 'ExpressibleByStringLiteral' can only be used as a generic constraint because it has Self or associated type requirements
                var dic: [ExpressibleByStringLiteral : NSNumber]? = nil
                          ^
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/SoundRecorder.swift:310:60: error: cannot convert value of type '[ExpressibleByStringLiteral : NSNumber]?' to expected argument type '[AnyHashable : Any]?'
                getPlugin()?.invokeCallback(methodName, arguments: dic)
                                                                   ^
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/SoundRecorder.swift:310:60: note: arguments to generic parameter 'Key' ('ExpressibleByStringLiteral' and 'AnyHashable') are expected to be equal
                getPlugin()?.invokeCallback(methodName, arguments: dic)
                                                                   ^
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/SoundRecorder.swift:310:60: note: arguments to generic parameter 'Value' ('NSNumber' and 'Any') are expected to be equal
                getPlugin()?.invokeCallback(methodName, arguments: dic)
                                                                   ^
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/ShadePlayer.swift:50:101: error: editor placeholder in source file
                registrar?.addMethodCallDelegate(shadePlayerManager as! FlutterPlugin, channel: _channel ?? <#default value#>)
                                                                                              ^
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/ShadePlayer.swift:63:46: error: editor placeholder in source file
                _channel?.invokeMethod(methodName ?? <#default value#>, arguments: call)
                                                     ^
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/SoundPlayer.swift:291:78: error: editor placeholder in source file
                let currentTime = NSNumber(value: Double(audioPlayer?.currentTime ?? <#default value#> * 1000))
                                                                                     ^
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/SoundRecorder.swift:51:85: error: editor placeholder in source file
                registrar.addMethodCallDelegate(soundRecorderManager!, channel: _channel ?? <#default value#>)
                                                                                            ^
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/SoundRecorder.swift:97:46: error: editor placeholder in source file
                _channel?.invokeMethod(methodName ?? <#default value#>, arguments: call)
                                                     ^
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/SoundRecorder.swift:263:81: error: editor placeholder in source file
                let currentTime = NSNumber(value: Double?(audioRecorder?.currentTime ?? <#default value#> * 1000) ?? <#default value#>)
                                                                                        ^
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/SoundRecorder.swift:263:110: error: editor placeholder in source file
                let currentTime = NSNumber(value: Double?(audioRecorder?.currentTime ?? <#default value#> * 1000) ?? <#default value#>)
                                                                                              ^
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/ShadePlayer.swift:50:101: error: editor placeholder in source file
                registrar?.addMethodCallDelegate(shadePlayerManager as! FlutterPlugin, channel: _channel ?? <#default value#>)
                                                                                              ^
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/ShadePlayer.swift:63:46: error: editor placeholder in source file
                _channel?.invokeMethod(methodName ?? <#default value#>, arguments: call)
                                                     ^
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/SoundPlayer.swift:291:78: error: editor placeholder in source file
                let currentTime = NSNumber(value: Double(audioPlayer?.currentTime ?? <#default value#> * 1000))
                                                                                     ^
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/SoundRecorder.swift:51:85: error: editor placeholder in source file
                registrar.addMethodCallDelegate(soundRecorderManager!, channel: _channel ?? <#default value#>)
                                                                                            ^
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/SoundRecorder.swift:97:46: error: editor placeholder in source file
                _channel?.invokeMethod(methodName ?? <#default value#>, arguments: call)
                                                     ^
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/SoundRecorder.swift:263:81: error: editor placeholder in source file
                let currentTime = NSNumber(value: Double?(audioRecorder?.currentTime ?? <#default value#> * 1000) ?? <#default value#>)
                                                                                        ^
        /Users/narek/development/flutter/.pub-cache/git/sounds-c44ea98323dd99fdf1dca3262e2bce39581c39d2/ios/Classes/SoundRecorder.swift:263:110: error: editor placeholder in source file
                let currentTime = NSNumber(value: Double?(audioRecorder?.currentTime ?? <#default value#> * 1000) ?? <#default value#>)
                                                                                              ^
        Command CompileSwift failed with a nonzero exit code
        Command CompileSwift failed with a nonzero exit code
        Command CompileSwift failed with a nonzero exit code
        Command CompileSwift failed with a nonzero exit code
        note: Using new build system
        note: Building targets in parallel
        note: Planning build
        note: Constructing build description
    
    Could not build the application for the simulator.
    Error launching application on iPhone 8.
    

    flutter doctor :

    Doctor summary (to see all details, run flutter doctor -v):
    [✓] Flutter (Channel stable, 2.0.3, on macOS 11.2.3 20D91 darwin-x64, locale en-AM)
    [✓] Android toolchain - develop for Android devices (Android SDK version 30.0.3)
    [✓] Xcode - develop for iOS and macOS
    [✓] Chrome - develop for the web
    [✓] Android Studio
    [✓] VS Code (version 1.54.3)
    [✓] Connected device (2 available)
    
    • No issues found!
    
    Reviewed by NarHakobyan at 2021-03-26 21:05
  • 15. Fix not playing audio on iOS for some local paths

    When handing local system paths, a special constructor must be called on URL. See the official documentation.

    For example, without this fix /Users/some-user/Library/Developer/CoreSimulator/Devices/828006A2-398A-40E6-B8C4-10D6974A84EA/data/Containers/Data/Application/005825E6-2EC9-45BD-9F9F-54EE3D3033D8/Library/Application Support/audio/some-audio-file

    would result in nil being handed as a URL to AVAudioPlayer.

    Unfortunately the project did not compile, so I applied some quick fixes as a second commit to this PR to make the project work. The actual fix can be found in this commit

    Reviewed by t-unit at 2021-02-10 17:08
  • 16. [HELP] Convert IOS code to FFI

    I've opened this issue to track work on converting the iOS code (and eventually the java code) to FFI calls.

    The work is being down in:

    https://github.com/bsutton/sounds/tree/sounds_federated

    The problem we are having right now is that we need 3 languages (dart, objective-c, java) to maintain Sounds. As we move to support more platforms this will only get worse.

    As such we are looking to move to FFI (foreign function interface) to do direct calls from Dart into the required native calls. This will result in only a single language being required (dart) to support Sounds.

    Our fall back position is to use 'C' as a bridging language to the platform native calls. The 'C' bridge will be a very small wrapper for each native call. The reason for this is that we are still uncertain if we can achieve FFI calls directly to iOS native libraries.

    What is the current state of this development?

    The ffi work is proving fairly difficult but we are making (slow) progress. We would certainly appreciate any help.

    Were we are right now:

    We have done a conversion of the objective-c code to dart. We did this by putting the objective-c code throught swiftify to create swift code. We then manually modified the swift code (line by line) to change it to dart code. This process went fairly smoothly but there are still a few spots where we are not certain if we converted the code correctly but we think its mostly close.

    We are now looking at how we do the native calls to IOS libraries.

    We are using the dart-native package to do the heavy lifting as it provides a reasonable wrapper for calls into ios.

    The next step is to provide a dart wrapper library for the set of ios calls we need to make.

    We have done some of this work.

    The process we have been using:

    Try using the dart-native 'generator' to create dart wrappers for the required ios library. This has been partially successful but the generator often fails as it is still unable to parse some of the objective-c syntax.

    When this occurs we try to create a 'cut-down' version of the ios header files that only contain the required entry points. This often gives us a much better chance of doing the conversion.

    As of now we think we have managed to create dart wrappers for each of the ios calls used by Sounds. We are still uncertain if these dart wrappers are correct.

    The next step is to get each of these functions to dynamically load. This requires us to find the ios library for each of these entry points.

    We raised an question on stack overflow to get some guidance on this.

    https://stackoverflow.com/questions/65083514/ios-dylib-entry-points

    The summary answer is: In that case, I suggest searching through the folder /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk. The .tbd files in there contain library paths as well as a list of exported symbols. – Siguza Dec 3 '20 at 23:14

    Actions:

    1. finding the list of exports to that we need to call. You can see the calls we are making in: https://github.com/bsutton/sounds/tree/sounds_federated/sounds/lib/src/ios

    2. Make a decision on the final structure of the code based. We are trying to move to a federated model that still allows uses to use pigeon if that is the appropriate solution and given that in the short term we will be using pigeon with the java code.

    This stack overflow article has some useful references: https://stackoverflow.com/questions/64037971/using-dart-pigeon-in-a-federated-model

    Reviewed by bsutton at 2021-01-12 23:41

Related

Audio Recorder Jordan AlcarazAudio Recorder [156⭐] - Record audio and store it locally by Jordan Alcaraz.

Audio recorder Record audio and store it locally Usage To use this plugin, add audio_recorder as a dependency in your pubspec.yaml file. Android Make

Jun 16, 2022
Song-Noise-Recorder - Song Noise Recorder Built Using Flutter
Song-Noise-Recorder - Song Noise Recorder Built Using Flutter

Song-Noise-Recorder Flutter App that is able to play an .mp3 song (local asset)

Feb 7, 2022
A Flutter package for both android and iOS which provides Audio recorder
A Flutter package for both android and iOS which provides Audio recorder

social_media_recorder A Flutter package for both android and iOS which provides

Jun 28, 2022
Virlow Flutter Recorder - an open-source Flutter application that can transcribe recorded audio
Virlow Flutter Recorder - an open-source Flutter application that can transcribe recorded audio

The Virlow Flutter Recorder is an open-source Flutter application that can transcribe recorded audio, plus it includes TL;DR and Short Hand Notes for your transcription. It also consists of a rich text editor that allows you to edit the transcription plus add any additional notes you require.

Jun 1, 2022
A feature-packed audio recorder app built using Flutter
A feature-packed audio recorder app built using Flutter

Qoohoo Submission ??️ An audio recording/playing app. ??️ This is a basic audio

Jun 6, 2022
A Sound Player App For Flutter
A Sound Player App For Flutter

sound_player_app A Sound Player Flutter application.

Jan 18, 2022
A Flutter audio plugin (Swift/Java) to play remote or local audio files on iOS / Android / MacOS and Web
A Flutter audio plugin (Swift/Java) to play remote or local audio files on iOS / Android / MacOS and Web

AudioPlayer A Flutter audio plugin (Swift/Java) to play remote or local audio files on iOS / Android / MacOS and Web. Online demo Features Android / i

Jun 7, 2022
WaVe - an audio streaming platform which gives the best user experience without any compromise in the audio quality

WaVe is an audio streaming platform which gives the best user experience without any compromise in the audio quality, and there is even space for the users to explore their creativity. And makes it more efficient with the AI features.

May 31, 2022
Music Player app made with Just audio library and Local database Hive.
Music Player app made with Just audio library and Local database Hive.

Music Player app made with Just audio library and Local database Hive. Find the free and Royelty music with Happy Rock application. The app contains information about singers and you can make your own playlist with Songs.Happy rock App's features are same as the real music app like spotify, amazon music etc.

Jun 13, 2022
Just_audio: a feature-rich audio player for Android, iOS, macOS and web
Just_audio: a feature-rich audio player for Android, iOS, macOS and web

just_audio just_audio is a feature-rich audio player for Android, iOS, macOS and web. Mixing and matching audio plugins The flutter plugin ecosystem c

Feb 2, 2022
A opensource, minimal and powerful audio player for android

A opensource, minimal and powerful audio player for android

Jun 22, 2022
Audio player app in Flutter. Created as a tutorial for learning Flutter.

Music Player: create a simple Flutter music player app This is a Flutter project used during a series of articles on I should go to sleep. License Cop

May 5, 2022
🎹 SoundCloud Audio Player for Flutter.
🎹 SoundCloud Audio Player for Flutter.

SoundCloud Audio Player for Flutter Demo on Youtube SoundCloud style audio player in Flutter Features Requirements Support License Features SoundCloud

Jun 6, 2022
Flutter Music Player - A complete and open source music player designed in flutter.
 Flutter Music Player - A complete and open source music player designed in flutter.

Flutter Music Player A complete and open source music player designed in flutter. It is first complete music player designed in flutter. This app expl

Jun 28, 2022
YoYo Video Player is a HLS(.m3u8) video player for flutter.
YoYo Video Player is a HLS(.m3u8) video player for flutter.

YoYo Video Player YoYo Video Player is a HLS(.m3u8) video player for flutter. The video_player is a video player that allows you to select HLS video s

Jun 18, 2022
Flutter-Music-Player - A simple music player app that let you play mp3 songs with some customization feature with a rich user interface
Flutter-Music-Player - A simple music player app that let you play mp3 songs with some customization feature with a rich user interface

Flutter-Music-Player - A simple music player app that let you play mp3 songs with some customization feature with a rich user interface

Feb 10, 2022
Flutter plugin that can support audio recording and level metering
Flutter plugin that can support audio recording and level metering

flutter_audio_recorder English | 简体中文 Flutter Audio Record Plugin that supports Record Pause Resume Stop and provide access to audio level metering pr

Jun 16, 2022
A Flutter audio-plugin to playing and recording sounds
A Flutter audio-plugin to playing and recording sounds

medcorder_audio Flutter record/play audio plugin. Developed for Evrone.com Funded by Medcorder Medcorder.com Getting Started For help getting started

May 19, 2022
Flutter (web-only at this moment) plugin for recording audio (using the microphone).

Microphone Flutter (web-only at this moment) plugin for recording audio (using the microphone). Getting started To learn more about the plugin and get

Jan 1, 2022