Browse Source

1.添加倒计时音效

王鹏鹏 2 years ago
parent
commit
19fb3d0b28

+ 29 - 0
baselib/src/main/java/com/yingyangfly/baselib/player/VoicePlayer.java

@@ -1,10 +1,16 @@
 package com.yingyangfly.baselib.player;
 
 import android.content.Context;
+import android.content.res.AssetFileDescriptor;
 import android.media.AudioManager;
 import android.media.MediaPlayer;
+import android.os.Build;
 import android.text.TextUtils;
 
+import androidx.annotation.RequiresApi;
+
+import com.yingyangfly.baselib.R;
+
 import java.io.IOException;
 
 /**
@@ -16,6 +22,7 @@ public class VoicePlayer {
     private AudioManager audioManager;
     private MediaPlayer mediaPlayer;
     private boolean isPause;
+    private Context mContent;
     private MediaPlayer.OnCompletionListener onCompletionListener;
 
     public static VoicePlayer getInstance(Context context) {
@@ -30,6 +37,7 @@ public class VoicePlayer {
     }
 
     private VoicePlayer(Context cxt) {
+        mContent = cxt.getApplicationContext();
         Context baseContext = cxt.getApplicationContext();
         audioManager = (AudioManager) baseContext.getSystemService(Context.AUDIO_SERVICE);
         mediaPlayer = new MediaPlayer();
@@ -64,6 +72,27 @@ public class VoicePlayer {
         }
     }
 
+    @RequiresApi(api = Build.VERSION_CODES.N)
+    public void play(AssetFileDescriptor assetFileDescriptor, final MediaPlayer.OnCompletionListener listener) {
+        isPause = false;
+        onCompletionListener = listener;
+        try {
+            if (assetFileDescriptor != null) {
+                mediaPlayer.setDataSource(assetFileDescriptor);
+                mediaPlayer.prepareAsync();
+                mediaPlayer.setOnPreparedListener(mp -> {
+                    mediaPlayer.start();
+                });
+                mediaPlayer.setOnCompletionListener(mp -> {
+                    stop();
+                    onCompletionListener = null;
+                });
+            }
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+    }
+
     public void stop() {
         isPause = false;
         mediaPlayer.stop();

+ 21 - 0
game/src/main/java/com/yingyangfly/game/dialog/CountdownDialog.kt

@@ -1,9 +1,11 @@
 package com.yingyangfly.game.dialog
 
+import android.os.Build
 import android.os.Bundle
 import android.view.LayoutInflater
 import android.view.View
 import android.view.ViewGroup
+import androidx.annotation.RequiresApi
 import androidx.appcompat.widget.AppCompatImageView
 import androidx.fragment.app.DialogFragment
 import com.bumptech.glide.Glide
@@ -11,6 +13,7 @@ import com.bumptech.glide.load.engine.DiskCacheStrategy
 import com.bumptech.glide.request.RequestOptions
 import com.gyf.immersionbar.BarHide
 import com.gyf.immersionbar.ktx.immersionBar
+import com.yingyangfly.baselib.player.VoicePlayer
 import com.yingyangfly.baselib.utils.LiveEventBusUtil
 import com.yingyangfly.baselib.utils.RxBusCodes
 import com.yingyangfly.baselib.utils.RxTimer
@@ -31,6 +34,9 @@ class CountdownDialog : DialogFragment() {
     private var countdown = false
     private var loadingOver = false
 
+
+    private var voicePlayer: VoicePlayer? = null
+
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
         isCancelable = false
@@ -62,6 +68,7 @@ class CountdownDialog : DialogFragment() {
         val rootView = ViewTool.inflateFragmentPixels(
             activity, R.layout.dialog_count_down, container, 1194, 834
         )
+        voicePlayer = VoicePlayer.getInstance(requireActivity())
         findId(rootView)
         initData()
         initTimer()
@@ -77,6 +84,7 @@ class CountdownDialog : DialogFragment() {
         loadingImage = rootView.findViewById(R.id.loadingImage)
     }
 
+    @RequiresApi(Build.VERSION_CODES.N)
     private fun initData() {
         Glide.with(requireActivity())
             .asGif()
@@ -87,6 +95,7 @@ class CountdownDialog : DialogFragment() {
     /**
      * 初始化定时器
      */
+    @RequiresApi(Build.VERSION_CODES.N)
     private fun initTimer() {
         rxTimer = RxTimer()
         val m: Long = 1000
@@ -96,12 +105,24 @@ class CountdownDialog : DialogFragment() {
             when (date.toString()) {
                 "1" -> {
                     imageCountdown!!.setBackgroundResource(R.mipmap.icon_one)
+                    val wavFile = resources.openRawResourceFd(R.raw.one)
+                    voicePlayer?.play(wavFile) {
+
+                    }
                 }
                 "2" -> {
                     imageCountdown!!.setBackgroundResource(R.mipmap.icon_two)
+                    val wavFile = resources.openRawResourceFd(R.raw.two)
+                    voicePlayer?.play(wavFile) {
+
+                    }
                 }
                 "3" -> {
                     imageCountdown!!.setBackgroundResource(R.mipmap.icon_three)
+                    val wavFile = resources.openRawResourceFd(R.raw.three)
+                    voicePlayer?.play(wavFile) {
+
+                    }
                 }
             }
             if (it == time) {

BIN
game/src/main/res/raw/one.wav


BIN
game/src/main/res/raw/three.wav


BIN
game/src/main/res/raw/two.wav