SoundPool でサウンド再生 ~ローカル版

 SoundPool で、ローカルのサウンド・ファイルを再生してみたよ。
 やってることは、ほとんどリソース版とかわらない。(Android1.6 ベース)

public class mySound extends Activity {

	private SoundPool sp;
	int seID = -1;
	
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);


		String path = Environment.getExternalStorageDirectory().getPath()+"/"
					 +"voice.ogg";

		//リソースファイルからSE
		sp = new SoundPool( 5, AudioManager.STREAM_MUSIC, 0 );
		seID[ch] = sp.load( path, 1 );

		//	Button01
		Button but_PlaySE = (Button) this.findViewById( R.id.Button01 );
		but_PlaySE.setText( "PlaySE 0" );
		but_PlaySE.setOnClickListener(new OnClickListener(){
			@Override
			public void onClick(View v) {
				sp.play( seID, 1.0F, 1.0F, 0, 0, 1.0F);
			}
		});
		//---------------

	}

	@Override
	public void onDestroy(){

		sp.stop( seID );
		sp.unload( seID );
		sp.release();
		
		super.onDestroy();
		// アクティビティの終了
		finish();
	}
}

 load method の指定を、ローカルのPath指定にするだけ。
 ファイルがなかったでload できなくても、アプリが異常終了することはない…みたい。
 ログにワーニングが出るけど。(^_^;

Posted in Sound. Tags: . SoundPool でサウンド再生 ~ローカル版 はコメントを受け付けていません。 »

MediaPlayer でサウンド再生 ~ローカル版

 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 だね。
 それらの状況の時に使い勝手がよさそうだ。

Posted in Sound. Tags: , . MediaPlayer でサウンド再生 ~ローカル版 はコメントを受け付けていません。 »