Browse Source

处理调音器移调显示

Pq 2 years ago
parent
commit
8dcc561a7c

+ 28 - 2
musictuner/src/main/java/com/cooleshow/musictuner/MusicTunerActivity.java

@@ -35,6 +35,8 @@ public class MusicTunerActivity extends BaseActivity<ActivityMusicTunerLayoutBin
     private MusicTunerSettingDialog mTunerSettingDialog;
     private MusicTuningForkDialog mTuningForkDialog;
     private boolean isOnPlayMusicFork = false;//是否正在播放当前音叉音
+    private boolean isTransposing = false;
+    private String currentTransposingTag = "";
 
     public static void start(Context context) {
         Intent intent = new Intent(context, MusicTunerActivity.class);
@@ -100,8 +102,14 @@ public class MusicTunerActivity extends BaseActivity<ActivityMusicTunerLayoutBin
             if (!checkActivityExist()) {
                 return;
             }
+            if (isTransposing) {
+                viewBinding.tvTransposingResult.setText(voiceToneBean.transposingName);
+                viewBinding.tvOriginalResult.setText(voiceToneBean.name);
+            } else {
+                viewBinding.tvResultVoiceTones.setText(voiceToneBean.name);
+            }
             viewBinding.tvResult.setText(getResultText(voiceToneBean));
-            viewBinding.tvResultVoiceTones.setText(voiceToneBean.name);
+
             viewBinding.tvBeforeResultVoiceTones.setText(voiceToneBean.beforeName);
             viewBinding.tvAfter.setText(voiceToneBean.afterName);
             long differenceText = getDifferenceText(voiceToneBean.difference);
@@ -113,7 +121,7 @@ public class MusicTunerActivity extends BaseActivity<ActivityMusicTunerLayoutBin
     private String getResultText(VoiceToneBean voiceToneBean) {
         if (voiceToneBean != null) {
             int value = (int) voiceToneBean.voiceFrequencyValue;
-            return voiceToneBean.name + ":" + value + "Hz";
+            return (isTransposing ? voiceToneBean.transposingName : voiceToneBean.name) + ":" + value + "Hz";
         }
         return "";
     }
@@ -241,10 +249,28 @@ public class MusicTunerActivity extends BaseActivity<ActivityMusicTunerLayoutBin
                     VoiceDataUtils.getInstance().resetHzStandard();
                     updateCurrentHzStandardText();
                 }
+
+                @Override
+                public void onTransposingSelectMode(boolean isTransposing, String tag) {
+                    MusicTunerActivity.this.isTransposing = isTransposing;
+                    MusicTunerActivity.this.currentTransposingTag = tag;
+                    updateTransposingMode();
+                }
             });
         }
         if (!mTunerSettingDialog.isShowing()) {
             mTunerSettingDialog.show();
         }
     }
+
+    private void updateTransposingMode() {
+        if (isTransposing) {
+            viewBinding.groupTransposing.setVisibility(View.VISIBLE);
+            viewBinding.tvTransposingResultTitle.setText(String.format("%s ins.", this.currentTransposingTag));
+            viewBinding.tvResultVoiceTones.setVisibility(View.GONE);
+        } else {
+            viewBinding.groupTransposing.setVisibility(View.GONE);
+            viewBinding.tvResultVoiceTones.setVisibility(View.VISIBLE);
+        }
+    }
 }

+ 9 - 0
musictuner/src/main/java/com/cooleshow/musictuner/bean/MusicTransposingDataBean.java

