only-bible-app v3.7.2+24

#kotlin#android#ios

git clone https://git.pyrossh.dev/only-bible-app

The only bible app you will ever need. No ads. No in-app purchases. No distractions.


2641581Peter John 2026-07-28T21:03:26+05:30
fix: synchronize Bible audio playback teardown
Files changed (2) hide show
  1. lib/store/actions_state.dart +5 -2
  2. lib/utils.dart +19 -5
lib/store/actions_state.dart CHANGED
@@ -112,8 +112,11 @@ class TogglePlayAction extends ReduxAction<AppState> {
112
112
  }
113
113
  }
114
114
  } finally {
115
+ try {
116
+ await stopAudioPlayback();
117
+ } finally {
115
- _isStarting = false;
118
+ _isStarting = false;
116
- await stopAudioPlayback();
119
+ }
117
120
  }
118
121
  return null;
119
122
  }
lib/utils.dart CHANGED
@@ -1,5 +1,3 @@
1
- import "dart:typed_data";
2
-
3
1
  import "package:archive/archive.dart";
4
2
  import "package:flutter/services.dart";
5
3
  import "package:flutter/foundation.dart"
@@ -134,13 +132,13 @@ Future<Uint8List> convertText(String langCode, String text) async {
134
132
  shortName: langCode,
135
133
  gender: "",
136
134
  locale: langCode,
137
- sampleRateHertz: AudioOutputFormat.audio48khz96kBitrateMonoMp3,
135
+ sampleRateHertz: AudioOutputFormat.raw24khz16BitMonoPcm,
138
136
  voiceType: "",
139
137
  status: "",
140
138
  styles: [],
141
139
  roles: [],
142
140
  ),
143
- audioFormat: AudioOutputFormat.audio48khz96kBitrateMonoMp3,
141
+ audioFormat: AudioOutputFormat.raw24khz16BitMonoPcm,
144
142
  rate: 0.90,
145
143
  text: text,
146
144
  ),
@@ -159,7 +157,23 @@ Future<void> ensureAudioPlaybackInitialized() async {
159
157
  }
160
158
  }
161
159
 
160
+ Future<void>? _audioPlaybackStopFuture;
161
+
162
+ Future<void> stopAudioPlayback() {
163
+ final stopFuture = _audioPlaybackStopFuture;
164
+ if (stopFuture != null) return stopFuture;
165
+
166
+ late final Future<void> newStopFuture;
167
+ newStopFuture = _stopAudioPlayback().whenComplete(() {
168
+ if (identical(_audioPlaybackStopFuture, newStopFuture)) {
169
+ _audioPlaybackStopFuture = null;
170
+ }
171
+ });
172
+ _audioPlaybackStopFuture = newStopFuture;
173
+ return newStopFuture;
174
+ }
175
+
162
- Future<void> stopAudioPlayback() async {
176
+ Future<void> _stopAudioPlayback() async {
163
177
  if (!SoLoud.instance.isInitialized) return;
164
178
  try {
165
179
  await SoLoud.instance.disposeAllSources();