亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

游戲中的音效

2019-11-14 14:59:18
字體:
來源:轉載
供稿:網友

1. 游戲中的即時音效:

在游戲中,根據情況播放的即時音效較為短暫、可以重復、也可以同時播放。由于Android中提供的MediaPlayer會占用大量的系統資源,而且播放時還會進行緩沖,有較大的延時,因此使用MediaPlayer無法實現即時音效的播放。而在Android中專門提供的SoundPool類主要用于管理和播放應用程序中的聲音資源,使用該類時首先需要通過該類將聲音資源加載到內存中,然后在需要的即時音效的地方播放即可,幾乎沒有延時現象?!居捎赟oundPool設計的初衷是用于無延時地播放游戲中的即時音效,因此實際開發中應該只講長度小于7s的聲音資源放進soundPool,否則可能會加載失敗或內存占用過大】

SoundPool類:

public SoundPool (int maxSreams, int streamType, int srcQuality):創建SoundPool對象:maxStreams[該參數用于設置最多同時播放多少個音效]streamType[該參數設置音頻類型,在游戲中通常設置為STREAM_MUSIC]srcQuality[該參數設置音頻文件的質量,目前還沒有具體的作用,設置為0(默認值)]

public int load(Context context, int resId, int PRiority):架子啊音頻文件:context[該參數為應用程序的上下文]resId[該參數為要加載的音效資源的ID]priority[優先級]

public final int play (int soundID, float leftVolume, float rightVolume, int priority, int loop, float rate):播放音效:soundID[該參數為要播放的音效ID]leftVolume[用來控制左聲道音量]rightVolume[用來控制右聲道音量]priority[該參數為優先級,0為最低]loop[該參數為音效的循環次數,0為不循環,-1為永遠循環]rate[該參數為音效的回放速率,該值在0.5~2.0f,1.0f為正常速度]

public final void pause(int streamID):暫停音效的播放:streamID[要暫停音效的ID]

public final void stop(int streamID):停止播放音效:streamID[要停止播放音效的ID]

實例:

//初始化聲音池的方法       public void initialsnd()       {               //初始化SoundPool對象		sp=new SoundPool(4,AudioManager.STREAM_MUSIC,0);               //初始化hashMap		hm=new HashMap<Integer,Integer>();               //加載音效文件ff,并設置為1號聲音放入到hm中		hm.put(1,sp.load(this,R.raw.ff,1));	}//音效播放	public void playSound(int sound,int loop)      {               //獲取AudioManager引用		AudioManager am=(AudioManager)this.getSystemService(Context.AUDIO_SERVICE);               //獲取當前系統音量		float v1=am.getStreamVolume(AudioManager.STREAM_MUSIC);               //獲取系統的最大音量		float v2=am.getStreamMaxVolume(AudioManager.STREAM_MUSIC);                //計算得到播放音量		float v=v1/v2;                //調用SoundPool的play方法播放文件		currentId=sp.play(hm.get(sound),v,v,1,loop,1.0f);	}

2.背景音樂播放:

在游戲中,背景音樂可以使用不大于7s的一小節音樂將SoundPool的loop設置為-1即可;但在實際開發中,背景音效對延時并不是特別敏感,因此較長音效可以使用MediaPlayer進行播放。

2.1MediaPlayer的聲明周期:MediaPlayer的生命周期包括10種狀態,每種狀態下可以調用相應的方法來實現音/視頻文件的管理或播放。

<1>Idle狀態:使用new方法創建一個MediaPlayer對象或者調用了其reset方法時,該MediaPlayer對象處于idle狀態。在此狀態下調用getDuration等方法,reset方法進入idle狀態的話會觸發OnErrorListener.onError,同時MediaPlayer對象進入Error狀態,當然new方法不會。

<2>End狀態:通過release方法可以進入End狀態,只要MediaPlayer對象不再被使用,就應當盡快將其通過release方法釋放掉,以釋放占用的軟、硬件資源,這其中有些資源是互斥的。如果MediaPlayer進入到End狀態就不會再進行其他任何狀態。

<3>Initialized狀態:MediaPlayer調用setDataSource方法就進入了Initialized狀態,表示此時要播放的文件已經裝備好了。

<4>Prepared狀態:初始化完成之后還需要調用prepare或prepareAsync方法進行準備,這兩種方法一種是同步的,一種是異步的。只有進入了Prepared狀態,才表明MediaPlayer到目前為止都工作正常,可以進行音樂文件的播放。

<5>Preparing狀態:主要是與prepareAsync異步準備方法配合,如果異步準備完成,會觸發OnPreparedListener.onPrepared,進而進入Prepared狀態。

<6>Started狀態:MediaPlayer準備完成之后,通過調用start方法,將進入Started狀態。所謂Started狀態,也就是播放中的狀態,開發中可以使用isPlaying方法測試MediaPlayer是否處于Started狀態。

<7>Paused狀態:Started狀態下調用paused方法可以暫停播放,從而進入Paused狀態。暫停狀態時可以調用seekTo方法,這時此MediaPlayer的狀態是不變的。

