Browse Source

修改调音器音叉和节拍器不可同时播放

Pq 10 months ago
parent
commit
58f7f2712e

+ 48 - 31
musictuner/src/main/java/com/cooleshow/musictuner/MusicTunerActivity.java

@@ -1,23 +1,11 @@
 package com.cooleshow.musictuner;
 
-import androidx.appcompat.app.AppCompatActivity;
-import androidx.viewbinding.ViewBinding;
-import be.tarsos.dsp.AudioDispatcher;
-import be.tarsos.dsp.AudioEvent;
-import be.tarsos.dsp.AudioProcessor;
-import be.tarsos.dsp.io.android.AudioDispatcherFactory;
-import be.tarsos.dsp.pitch.PitchDetectionHandler;
-import be.tarsos.dsp.pitch.PitchDetectionResult;
-import be.tarsos.dsp.pitch.PitchProcessor;
-
 import android.Manifest;
 import android.content.Context;
 import android.content.DialogInterface;
 import android.content.Intent;
 import android.graphics.Color;
 import android.os.Bundle;
-import android.util.Log;
-import android.view.LayoutInflater;
 import android.view.View;
 import android.widget.TextView;
 
@@ -269,22 +257,18 @@ public class MusicTunerActivity extends BaseActivity<ActivityMusicTunerLayoutBin
             if (isOnPlayMusicFork) {
                 //播放中就暂停
                 pauseMusicFork();
-                viewBinding.ivPlayFork.setImageResource(R.drawable.icon_music_tuner_normal);
             } else {
                 //未播放触发播放
                 playMusicFork();
-                viewBinding.ivPlayFork.setImageResource(R.drawable.icon_music_tuner_select);
             }
             return;
         }
 
         if (id == R.id.iv_play_metronome) {
             if (PlayBeanManager.getInstance().isPlaying()) {
-                PlayBeanManager.getInstance().pausePlay();
-                viewBinding.ivPlayMetronome.setImageResource(R.drawable.icon_play_metronome_bt);
+                pausePlayBeat();
             } else {
-                PlayBeanManager.getInstance().play();
-                viewBinding.ivPlayMetronome.setImageResource(R.drawable.icon_pause_metronome_bt);
+                startPlayBeat();
             }
             return;
         }
@@ -307,6 +291,25 @@ public class MusicTunerActivity extends BaseActivity<ActivityMusicTunerLayoutBin
         }
     }
 
+    private void pausePlayBeat() {
+        if (PlayBeanManager.getInstance().isPlaying()) {
+            PlayBeanManager.getInstance().pausePlay();
+            refreshPlayBeatStatus();
+        }
+    }
+
+    private void startPlayBeat() {
+        PlayBeanManager.getInstance().play();
+        refreshPlayBeatStatus();
+        //暂停音叉
+        pauseMusicFork();
+    }
+
+    private void refreshPlayBeatStatus() {
+        boolean playing = PlayBeanManager.getInstance().isPlaying();
+        viewBinding.ivPlayMetronome.setImageResource(playing ? R.drawable.icon_pause_metronome_bt : R.drawable.icon_play_metronome_bt);
+    }
+
     private void showRhythmDialog() {
         if (mRhythmTypeDialog == null) {
             mRhythmTypeDialog = new MoreRhythmTypeDialog(this);
@@ -342,6 +345,8 @@ public class MusicTunerActivity extends BaseActivity<ActivityMusicTunerLayoutBin
         if (!mTuningForkDialog.isShowing()) {
             mTuningForkDialog.show();
             switchMusicForkImg(true);
+            //暂停节拍器
+            pausePlayBeat();
         }
     }
 
@@ -361,11 +366,19 @@ public class MusicTunerActivity extends BaseActivity<ActivityMusicTunerLayoutBin
         }
         AudioTrackManager.getInstance().play(currentMusicMenu);
         isOnPlayMusicFork = true;
+        refreshBt();
+        //暂停节拍器
+        pausePlayBeat();
+    }
+
+    private void refreshBt() {
+        viewBinding.ivPlayFork.setImageResource(isOnPlayMusicFork ? R.drawable.icon_music_tuner_select : R.drawable.icon_music_tuner_normal);
     }
 
     private void pauseMusicFork() {
         AudioTrackManager.getInstance().stop();
         isOnPlayMusicFork = false;
+        refreshBt();
     }
 
     private void updateCurrentHzStandardText() {
@@ -431,20 +444,16 @@ public class MusicTunerActivity extends BaseActivity<ActivityMusicTunerLayoutBin
             PlayBeanManager.getInstance().setBeat(metronomeType, QuarterNoteRhythmType.METRONOME_1_TYPE);
             updateBeatInfo();
         }).setTitleText("拍号").setTitleColor(Color.BLACK).setLayoutRes(com.cooleshow.metronome.R.layout.pickerview_beat_symbol_layout, v -> {
-                    //自定义布局中的控件初始化及事件处理
-                    final TextView tvSubmit = (TextView) v.findViewById(com.cooleshow.metronome.R.id.tv_finish);
-                    TextView ivCancel = (TextView) v.findViewById(com.cooleshow.metronome.R.id.tv_cancel);
-                    tvSubmit.setOnClickListener(v12 -> {
-                        pvOptions.returnData();
-                        pvOptions.dismiss();
-                    });
-                    ivCancel.setOnClickListener(v1 -> pvOptions.dismiss());
+            //自定义布局中的控件初始化及事件处理
+            final TextView tvSubmit = (TextView) v.findViewById(com.cooleshow.metronome.R.id.tv_finish);
+            TextView ivCancel = (TextView) v.findViewById(com.cooleshow.metronome.R.id.tv_cancel);
+            tvSubmit.setOnClickListener(v12 -> {
+                pvOptions.returnData();
+                pvOptions.dismiss();
+            });
+            ivCancel.setOnClickListener(v1 -> pvOptions.dismiss());
 
-                })
-                .setDividerColor(Color.TRANSPARENT)
-                .setBgColor(Color.TRANSPARENT)
-                .setLineSpacingMultiplier(2.7f)
-                .isDialog(false).isDialog(false).build();
+        }).isDialog(false).build();
         pvOptions.setPicker(allBeatTypeList);
         if (currentSelectPosition < allBeatTypeList.size()) {
             pvOptions.setSelectOptions(currentSelectPosition);
@@ -473,6 +482,14 @@ public class MusicTunerActivity extends BaseActivity<ActivityMusicTunerLayoutBin
         }
     }
 
+    @Override
+    protected void onStop() {
+        super.onStop();
+        if (isOnPlayMusicFork) {
+            pauseMusicFork();
+        }
+    }
+
     @Subscribe(threadMode = ThreadMode.MAIN)
     public void loadEventBus(LoginStatusEvent event) {
         if (event != null && event.eventCode == LoginStatusConstants.LOGIN_OUT) {