|
详细介绍手机游戏中的声音处理
发表日期:2007-12-23
|
详细介绍声音处理 /** * 作者 colico Email:colico@163.com * http://blog.csdn.net/colico * http://colico.ys168.com * 注:此为 我是小o 原创,需要转载请附上以上信息。 * */
本文是在同一个游戏中移植在不同机型时所做的对声音的处理,考虑到性能的要求,对每种类型的手机做了一定的要求
s40 中的声音处理:
1) import com.nokia.mid.sound.*;
2)
Sound soundPlayer; void initSound(){ soundPlayer = new Sound(b_main,1); if(m_playSound == 1){ soundPlayer.play(0); } }
3) byte[] b_main = { (byte)0x02,(byte)0x4a,(byte)0x3a,(byte)0x40, (byte)0x04,(byte)0x01,(byte)0x1f,(byte)0x1e, (byte)0x54,(byte)0x88,(byte)0x38,(byte)0x84, (byte)0x44,(byte)0xbc,(byte)0x4a,(byte)0xc4, (byte)0xa0,(byte)0xa9,(byte)0x0b,(byte)0x91, (byte)0x27,(byte)0x22,(byte)0xa2,(byte)0xb1, (byte)0x31,(byte)0x13,(byte)0x88,(byte)0x00, };
4) static int m_playSound = 1;
5) 在程序中对声音的控制 m_playSound = (byte)(1 - m_playSound); if(m_playSound == 1){ try{ soundPlayer.play(0); } catch(Exception e){} } if(m_playSound == 0){ try{ soundPlayer.stop(); } catch(Exception e){} }
//----------------------------------------------------
使用 ott 文件 在nokia 40或 60中
1) 定义数据结构 public class EMSound { public int type; public byte[] data;
public EMSound(byte[] data, int type) { this.type = type; this.data = data; } }
2) import com.nokia.mid.ui.*; import com.nokia.mid.sound.*; 3) Sound soundPlayer; SoundListener soundListener = new EMSoundListener();
EMSound currentSound = null; boolean soundPlaying = false; boolean soundEnable = true;
class EMSoundListener implements SoundListener { public void soundStateChanged(Sound sound, int event) { switch (event) { case Sound.SOUND_STOPPED: soundPlaying = false; break; case Sound.SOUND_PLAYING: soundPlaying = true; } } }
public EMSound loadSound(String resfile, int resID) { EMSound sound; try { InputStream is = getClass().getResourceAsStream(resfile + "/" + resID + ".ott"); int len = (int) is.skip(10000); is.close(); is = getClass().getResourceAsStream(resfile + "/" + resID + ".ott"); byte[] barr = new byte[len]; is.read(barr); is.close(); sound = new EMSound(barr, Sound.FORMAT_TONE); } catch (Exception ex) { sound = null; } return sound; }
public void playSound(EMSound sound, int count) { if (!soundEnable) { return; } try { //colico if (soundPlaying) { stopSound(); } if (soundPlayer == null) { soundPlayer = new Sound(sound.data, sound.type); soundPlayer.setSoundListener(soundListener); currentSound = null; } if (sound != currentSound) { soundPlayer.release(); soundPlayer.init(sound.data, sound.type); currentSound = sound; }
soundPlayer.play(count); } catch (Exception ex) { soundPlaying = false; } }
Sound[] soundPlayers; public void playSound( EMSound sound[], int loc) { if (!soundEnable) { return; }
try { if (soundPlaying) stopSound(); if (soundPlayers == null) { soundPlayers = new Sound[sound.length]; System.out.println("Sounds == null"); for (int i=0; i<sound.length ; i++ ){ soundPlayers[i] = new Sound( sound[i].data, sound[i].type ); soundPlayers[i].setSoundListener( soundListener ); soundPlayers[i].init(sound[i].data, sound[i].type); } }
long now = System.currentTimeMillis(); soundPlayers[loc].play(1); System.out.println("playing Sounds"); System.out.println("playing Sounds time"+(System.currentTimeMillis()-now) ); } catch(Exception ex) { soundPlaying = false; } }
public void stopSound() { if (!soundEnable) { return; } if (soundPlayer != null) { //colico soundPlayer.stop(); } }
public boolean isSoundPlaying() { return soundPlaying; }
public boolean isSoundEnable() { return soundEnable; }
public void setSoundEnable(boolean e) { if (!e) { stopSound(); } soundEnable = e; }
在V300中 1). public class EMSound { public String type; public byte[] data;
public EMSound(byte[] data, String type) { this.type = type; this.data = data; }
}
2).
import Javax.microedition.media.Player; import javax.microedition.media.PlayerListener; import javax.microedition.media.Manager; import javax.microedition.media.Control.*;
3). //Sound soundPlayer; PlayerListener soundListener = new EMSoundListener(); Player soundPlayer; EMSound currentSound = null; boolean soundPlaying = false; boolean soundEnable = true;
class EMSoundListener implements PlayerListener {
public void playerUpdate(Player player, String event, Object eventData) { //soundStateChanged(int event) if (event == PlayerListener.STOPPED) { soundPlaying = false; } if (event == PlayerListener.STARTED) { soundPlaying = true; } } }
public EMSound loadSound(String resfile, int resID) { EMSound sound; try { InputStream is = getClass().getResourceAsStream(resfile + "/" + resID + ".mid"); int len = (int) is.skip(10000); is.close(); is = getClass().getResourceAsStream(resfile + "/" + resID + ".mid"); byte[] barr = new byte[len]; is.read(barr); is.close(); sound = new EMSound(barr, "audio/midi"); } catch (Exception ex) { sound = null; } return sound; }
public void playSound(EMSound sound, int count) { if (!soundEnable) { return; } try { if (soundPlaying) { stopSound(); } if (soundPlayer == null) { soundPlayer = Manager.createPlayer(new ByteArrayInputStream(sound.data), sound.type); soundPlayer.addPlayerListener(soundListener); currentSound = null; } if (sound != currentSound) { soundPlayer.close(); soundPlayer = Manager.createPlayer(new ByteArrayInputStream(sound.data), sound.type); currentSound = sound; } soundPlayer.start(); } catch (Exception ex) { soundPlaying = false; System.out.println(ex.toString()); } }
public void stopSound() { if (!soundEnable) { return; } if (soundPlayer != null) { try { soundPlayer.stop(); } catch (Exception e) { System.out.print(e.toString()); } } }
public boolean isSoundPlaying() { return soundPlaying; }
public boolean isSoundEnable() { return soundEnable; }
3.读取mid文件
1) import javax.microedition.media.*;
2)
Player player; void initSound() { try { player = Manager.createPlayer(getStream("/sound/b_main.mid"), "audio/midi"); player.realize(); player.setLoopCount(100000); } catch (Exception e) { e.printStackTrace(); }
}
3) //在程序中对声音的控制
m_playSound = (byte) (1 - m_playSound); if (m_playSound == 1) { try { player.start(); } catch (Exception e) {} } if (m_playSound == 0) { try { player.stop();
}
catch (Exception e) {} }
///---------------end
(出处:)
|
|
上一篇:优化J2ME程序大小
人气:798
下一篇:在resin-ee-2.1.5上构建j2ee应用服务
人气:694 |
浏览全部J2EE/J2ME的内容
Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐
|
|