跟我來玩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
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是用來播放包內音訊檔案的播放器,並且不支援中文路徑!!
播放器建立完成會返回相應的物件,音效和音樂播放器分別是實現了IGPlayer和IGClipPlayer介面的例項。播放相關操作由他們完成。下面介紹以下這個兩個介面。
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。