From 05a2c23f3963efcfd76c5a3867b812a07ca711f2 Mon Sep 17 00:00:00 2001 From: Alireza Hajebrahimi <6937697+iarata@users.noreply.github.com> Date: Wed, 20 Aug 2025 13:45:43 +0200 Subject: [PATCH 1/3] Bump version to 5.2.0, update dependencies, and improve gradle configurations --- packages/noise_meter/CHANGELOG.md | 6 ++++++ packages/noise_meter/example/android/build.gradle | 4 ++-- packages/noise_meter/example/android/gradle.properties | 1 - packages/noise_meter/example/android/settings.gradle | 4 ++-- packages/noise_meter/example/pubspec.yaml | 6 +++--- packages/noise_meter/lib/noise_meter.dart | 2 -- packages/noise_meter/pubspec.yaml | 6 +++--- 7 files changed, 16 insertions(+), 13 deletions(-) diff --git a/packages/noise_meter/CHANGELOG.md b/packages/noise_meter/CHANGELOG.md index 247916295..8eaf1f5ec 100644 --- a/packages/noise_meter/CHANGELOG.md +++ b/packages/noise_meter/CHANGELOG.md @@ -1,3 +1,9 @@ +## 5.2.0 + +- update to `audio_streamer: ^4.2.0` +- update to dart SDK `3.8.1` +- update gradle and kotlin versions in example app + ## 5.1.0 - upgrading gradle version diff --git a/packages/noise_meter/example/android/build.gradle b/packages/noise_meter/example/android/build.gradle index f7eb7f63c..41f101e52 100644 --- a/packages/noise_meter/example/android/build.gradle +++ b/packages/noise_meter/example/android/build.gradle @@ -1,12 +1,12 @@ buildscript { - ext.kotlin_version = '1.7.10' + ext.kotlin_version = '2.2.10' repositories { google() mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:7.3.0' + classpath 'com.android.tools.build:gradle:8.12.0' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } } diff --git a/packages/noise_meter/example/android/gradle.properties b/packages/noise_meter/example/android/gradle.properties index 38c8d4544..94adc3a3f 100644 --- a/packages/noise_meter/example/android/gradle.properties +++ b/packages/noise_meter/example/android/gradle.properties @@ -1,4 +1,3 @@ org.gradle.jvmargs=-Xmx1536M -android.enableR8=true android.useAndroidX=true android.enableJetifier=true diff --git a/packages/noise_meter/example/android/settings.gradle b/packages/noise_meter/example/android/settings.gradle index 525c1f3be..73700565f 100644 --- a/packages/noise_meter/example/android/settings.gradle +++ b/packages/noise_meter/example/android/settings.gradle @@ -18,8 +18,8 @@ pluginManagement { plugins { id "dev.flutter.flutter-plugin-loader" version "1.0.2" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.9.20" apply false + id "com.android.application" version "8.12.0" apply false + id "org.jetbrains.kotlin.android" version "2.2.10" apply false } include ":app" \ No newline at end of file diff --git a/packages/noise_meter/example/pubspec.yaml b/packages/noise_meter/example/pubspec.yaml index 277d286bd..e578c88c6 100644 --- a/packages/noise_meter/example/pubspec.yaml +++ b/packages/noise_meter/example/pubspec.yaml @@ -1,10 +1,10 @@ name: noise_meter_example description: Example app for the noise_meter package. publish_to: none -version: 5.0.0 +version: 5.2.0 environment: - sdk: ">=2.17.0 <4.0.0" + sdk: ">=3.8.1 <4.0.0" flutter: ">=3.0.0" dependencies: @@ -14,7 +14,7 @@ dependencies: path: ../ cupertino_icons: ^1.0.2 - permission_handler: ^11.0.0 + permission_handler: ^11.4.0 dev_dependencies: flutter_test: diff --git a/packages/noise_meter/lib/noise_meter.dart b/packages/noise_meter/lib/noise_meter.dart index 6a6d90b8e..1048dc2a9 100644 --- a/packages/noise_meter/lib/noise_meter.dart +++ b/packages/noise_meter/lib/noise_meter.dart @@ -1,5 +1,3 @@ -library noise_meter; - import 'dart:core'; import 'dart:math'; diff --git a/packages/noise_meter/pubspec.yaml b/packages/noise_meter/pubspec.yaml index a796ae422..b3f97df05 100644 --- a/packages/noise_meter/pubspec.yaml +++ b/packages/noise_meter/pubspec.yaml @@ -1,16 +1,16 @@ name: noise_meter description: A Flutter plugin for collecting noise from the phone's microphone. -version: 5.1.0 +version: 5.2.0 homepage: https://github.com/cph-cachet/flutter-plugins/tree/master/packages/noise_meter environment: - sdk: ">=2.17.0 <4.0.0" + sdk: ">=3.8.1 <4.0.0" flutter: ">=3.0.0" dependencies: flutter: sdk: flutter - audio_streamer: ^4.0.0 + audio_streamer: ^4.2.0 dev_dependencies: flutter_test: From c4e607f167de427861d9ecf8ae00ae9512899f66 Mon Sep 17 00:00:00 2001 From: Alireza Hajebrahimi <6937697+iarata@users.noreply.github.com> Date: Wed, 20 Aug 2025 15:32:30 +0200 Subject: [PATCH 2/3] Release version 4.3.0: Fix recording thread issue, update dependencies, and improve Gradle configurations --- packages/audio_streamer/CHANGELOG.md | 7 ++ packages/audio_streamer/android/build.gradle | 4 +- .../audio_streamer/android/gradle.properties | 1 - .../audio_streamer/android/settings.gradle | 4 +- .../audio_streamer/AudioStreamerPlugin.kt | 119 ++++++++++++------ .../example/android/gradle.properties | 2 - .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../example/android/settings.gradle | 4 +- .../ios/Flutter/AppFrameworkInfo.plist | 2 +- packages/audio_streamer/example/ios/Podfile | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 30 +++-- .../xcshareddata/xcschemes/Runner.xcscheme | 2 + packages/audio_streamer/example/lib/main.dart | 70 ++++++----- packages/audio_streamer/example/pubspec.yaml | 4 +- .../audio_streamer/ios/audio_streamer.podspec | 2 +- packages/audio_streamer/pubspec.yaml | 6 +- 16 files changed, 159 insertions(+), 102 deletions(-) diff --git a/packages/audio_streamer/CHANGELOG.md b/packages/audio_streamer/CHANGELOG.md index 2ef467f0a..3a7dd938a 100644 --- a/packages/audio_streamer/CHANGELOG.md +++ b/packages/audio_streamer/CHANGELOG.md @@ -1,3 +1,10 @@ +## 4.3.0 + +* Fix issue where stream function made a new thread each time a recording starts - Fixes [#1242](https://github.com/cph-cachet/flutter-plugins/issues/1242) +* Updated Gradle and Kotlin +* Updated `permission_handler: ^12.0.0` +* Updated `sdk >=3.8.1` + ## 4.2.2 * Reverts [#1226](https://github.com/cph-cachet/flutter-plugins/pull/1226) diff --git a/packages/audio_streamer/android/build.gradle b/packages/audio_streamer/android/build.gradle index 75775e9f5..b88355abf 100644 --- a/packages/audio_streamer/android/build.gradle +++ b/packages/audio_streamer/android/build.gradle @@ -2,14 +2,14 @@ group 'plugins.cachet.audio_streamer' version '1.0-SNAPSHOT' buildscript { - ext.kotlin_version = '1.9.22' + ext.kotlin_version = '2.2.10' repositories { google() mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:8.2.1' + classpath 'com.android.tools.build:gradle:8.12.1' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } } diff --git a/packages/audio_streamer/android/gradle.properties b/packages/audio_streamer/android/gradle.properties index 38c8d4544..94adc3a3f 100644 --- a/packages/audio_streamer/android/gradle.properties +++ b/packages/audio_streamer/android/gradle.properties @@ -1,4 +1,3 @@ org.gradle.jvmargs=-Xmx1536M -android.enableR8=true android.useAndroidX=true android.enableJetifier=true diff --git a/packages/audio_streamer/android/settings.gradle b/packages/audio_streamer/android/settings.gradle index 74ff7392b..4ea03db05 100644 --- a/packages/audio_streamer/android/settings.gradle +++ b/packages/audio_streamer/android/settings.gradle @@ -20,8 +20,8 @@ pluginManagement { plugins { id "dev.flutter.flutter-plugin-loader" version "1.0.2" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.9.20" apply false + id "com.android.application" version "8.12.1" apply false + id "org.jetbrains.kotlin.android" version "2.2.10" apply false } include ":app" \ No newline at end of file diff --git a/packages/audio_streamer/android/src/main/kotlin/plugins/cachet/audio_streamer/AudioStreamerPlugin.kt b/packages/audio_streamer/android/src/main/kotlin/plugins/cachet/audio_streamer/AudioStreamerPlugin.kt index 213203907..dce150af9 100644 --- a/packages/audio_streamer/android/src/main/kotlin/plugins/cachet/audio_streamer/AudioStreamerPlugin.kt +++ b/packages/audio_streamer/android/src/main/kotlin/plugins/cachet/audio_streamer/AudioStreamerPlugin.kt @@ -34,7 +34,9 @@ class AudioStreamerPlugin : FlutterPlugin, RequestPermissionsResultListener, Eve // / Variables (i.e. will change value) private var eventSink: EventSink? = null - private var recording = false + @Volatile private var recording = false + private var recordingThread: Thread? = null + private var currentActivity: Activity? = null @@ -48,8 +50,11 @@ class AudioStreamerPlugin : FlutterPlugin, RequestPermissionsResultListener, Eve methodChannel.setMethodCallHandler { call, result -> if (call.method == "getSampleRate") { - // Sample rate never changes, so return the given sample rate. - result.success(audioRecord?.getSampleRate()) + if (::audioRecord.isInitialized) { + result.success(audioRecord.sampleRate) + } else { + result.error("UNAVAILABLE", "AudioRecord not initialized.", null) + } } else { result.notImplemented() } @@ -57,7 +62,7 @@ class AudioStreamerPlugin : FlutterPlugin, RequestPermissionsResultListener, Eve } override fun onDetachedFromEngine(@NonNull binding: FlutterPlugin.FlutterPluginBinding) { - recording = false + stopRecording() } override fun onDetachedFromActivity() { @@ -83,20 +88,19 @@ class AudioStreamerPlugin : FlutterPlugin, RequestPermissionsResultListener, Eve */ override fun onListen(arguments: Any?, events: EventSink?) { this.eventSink = events - recording = true sampleRate = (arguments as Map<*, *>)["sampleRate"] as Int if (sampleRate < 4000 || sampleRate > 48000) { events!!.error("SampleRateError", "A sample rate of " + sampleRate + "Hz is not supported by Android.", null) return } - streamMicData() + startRecording() } /** * Called from Flutter, which cancels the stream. */ override fun onCancel(arguments: Any?) { - recording = false + stopRecording() } /** @@ -105,11 +109,36 @@ class AudioStreamerPlugin : FlutterPlugin, RequestPermissionsResultListener, Eve override fun onRequestPermissionsResult(requestCode: Int, permissions: Array, grantResults: IntArray): Boolean { val requestAudioPermissionCode = 200 when (requestCode) { - requestAudioPermissionCode -> if (grantResults[0] == PackageManager.PERMISSION_GRANTED) return true + requestAudioPermissionCode -> if (grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED) return true } return false } + private fun startRecording() { + if (recording) { + Log.w(logTag, "Recording is already in progress") + return + } + recording = true + recordingThread = Thread { streamMicData() } + recordingThread?.start() + } + + private fun stopRecording() { + if (!recording) { + Log.w(logTag, "Recording is not in progress") + return + } + recording = false + try { + recordingThread?.join() + } catch (e: InterruptedException) { + e.printStackTrace() + } + recordingThread = null + } + + /** * Starts recording and streaming audio data from the mic. * Uses a buffer array of size 512. Whenever buffer is full, the content is sent to Flutter. @@ -119,39 +148,51 @@ class AudioStreamerPlugin : FlutterPlugin, RequestPermissionsResultListener, Eve * https://www.newventuresoftware.com/blog/record-play-and-visualize-raw-audio-data-in-android */ private fun streamMicData() { - Thread( - Runnable { - Process.setThreadPriority(Process.THREAD_PRIORITY_AUDIO) - val audioBuffer = ShortArray(bufferSize / 2) - audioRecord = AudioRecord( - MediaRecorder.AudioSource.DEFAULT, - sampleRate, - AudioFormat.CHANNEL_IN_MONO, - AudioFormat.ENCODING_PCM_16BIT, - bufferSize, - ) - if (audioRecord.state != AudioRecord.STATE_INITIALIZED) { - Log.e(logTag, "Audio Record can't initialize!") - return@Runnable - } - /** Start recording loop */ - audioRecord.startRecording() - while (recording) { - /** Read data into buffer */ - audioRecord.read(audioBuffer, 0, audioBuffer.size) + Process.setThreadPriority(Process.THREAD_PRIORITY_AUDIO) + + val audioBuffer = ShortArray(bufferSize / 2) + try { + audioRecord = AudioRecord( + MediaRecorder.AudioSource.DEFAULT, + sampleRate, + AudioFormat.CHANNEL_IN_MONO, + AudioFormat.ENCODING_PCM_16BIT, + bufferSize, + ) + + if (audioRecord.state != AudioRecord.STATE_INITIALIZED) { + Log.e(logTag, "Audio Record can't initialize!") + eventSink?.error("MIC_ERROR", "Audio Record can't initialize!", null) + recording = false + return + } + + audioRecord.startRecording() + + while (recording) { + val readSize = audioRecord.read(audioBuffer, 0, audioBuffer.size) + if(readSize > 0) { + val audioBufferList = ArrayList() + for (i in 0 until readSize) { + val normalizedImpulse = audioBuffer[i].toDouble() / maxAmplitude.toDouble() + audioBufferList.add(normalizedImpulse) + } Handler(Looper.getMainLooper()).post { - // / Convert to list in order to send via EventChannel. - val audioBufferList = ArrayList() - for (impulse in audioBuffer) { - val normalizedImpulse = impulse.toDouble() / maxAmplitude.toDouble() - audioBufferList.add(normalizedImpulse) - } - eventSink!!.success(audioBufferList) + eventSink?.success(audioBufferList) } } - audioRecord.stop() + } + } catch (e: Exception) { + Log.e(logTag, "Error while recording audio", e) + eventSink?.error("MIC_ERROR", "Error while recording audio", e.message) + } finally { + if (::audioRecord.isInitialized) { + if (audioRecord.recordingState == AudioRecord.RECORDSTATE_RECORDING) { + audioRecord.stop() + } audioRecord.release() - }, - ).start() + } + recording = false + } } -} +} \ No newline at end of file diff --git a/packages/audio_streamer/example/android/gradle.properties b/packages/audio_streamer/example/android/gradle.properties index e4675bdf8..94c2a5888 100644 --- a/packages/audio_streamer/example/android/gradle.properties +++ b/packages/audio_streamer/example/android/gradle.properties @@ -1,8 +1,6 @@ org.gradle.jvmargs=-Xmx1536M -android.enableR8=true android.useAndroidX=true android.enableJetifier=true -android.defaults.buildfeatures.buildconfig=true android.nonTransitiveRClass=false android.nonFinalResIds=false diff --git a/packages/audio_streamer/example/android/gradle/wrapper/gradle-wrapper.properties b/packages/audio_streamer/example/android/gradle/wrapper/gradle-wrapper.properties index 893c360b4..ea7573a3d 100644 --- a/packages/audio_streamer/example/android/gradle/wrapper/gradle-wrapper.properties +++ b/packages/audio_streamer/example/android/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ #Sun Mar 12 17:19:03 CST 2023 distributionBase=GRADLE_USER_HOME -distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.3-bin.zip distributionPath=wrapper/dists zipStorePath=wrapper/dists zipStoreBase=GRADLE_USER_HOME diff --git a/packages/audio_streamer/example/android/settings.gradle b/packages/audio_streamer/example/android/settings.gradle index 525c1f3be..becc9d1a5 100644 --- a/packages/audio_streamer/example/android/settings.gradle +++ b/packages/audio_streamer/example/android/settings.gradle @@ -18,8 +18,8 @@ pluginManagement { plugins { id "dev.flutter.flutter-plugin-loader" version "1.0.2" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "1.9.20" apply false + id "com.android.application" version '8.12.1' apply false + id "org.jetbrains.kotlin.android" version "2.2.10" apply false } include ":app" \ No newline at end of file diff --git a/packages/audio_streamer/example/ios/Flutter/AppFrameworkInfo.plist b/packages/audio_streamer/example/ios/Flutter/AppFrameworkInfo.plist index 8c6e56146..d57061dd6 100644 --- a/packages/audio_streamer/example/ios/Flutter/AppFrameworkInfo.plist +++ b/packages/audio_streamer/example/ios/Flutter/AppFrameworkInfo.plist @@ -21,6 +21,6 @@ CFBundleVersion 1.0 MinimumOSVersion - 12.0 + 13.0 diff --git a/packages/audio_streamer/example/ios/Podfile b/packages/audio_streamer/example/ios/Podfile index b8b138f84..4b4b27594 100644 --- a/packages/audio_streamer/example/ios/Podfile +++ b/packages/audio_streamer/example/ios/Podfile @@ -1,5 +1,5 @@ # Uncomment this line to define a global platform for your project -# platform :ios, '12.0' +# platform :ios, '13.0' # CocoaPods analytics sends network stats synchronously affecting flutter build latency. ENV['COCOAPODS_DISABLE_STATS'] = 'true' diff --git a/packages/audio_streamer/example/ios/Runner.xcodeproj/project.pbxproj b/packages/audio_streamer/example/ios/Runner.xcodeproj/project.pbxproj index 86d03c18c..67cac9f46 100644 --- a/packages/audio_streamer/example/ios/Runner.xcodeproj/project.pbxproj +++ b/packages/audio_streamer/example/ios/Runner.xcodeproj/project.pbxproj @@ -264,13 +264,12 @@ buildActionMask = 2147483647; files = ( ); - inputPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh", - "${PODS_CONFIGURATION_BUILD_DIR}/permission_handler_apple/permission_handler_apple_privacy.bundle", + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist", ); name = "[CP] Copy Pods Resources"; - outputPaths = ( - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/permission_handler_apple_privacy.bundle", + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -282,13 +281,12 @@ buildActionMask = 2147483647; files = ( ); - inputPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh", - "${BUILT_PRODUCTS_DIR}/audio_streamer/audio_streamer.framework", + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); name = "[CP] Embed Pods Frameworks"; - outputPaths = ( - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/audio_streamer.framework", + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -370,7 +368,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 12.0; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SUPPORTED_PLATFORMS = iphoneos; @@ -393,7 +391,7 @@ "$(PROJECT_DIR)/Flutter", ); INFOPLIST_FILE = Runner/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 12.0; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -457,7 +455,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 12.0; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; @@ -506,7 +504,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 12.0; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SUPPORTED_PLATFORMS = iphoneos; @@ -530,7 +528,7 @@ "$(PROJECT_DIR)/Flutter", ); INFOPLIST_FILE = Runner/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 12.0; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -562,7 +560,7 @@ "$(PROJECT_DIR)/Flutter", ); INFOPLIST_FILE = Runner/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 12.0; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", diff --git a/packages/audio_streamer/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/packages/audio_streamer/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme index 4f746537f..fc5ae0316 100644 --- a/packages/audio_streamer/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +++ b/packages/audio_streamer/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -26,6 +26,7 @@ buildConfiguration = "Debug" selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" + customLLDBInitFile = "$(SRCROOT)/Flutter/ephemeral/flutter_lldbinit" shouldUseLaunchSchemeArgsEnv = "YES"> @@ -45,6 +46,7 @@ buildConfiguration = "Debug" selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" + customLLDBInitFile = "$(SRCROOT)/Flutter/ephemeral/flutter_lldbinit" launchStyle = "0" useCustomWorkingDirectory = "NO" ignoresPersistentStateOnLaunch = "NO" diff --git a/packages/audio_streamer/example/lib/main.dart b/packages/audio_streamer/example/lib/main.dart index ddbaf9d0a..5805ae025 100644 --- a/packages/audio_streamer/example/lib/main.dart +++ b/packages/audio_streamer/example/lib/main.dart @@ -5,11 +5,13 @@ import 'package:flutter/material.dart'; import 'package:audio_streamer/audio_streamer.dart'; import 'package:permission_handler/permission_handler.dart'; -void main() => runApp(new AudioStreamingApp()); +void main() => runApp(AudioStreamingApp()); class AudioStreamingApp extends StatefulWidget { + const AudioStreamingApp({super.key}); + @override - AudioStreamingAppState createState() => new AudioStreamingAppState(); + AudioStreamingAppState createState() => AudioStreamingAppState(); } class AudioStreamingAppState extends State { @@ -58,8 +60,10 @@ class AudioStreamingAppState extends State { AudioStreamer().sampleRate = 22100; // Start listening to the audio stream. - audioSubscription = - AudioStreamer().audioStream.listen(onAudio, onError: handleError); + audioSubscription = AudioStreamer().audioStream.listen( + onAudio, + onError: handleError, + ); setState(() => isRecording = true); } @@ -72,31 +76,39 @@ class AudioStreamingAppState extends State { @override Widget build(BuildContext context) => MaterialApp( - home: Scaffold( - body: Center( + home: Scaffold( + body: Center( + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Container( + margin: EdgeInsets.all(25), child: Column( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Container( - margin: EdgeInsets.all(25), - child: Column(children: [ - Container( - child: Text(isRecording ? "Mic: ON" : "Mic: OFF", - style: TextStyle(fontSize: 25, color: Colors.blue)), - margin: EdgeInsets.only(top: 20), - ), - Text(''), - Text('Max amp: ${latestBuffer?.reduce(max)}'), - Text('Min amp: ${latestBuffer?.reduce(min)}'), - Text( - '${recordingTime?.toStringAsFixed(2)} seconds recorded.'), - ])), - ])), - floatingActionButton: FloatingActionButton( - backgroundColor: isRecording ? Colors.red : Colors.green, - child: isRecording ? Icon(Icons.stop) : Icon(Icons.mic), - onPressed: isRecording ? stop : start, - ), + children: [ + Container( + margin: EdgeInsets.only(top: 20), + child: Text( + isRecording ? "Mic: ON" : "Mic: OFF", + style: TextStyle(fontSize: 25, color: Colors.blue), + ), + ), + Text(''), + Text('Max amp: ${latestBuffer?.reduce(max)}'), + Text('Min amp: ${latestBuffer?.reduce(min)}'), + Text( + '${recordingTime?.toStringAsFixed(2)} seconds recorded.', + ), + ], + ), + ), + ], ), - ); + ), + floatingActionButton: FloatingActionButton( + backgroundColor: isRecording ? Colors.red : Colors.green, + onPressed: isRecording ? stop : start, + child: isRecording ? Icon(Icons.stop) : Icon(Icons.mic), + ), + ), + ); } diff --git a/packages/audio_streamer/example/pubspec.yaml b/packages/audio_streamer/example/pubspec.yaml index 722fb3823..723afa99a 100644 --- a/packages/audio_streamer/example/pubspec.yaml +++ b/packages/audio_streamer/example/pubspec.yaml @@ -3,14 +3,14 @@ description: Demonstrates how to use the audio_streamer plugin. publish_to: 'none' environment: - sdk: ">=2.17.0 <4.0.0" + sdk: ">=3.8.1 <4.0.0" flutter: ">=3.0.0" dependencies: flutter: sdk: flutter - permission_handler: ^11.0.0 + permission_handler: ^12.0.0 cupertino_icons: ^1.0.4 dev_dependencies: diff --git a/packages/audio_streamer/ios/audio_streamer.podspec b/packages/audio_streamer/ios/audio_streamer.podspec index 4cfe26e44..95f6888a0 100644 --- a/packages/audio_streamer/ios/audio_streamer.podspec +++ b/packages/audio_streamer/ios/audio_streamer.podspec @@ -4,7 +4,7 @@ # Pod::Spec.new do |s| s.name = 'audio_streamer' - s.version = '0.0.1' + s.version = '4.3.0' s.summary = 'Streaming of PCM audio from Android and iOS' s.description = <<-DESC Streaming of PCM audio from Android and iOS diff --git a/packages/audio_streamer/pubspec.yaml b/packages/audio_streamer/pubspec.yaml index fb50539cd..5176cd763 100644 --- a/packages/audio_streamer/pubspec.yaml +++ b/packages/audio_streamer/pubspec.yaml @@ -1,14 +1,14 @@ name: audio_streamer description: Streaming of Pulse-code modulation (PCM) audio from Android and iOS -version: 4.2.2 +version: 4.3.0 homepage: https://github.com/cph-cachet/flutter-plugins/tree/master/packages/ environment: - sdk: ">=2.17.0 <4.0.0" + sdk: ">=3.8.1 <4.0.0" flutter: ">=3.0.0" dependencies: - permission_handler: ^11.0.0 + permission_handler: ^12.0.0 flutter: sdk: flutter From 3a6287c8b032daaa4f85b51b1f7b440b3a628083 Mon Sep 17 00:00:00 2001 From: Alireza Hajebrahimi <6937697+iarata@users.noreply.github.com> Date: Wed, 20 Aug 2025 15:44:05 +0200 Subject: [PATCH 3/3] Update audio_streamer dependency to version 4.3.0 --- packages/noise_meter/pubspec.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/noise_meter/pubspec.yaml b/packages/noise_meter/pubspec.yaml index b3f97df05..5b33a9c00 100644 --- a/packages/noise_meter/pubspec.yaml +++ b/packages/noise_meter/pubspec.yaml @@ -10,7 +10,7 @@ environment: dependencies: flutter: sdk: flutter - audio_streamer: ^4.2.0 + audio_streamer: ^4.3.0 dev_dependencies: flutter_test: