MediaPlayer で、ローカルのサウンド・ファイルを再生してみたよ。
やってることは、ほとんどリソース版とかわらないけどね。
public class mySound extends Activity {
private MediaPlayer mp;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
String path = Environment.getExternalStorageDirectory().getPath()+"/"
+"bgm0.mp3";
// トラック 0
mp = new MediaPlayer();
try{
mp.setDataSource( path );
mp.prepare();
mp.setAudioStreamType(AudioManager.STREAM_MUSIC);
mp.setLooping(true);
mp.start();
}catch( Exception e ){
Log.d("Err", "err mpPlay : " +path );
}
//--
}
@Override
public void onDestroy(){
if(mp.isPlaying()){
mp.stop();
}
super.onDestroy();
// アクティビティの終了
finish();
}
}
MediaPlayer.create の代わりに、setDataSource をするみたいな感じ。
ただし、多少手間がかかる。
MediaPlayer オブジェクトを生成して、prepare() も実行してやらなきゃならない。
それと、setDataSource を、try ~ catch で囲ってやらなきゃならない。
囲わない場合、ビルド時にエラーが出るよ。
たぶん、指定したファイルをオープンできなかった場合を想定してるんだろうね。
なので、上記ソースでは再生までの手順を、try の中に含めている。
で、オープンできなかったり、なんらかのエラーが起こった場合は、logにパスを書き出すようにしているよ。
ちなみに上記ソースでは、SDカード上の”bgm0.mp3″を再生しているよ。
setDataSource のオーバーロード
setDataSource には以下のような種類があるよ。
setDataSource( String path ) setDataSource( FileDescriptor fd, long offset, long length ) setDataSource( FileDescriptor fd ) setDataSource( Context context, Uri uri )
今回は一番上のタイプを使ってみた。
path には、http や rtsp 等のURL指定が可能らしい。
で、試しに”http://…” へ変えてみたけど、ネット上のファイルを再生できなかった。
たぶん、ローカルのファイルに対して”http://”が使える、ということなんだろうね。
おそらくネット上のモノを再生するには、一番下のContext を指定するsetDataSource を使うんじゃないかな?
そのうち、試してみよう。
FileDescriptor は、ファイルを抽象化したclass…ってトコかね。
ファイル操作や、ユーザーにファイル選択させたりする時に使うclass だね。
それらの状況の時に使い勝手がよさそうだ。


![著作権フリー背景素材集[家]](http://img.dlsite.jp/modpub/images2/work/doujin/RJ089000/RJ088095_img_mini.jpg)





migimaki.com











![著作権フリー背景素材集[家]](http://img.dlsite.jp/modpub/images2/work/doujin/RJ089000/RJ088095_img_sam.jpg)
右巻きソフトウェア
