The Changelog of The τ Project.

9.3.8

  • closePlayer() and closeRecorder was awaiting instead of returning a Future
  • Merge PR #1000 : Enable Voice Processing on iOS
  • Fix the Demo Example “Play remote file With Codec=FLAC” #1017

9.3.7

  • SetLevel is not async : #1006, #1012
  • The various Assets inside Example/Demo was declared with a bad path to Canardoux : #1006, #998

9.3.6

  • Link with “logger: ^2.0.2” : #1006, #998
  • Link with “uuid: ^4.3.3” : #1006, #998
  • environment sdk version is now : sdk: ^3.3.0
  • Fixes many warnings during build
  • Fixes a bug in openPlayer and openRecorder : The functionn awaited on the completion instead of returning a Future of the Player/Recorder

9.2.13

9.2.12

9.2.10

9.2.9

  • Fix a bug when we try to logError(NULL) : #880

9.2.2

  • Fix a regression on Flutter Sound on Web, introduced in 9.2.1

9.2.1

9.1.9

  • Fix the bug where we had many clicks when playing from a stream. PR #3 on flutter_sound_core. Thank you Antonio for this fix. For me, this bug was the main Flutter Sound issue, by far. I really appreciate your PR.

9.1.7

  • Update the dep androidx.media:media to 1.4.1. #822. Thanks andrea689 for the fix :)

9.1.6

  • 9.1.5 release was bad. Retry.

9.1.5

  • Fix a leak with temporary files when playing buffers on Android. #847

9.1.3

9.1.2

  • Fix two bugs in verb getProgress(). #835[https://github.com/Canardoux/flutter_sound/issues/835]

9.1.1

  • Flutter Sound on web : it is not necessary anymore to include the Flutter Sound library in the index.html file

9.0.0

  • Remove the Service declaration in the Android code (problem with compatibility with other libraries like AudioService). #340
  • Remove the Track Player : startPlayerFromTrack(), nowPlaying(), setUIProgressBar().
  • Remove the concept of LITE and FULL flavor : now we build just one flavor without any link with FlutterFFMPEG.
  • Remove the utilities which use FFmpeg : isFFmpegAvailable(), executeFFmpegWithArguments(), getLastFFmpegReturnCode(), getLastFFmpegCommandOutput(), ffMpegGetMediaInformation(), duration(), convertFile()
  • Remove the old WidgetUI
  • Remove the Audio Sessions Management inside Flutter Sound (problem with compatibility with other libraries like AudioSessions). #825

8.5.0

  • Added read decibel from recorder on Flutter Sound on Web. #821. Thanks to George Amgad for his contribution.

8.4.2

Fix Bug FlautoBackgroundAudioService requires explicit value for android:exported #789. Thanks to @marcoberetta96

8.4.1

  • Flutter Sound is now published under the MPL2 License. #696.
  • If your App is protected by the GPL License, you probably want to consider using this GPL fork : Tau Sound 9.0 offers several enhancement compared to this branch. See here
  • The github project are renamed flutter_sound and flutter_sound_core
  • The documentation is moved here

8.3.12

  • Fix a bad Exception in the Widget UI : 764. This is a Pull Request kindly pushed by @jfkominsky : 765. Thanks to him/her :-)

8.3.11

  • Fix several bugs in the UI Widgets : #759. This is a Pull Request kindly pushed by @jfkominsky : 763. Thanks to him/her :-)

8.3.10

  • Remove a dependency to flutter_spinkit which was not used anymore by Flutter Sound. This is a Pull Request from Jack Liu. Thanks to him.

8.3.9

  • Modify the examples to be able to record on Safari.
  • Now, we can seek the player before starting the playback #536
  • New example showing how to seek the player.
  • setSubscriptionDuration() on the Recorder now works fine on Web.

8.3.8

  • Update the doc API for the verbs onProgress() and onProgress(), to clearly explain that we must call setSubscriptionDuration() to have this callback fired. Too many developers was having problems with this verb.
  • New simple example to show how to use onProgress() on a Player.
  • New simple example to show how to use onProgress() on a Recorder.
  • Fix a bug on iOS which can explain why onProgress() was not always fired. #654
  • setSubscriptionDuration() can now be called after the startPlayer() or startRecorder() to dynamically change the frequency of the callback.
  • On Android, the default for the callback frequency is 0. This is homogeneous with iOS, and is consistent with the documentation.