<8>Stop狀態:Started狀態和Paused狀態下均可調用stop方法并進入Stop狀態,如果處于Stop狀態的MediaPlayer要想重新播放,需要通過調用prepareAsync或prepare方法返回到先前的Prepared狀態重新開始才可以。

<9>PlaybackCompleted狀態:文件正常播放完畢,而又沒有設置循環播放的話就進入該狀態,并會觸發OnCompletionListener接口中的OnCompletion方法。此時可以調用start方法重新從頭開始播放文件呢,也可以調用stop方法停止播放,或者調用seekTo方法來重新定位播放位置。

<10>Error狀態:由于某種原因MediaPlayer出現了錯誤,就會觸發OnErrorListener.onError回調方法,此時MediaPlayer將會進入Error狀態。及時捕捉并妥善處理這些錯誤可以釋放相關的軟、硬件資源,也可以改善用戶體驗。如果MediaPlayer進入了Error狀態,可以通過調用reset方法來恢復,使得MediaPlayer重新返回Idle狀態。

2.2MediaPlayer類:

首首先需要調用Activity對象的getSystemService(Context.AUDIO_SERVICE)方法獲取AudioManager對象。然后調用MediaPlayer類中的相關方法進行音量控制。

public void adjustVolume(int direction, int flags):調用該方法可以調節音量大小。參數direction為調節的方向,ADJUST_LOWER減小音量、ADJUST_RAISE增大音量、ADJUST_SAME保持音量不變;參數flags為標記,通常設置為0。

public int getStreamMaxVolume(int streamtype):獲取系統最大音量。

public int getStreamVolume(int StreamType):獲取系統當前音量。

void android.media.AudioManager.setStreamVolume(int streamType, int index, int flags):調用該方法可以設置音量的大小,參數streamType為聲音的類型,index為要設置的音頻的索引值,參數flags為標記,通常設置為AudioManager.FLAG_PLAY_SOUND。

