タッチのコントロールクラスが良い感じに片付いたので、そろそろほっぽっといたサウンド関連に着手しました。
で、MediaPlayerでassetに置いた.oggファイルを再生しようと思ったら、思いっきり躓きました。
普通にMediaPlayerを継承したクラス内で
AssetFileDescriptor afd = asset.openFd(filename);
try {
setDataSource(afd.getFileDescriptor());
prepare();
start();
} catch (Exception e) {
//
}
こんな感じで書けば音が鳴るんですが・・・というか鳴ってたんですが、しばらくするとprepare()で
java.io.IOException: Prepare failed.: status=0x1
となり、失敗するようになりました。
その前に数回は再生されていて、テスト端末を疑って再起動なども行いましたが変わらず。意味が分かりません。
このエラーの文言で検索しても不明でしたが、何とかなりました。
結論としてはsetDataSource()の所を
setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());
オフセットと長さを指定しないと例外って、AssetManager絡みの実装不具合っぽいですね。
とりあえず音関係クラスの実装が続きます・・・
--------その後
・・・一応、使える所まで完成しました。
ゲームに使う時のMediaPlayerとSoundPoolの切り分けが、使い勝手に直結するので難しかったです。
その内落ち着いたら、実装したものの解説でもしようかと思ってます。
0 件のコメント:
コメントを投稿