8.3.4

  • Check file extension for recording. This Pull Request #728 was provided by @mhstoller . Thanks to him/her :-)
  • The dart API gave 404. Now OK. #640
  • New verb FlutterSoundPlayer.setSpeed to change the playback speed.
  • New simple example showing how to set the playback speed. #382
  • Fix a color problem with the UI icons. This is a Pull Request from @cedvdb. #735. Thanks to him/her :-)
  • The export of Level & Logger by flutter sound caused conflicts with App using other Loggers. #734

8.2.5

  • New simple example showing how to set the volume
  • Fix a bug on iOS : the volume must be between 0.0 and 1.0 #733
  • The verb setVolume() can be used on a non playing Player. Android, iOS and Web. The parameter will be kept delayed and set during the next call of startPlayer(). #733

8.2.0

8.1.9

  • Simple example that converts an AAC file to MP3 #710
  • Remove Jcenter and use instead MavenCentral : #710

8.1.4

8.1.3

  • Temporary fix on #665 . Pull Request #677 that was provided by @aaassseee . Thanks to him :-)

8.1.1

  • flutter_sound_core is now published on JitPack and not anymore on jfrog/bintray. #658

8.0.2

  • SetAudioFocus must return an int. Not a boolean. #631

8.0.1

  • Flutter Sound on Web : Stop mediaStream tracks after recording ends. #656, #655. Contribution from @osaxma. Thanks to him.

8.0.0

7.8.4

  • flutter_sound_core is now published on JitPack instead of Jfrog/Bintray

7.7.0

  • Flutter Sound on web : now we can record AAC-MP4 on webkit (iOS web browsers and Safari). #559
  • Flutter Sound LITE did not compile on iOS : #613

7.6.7

  • The procedure “resetPlugin” was missing on Flutter Sound on Web

7.6.6

  • We must get the lock semaphore when calling stop() during “audioPlaybackFinished”

7.6.5

  • Local variable restarted is static.

7.6.4

  • Fixes a problem with FlutterSoundHelper.duration(). (Still does not work with temporary files). #613

7.6.3

  • No dependency to synchronized: ^3.0.0-nullsafety. #624
  • Compatibility with flutter_ffmpeg. #613 and #585
  • No crash after a Hot Restart. #543, #387 and #304

7.6.2

  • On iOS : fixes a bug with pause/resume at the end of the playback #469

7.6.1

  • On iOS : the audio flags was not transmitted correctely to flutter_sound_core

7.6.0

  • Enhancement : Record to a temporary file. No need any more to use flutter_path_provider. myRecorder.startRecorder('foo'); . Works on Android, iOS, and Flutter Web. #607. temporary files
  • stopRecorder() returns a Future of an URL to the recorded file : URL url = await stopRecorder(); . Useful to get the URL of a temporary record object. #616, #592
  • New verb deleteTemporaryFile('foo');
  • All temporary files are automaticaly deleted when the session is closed
  • No await necessary on openAudioSession(). #606
  • Exception when a verb can be processed instead of having an await stuck for ever. #605

7.5.3

  • Fix a major bug during Feed(). A major regression introduced in 7.5.1. #590

7.5.2

  • Android : Fixes a bug when the plugin is attached several time to the engine. Thanks to @ed-vx for the Pull Request :-) . #595 and #594
  • iOS : Initialization of flutterSoundPlayerManager and flutterSoundRecorderManager to NIL. #411, #587

7.5.1

  • The τ documentation is moved to https://flutter-sound.canardoux.xyz . Yes, HTTPS, and not anymore HTTP. #553
  • Jekyll : patched to allow the dartdoc support without being based on symbolic links (that produced many 404). #553

7.5.0

7.4.16

  • Now, the demo-example can play remote files for all the codec directely supported (without using FFmpeg). And not only MP3.

7.4.15

  • Remove the intl dependency. #584

7.4.14

  • Now, τ throws a correct exception during startRecorder() on Android when the recording permission is not granted. #558

7.4.13

  • Fixes problems on iOS with play/record from/to stream. SampleRate=44000 is a good choice. #484.

7.4.12

  • Add an example doing several playbacks at the same time #546

7.4.11

  • Fighting with #569 : remove two naughty warnings during pod install of the example.

7.4.10

  • Fixes a bug in the live web example #574

