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");

ClassCastExceptionにキャストしようとしているため、 が返されInputStreamますPlayer。それは間違っている。この行は、変数に aを正しく割り当てます。Playerplayer

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

必要に応じて、サウンドを再生するときに、私の 2 番目の行を何度でも使用できます。プレーヤーを再作成するだけです。サウンド ファイル (.wav) を変更していない場合は、サウンドの再生が終了したら、新しいプレーヤーを作成せずにもう一度開始します。

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

ただし、使用するサウンド ファイルを変更する場合は、createPlayerもう一度呼び出すだけで簡単になる場合があります。

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

Player に関するいくつかのBlackBerry ドキュメントを次に示します。別の J2ME プラットフォームを使用している場合でも、おそらく同じライフサイクル ルールが適用されると思います。

Player には、UNREALIZED、REALIZED、PREFETCHED、STARTED、CLOSED の 5 つの状態があります。

これらのライフサイクル状態の目的は、潜在的に時間のかかる操作をプログラムで制御できるようにすることです。たとえば、プレーヤーが最初に構築されたとき、それは UNREALIZED 状態にあります。UNREALIZED から REALIZED に遷移した Player は、機能するために必要なすべてのリソースを見つけるために必要な通信 (サーバーやファイル システムとの通信など) を実行します。実現メソッドを使用すると、アプリケーションはこの潜在的に時間のかかるプロセスを適切なタイミングで開始できます。

通常、Player は UNREALIZED 状態から REALIZED 状態に移行し、次に PREFETCHED 状態に移行し、最後に STARTED 状態に移行します。

Player は、メディアの最後に到達すると停止します。または stop メソッドが呼び出されたとき。その場合、プレーヤーは STARTED 状態から PREFETCHED 状態に戻ります。その後、サイクルを繰り返す準備が整います。

Player を使用するには、パラメータを設定してこれらのライフサイクル状態の移動を管理し、Player の状態遷移メソッドを使用して状態を移動する必要があります。

ここに画像の説明を入力

更新:コードの複雑さ、およびおそらくオブジェクトの割り当て解除(?)に関心があるように思われるので、ここにコード サンプルを示します。その回答のコードを取得して、オーディオ ファイルの名前を渡すメソッドにします ( musicFile)。

于 2013-01-03T00:52:05.377 に答える