Android 遊戲開發–即時音效

來源:互聯網
上載者:User

即時音效,顧名思義,是一個又短又快的音效,適合於播放時間較短反應迅速的音頻檔案,例如IME打字時的“噠噠”聲就是這個東西,下象棋時的下棋聲也是...

該技術繼承自android.media.SoundPool

SoundPool類用於和播放應用程式的聲音資源,該類將音效檔載入到記憶體中,處於效能的考慮,一般只將時間小於7秒左右的音效檔用該技術播放。

構造方法SoundPool(int maxStreams, int streamType, int srcQuality)

  • maxStreams:該參數用於設定同時能夠播放多少音效,如設定為3,則最多同時可以播放3個音效
  • streamType:音訊類型,在遊戲中通常設定為STREAM_MUSIC
  • srcQuality:音頻檔案的品質,預設設定為0

載入音頻檔案public int load(Context context, int resId, int priority)

  • context:應用程式上下文,即調用它的Activity
  • resId:資源id
  • priority:優先順序,可以設定為1

播放音效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.0之間,1為正常速度

暫訂播放public final void pause(int streamID)

  • streamID音效ID

 

下面是應用這個即時音效的一個例子

package com.loulijun.quicksound;import java.util.HashMap;import android.app.Activity;import android.media.AudioManager;import android.media.SoundPool;import android.os.Bundle;import android.view.View;import android.widget.Button;public class QuickSoundActivity extends Activity {    //建立一個聲音池private SoundPool sp;HashMap<Integer, Integer> map;private Button startOne = null;private Button stopOne = null;private Button startTwo = null;private Button stopTwo = null;    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);        //初始化聲音池        initSoundPool();        startOne = (Button)findViewById(R.id.startone);        stopOne = (Button)findViewById(R.id.stopone);        startTwo = (Button)findViewById(R.id.starttwo);        stopTwo = (Button)findViewById(R.id.stoptwo);                startOne.setOnClickListener(new Button.OnClickListener()        {@Overridepublic void onClick(View v) {playSound(1,1);//播放第一首音效,迴圈一遍}                });        stopOne.setOnClickListener(new Button.OnClickListener()        {@Overridepublic void onClick(View v) {//暫停第一首音效sp.pause(map.get(1));}                });        startTwo.setOnClickListener(new Button.OnClickListener()        {@Overridepublic void onClick(View v) {//播放第二首音效,迴圈兩次playSound(2,2);}                });        stopTwo.setOnClickListener(new Button.OnClickListener()        {@Overridepublic void onClick(View v) {//暫訂第二首音效sp.pause(map.get(2));}                });    }    //聲音池初始化方法    private void initSoundPool()    {    sp = new SoundPool(5, AudioManager.STREAM_MUSIC, 0);    map = new HashMap<Integer, Integer>();    map.put(1, sp.load(this, R.raw.one, 1));    map.put(2, sp.load(this, R.raw.two, 1));    }    //播放聲音方法    public void playSound(int sound, int number)    {    AudioManager am = (AudioManager)this.getSystemService(this.AUDIO_SERVICE);    //返回當前AlarmManager最大音量    float audioMaxVolume = am.getStreamMaxVolume(AudioManager.STREAM_MUSIC);    //返回當前AudioManager對象的音量值    float audioCurrentVolume = am.getStreamVolume(AudioManager.STREAM_MUSIC);    float volumnRatio = audioCurrentVolume/audioMaxVolume;    sp.play(    map.get(sound), //播放的音樂Id     volumnRatio, //左聲道音量    volumnRatio, //右聲道音量    1, //優先順序,0為最低    number, //迴圈次數,0無不迴圈,-1無永遠迴圈    1);//回放速度,值在0.5-2.0之間,1為正常速度    }}

  

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.