2

使用方法创建播放器后,此代码:

player = Manager.createPlayer(getClass().getInputStream("/sound.wav"), "audio/x-wav")

是否可以将音频文件传递给同一播放器实例?

我尝试这样做:

player = (Player) player.getClass().getInputStream("/sound.wav");

但这给了我一个例外,那就是java.lang.ClassCastException

如果有可能,那么应该怎么做?

4

1 回答 1

1

这条线

player = (Player) player.getClass().getInputStream("/sound.wav");

给你 aClassCastException因为你试图将 aInputStream转换成 a Player。那是错误的。此行正确地将 a 分配Player给您的player变量:

player = Manager.createPlayer(getClass().getInputStream("/sound.wav"), "audio/x-wav");

如果你愿意,你可以在重放声音的时候一次又一次地使用我的第二行。您将只是重新创建播放器。如果您不更改声音文件(.wav),那么当声音播放完毕后,我会再次启动它而不创建新播放器:

player.start();  // restart the same sound

但是,如果您要更改使用的声音文件,createPlayer再次调用可能会更容易:

player = Manager.createPlayer(getClass().getInputStream("/another_sound.wav"), "audio/x-wav");

以下是 Player 上的一些BlackBerry 文档。即使您可能在不同的 J2ME 平台上,我认为可能适用相同的生命周期规则:

玩家有五种状态:未实现、已实现、预取、已启动、已关闭。

这些生命周期状态的目的是提供对潜在耗时操作的编程控制。例如,当第一次构建 Player 时,它处于 UNREALIZED 状态。从 UNREALIZED 过渡到 REALIZED,播放器执行必要的通信来定位它运行所需的所有资源(例如与服务器或文件系统通信)。实现方法允许应用程序在适当的时间启动这个潜在的耗时过程。

通常,玩家从 UNREALIZED 状态移动到 REALIZED 状态,然后到 PREFETCHED 状态,最后进入 STARTED 状态。

播放器在到达媒体末尾时停止;或调用 stop 方法时。发生这种情况时,播放器会从 STARTED 状态移回 PREFETCHED 状态。然后准备好重复该循环。

要使用 Player,您必须设置参数以管理其在这些生命周期状态中的移动,然后使用 Player 的状态转换方法在这些状态中移动它。

在此处输入图像描述

更新:由于您似乎关心代码复杂性,并且可能会取消分配(?)对象,这里有一个代码示例,希望能说明它不应该太难。您只需获取该答案中的代码,并使其成为您传递 autio 文件 ( musicFile) 名称的方法。

于 2013-01-03T00:52:05.377 回答