7.4.9

  • Documention is switched to Jekyll
  • I did a terrible mistake : the version is named 7.4.9 instead of 6.4.9 Impossible to correct that on pub.dev: a commit is for ever. I am confused :-( .

6.4.8

iOS : Rename AudioPlayer as AudioPlayerFlauto to avoid duplicate symbol with “just_audio: ^0.5.7”. #542

6.4.7

The two simple examples doing recording did not ask for recording permission. #539

6.4.6

  • Fixes a bug in setAudioFocus() when the focus parameter is t_AUDIO_FOCUS.requestFocus #537

6.4.5

  • Fixes an other problem in setAudioFocus() on Android and iOS #535

6.4.4

  • Fixes a crash in setAudioFocus() on Android #535

6.4.3

  • The documentation of the API is now generated by dartdoc. Here it is
  • The various traces done by Flutter Sound with the Dart code are now handled by ‘util/log.dart’. (The traces done by iOS and Android are still hard coded).;
  • Fix a bug in Pause/Resume on the lock screen
  • The Flutter Sound documentation is now handled by gitbook.
  • Fix bug in setUIProgressBar()
  • The output of dartanalyzer is now clean. The pub.dev score is 110/110 !
  • Two new very simple examples for Flutter Sound beginners

6.4.2

  • Syntaxe error in flutter_sound_web.podspec #509

6.4.1

  • Little mistake in the Podspec file name for flutter_sound_web #509

6.4.0

6.3.1

  • Fix a syntax error in the TauEngine build.gradle 499
  • English in the UI widget is now configurable 498

6.3.0

  • On Android : Flutter Sound is now a wrapper around TauEngine
  • Add a new example doing Speech-To-Text. Thanks to @jtkeyva :-) . #210

6.2.0

  • Publication on JCenter

6.2.0

  • On iOS, Flutter Sound use now a Pod library : TauEngine
  • On iOS : startPlayer() from a remote URL returned too early (before downloading the file)
  • The loop example, (from the recorder to the player) has now a delay < 1 sec. #479 and #90
  • Fix compilation errors of the examples in LITE flavor #483

6.1.2

  • Playback from a remote URL #470

6.1.1

  • Volume control with the volume buttons, on Android. #457

6.1.0

  • Re-design the modules architecture to be Google recommandations compliant. (We use a new dependency : flutter_sound_platform_interface)
  • openAudioSessionWithUI is now deprecated. Use the parameter withUI in openAudioSession() instead.
  • Upgrade “recase” version dependency (thanks to @CRJFisher) #471

6.0.1

  • Little bug in the Demo App : 48000 is not a valid Sample rate for AAC/ADTS #460

6.0.0

  • Modification to the Widget Recorder UI, to be homogeneous with the Widget Player UI
  • Fix two severe bugs on Android in openAudioSessionWithUI and startPlayerFromTrack : those two functions returned too early instead of a future. #425
  • On iOS, the device did not go to sleep when idle, with the Flutter Sound default parameters. #439
  • startPlayer() and startPlayerFromTrack() return a Future to the record duration instead of a void.
  • Flutter Sound FULL is now linked (again) with mobile-ffmpeg-audio 4.3.1.LTS. Please, look to the migration guide
  • Fix a concurrency bug between whenFinished() and updateProgress() #441
  • Android : minAndroidSdk is 18. (Tested on a SDK 18 emulator). SDK 18 is fine for the FlutterSoundPlayer, but the FlutterSoundRecorder needs at least 23. #400
  • New helper API verb : pcmToWave() to add a WAVE header in front of a Raw PCM record
  • New helper API verb : pcmToWaveBuffer() to add a WAVE header in front of a Raw PCM buffer
  • New helper API verb : waveToPCM() to remove a WAVE header in front of a Wave record
  • New helper API verb : waveToPCMBuffer() to remove a WAVE header in front of a Wave buffer
  • startRecorder() can now record Raw PCM Integers/Linear 16 files, both on iOS and Android (Look to a PCM discussion, here)
  • startplayer() can now play Raw PCM Integers/Linear 16 files, both on iOS and Android (Look to a PCM discussion, here)
  • Fix concurrency bug, when the App does a stopRecorder() or pauseRecorder() during recorderTicker() processing, #443
  • Fix a bug when we keep the device in pause mode on the iOS lock screen more than 30 seconds #451
  • Recording PCM-Linear 16 to a live Stream (many, many, many requesters). Here a GettingStarted notice
  • Playback PCM-Linear 16 from a live Stream (many, many, many requesters). Here a GettingStarted notice

5.1.1

  • Fix various bugs in UI Widget #407
  • Add a button Pause/Resume in UI Widget Recorder
  • Add a button Pause/Resume in UI Widget Player

