zoukankan      html  css  js  c++  java
  • android 游戏开发之背景音乐的应用

    在前面写到了一个即时音效的应用,主要应用在短了7s的声音,对于背景音乐这种对延时不是很严格的游戏来说,而又对音乐长度有要求的应用我们用的还是地MediaPlayer这个类里的东西。我们现在使用的音乐播放器大多也是用这个来实现的。所以游戏背景音乐对这个来说也是学习一下的。

    初始代的步骤:

    1、用MediaPlayer new一个对象出来

    2、设置这个对象要播放的文件路径

    3、调用用prepare()方法缓冲

    4、调用.start()方法开始播放

    5、播放过程可以调用stop()方法停止播放

    6、播放过程也可以调用pasued()方法来暂停播放

    注意:这里如果调用stop()方法停止播放之后,要重新返回到prepare()才能再次播放。

    简单的播放代码如下:

    package com.example.mediaplayer;
    
    import java.io.IOException;
    
    import android.app.Activity;
    import android.content.Context;
    import android.media.AudioManager;
    import android.media.MediaPlayer;
    import android.os.Bundle;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.Toast;
    
    public class MainActivity extends Activity {
    
        // 按钮
        private Button play_music;
        private Button stop_music;
        private Button pasued_music;
        private Button plus;
        private Button dec;
        private MediaPlayer mp; //MediaPlayer引用
        private AudioManager am;//AudioManager引用
        private int max;//最大音量
        private int current;//当前音量
        private int stepVolume;//一次增加的音量
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            // 按钮的初始化
            play_music = (Button) findViewById(R.id.play_music);
            stop_music = (Button) findViewById(R.id.stop_music);
            pasued_music = (Button) findViewById(R.id.pause_music);
            plus = (Button) findViewById(R.id.plus);
            dec = (Button) findViewById(R.id.dec);
            
            mp=new MediaPlayer();
            try {
                mp.setDataSource("/sdcard/music/test.mp3");//设置路径
                mp.prepare();//缓冲
            } catch (IllegalArgumentException e) {
                e.printStackTrace();
            } catch (IllegalStateException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
            //调用声音
            am=(AudioManager) this.getSystemService(Context.AUDIO_SERVICE);
            max=am.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
            
            stepVolume=max/8;
            
            // 按钮监听器
            play_music.setOnClickListener(new OnClickListener() {
    
                @Override
                public void onClick(View v) {
                    mp.start();
                    Toast.makeText(getApplicationContext(), "音乐开始播放!", Toast.LENGTH_SHORT).show();
                }
            });
            pasued_music.setOnClickListener(new OnClickListener() {
    
                @Override
                public void onClick(View v) {
                    mp.pause();
                    Toast.makeText(getApplicationContext(), "音乐暂停播放!", Toast.LENGTH_SHORT).show();
                    
                }
            });
            stop_music.setOnClickListener(new OnClickListener() {
    
                @Override
                public void onClick(View v) {
                    mp.stop();
                    Toast.makeText(getApplicationContext(), "音乐停止播放!", Toast.LENGTH_SHORT).show();
                    
                }
            });
            plus.setOnClickListener(new OnClickListener() {
    
                @Override
                public void onClick(View v) {
                    current=am.getStreamVolume(AudioManager.STREAM_MUSIC);
                    int tempVolume=current+stepVolume;
                    current=tempVolume<max?tempVolume:max;
                    am.setStreamVolume(AudioManager.STREAM_MUSIC, current, AudioManager.FLAG_PLAY_SOUND);
                    Toast.makeText(getApplicationContext(), "增加音量!", Toast.LENGTH_SHORT).show();
                }
            });
             dec.setOnClickListener(new OnClickListener() {
                    
                    @Override
                    public void onClick(View v) {
                        current=am.getStreamVolume(AudioManager.STREAM_MUSIC);
                        int tempVolume=current-stepVolume;
                        current=tempVolume>0?tempVolume:0;
                        am.setStreamVolume(AudioManager.STREAM_MUSIC, current, AudioManager.FLAG_PLAY_SOUND);
                        Toast.makeText(getApplicationContext(), "减少音量!", Toast.LENGTH_SHORT).show();
                    }
                });
    
        }
    
    }

    运行界面如下:

    注意:要运行这个代码要先在

    /sdcard/music/这个文件夹中放入test.mp3这个文件才能播放成功。还有一个切点就是这个播放音乐时,如果你停止了音乐,然后再点开始播放时就不起作用了,
    什么原因在前面已经说过了。就是要重新缓冲一下才能播放。这个程序我还没有改进,先写到这里吧。
  • 相关阅读:
    HDU 3577Fast Arrangement(线段树模板之区间增减更新 区间求和查询)
    POJ 3468 A Simple Problem with Integers(线段树模板之区间增减更新 区间求和查询)
    HDU 1754 I Hate It(线段树之单点更新 区间最值查询)
    CSU 2056 a simple game (正反进行KMP)超级好题!!!
    HihoCoder
    HDU 6318 Swaps and Inversions 思路很巧妙!!!(转换为树状数组或者归并求解逆序数)
    51 Nod 1107 斜率小于0的连线数量 (转换为归并求逆序数或者直接树状数组,超级详细题解!!!)
    POJ 2299 Ultra-QuickSort 求逆序数 (归并或者数状数组)此题为树状数组入门题!!!
    C# DBHelper类 参考
    C#学习之接口
  • 原文地址:https://www.cnblogs.com/hexiaochun/p/2676798.html
Copyright © 2011-2022 走看看