flutter: Change audioplayers to just_audio

Because of following audioplayers exception:

Error: PlatformException(Unexpected error!, null, java.lang.IllegalStateException at android.media.MediaPlayer._setDataSource(Native Method)
at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1305)
at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1288)
at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1242)
at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1218)
at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1185)
at xyz.luan.audioplayers.WrappedMediaPlayer.setUrl(WrappedMediaPlayer.kt:37)
at xyz.luan.audioplayers.AudioplayersPlugin.handleMethodCall(AudioplayersPlugin.kt:62)
at xyz.luan.audioplayers.AudioplayersPlugin.onMethodCall(AudioplayersPlugin.kt:37)
at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler.onMessage(MethodChannel.java:233)
at io.flutter.embedding.engine.dart.DartMessenger.handleMessageFromDart(DartMessenger.java:85)
at io.flutter.embedding.engine.FlutterJNI.handlePlatformMessage(FlutterJNI.java:818)
at android.os.MessageQueue.nativePollOnce(Native Method)
at android.os.MessageQueue.next(MessageQueue.java:332)
at android.os.Looper.loop(Looper.java:168)
at android.app.ActivityThread.main(ActivityThread.java:6878)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:876) , null)

And remove BGM Settings.

Stack trace:
package:flutter/src/services/message_codecs.dart 581:7
StandardMethodCodec.decodeEnvelope package:flutter/src/services/platform_channel.dart 158:18
MethodChannel._invokeMethod
===== asynchronous gap ===========================
dart:async/zone.dart 1294:19
_CustomZone.registerBinaryCallback dart:async-patch/async_patch.dart 51:8
_asyncErrorWrapperHelper package:sanmill/services/audios.dart 79:19
Audios.playTone. package:stack_trace/src/chain.dart 94:24
Chain.capture. dart:async/zone.dart 1354:13 _rootRun dart:async/zone.dart 1258:19
_CustomZone.run dart:async/zone.dart 1789:10 _runZoned dart:async/zone.dart 1711:10
runZoned package:stack_trace/src/chain.dart 92:12 Chain.capture package:sanmill/services/audios.dart 78:11
Audios.playTone
This commit is contained in:
Calcitem 2021-02-27 11:28:55 +08:00
parent 46f1815cd1
commit 5d52250532
3 changed files with 34 additions and 76 deletions

View File

@ -18,27 +18,12 @@
import 'dart:io';
import 'package:audioplayers/audio_cache.dart';
import 'package:audioplayers/audioplayers.dart';
import 'package:just_audio/just_audio.dart';
import 'package:sanmill/common/config.dart';
import 'package:stack_trace/stack_trace.dart';
class Audios {
//
static AudioPlayer _fixedBgmPlayer, _fixedTonePlayer;
static AudioCache _bgmPlayer, _tonePlayer;
static loopBgm(String fileName) async {
if (_bgmPlayer == null) {
_fixedBgmPlayer = AudioPlayer();
_bgmPlayer = AudioCache(prefix: 'audios/', fixedPlayer: _fixedBgmPlayer);
//await _bgmPlayer.loadAll(['bg_music.mp3']);
}
_fixedBgmPlayer.stop();
_bgmPlayer.loop(fileName);
}
static AudioPlayer _player;
static playTone(String fileName) async {
if (!Config.toneEnabled) {
@ -47,49 +32,45 @@ class Audios {
if (Platform.isWindows) {
print(
"audioplayers is not support Windows. See: https://pub.dev/packages/audioplayers");
"audio players is not support Windows. See: https://pub.dev/packages/just_audio");
return;
}
if (_tonePlayer == null) {
//
_fixedTonePlayer = AudioPlayer();
_tonePlayer =
AudioCache(prefix: 'assets/audios/', fixedPlayer: _fixedTonePlayer);
try {
if (_player == null) {
_player = AudioPlayer();
}
await _tonePlayer.loadAll([
'draw.mp3',
'go.mp3',
'illegal.mp3',
'mill.mp3',
'fly.mp3',
'lose.mp3',
'place.mp3',
'remove.mp3',
'select.mp3',
'win.mp3',
]);
await _player.pause();
await _player.seek(Duration.zero);
var duration = await _player.setAsset("assets/audios/" + fileName);
_player.play();
} on PlayerException catch (e) {
// iOS/macOS: maps to NSError.code
// Android: maps to ExoPlayerException.type
// Web: maps to MediaError.code
print("Error code: ${e.code}");
// iOS/macOS: maps to NSError.localizedDescription
// Android: maps to ExoPlaybackException.getMessage()
// Web: a generic message
print("Error message: ${e.message}");
} on PlayerInterruptedException catch (e) {
// This call was interrupted since another audio source was loaded or the
// player was stopped or disposed before this audio source could complete
// loading.
print("Connection aborted: ${e.message}");
} catch (e) {
// Fallback for all errors
print(e);
}
//await _fixedTonePlayer.stop();
await _fixedTonePlayer.pause();
await _fixedTonePlayer.seek(Duration.zero);
//await release();
Chain.capture(() {
_tonePlayer.play(fileName);
});
}
static stopBgm() {
if (_fixedBgmPlayer != null) _fixedBgmPlayer.stop();
}
static Future<void> release() async {
if (_fixedBgmPlayer != null) {
await _fixedBgmPlayer.release();
}
if (_fixedTonePlayer != null) {
await _fixedTonePlayer.release();
if (_player != null) {
await _player.stop();
await _player.dispose();
}
}
}

View File

@ -20,7 +20,6 @@ import 'package:flutter/material.dart';
import 'package:flutter_colorpicker/flutter_colorpicker.dart';
import 'package:sanmill/common/config.dart';
import 'package:sanmill/generated/l10n.dart';
import 'package:sanmill/services/audios.dart';
import 'package:sanmill/style/colors.dart';
class GameSettingsPage extends StatefulWidget {
@ -263,21 +262,6 @@ class _GameSettingsPageState extends State<GameSettingsPage> {
Config.save();
}
setMusic(bool value) async {
//
setState(() {
Config.bgmEnabled = value;
});
if (Config.bgmEnabled) {
//Audios.loopBgm('bg_music.mp3');
} else {
Audios.stopBgm();
}
Config.save();
}
setTone(bool value) async {
//
setState(() {
@ -338,13 +322,6 @@ class _GameSettingsPageState extends State<GameSettingsPage> {
margin: const EdgeInsets.symmetric(vertical: 10),
child: Column(
children: <Widget>[
SwitchListTile(
activeColor: UIColors.primaryColor,
value: Config.bgmEnabled,
title: Text(S.of(context).sound, style: itemStyle),
onChanged: setMusic,
),
_buildDivider(),
SwitchListTile(
activeColor: UIColors.primaryColor,
value: Config.toneEnabled,

View File

@ -12,7 +12,7 @@ dependencies:
flutter_localizations:
sdk: flutter
cupertino_icons: ^1.0.0
audioplayers: ^0.17.4
just_audio: ^0.6.14+1
path_provider: ^1.6.27
package_info: ^0.4.3+4
uuid: ^2.2.2