@@ -8,6 +8,15 @@ import com.contrarywind.interfaces.IPickerViewData;
 public class MusicTransposingDataBean implements IPickerViewData {
     private int value;//移调的值 负数为降调 正数为升调
     private String title;//显示名称
+    private String musicTransposingTag;//降调显示的名称
+
+    public String getMusicTag() {
+        return musicTransposingTag;
+    }
+
+    public void setMusicTag(String musicTag) {
+        this.musicTransposingTag = musicTag;
+    }
 
     public int getValue() {
         return value;

+ 1 - 0
musictuner/src/main/java/com/cooleshow/musictuner/bean/VoiceToneBean.java

@@ -6,6 +6,7 @@ package com.cooleshow.musictuner.bean;
 public class VoiceToneBean {
     public String name;
     public double voiceFrequencyValue;
+    public String transposingName;
     public String difference;//与当前标本音的差值
     public String beforeName;//前一个音的名称
     public double beforeVoiceFrequencyValue;//前一个音的音频值

+ 7 - 1
musictuner/src/main/java/com/cooleshow/musictuner/constants/MusicTunerConstants.java

@@ -9,5 +9,11 @@ public class MusicTunerConstants {
             "单簧管:降B大调", "双簧管:C大调", "竖笛:C调大调",
             "小号:降B大调", "长号:C大调", "圆号:F大调",
             "大号:降B大调", "上低音号:C大调", "上低音号:降B大调"};
-    public final static int[] TRANSPOSING_VALUES = new int[]{0, 0, -2, -9, -2, 0, -12, -2, 0, 5, -2, 0, -2};
+    public final static int[] TRANSPOSING_VALUES = new int[]{0, 0, -2, -9, -2, 0, -12, -2, 0, -7, -2, 0, -2};
+    //private let flats = ["C", "D♭","D","E♭","E","F","G♭","G","A♭","A","B♭","B"]
+    public final static String[] TRANSPOSING_TITLE_TAG = new String[]{"C",
+            "C", "B♭", "E♭",
+            "B♭", "C", "C",
+            "B♭", "C", "F",
+            "B♭", "C", "B♭"};
 }

+ 3 - 1
musictuner/src/main/java/com/cooleshow/musictuner/utils/VoiceDataUtils.java

@@ -120,7 +120,9 @@ public class VoiceDataUtils {
         int beforeNamePos = correctPosition(beforePos);
         int nameAfterPos = correctPosition(afterPos);
         VoiceToneBean voiceToneBean = new VoiceToneBean();
-        voiceToneBean.name = countName(namePos);
+        //如果有移调 赋值移调后的音阶名
+        voiceToneBean.transposingName = countName(namePos);
+        voiceToneBean.name = countName(pos);
         voiceToneBean.voiceFrequencyValue = countWithMusicHzStandard2(ALL_VOICE_SAMPLES[pos]);
         voiceToneBean.beforeName = countName(beforeNamePos);
         voiceToneBean.beforeVoiceFrequencyValue = countWithMusicHzStandard2(ALL_VOICE_SAMPLES[beforePos]);

+ 6 - 0
musictuner/src/main/java/com/cooleshow/musictuner/widget/MusicTunerSettingDialog.java

@@ -60,6 +60,7 @@ public class MusicTunerSettingDialog extends Dialog implements View.OnClickListe
             MusicTransposingDataBean musicTransposingDataBean = new MusicTransposingDataBean();
             musicTransposingDataBean.setTitle(title);
             musicTransposingDataBean.setValue(MusicTunerConstants.TRANSPOSING_VALUES[i]);
+            musicTransposingDataBean.setMusicTag(MusicTunerConstants.TRANSPOSING_TITLE_TAG[i]);
             mList.add(musicTransposingDataBean);
         }
     }
@@ -100,6 +101,9 @@ public class MusicTunerSettingDialog extends Dialog implements View.OnClickListe
         if (id == R.id.tv_confirm) {
             if (currentTransposingDataBean != null) {
                 VoiceDataUtils.getInstance().setTransposingValue(currentTransposingDataBean.getValue());
+                if (onEventListener != null) {
+                    onEventListener.onTransposingSelectMode(currentTransposingDataBean.getValue() != 0, currentTransposingDataBean.getMusicTag());
+                }
             }
             dismiss();
         }
@@ -111,6 +115,8 @@ public class MusicTunerSettingDialog extends Dialog implements View.OnClickListe
         void onReduceHz();
 
         void onReset();
+
+        void onTransposingSelectMode(boolean isTransposing, String currentTransposingTag);
     }
 
     private void updateCurrentHzStandardText() {

BIN
musictuner/src/main/res/drawable-xhdpi/icon_transposing_tag.png


BIN
musictuner/src/main/res/drawable-xxhdpi/icon_transposing_tag.png


+ 70 - 0
musictuner/src/main/res/layout/activity_music_tuner_layout.xml

@@ -204,6 +204,76 @@
         app:layout_constraintTop_toTopOf="@+id/iv_bottom_bg"
         tools:text="C" />
 
+    <TextView
+        android:id="@+id/tv_original_result_title"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="39dp"
+        android:text="Concert"
+        android:textColor="@color/white"
+        android:textSize="@dimen/sp_14"
+        app:layout_constraintHorizontal_chainStyle="spread"
+        app:layout_constraintLeft_toLeftOf="@+id/tv_original_result"
+        app:layout_constraintRight_toRightOf="@+id/tv_original_result"
+        app:layout_constraintTop_toTopOf="@+id/iv_bottom_bg" />
+
+    <TextView
+        android:id="@+id/tv_transposing_result_title"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:text="F# ins."
+        android:textColor="@color/white"
+        android:textSize="@dimen/sp_14"
+        app:layout_constraintLeft_toLeftOf="@+id/tv_transposing_result"
+        app:layout_constraintRight_toRightOf="@+id/tv_transposing_result"
+        app:layout_constraintTop_toTopOf="@+id/tv_original_result_title" />
+
+    <TextView
+        android:id="@+id/tv_original_result"
+        android:layout_width="0dp"
+        android:layout_height="wrap_content"
+        android:layout_marginStart="10dp"
+        android:gravity="center"
+        android:textColor="@color/white"
+        android:textSize="@dimen/sp_38"
+        app:layout_constraintBottom_toBottomOf="@+id/iv_transposing_tag"
+        app:layout_constraintLeft_toLeftOf="@+id/iv_bottom_bg"
+        app:layout_constraintRight_toLeftOf="@+id/iv_transposing_tag"
+        app:layout_constraintTop_toTopOf="@+id/iv_transposing_tag"
+        tools:text="A#" />
+
+
+    <ImageView
+        android:id="@+id/iv_transposing_tag"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:src="@drawable/icon_transposing_tag"
+        app:layout_constraintBottom_toBottomOf="@+id/iv_bottom_bg"
+        app:layout_constraintLeft_toLeftOf="@+id/iv_bottom_bg"
+        app:layout_constraintRight_toRightOf="@+id/iv_bottom_bg"
+        app:layout_constraintTop_toTopOf="@+id/iv_bottom_bg" />
+
+    <TextView
+        android:id="@+id/tv_transposing_result"
+        android:layout_width="0dp"
+        android:layout_height="wrap_content"
+        android:layout_marginEnd="10dp"
+        android:gravity="center"
+        android:textColor="@color/white"
+        android:textSize="@dimen/sp_38"
+        app:layout_constraintBottom_toBottomOf="@+id/iv_transposing_tag"
+        app:layout_constraintLeft_toRightOf="@+id/iv_transposing_tag"
+        app:layout_constraintRight_toRightOf="@+id/iv_bottom_bg"
+        app:layout_constraintTop_toTopOf="@+id/iv_transposing_tag"
+        tools:text="A#" />
+
+    <androidx.constraintlayout.widget.Group
+        android:id="@+id/group_transposing"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:visibility="gone"
+        app:constraint_referenced_ids="tv_transposing_result,iv_transposing_tag,tv_original_result,tv_transposing_result_title,tv_original_result_title" />
+
     <ImageView
         android:id="@+id/iv_left_bg"
         android:layout_width="wrap_content"