diff --git a/android/src/main/cpp/AndroidEngine/AndroidEngine.cpp b/android/src/main/cpp/AndroidEngine/AndroidEngine.cpp index b425328..80b9de4 100644 --- a/android/src/main/cpp/AndroidEngine/AndroidEngine.cpp +++ b/android/src/main/cpp/AndroidEngine/AndroidEngine.cpp @@ -10,6 +10,21 @@ oboe::DataCallbackResult AndroidEngine::onAudioReady(oboe::AudioStream *oboeStre } AndroidEngine::AndroidEngine(Dart_Port sampleRateCallbackPort) { + openStream(); + callbackToDartInt32(sampleRateCallbackPort, mOutStream->getSampleRate()); +}; + +void AndroidEngine::onErrorAfterClose(oboe::AudioStream *oboeStream, oboe::Result error) { + if (error == oboe::Result::ErrorDisconnected) { + mOutStream.reset(); + openStream(); + play(); + } else { + LOGE("Stream error: %s", convertToText(error)); + } +} + +void AndroidEngine::openStream() { oboe::AudioStreamBuilder builder; builder.setSharingMode(oboe::SharingMode::Shared) ->setPerformanceMode(oboe::PerformanceMode::LowLatency) @@ -17,12 +32,11 @@ AndroidEngine::AndroidEngine(Dart_Port sampleRateCallbackPort) { ->setSampleRate(kSampleRate) ->setFormat(oboe::AudioFormat::Float) ->setCallback(this) + ->setErrorCallback(this) ->openManagedStream(mOutStream); mSchedulerMixer.setChannelCount(mOutStream->getChannelCount()); - - callbackToDartInt32(sampleRateCallbackPort, mOutStream->getSampleRate()); -}; +} AndroidEngine::~AndroidEngine() { mSchedulerMixer.pause(); @@ -74,3 +88,5 @@ void AndroidEngine::pause() { return; } } + + diff --git a/android/src/main/cpp/AndroidEngine/AndroidEngine.h b/android/src/main/cpp/AndroidEngine/AndroidEngine.h index 784a629..7e6c866 100644 --- a/android/src/main/cpp/AndroidEngine/AndroidEngine.h +++ b/android/src/main/cpp/AndroidEngine/AndroidEngine.h @@ -18,6 +18,10 @@ class AndroidEngine : public oboe::AudioStreamCallback { int32_t getBufferSize(); void play(); void pause(); + void openStream(); + + // Inherited from oboe::AudioStreamErrorCallback. + void onErrorAfterClose(oboe::AudioStream *oboeStream, oboe::Result error) override; Mixer mSchedulerMixer; private: diff --git a/example/pubspec.lock b/example/pubspec.lock index 3c03685..e41ecfb 100644 --- a/example/pubspec.lock +++ b/example/pubspec.lock @@ -7,7 +7,7 @@ packages: name: async url: "https://pub.dartlang.org" source: hosted - version: "2.8.1" + version: "2.8.2" boolean_selector: dependency: transitive description: @@ -21,7 +21,7 @@ packages: name: characters url: "https://pub.dartlang.org" source: hosted - version: "1.1.0" + version: "1.2.0" charcode: dependency: transitive description: @@ -75,7 +75,7 @@ packages: path: ".." relative: true source: path - version: "0.4.2" + version: "0.4.3" flutter_test: dependency: "direct dev" description: flutter @@ -87,7 +87,7 @@ packages: name: matcher url: "https://pub.dartlang.org" source: hosted - version: "0.12.10" + version: "0.12.11" meta: dependency: transitive description: @@ -148,7 +148,7 @@ packages: name: test_api url: "https://pub.dartlang.org" source: hosted - version: "0.4.2" + version: "0.4.3" typed_data: dependency: transitive description: @@ -162,7 +162,7 @@ packages: name: vector_math url: "https://pub.dartlang.org" source: hosted - version: "2.1.0" + version: "2.1.1" sdks: - dart: ">=2.12.0 <3.0.0" + dart: ">=2.14.0 <3.0.0" flutter: ">=1.10.0" diff --git a/pubspec.lock b/pubspec.lock index 4c5757b..e7b4a67 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -7,7 +7,7 @@ packages: name: async url: "https://pub.dartlang.org" source: hosted - version: "2.6.1" + version: "2.8.2" boolean_selector: dependency: transitive description: @@ -21,14 +21,14 @@ packages: name: characters url: "https://pub.dartlang.org" source: hosted - version: "1.1.0" + version: "1.2.0" charcode: dependency: transitive description: name: charcode url: "https://pub.dartlang.org" source: hosted - version: "1.2.0" + version: "1.3.1" clock: dependency: transitive description: @@ -73,14 +73,14 @@ packages: name: matcher url: "https://pub.dartlang.org" source: hosted - version: "0.12.10" + version: "0.12.11" meta: dependency: transitive description: name: meta url: "https://pub.dartlang.org" source: hosted - version: "1.3.0" + version: "1.7.0" path: dependency: "direct main" description: @@ -141,7 +141,7 @@ packages: name: test_api url: "https://pub.dartlang.org" source: hosted - version: "0.3.0" + version: "0.4.3" typed_data: dependency: transitive description: @@ -155,7 +155,7 @@ packages: name: vector_math url: "https://pub.dartlang.org" source: hosted - version: "2.1.0" + version: "2.1.1" sdks: - dart: ">=2.12.0 <3.0.0" + dart: ">=2.14.0 <3.0.0" flutter: ">=1.10.0"