package com.mycompany.myapp;import android.app.*;import android.os.*;import android.view.*;import android.widget.*;import android.media.*;import android.content.*;import android.view.View.*;public class MainActivity extends Activity{    MediaPlayer  mp;    AudioManager am;    private int maxvolume;    private int curvolume;    private int stpvolume;    /** Called when the activity is first created. */    @Override    public void onCreate(Bundle savedInstanceState)    {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);        mp=new MediaPlayer();        try{            mp.setDataSource("sdcard/kgmusic/download/One T - The Magic Key.mp3");            mp.prepare();        }catch(Exception e){            e.printStackTrace();                }        am=(AudioManager)this.getSystemService(Context.AUDIO_SERVICE);        maxvolume=am.getStreamMaxVolume(AudioManager.STREAM_MUSIC);        stpvolume=maxvolume/6;        Button bstart=(Button)this.findViewById(R.id.playbtn);        Button bpause=(Button)this.findViewById(R.id.pausebtn);        Button bstop=(Button)this.findViewById(R.id.stopbtn);        Button bincrease=(Button)this.findViewById(R.id.increasevolumebtn);        Button breduce=  (Button)this.findViewById(R.id.reducevolumebtn);                bstart.setOnClickListener(new OnClickListener(){            public void onClick(View v){                mp.start();                Toast.makeText(getBaseContext(),"開始播放",Toast.LENGTH_LONG).show();            }        });        bpause.setOnClickListener(new OnClickListener(){            public void onClick(View v){                mp.pause();                Toast.makeText(getBaseContext(),"暫停播放",Toast.LENGTH_LONG).show();            }        });        bstop.setOnClickListener(new OnClickListener(){            public void onClick(View v){                mp.stop();                Toast.makeText(getBaseContext(),"停止播放",Toast.LENGTH_LONG).show();            }        });        bincrease.setOnClickListener(new OnClickListener(){            public void onClick(View v){                curvolume=am.getStreamVolume(AudioManager.STREAM_MUSIC);                int tmpvolume=curvolume+stpvolume;                am.setStreamVolume(AudioManager.STREAM_MUSIC,curvolume,AudioManager.FLAG_PLAY_SOUND);                Toast.makeText(getBaseContext(),"音量增加",Toast.LENGTH_LONG).show();            }        });        breduce.setOnClickListener(new OnClickListener(){            public void onClick(View v){                curvolume=am.getStreamVolume(AudioManager.STREAM_MUSIC);                int tmpvolume=curvolume-stpvolume;                curvolume=tmpvolume>0?tmpvolume:0;                am.setStreamVolume(AudioManager.STREAM_MUSIC,curvolume,AudioManager.FLAG_PLAY_SOUND);                Toast.makeText(getBaseContext(),"音量減小",Toast.LENGTH_LONG);            }        });    }}

 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲欧美日韩成人| 久久久久亚洲精品| 日韩电影网在线| 美日韩在线视频| 2018国产精品视频| 国产亚洲成av人片在线观看桃| 久久99视频免费| 精品自拍视频在线观看| 97人洗澡人人免费公开视频碰碰碰| 亚洲精品国产福利| 亚洲精品福利在线观看| 国产欧美一区二区三区在线看| 国产91亚洲精品| 久久频这里精品99香蕉| 中文字幕精品在线视频| 久久久久久久999| 在线视频国产日韩| 国产精品欧美一区二区三区奶水| 成人做爽爽免费视频| 91精品国产成人www| 国产欧美在线播放| 成人精品一区二区三区| 亚洲精品国产精品国产自| 亚洲欧美中文日韩v在线观看| 97视频在线观看免费| 久久成年人视频| 92国产精品久久久久首页| 久久这里有精品视频| 亚洲最大的成人网| 日韩成人在线电影网| 亚洲精品一区中文字幕乱码| 国产精品69久久| www.日韩视频| 久久97精品久久久久久久不卡| 国产亚洲精品美女久久久| 国产区精品在线观看| 性欧美视频videos6一9| www.亚洲免费视频| 国产精品嫩草影院久久久| 久久久99久久精品女同性| 国产日韩欧美视频在线| 国产精品日日摸夜夜添夜夜av| 亚洲国产成人精品电影| 欧美成人精品在线播放| 久久久久久av| 欧美激情在线视频二区| 日本亚洲精品在线观看| 亚洲综合国产精品| 91精品国产色综合久久不卡98| 国产成人精品免高潮费视频| 亚州欧美日韩中文视频| 精品中文字幕久久久久久| 成人福利网站在线观看| 九九久久久久久久久激情| 亚洲激情电影中文字幕| 欧美日韩中国免费专区在线看| 精品久久香蕉国产线看观看gif| 日韩中文字幕在线播放| 中文字幕日韩有码| 日韩精品视频免费在线观看| 欧美性猛交xxxx免费看| 欧美日韩综合视频网址| 91精品国产777在线观看| 国产成人+综合亚洲+天堂| 国产成人中文字幕| 久久久国产在线视频| 亚洲天堂男人天堂女人天堂| 精品少妇一区二区30p| 欧美大荫蒂xxx| 日本中文字幕不卡免费| 97超级碰在线看视频免费在线看| 日韩av影视综合网| 日韩中文字幕在线视频播放| 日韩美女免费线视频| 欧美高清激情视频| 国产精品嫩草视频| 亚洲qvod图片区电影| 色噜噜亚洲精品中文字幕| 午夜精品久久久久久久99热| 亚洲欧美一区二区激情| 日韩免费在线免费观看| 国产成人精品免高潮在线观看| 亚洲欧美另类中文字幕| 日韩一区在线视频| 亚洲а∨天堂久久精品喷水| 中文字幕日韩欧美在线| 国产精品久久久| 国产性猛交xxxx免费看久久| 精品久久久久久国产| 日韩免费av片在线观看| 久久久久久久999精品视频| 欧美日韩国产综合视频在线观看中文| 久久五月天综合| 国内精品视频一区| 国产美女91呻吟求| 亚洲成人动漫在线播放| 亚洲一区二区福利| 另类视频在线观看| 国产精品www色诱视频| 亚洲一区二区三区香蕉| 九九热精品视频| 欧美亚洲视频在线观看| 成人女保姆的销魂服务| 成人在线精品视频| 日本韩国欧美精品大片卡二| 91在线高清视频| 亚洲欧美综合区自拍另类| 欧美伦理91i| 中文字幕免费精品一区| 久久99精品国产99久久6尤物| 日本久久中文字幕| 91大神福利视频在线| 久久亚洲精品视频| 日韩av中文字幕在线播放| 国产精品久久久久久超碰| 亚洲男人的天堂网站| 热久久视久久精品18亚洲精品| 久久久久久噜噜噜久久久精品| xxx欧美精品| 97久久精品视频| 国产视频一区在线| 日韩中文字幕网站| 清纯唯美亚洲综合| 久久精品最新地址| 欧美成人黑人xx视频免费观看| 中国日韩欧美久久久久久久久| 91九色国产视频| 成人黄色网免费| 亚洲欧美日韩一区二区三区在线| 亚洲二区中文字幕| 日韩欧美在线字幕| 亚洲欧美视频在线| 日本精品视频网站| 亚洲四色影视在线观看| 久久久91精品国产一区不卡| 国产欧美日韩中文| 久久久伊人日本| 日韩免费精品视频| 91精品国产99久久久久久| 亚洲少妇中文在线| 亚洲裸体xxxx| 亚洲电影在线观看| 亚洲自拍偷拍色片视频| 97精品视频在线| 欧美专区福利在线| 国产成人精彩在线视频九色| 日韩av免费在线观看| 国产精品视频26uuu| 国产精品爽爽爽| 亚洲人成在线电影| 久久综合久久美利坚合众国| 国产这里只有精品| 成人福利在线视频| 97成人精品视频在线观看| 国产精品久久久久久久久久免费| 精品久久久国产精品999| 一夜七次郎国产精品亚洲| 一区二区欧美激情| 97视频在线观看视频免费视频| 欧美成人免费va影院高清| 亚洲国产精品福利| 亚洲一区av在线播放| 精品一区二区电影| 欧美一区二区三区图|