1. 程式人生 > >跟我來玩IGFrame(五) 音效與音樂播放

跟我來玩IGFrame(五) 音效與音樂播放

各位轉載請註明出處,謝謝合作~作者:ioozhuangzi

二話不說,先看示例再說org.ioo.igframe.samples.sample05包下的程式碼。

注意,請不要忘了匯入依賴包!!

ClipTest是音效播放的示例,按下滑鼠左鍵是底鼓,右鍵是軍鼓,滾輪是吊鑔,是不是有點兒架子鼓的意思。O(_)o…

MusicTest是音樂播放的示例

onLoad方法裡需要你來指定一個mp3檔案的路徑

//請自行準備音訊檔案,可以是絕對路徑,如E:/xxx.mp3

player = GSoundFactory.createSoundPlayer("/res/sound/0031.mp3",

                                     GSoundFactory.MP3_PLAYER);

 

IGFrame目前支援的音訊格式如下三種:wav/mp3/ogg,一般音效會使用wav

,音樂使用mp3ogg,淡入wav也可以,不過wav檔案太大了。

org.ioo.igframe.media.sound.GSoundFactory播放器工廠類,這個類方法會幫我們建立播放器

建立音樂播放器

//fileName是要播放的檔案路徑名

//type播放器型別,有以下幾種

//GSoundFactory.MP3_PLAYER/GSoundFactory.WAV_PLAYER/GSoundFactory.OGG_PLAYER

// GSoundFactory.MP3_OR_OGG_PLAYER/GSoundFactory.WAV_PLAYER_SIMPLE

//GSoundFactory.MP3_PLAYER_SIMPLE/GSoundFactory.OGG_PLAYER_SIMPLE

//useData 音訊資料的載入方式

//IGPlayer.USE_STREAM_DATA 預設的流方式載入音訊資料

// IGPlayer.USE_GSOUND_DATA 完全載入音訊資料到記憶體(GSound物件)

public static IGPlayer createSoundPlayer(String fileName, int type)

public static IGPlayer createSoundPlayer(String fileName, int type, int useData)

 

建立音效剪輯播放器

// fileName是要播放的檔案路徑名

// type播放器型別,有以下幾種

// GSoundFactory.CLIP_PLAYER / GSoundFactory.CLIP_PLAYER_SIMPLE

//useData 音訊資料的載入方式

// IGClipPlayer.USE_STREAM_DATA 預設的流方式載入音訊資料

// IGClipPlayer.USE_GSOUND_DATA 完全載入音訊資料到記憶體(GSound物件)

public static IGClipPlayer createClipPlayer(String fileName, int type, int useData)

public static IGClipPlayer createClipPlayer(String fileName, int type)

 

關於type引數中區別的說明:

GSoundFactory.XXX_PLAYER 是用來播放包外音訊檔案的播放器

GSoundFactory.XXX_PLAYER_SIMPLE是用來播放包內音訊檔案的播放器,並且不支援中文路徑!!

 

播放器建立完成會返回相應的物件,音效和音樂播放器分別是實現了IGPlayerIGClipPlayer介面的例項。播放相關操作由他們完成。下面介紹以下這個兩個介面。

org.ioo.igframe.media.sound.IGClipPlayer 音效剪輯播放介面

public String getFilePath();//獲取檔案路徑

public void release();//釋放播放器資源

public void resume();//暫停恢復

public void pause();//暫停

public boolean isPaused();//判斷是否暫停

public void setLoop(int loop); //設定迴圈播放的次數,-1為無限迴圈播放

public float getPan();//獲取當前聲相值

public void setPan(float pan); //設定聲相值

public float getVolume();//獲取當前音量

public void setVolume(float vol); //設定音量值

public boolean isPlaying();//判斷是否正在播放

public void stop();//停止

public void play();//播放

public void load(String filePath); //載入音樂

public void load(String filePath, int useData); //載入音樂,指定資料載入方式

 

org.ioo.igframe.media.sound.IGPlayer 音樂播放介面

public void load(String fileName, int useData, boolean autoPlay);// 載入,指定是否自動播放

public void load(String fileName, int useData); //載入

public void play();//播放

public void pause();//暫停

public void resume();//暫停恢復

public void stop();//停止

public void release();//釋放播放器

public boolean isPlaying();//是否播放

public boolean isStoped();//是否停止

public boolean isPaused();//是否暫停

//你可以自定義播放監聽器,實現IGPlayerListener介面,支援新增多個監聽器

public void addListener(IGPlayerListener playerListener); //新增播放監聽器

public void removeListener(IGPlayerListener playerListener); //移除播放監聽器

public Collection<IGPlayerListener> getListeners();//獲取播放監聽器列表

//你可以自定義播放效果器,實現IGEffector介面或繼承GbaseEffector抽象類

//IGFrame提供一個org.ioo.igframe.media.sound.effector.G3Deffector 3D音效效果器

//支援新增多個效果器

public void addEffector(IGEffector effector); //新增播放效果器

public void removeEffector(IGEffector effector); //移除播放效果器

public Collection<IGEffector> getEffectors();//獲取播放效果器列表

public void setLoop(int loop); //設定迴圈播放,IGPlayer.INFINITE_LOOP為無限迴圈

public int getLoop();//獲取設定的迴圈播放次數

public int getLastLoop();//獲取當前剩餘迴圈播放次數

public void setVolume(float vol); //設定音量

public float getVolume();//獲取音量

public void setPan(float pan); //設定聲相

public float getPan();//獲取聲相

public String getFileName();//獲取播放檔案的路徑名

public long getMSLength();//獲取音樂時長(毫秒)包內檔案可能獲取不到

public String getFormatLength();//獲取音樂時長(mm:ss)包內檔案可能獲取不到

public long getMSPosition();//獲取當前播放時間(毫秒)

public String getFormatPosition();//獲取當前播放時間(mm:ss

 

瞭解了相關的播放方法,再來看看org.ioo.igframe.samples.sample05包下的示例程式碼。當然你完全可以在命令列下播放音樂,以mp3播放為例:

public static void main(String[] args) {

                   IGPlayer player = GSoundFactory.createSoundPlayer("D:/xxx.mp3 ",

                                     GSoundFactory.MP3_PLAYER);

                   System.out.println(String.format("檔案:%s", player.getFileName()));

                   System.out.println(String.format("時間:%s", player.getFormatLength()));

                   System.out.println(String.format("時間(ms)%s", player.getMSLength()));

                   player.play();

                   try {

                            Thread.sleep(player.getMSLength());

                   } catch (InterruptedException e) {

                            e.printStackTrace();

                   }

                   player.stop();

                   player.release();

                   System.out.println("播放完成~");

         }

}

 

最後說一點,注意一定不要忘了最後呼叫release()釋放資源。

本人文筆水平實在有限,看的不明白的地方還請您留言提問或者加Q群210816248~驗證:IGFrame