5.1.0

  • Add a semaphore so that the App cannot do several call to Flutter Sound at the same time #374
  • On iOS : the “NowPlaying” info on the lockscreen is removed when the sound is finished or when the App does a stopPlayer(). Add parameter removeUIWhenStopped to startPlayerFromTrack(). (iOS only).
  • On iOS : the “NowPlaying” progress bar on the lockscreen is uptodated when the App does a seekToPlayer() #364
  • On iOS : Add parameter defaultPauseResume to startPlayerFromTrack(). (iOS only).
  • On iOS : Add API verb getProgress(). (iOS only).
  • On iOS : Add API verb getPlayerState(). (iOS only).
  • On iOS : Add API verb nowPlaying(). (iOS only).
  • On iOS : Add API verb setUIProgressBar(). (iOS only). #376
  • Fixes bug #380, #385
  • Fixes bug “AudioFlags and AudioSource not work as expect “ #366, #372, #381
  • New parameters in the SoundPlayerUI constructors for specifying colors, text style and slider style. #397

5.0.2

Error returns from iOS in FlutterSoundPlayer.m was wrong : #350

5.0.1

  • Flutter Sound V5 is published under the LGPL license.

5.0.0

  • New API documentation
  • Changed the global enums names to CamelCase, to be conform with Google recommandations
  • Remove the OS dependant parameters from startRecorder()
  • Add a new parameter to startPlayer() : the Audio Focus requested
  • Support of new codecs, both for Android and iOS.
  • Remove the authorization request from startRecorder()
  • Remove the NULL posted when the player or the recorder is closed.
  • The Audio Focus is NOT automaticaly abandoned between two startPlayer() or two startRecorder()

4.0.7

  • Patch to avoid problems when the App does a stopPlayer() during a startPlayer() #374

4.0.6

  • Error returns from iOS in FlutterSoundPlayer.m was wrong : #350

4.0.5

  • Fix as bug in the Focus gain, on iOS #324

4.0.4+1

  • Fix a bug in resumeRecorder() on Android : the dbPeak Stream was not restored after a resume()
  • Fix a bug in resumeRecorder() : the returned value was sometimes a boolean instead of a String.

4.0.3+1

  • Check the Initialization Status, before accessing Flutter Sound Modules #307
  • Fixes : Pausing a recording doesn’t ‘pause’ the duration. #278
  • Fix a crash that we had when accessing the global variable AndroidActivity from BackGroundAudioSerice.java #317

4.0.1+1

  • ”s.static_framework = true” in flutter_sound.podspec

4.0.0

  • Adds pedantic lints and major refactoring of example with bug fixes. #279
  • Native code is directely linked with FFmpeg. Flutter Sound App does not need any more to depends on flutter_ffmpeg #265 and #273
  • Add a new parameter in the Track structure : albumArtFile
  • A new flutter plugin is born : flutter_sound_lite #291
  • Adds a new parameter whenPaused: to the startPlayerFromTrack() function. #314
  • Fix bug for displaying a remote albumArt on Android. #290

3.1.10

  • Trying to catch Android crash during a dirty Timer. #289

3.1.9

  • Trying to fix the Android crash when AndroidActivity is null #296

3.1.8

  • Fix a bug (‘async’) when the app forget to initalize its Flutter Sound module. #287

3.1.7

  • Codec PCM for recorder on iOS
  • Optional argument requestPermission before startRecorder() so that the App can control itself the recording permissions. #283

3.1.6+1

  • Fix a bug when initializing for Flutter Embedded V1 on Android #267
  • Add _removePlayerCallback, _removeRecorderCallback() and _removeDbPeakCallback() inside release() #248
  • Fix conflict with permission_handler 5.x.x #274
  • On iOS, setMeteringEnabled:YES is called during setDbLevelEnabled() #252, #251
  • The call to initialize() is now optional #271
  • README : #265

3.1.5

3.1.4

  • Change dependecies in range
    permission_handler: ">=4.0.0 <5.0.0"
    flutter_ffmpeg: ">=0.2.0 <1.0.0"
    

3.1.3

  • The isRecording variable is false when the recorder is paused #266

3.1.2

  • Flutter Sound depends on permission_handler: ^4.4.0 #263

