UniJa2.1声音播放问题(MIDI格式)(2)
来源:未知 责任编辑:责任编辑 发表时间:2014-01-06 18:09 点击:次
三.个人总结:
1. 播放问题:在UniJa应用中MIDI格式的声音播放功能不支持多个Player对象,必须在播放一个声音文件后,将对象清空(释放Player资源),只能在应用中存在一个Player对象,否则将不能播放其他的声音文件。
2. 开销问题:强烈推荐采用非线程处理声音方法
3. 循环问题:在我写的SoundEffects类的构造函数中,我声明了一个参数time,用来控制声音播放次数,如:new SoundEffects(10)就代表这个Player播放对象将循环播放十次;在Player类中,我没有找到无限循环播放的方法,在我写的SoundEffects类中,我一般将time设定为100万次来实现。
四.附件:SoundEffects.java(修改过的,推荐采用)
import javax.microedition.media.*;
import java.io.InputStream;
import java.io.ByteArrayInputStream;
import javax.microedition.media.control.*;
import java.io.*;
/**音效播放类,本类基于MIDP2.0支持的音效包括
Wave audio files: audio/x-wav
AU audio files: audio/basic
MP3 audio files: audio/mpeg
<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />MIDI files: audio/midi
Tone sequences: audio/x-tone-seq
使用方法:先创建对象,然后调用播放功能,当程序退出,或者不再使用音效功能时,记得调用destroy()
*/
public class SoundEffects {
String filename = null;
String contentType;
int time;
Player player = null;
InputStream is = null;
public SoundEffects(int time) {
this.time = time;
}
public void playWAV(String filename) {
this.contentType = "audio/x-wav";
playSound(filename);
}
public void playAU(String filename) {
this.contentType = "audio/basic";
playSound(filename);
}
public void playMP3(String filename) {
this.contentType = "audio/mpeg";
playSound(filename);
}
public void playMIDI(String filename) {
this.contentType = "audio/midi";
playSound(filename);
}
protected synchronized void playSound(String filename) {
this.close();
this.filename = filename;
playFile();
}
protected void close() {
if (player != null) {
player.close();
player = null;
}
if (is != null) {
try {
is.close();
}
catch (Exception e) {}
is = null;
}
filename = null;
}
public void destroy() {
this.close();
}
public void startPlay(){
try{
player.start();
}catch(MediaException e){
e.printStackTrace();
}
相关新闻>>
- 发表评论
-
- 最新评论 更多>>