mp3ファイルの再生について。

閲覧: 1,345 回
最初の未読メッセージにスキップ

hkoba

未読、
2008/12/22 22:52:162008/12/22
To: 日本Androidの会
小林と申します。
MediaPlayerを使用して、mp3ファイルを再生しようとしましたが、上手く再生されませんでした。

デバッグの為に、「adb logcat -d」を実行して確認しましたところ、prepare()を実行した際に、
「prepareAsync called in state 1」というステータスが入っておりました。
こちら、何が影響しているのでしょうか…。

ソースは、以下になりまして、mp3ファイルは、サンプルで動いていたものを利用しても、同じ結果となりました。
「prepareAsync called in state 1」で調べたのですが、あまり情報がなく、かつ、失敗例が少ないため、
行き詰ってしまいました…。
よろしければ、アドバイスをいただけますと幸いです。

_mp = MediaPlayer.create(this.getContext(), R.raw.music06);
try {
_mp.prepare(); // 準備
_mp.start(); // 再生
} catch (IOException e) {
//例外処理
Log.v("Tag", "catch IOException");
} catch (IllegalStateException ee){
//例外処理
Log.v("Tag", "catch IllegalStateException");
}

それでは失礼いたします。

小林弘典

tokasiki

未読、
2008/12/23 4:45:422008/12/23
To: android-g...@googlegroups.com
渡嘉敷です

解決策になるか分りませんが、
setOnPreparedListener
を試してみては如何でしょうか?

nagamatu

未読、
2008/12/23 8:06:542008/12/23
To: 日本Androidの会
MediaPlayerのマニュアルには、以下のように書いてあります。

> public static MediaPlayer create(Context context, Uri uri)
> Convenience method to create a MediaPlayer for a given Uri. On success, prepare() will already have been called and must not be called again.

http://code.google.com/intl/ja-JP/android/reference/android/media/MediaPlayer.html

createが成功した時には,prepareは既に呼び出されているため,呼ぶ必要は有りません。

M5での API変更のドキュメントには

> MediaPlayer.prepare() is now called from MediaPlayer.create() and you will get an exception if you call MediaPlayer.prepare() after using create().

prepareは createから呼び出されるように変更されました。その為,createを利用した後に prepareを呼び出すと例外が発生し
ます。

どうしても、prepareを呼び出したい時には,

> public void prepare()
> Call this after setDataSource() or stop(), and before any other method that might throw IllegalStateException in this class

とありますので、setDataSourceもしくは stopを呼び出す必要があるようですね。

ソースコードを見てみると,MediaPlayerの状態が MEDIA_PLAYER_INITIALIZEDもしくは
MEDIA_PLAYER_STOPPEDでない場合には INVALID_OPERATIONを prepareが返しています。

--
ながまつ

On 12月23日, 午後12:52, hkoba <miruru...@gmail.com> wrote:
> 小林と申します。
> MediaPlayerを使用して、mp3ファイルを再生しようとしましたが、上手く再生されませんでした。
>
> デバッグの為に、「adb logcat -d」を実行して確認しましたところ、prepare()を実行した際に、
> 「prepareAsync called in state 1」というステータスが入っておりました。
> こちら、何が影響しているのでしょうか...。
>
> ソースは、以下になりまして、mp3ファイルは、サンプルで動いていたものを利用しても、同じ結果となりました。
> 「prepareAsync called in state 1」で調べたのですが、あまり情報がなく、かつ、失敗例が少ないため、
> 行き詰ってしまいました...。

hkoba

未読、
2008/12/24 20:17:352008/12/24
To: 日本Androidの会
ながまつ様

prepare()をコメント化することで、対応いたしました。
無事解決にいたしました。ありがとうございました。

そして、認識不足で、申し訳ございませんでした。
本当にありがとうございました。

小林弘典


On 12月23日, 午後10:06, nagamatu <nagam...@gmail.com> wrote:
> MediaPlayerのマニュアルには、以下のように書いてあります。
>
> > public static MediaPlayer create(Context context, Uri uri)
> > Convenience method to create a MediaPlayer for a given Uri. On success, prepare() will already have been called and must not be called again.
>
> http://code.google.com/intl/ja-JP/android/reference/android/media/Med...
> > 小林弘典- 引用テキストを表示しない -
>
> - 引用テキストを表示 -
全員に返信
投稿者に返信
転送
新着メール 0 件