手机游戏中的声音处理详解

本文是在同一个游戏中移植在不同机型时所做的对声音的处理,考虑到性能的要求,对每种类型的手机做了一定的要求。

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) {}}

有事者,事竟成;破釜沉舟,百二秦关终归楚;苦心人,

手机游戏中的声音处理详解

相关文章:

你感兴趣的文章:

标签云: