在J2ME中,處理聲音需要使用到Mobile Media API(MMAPI),該包是MIDP1.0的可選包,在MIDP2.0中已經包含了這個包。所以如果你使用MIDP1.0的話,請確認你的運行環境是否支持。一般手機支持的聲音文件格式為wav、mid和mpg等。具體請查閱你的手機說明文檔。在聲音處理中,有很多處理的方式,這裡說一下最常用的情況,播放JAR文件中的wav文件。播放聲音文件的流程:
1、按照一定的格式讀取聲音文件
播放JAR文件中的聲音文件一般是將聲音文件處理成流的形式。示例代碼:
InputStream is = this.getClass().getResourceAsStream("/Autorun.wav");
其中Autorun.wav文件位於JAR文件的根目錄下,如果位於別的目錄,需要加上目錄名稱,如/res /Autorun.wav。
2、將讀取到的內容傳遞給播放器
將流信息傳遞給播放器,播放器按照一定的格式來進行解碼操作,示例代碼:
Player player = Manager.createPlayer(is,"audio/x-wav");
其中第一個參數為流對象,第二個參數為聲音文件的格式。
3、播放聲音
使用Player對象的start方法,可以將聲音播放出來,示例代碼:player.start();
在播放聲音時也可以設定聲音播放的次數,可以使用Player類中的setLoopCount方法來實現,具體可查閱API文檔。下面是在NOKIA S60模擬器中測試通過。代碼如下:
package sound;
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import javax.microedition.media.*;
import java.io.*;
public class SoundMIDlet extends MIDlet
{
private Player player = null;
/** Constructor */
public SoundMIDlet()
{
try
{
InputStream is = this.getClass().getResourceAsStream("/Autorun.wav");
player = Manager.createPlayer(is,"audio/x-wav");
}
catch(IOException e)
{
System.out.println("1:" + e);
}
catch(MediaException e)
{
System.out.println("2:" + e);
}
catch(Exception e)
{
System.out.println("3:" + e);
}
}
/** Main method */
public void startApp()
{
if(player != null)
{
try
{
player.start();
}
catch(MediaException e)
{
System.out.println("4:" + e);
}
}
}
/** Handle pausing the MIDlet */
public void pauseApp()
{
}
/** Handle destroying the MIDlet */
public void destroyApp(boolean unconditional)
{
}
}