本文是在同一个游戏中移植在不同机型时所做的对声音的处理,考虑到性能的要求,对每种类型的手机做了一定的要求。
s40中的声音处理:
1)import com.nokia.mid.sound.*;
2)Sound soundPlayer;void initSound(){soundPlayer = new Sound(b_main,1);if(m_playSound == 1)}
3)byte[] b_main = ;
4)static int m_playSound = 1;
5)在程序中对声音的控制m_playSound = (byte)(1 - m_playSound);if(m_playSound == 1) catch(Exception e){}}if(m_playSound == 0) 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 EMSoundListenerimplements 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)try { //colicoif (soundPlaying)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)if (soundPlayer != null) { //colicosoundPlayer.stop();}}public boolean isSoundPlaying() {return soundPlaying;}public boolean isSoundEnable() {return soundEnable;}public void setSoundEnable(boolean e) {if (!e)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 EMSoundListenerimplements 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)try {if (soundPlaying)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)if (soundPlayer != null) {trycatch (Exception e)}}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)}
3)
//在程序中对声音的控制m_playSound = (byte) (1 - m_playSound);if (m_playSound == 1) {trycatch (Exception e) {}}if (m_playSound == 0) {trycatch (Exception e) {}}
有事者,事竟成;破釜沉舟,百二秦关终归楚;苦心人,