audioplayers icon indicating copy to clipboard operation
audioplayers copied to clipboard

Wrong local assets playing on player completion

Open nicolo-fr opened this issue 3 years ago • 2 comments

Full Description I have several audiofiles in assets. I want the player to play the next track on completion. For that I've defined a recursive play function (see code below).
The first few tracks are being played OK. However, after 2 or 3 tracks have been played, the player the starts playing several of the previous tracks - for a fraction of a second - and I I get an error message . See the code below for a minimal example (you'll also find a link to a github repo which contains the audiofiles).

When I tapped play and let the player play a few tracks, I expected to see in the console : I/flutter (25557): track playing : 3 I/flutter (25557): track playing : 4 I/flutter (25557): track playing : 5 I/flutter (25557): track playing : 6 I/flutter (25557): track playing : 7

Instead I got the log reproduced below.

Code to Reproduce see here for github repo with asset files: https://github.com/nicolo-fr/audioplayers-bug-example

import 'package:audioplayers/audioplayers.dart';
import 'package:flutter/material.dart';

void main() => runApp(MyApp());

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  static final AudioPlayer advancedPlayer = AudioPlayer();
  static final AudioCache audioCache = AudioCache(fixedPlayer: advancedPlayer);
  Stream<void> completionEvent = advancedPlayer.onPlayerCompletion;

  Future<void> play(int trackNbr) async {
    try {
      await audioCache.play('$trackNbr.flac');
      print('track playing : $trackNbr');
    } catch (e) {}

    if (trackNbr < 10) {
      completionEvent.listen(
        (event) {
          play(trackNbr + 1);
        },
      );
    }
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Material App',
      home: Scaffold(
        appBar: AppBar(
          title: Text('Example'),
        ),
        body: Center(
          child: ElevatedButton(
            child: Text('Play tracks'),
            onPressed: () {
              play(3);
            },
          ),
        ),
      ),
    );
  }
}

Log Errors

I/flutter (25557): track playing : 3
V/MediaPlayer(25557): resetDrmState:  mDrmInfo=null mDrmProvisioningThread=null mPrepareDrmInProgress=false mActiveDrmScheme=false
V/MediaPlayer(25557): cleanDrmObj: mDrmObj=null mDrmSessionId=null
I/flutter (25557): track playing : 4
I/flutter (25557): track playing : 4
V/MediaPlayer(25557): resetDrmState:  mDrmInfo=null mDrmProvisioningThread=null mPrepareDrmInProgress=false mActiveDrmScheme=false
V/MediaPlayer(25557): cleanDrmObj: mDrmObj=null mDrmSessionId=null
I/flutter (25557): track playing : 5
V/MediaPlayer(25557): resetDrmState:  mDrmInfo=null mDrmProvisioningThread=null mPrepareDrmInProgress=false mActiveDrmScheme=false
V/MediaPlayer(25557): cleanDrmObj: mDrmObj=null mDrmSessionId=null
I/flutter (25557): track playing : 4
E/MediaPlayerNative(25557): attachNewPlayer called in state 4
E/AudioplayersPlugin(25557): Unexpected error!
E/AudioplayersPlugin(25557): java.lang.IllegalStateException
E/AudioplayersPlugin(25557): 	at android.media.MediaPlayer._setDataSource(Native Method)
E/AudioplayersPlugin(25557): 	at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1299)
E/AudioplayersPlugin(25557): 	at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1282)
E/AudioplayersPlugin(25557): 	at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1239)
E/AudioplayersPlugin(25557): 	at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1216)
E/AudioplayersPlugin(25557): 	at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1181)
E/AudioplayersPlugin(25557): 	at xyz.luan.audioplayers.WrappedMediaPlayer.setUrl(WrappedMediaPlayer.kt:37)
E/AudioplayersPlugin(25557): 	at xyz.luan.audioplayers.AudioplayersPlugin.handleMethodCall(AudioplayersPlugin.kt:59)
E/AudioplayersPlugin(25557): 	at xyz.luan.audioplayers.AudioplayersPlugin.onMethodCall(AudioplayersPlugin.kt:34)
E/AudioplayersPlugin(25557): 	at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler.onMessage(MethodChannel.java:233)
E/AudioplayersPlugin(25557): 	at io.flutter.embedding.engine.dart.DartMessenger.handleMessageFromDart(DartMessenger.java:85)
E/AudioplayersPlugin(25557): 	at io.flutter.embedding.engine.FlutterJNI.handlePlatformMessage(FlutterJNI.java:818)
E/AudioplayersPlugin(25557): 	at android.os.MessageQueue.nativePollOnce(Native Method)
E/AudioplayersPlugin(25557): 	at android.os.MessageQueue.next(MessageQueue.java:336)
E/AudioplayersPlugin(25557): 	at android.os.Looper.loop(Looper.java:181)
E/AudioplayersPlugin(25557): 	at android.app.ActivityThread.main(ActivityThread.java:7561)
E/AudioplayersPlugin(25557): 	at java.lang.reflect.Method.invoke(Native Method)
E/AudioplayersPlugin(25557): 	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:539)
E/AudioplayersPlugin(25557): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:995)
I/flutter (25557): track playing : 5
V/MediaPlayer(25557): resetDrmState:  mDrmInfo=null mDrmProvisioningThread=null mPrepareDrmInProgress=false mActiveDrmScheme=false
V/MediaPlayer(25557): cleanDrmObj: mDrmObj=null mDrmSessionId=null
I/flutter (25557): track playing : 6
V/MediaPlayer(25557): resetDrmState:  mDrmInfo=null mDrmProvisioningThread=null mPrepareDrmInProgress=false mActiveDrmScheme=false
V/MediaPlayer(25557): cleanDrmObj: mDrmObj=null mDrmSessionId=null
I/flutter (25557): track playing : 4
E/MediaPlayerNative(25557): attachNewPlayer called in state 4
E/AudioplayersPlugin(25557): Unexpected error!
E/AudioplayersPlugin(25557): java.lang.IllegalStateException
E/AudioplayersPlugin(25557): 	at android.media.MediaPlayer._setDataSource(Native Method)
E/AudioplayersPlugin(25557): 	at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1299)
E/AudioplayersPlugin(25557): 	at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1282)
E/AudioplayersPlugin(25557): 	at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1239)
E/AudioplayersPlugin(25557): 	at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1216)
E/AudioplayersPlugin(25557): 	at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1181)
E/AudioplayersPlugin(25557): 	at xyz.luan.audioplayers.WrappedMediaPlayer.setUrl(WrappedMediaPlayer.kt:37)
E/AudioplayersPlugin(25557): 	at xyz.luan.audioplayers.AudioplayersPlugin.handleMethodCall(AudioplayersPlugin.kt:59)
E/AudioplayersPlugin(25557): 	at xyz.luan.audioplayers.AudioplayersPlugin.onMethodCall(AudioplayersPlugin.kt:34)
E/AudioplayersPlugin(25557): 	at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler.onMessage(MethodChannel.java:233)
E/AudioplayersPlugin(25557): 	at io.flutter.embedding.engine.dart.DartMessenger.handleMessageFromDart(DartMessenger.java:85)
E/AudioplayersPlugin(25557): 	at io.flutter.embedding.engine.FlutterJNI.handlePlatformMessage(FlutterJNI.java:818)
E/AudioplayersPlugin(25557): 	at android.os.MessageQueue.nativePollOnce(Native Method)
E/AudioplayersPlugin(25557): 	at android.os.MessageQueue.next(MessageQueue.java:336)
E/AudioplayersPlugin(25557): 	at android.os.Looper.loop(Looper.java:181)
E/AudioplayersPlugin(25557): 	at android.app.ActivityThread.main(ActivityThread.java:7561)
E/AudioplayersPlugin(25557): 	at java.lang.reflect.Method.invoke(Native Method)
E/AudioplayersPlugin(25557): 	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:539)
E/AudioplayersPlugin(25557): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:995)
I/flutter (25557): track playing : 5
E/MediaPlayerNative(25557): attachNewPlayer called in state 4
E/AudioplayersPlugin(25557): Unexpected error!
E/AudioplayersPlugin(25557): java.lang.IllegalStateException
E/AudioplayersPlugin(25557): 	at android.media.MediaPlayer._setDataSource(Native Method)
E/AudioplayersPlugin(25557): 	at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1299)
E/AudioplayersPlugin(25557): 	at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1282)
E/AudioplayersPlugin(25557): 	at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1239)
E/AudioplayersPlugin(25557): 	at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1216)
E/AudioplayersPlugin(25557): 	at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1181)
E/AudioplayersPlugin(25557): 	at xyz.luan.audioplayers.WrappedMediaPlayer.setUrl(WrappedMediaPlayer.kt:37)
E/AudioplayersPlugin(25557): 	at xyz.luan.audioplayers.AudioplayersPlugin.handleMethodCall(AudioplayersPlugin.kt:59)
E/AudioplayersPlugin(25557): 	at xyz.luan.audioplayers.AudioplayersPlugin.onMethodCall(AudioplayersPlugin.kt:34)
E/AudioplayersPlugin(25557): 	at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler.onMessage(MethodChannel.java:233)
E/AudioplayersPlugin(25557): 	at io.flutter.embedding.engine.dart.DartMessenger.handleMessageFromDart(DartMessenger.java:85)
E/AudioplayersPlugin(25557): 	at io.flutter.embedding.engine.FlutterJNI.handlePlatformMessage(FlutterJNI.java:818)
E/AudioplayersPlugin(25557): 	at android.os.MessageQueue.nativePollOnce(Native Method)
E/AudioplayersPlugin(25557): 	at android.os.MessageQueue.next(MessageQueue.java:336)
E/AudioplayersPlugin(25557): 	at android.os.Looper.loop(Looper.java:181)
E/AudioplayersPlugin(25557): 	at android.app.ActivityThread.main(ActivityThread.java:7561)
E/AudioplayersPlugin(25557): 	at java.lang.reflect.Method.invoke(Native Method)
E/AudioplayersPlugin(25557): 	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:539)
E/AudioplayersPlugin(25557): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:995)
E/MediaPlayerNative(25557): attachNewPlayer called in state 4
E/AudioplayersPlugin(25557): Unexpected error!
E/AudioplayersPlugin(25557): java.lang.IllegalStateException
E/AudioplayersPlugin(25557): 	at android.media.MediaPlayer._setDataSource(Native Method)
E/AudioplayersPlugin(25557): 	at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1299)
E/AudioplayersPlugin(25557): 	at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1282)
E/AudioplayersPlugin(25557): 	at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1239)
E/AudioplayersPlugin(25557): 	at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1216)
E/AudioplayersPlugin(25557): 	at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1181)
E/AudioplayersPlugin(25557): 	at xyz.luan.audioplayers.WrappedMediaPlayer.setUrl(WrappedMediaPlayer.kt:37)
E/AudioplayersPlugin(25557): 	at xyz.luan.audioplayers.AudioplayersPlugin.handleMethodCall(AudioplayersPlugin.kt:59)
E/AudioplayersPlugin(25557): 	at xyz.luan.audioplayers.AudioplayersPlugin.onMethodCall(AudioplayersPlugin.kt:34)
E/AudioplayersPlugin(25557): 	at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler.onMessage(MethodChannel.java:233)
E/AudioplayersPlugin(25557): 	at io.flutter.embedding.engine.dart.DartMessenger.handleMessageFromDart(DartMessenger.java:85)
E/AudioplayersPlugin(25557): 	at io.flutter.embedding.engine.FlutterJNI.handlePlatformMessage(FlutterJNI.java:818)
E/AudioplayersPlugin(25557): 	at android.os.MessageQueue.nativePollOnce(Native Method)
E/AudioplayersPlugin(25557): 	at android.os.MessageQueue.next(MessageQueue.java:336)
E/AudioplayersPlugin(25557): 	at android.os.Looper.loop(Looper.java:181)
E/AudioplayersPlugin(25557): 	at android.app.ActivityThread.main(ActivityThread.java:7561)
E/AudioplayersPlugin(25557): 	at java.lang.reflect.Method.invoke(Native Method)
E/AudioplayersPlugin(25557): 	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:539)
E/AudioplayersPlugin(25557): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:995)
E/MediaPlayerNative(25557): attachNewPlayer called in state 8
E/AudioplayersPlugin(25557): Unexpected error!
E/AudioplayersPlugin(25557): java.lang.IllegalStateException
E/AudioplayersPlugin(25557): 	at android.media.MediaPlayer._setDataSource(Native Method)
E/AudioplayersPlugin(25557): 	at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1299)
E/AudioplayersPlugin(25557): 	at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1282)
E/AudioplayersPlugin(25557): 	at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1239)
E/AudioplayersPlugin(25557): 	at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1216)
E/AudioplayersPlugin(25557): 	at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1181)
E/AudioplayersPlugin(25557): 	at xyz.luan.audioplayers.WrappedMediaPlayer.setUrl(WrappedMediaPlayer.kt:37)
E/AudioplayersPlugin(25557): 	at xyz.luan.audioplayers.AudioplayersPlugin.handleMethodCall(AudioplayersPlugin.kt:59)
E/AudioplayersPlugin(25557): 	at xyz.luan.audioplayers.AudioplayersPlugin.onMethodCall(AudioplayersPlugin.kt:34)
E/AudioplayersPlugin(25557): 	at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler.onMessage(MethodChannel.java:233)
E/AudioplayersPlugin(25557): 	at io.flutter.embedding.engine.dart.DartMessenger.handleMessageFromDart(DartMessenger.java:85)
E/AudioplayersPlugin(25557): 	at io.flutter.embedding.engine.FlutterJNI.handlePlatformMessage(FlutterJNI.java:818)
E/AudioplayersPlugin(25557): 	at android.os.MessageQueue.nativePollOnce(Native Method)
E/AudioplayersPlugin(25557): 	at android.os.MessageQueue.next(MessageQueue.java:336)
E/AudioplayersPlugin(25557): 	at android.os.Looper.loop(Looper.java:181)
E/AudioplayersPlugin(25557): 	at android.app.ActivityThread.main(ActivityThread.java:7561)
E/AudioplayersPlugin(25557): 	at java.lang.reflect.Method.invoke(Native Method)
E/AudioplayersPlugin(25557): 	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:539)
E/AudioplayersPlugin(25557): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:995)
I/flutter (25557): track playing : 6
V/MediaPlayer(25557): resetDrmState:  mDrmInfo=null mDrmProvisioningThread=null mPrepareDrmInProgress=false mActiveDrmScheme=false
V/MediaPlayer(25557): cleanDrmObj: mDrmObj=null mDrmSessionId=null
I/flutter (25557): track playing : 7
Application finished.
Exited (sigterm)

Platforms I tried this code on a physical android device (Redmi 9 M2004J19C) Audioplyer version : ^0.19.1 Flutter version 2.2.0

nicolo-fr avatar Aug 07 '21 17:08 nicolo-fr

Same problem issue in Xiaomi MI A2 Lite using audioplayers: ^0.20.1 flutter: 2.12.0

RPUruIT avatar Oct 18 '21 13:10 RPUruIT

Having same problem in latest version . device: Redmi note 8 audioplayers: ^0.20.1 issue:

E/MediaPlayerNative(32167): attachNewPlayer called in state 4 D/AudioPlayers(32167): Unexpected error! D/AudioPlayers(32167): java.lang.IllegalStateException D/AudioPlayers(32167): at android.media.MediaPlayer._setDataSource(Native Method) D/AudioPlayers(32167): at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1319) D/AudioPlayers(32167): at xyz.luan.audioplayers.WrappedMediaPlayer.setDataSource(WrappedMediaPlayer.kt:52) D/AudioPlayers(32167): at xyz.luan.audioplayers.AudioplayersPlugin.handleMethodCall(AudioplayersPlugin.kt:71) D/AudioPlayers(32167): at xyz.luan.audioplayers.AudioplayersPlugin.onMethodCall(AudioplayersPlugin.kt:33) D/AudioPlayers(32167): at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler.onMessage(MethodChannel.java:233) D/AudioPlayers(32167): at io.flutter.embedding.engine.dart.DartMessenger.handleMessageFromDart(DartMessenger.java:85) D/AudioPlayers(32167): at io.flutter.embedding.engine.FlutterJNI.handlePlatformMessage(FlutterJNI.java:818) D/AudioPlayers(32167): at android.os.MessageQueue.nativePollOnce(Native Method) D/AudioPlayers(32167): at android.os.MessageQueue.next(MessageQueue.java:326) D/AudioPlayers(32167): at android.os.Looper.loop(Looper.java:165) D/AudioPlayers(32167): at android.app.ActivityThread.main(ActivityThread.java:6864) D/AudioPlayers(32167): at java.lang.reflect.Method.invoke(Native Method) D/AudioPlayers(32167): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547) D/AudioPlayers(32167): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:873) E/flutter (32167): [ERROR:flutter/lib/ui/ui_dart_state.cc(199)] Unhandled Exception: PlatformException(Unexpected error!, null, java.lang.IllegalStateException E/flutter (32167): at android.media.MediaPlayer._setDataSource(Native Method) E/flutter (32167): at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1319) E/flutter (32167): at xyz.luan.audioplayers.WrappedMediaPlayer.setDataSource(WrappedMediaPlayer.kt:52) E/flutter (32167): at xyz.luan.audioplayers.AudioplayersPlugin.handleMethodCall(AudioplayersPlugin.kt:71) E/flutter (32167): at xyz.luan.audioplayers.AudioplayersPlugin.onMethodCall(AudioplayersPlugin.kt:33) E/flutter (32167): at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler.onMessage(MethodChannel.java:233) E/flutter (32167): at io.flutter.embedding.engine.dart.DartMessenger.handleMessageFromDart(DartMessenger.java:85) E/flutter (32167): at io.flutter.embedding.engine.FlutterJNI.handlePlatformMessage(FlutterJNI.java:818) E/flutter (32167): at android.os.MessageQueue.nativePollOnce(Native Method) E/flutter (32167): at android.os.MessageQueue.next(MessageQueue.java:326) E/flutter (32167): at android.os.Looper.loop(Looper.java:165) E/flutter (32167): at android.app.ActivityThread.main(ActivityThread.java:6864) E/flutter (32167): at java.lang.reflect.Method.invoke(Native Method) E/flutter (32167): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547) E/flutter (32167): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:873) E/flutter (32167): , null)

muhammadanas759 avatar Dec 28 '21 10:12 muhammadanas759

Can you recheck with audioplayers: ^1.1.0 ?

Gustl22 avatar Sep 27 '22 15:09 Gustl22

Closing as stale.

Gustl22 avatar Nov 03 '22 08:11 Gustl22