3.1.0

  • flutter_sound modules are re-entrant #250 and #232
    • We can open several FlutterSoundPlayer at the same time
    • We can open several FlutterSoundRecorder at the same time
  • Add new API verbs : #244
    • flutterSoundHelper.getLastFFmpegReturnCode()
    • flutterSoundHelper.getLastFFmpegCommandOutput()
    • flutterSoundHelper.FFmpegGetMediaInformation() which return info on the given record
    • flutterSoundHelper.duration() which return the number of milli-seconds for the given record
  • Add new API verbs : ##242
    • FlutterSoundRecorder.pauseRecorder()
    • FlutterSoundRecorder.resumeRecorder()
  • flutter_sound is now compatible with permission_handler 5.x.x #259
  • API to control the audiofocus #219
  • API to set the audio-category (i.e. duck-others) #219
  • AndroidX and Android embbeded-V2 support #203
  • Add a parameter to startPlayer to specify a callback when the song is finished #215
  • License is now LGPL 3.0 instead of MIT

3.0.0+1

3.0.0

2.1.1

2.0.5

  • Hotfix #221
  • Use AAC-LC format instead of MPEG-4 #209

2.0.4

  • OGG/OPUS support on iOS #199

2.0.3

  • Resolve #194
    • stopReocorder resolve path.
  • Resolve #198
    • Improve static handler in android.

2.0.1

  • Add compatibility for android sdk 19.
  • Add androidx compatibility.
  • Resolve #193
    • Restore default startRecorder

1.9.0

  • Fix issue #175
    • add functions . isEncoderSupported(t_CODEC codec); . isDecoderSupported(t_CODEC codec);
    • add property ‘audioState’
    • check if codec is really supported before doing ‘startRecorder’
    • modify the example app : disable buttons when the button is not compatible with the current state
    • in the example, add sound assets encoded with the various encoder
    • modify the example to play from assets
    • modify the example to allow selection of various codec

1.7.0

  • startPlayerFromBuffer, to play from a buffer #170

1.6.0

  • Set android default encoding option to AAC.
  • Fix android default poor sound.

1.5.2

  • Postfix GetDirectoryType to avoid conflicts #147

1.5.1

  • Set android recorder encoder default value to AndroidEncoder.DEFAULT.

1.5.0

  • Use NSCachesDirectory instead of NSTemporaryDirectory #141

1.4.8

1.4.7

  • Resolve few issues on ios record path.
  • Resolve issue playing status so player can resume.
  • Resolve #134
  • Resolve #135

1.4.4

  • Stopped recording generating infinite db values #131

1.4.3

  • Improved db calcs #123

1.4.2

  • Fixed ‘mediaplayer went away with unhandled events’ bug #104

1.4.1

  • Fixed ‘mediaplayer went away with unhandled events’ bug #83

1.4.0

  • AndroidX compatibility improved #68
  • iOS: Fixes for seekToPlayer #72
  • iOS: Setup configuration for using bluetooth microphone recording input #73

1.3.6

  • Android: Adds a single threaded command scheduler for all recording related commands.
  • Switch source & target compability to Java 8
  • Bump gradle plugin version dependencies

1.3.+

  • Support db/meter #41
  • Show wrong recorder timer text #47
  • Add ability to specify Android & iOS encoder #49
  • Adjust db range and fix nullable check in ios #59
  • Android: Recording operations on a separate command queue #66
  • Android: Remove reference to non-AndroidX classes which improves compatibility

1.2.+

  • Fixed sound distorting when playing recorded audio again. Issue #14.
  • Fixed seekToPlayer for android. Issue #10.

  • Expose recorder sampleRate and numChannel.
  • Do not append tmp when filePath provided in ios.
  • Resolve regression issue in 1.2.3 which caused in 1.2.2.
  • Reduce the size of audio file in 1.2.4. Related #26.
  • Fixed recording issue in android in 1.2.5.
  • Changed seekToPlayer to place exact secs instead adding it.
  • Fix file URI for recording and playing in iOS.

1.1.+

  • Released 1.1.0 with beautiful logo from mansa.
  • Improved readme.
  • Resolve #7.
  • Fixed missing break in switch statement.

1.0.9

  • Reimport intl which is needed to format date in Dart.

1.0.8

  • Implemented setVolume method.
  • Specific error messages given in android.
  • Manage ios player thread when audio is not loaded.

1.0.7

  • Safer handling of progressUpdate in ios when audio is invalid.

1.0.6

  • Fixed bug in platform specific code.

1.0.5

  • Fixed pug in seekToPlayer in ios.

1.0.3

  • Added license.

1.0.0

  • Released preview version for audio recorder and player.
Tags: