/** * Non reactive API. */ @WorkerThread public boolean playNonRxy(@NonNull final PlayConfig config, final MediaPlayer.OnCompletionListener onCompletionListener, final MediaPlayer.OnErrorListener onErrorListener) { if (!config.isArgumentValid()) { return false; } try { MediaPlayer player = create(config); setMediaPlayerListener(player, onCompletionListener, onErrorListener); player.setVolume(config.mLeftVolume, config.mRightVolume); player.setAudioStreamType(config.mStreamType); player.setLooping(config.mLooping); if (config.needPrepare()) { player.prepare(); } player.start(); mPlayer = player; return true; } catch (RuntimeException | IOException e) { Log.w(TAG, "startPlay fail, IllegalArgumentException: " + e.getMessage()); stopPlay(); return false; } }
/** * play audio from local file. should be scheduled in IO thread. */ public Observable<Boolean> play(@NonNull final PlayConfig config) { if (!config.isArgumentValid()) { return Observable.error(new IllegalArgumentException("")); } return Observable.<Boolean>create(emitter -> { MediaPlayer player = create(config); setMediaPlayerListener(player, emitter); player.setVolume(config.mLeftVolume, config.mRightVolume); player.setAudioStreamType(config.mStreamType); player.setLooping(config.mLooping); if (config.needPrepare()) { player.prepare(); } player.start(); mPlayer = player; emitter.onNext(true); }).doOnError(e -> stopPlay()); }
/** * prepare audio from local file. should be scheduled in IO thread. */ public Observable<Boolean> prepare(@NonNull final PlayConfig config) { if (!config.isArgumentValid() || !config.isLocalSource()) { return Observable.error(new IllegalArgumentException("")); } return Observable.<Boolean>create(emitter -> { MediaPlayer player = create(config); setMediaPlayerListener(player, emitter); player.setVolume(config.mLeftVolume, config.mRightVolume); player.setAudioStreamType(config.mStreamType); player.setLooping(config.mLooping); if (config.needPrepare()) { player.prepare(); } mPlayer = player; emitter.onNext(true); }).doOnError(e -> stopPlay()); }