无法在 J2ME 中重放声音
Posted
技术标签:
【中文标题】无法在 J2ME 中重放声音【英文标题】:Cannot replay sound in J2ME 【发布时间】:2012-04-07 10:00:54 【问题描述】:我在 J2ME 中有问题重启声音。我想在构造函数中创建播放器,然后调用 playExplosion() 播放它,但它只播放一次。我正在使用无线工具包。
声音类
public class Sound ()
private Player playerExplosion;
public Sound() throws IOException, MediaException
// Explosion
InputStream is = getClass().getResourceAsStream("/explosion.mid");
playerExplosion = Manager.createPlayer(is, "audio/midi");
playerExplosion.realize();
playerExplosion.setLoopCount(1);
public void playExplosion()
try
System.out.println(playerExplosion.getState());
playerExplosion.start();
catch (MediaException ex)
ex.printStackTrace();
MyMIDlet 类
public class MyMIDlet extends MIDlet()
public Sound sound;
public MyMIDlet()
// Init sound object
try
sound = new Sound(this);
catch (Exception ex)
ex.printStackTrace();
// Test
System.out.println("Start");
for (int i = 0; i < 5; i++)
sound.playExplosion();
// My sound is less than 1 second.
try
Thread.sleep(2000);
catch (InterruptedException ex)
ex.printStackTrace();
System.out.println("End");
输出
Start
200
300
300
300
300
End
第一次,start() 之前的 playerExplosion 状态为 200(REALIZED)。
对于第 2、3、4、5 次,start() 之前的 playerExplosion 状态为 300(PREFETCH)。
目前,我必须在 playExplosion() 方法中再次创建 playerExplosion,但在真实设备中太慢了。
【问题讨论】:
【参考方案1】:删除后试试
playerExplosion.setLoopCount(1);
【讨论】:
【参考方案2】:意识到一个播放器可能是一个资源和耗时的过程,必须创建playerExplosion
将意味着再次调用playerExplosion.realize();
,这就是该过程需要这么多时间的原因
当您的玩家在PREFETCHED State
时,您只需致电playerExplosion.start();
,但它不会再次付款,因为它应该支付的次数有一般限制
删除
playerExplosion.setLoopCount(1);
而且您可以多次支付文件费用
谢谢
:)
【讨论】:
以上是关于无法在 J2ME 中重放声音的主要内容,如果未能解决你的问题,请参考以下文章