サイト移転のお知らせ:http://techbooster.org/に移転しました

MediaPlayerで音楽を再生する

6月 7, 2010   //   by @mhidaka   //   アプリケーション  //  1 Comment

Androidでの音楽再生はとても簡単です。

今回は、MediaPlayerコンポーネントを使って音楽を再生する方法をリソースに合わせて2つ紹介します。

  • リソースファイルから再生する方法
  • ローカルファイルから再生する方法

MediaPlayerコンポーネントはandroid.mediaパッケージをimportすることで利用できます。音楽、動画(Audio/Video)の再生に対応しており、再生するファイルは、リソースファイル、ローカルファイル、インターネット上からのストリーミングなど保存場所を問いません。(ビデオはちょっと手間なのですが、それはまた次の機会に紹介します)

public class AudioPlayerActivity extends Activity {

	private MediaPlayer mp;
	private String path;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        //リソースファイルから再生
        mp = MediaPlayer.create(this, R.raw.music);
        mp.start();

}

解説とローカルファイルからの再生については続きで。

再生対象のAudioはRes/raw以下へ配置

ソースコードで大事なのは13,14行目のみです。

        //リソースファイルから再生
        mp = MediaPlayer.create(this, R.raw.music);
        mp.start();

createメソッドの第1引数はContext、第2引数はresidです。
サンプルではthis(自分のコンテキスト)とR.raw.musicを指定します。

MediaPlayer.createメソッドのオーバーロード一覧

オーバーロード 説明
create(Context context, Uri uri) URI(URLなど)で指定
create(Context context, int resid) リソースファイルを指定
create(Context context, Uri uri, SurfaceHolder holder) 動画表示用。Serfaceを利用して表示するとき

リソースファイルにBGMや効果音、音声など音楽ファイルを入れる場合、
置く場所に注意して下さい。
resディレクトリのraw以下へ配置しないといけません。

ローカルファイルから再生

ローカルファイルから再生する場合も基本は同じですが、多少手順が異なります(なぜこのように処理を変えているかは不明)。

	private MediaPlayer mp;
	private String path;

        //ローカルファイルを再生
        mp = new MediaPlayer();
	mp.setDataSource(path);
	mp.prepare();
        mp.start();

MediaPlayerオブジェクトを作成、データソースを指定します。
prepareはMediaPlayerオブジェクトの事前準備を行うメソッドで、
datasource(および画面表示が完了)の設定後に呼び出します。

再生ファイルの指定の方法は4種類あります。

MediaPlayer.setDataSourceメソッドのオーバーロード一覧

オーバーロード一覧 説明
setDataSource(String path) ファイルパスもしくはhttp/rtsp URLが使えます
setDataSource(FileDescriptor fd, long offset, long length) FileDescriptorの詳細指定
setDataSource(FileDescriptor fd) FileDescriptorの簡易指定
setDataSource(Context context, Uri uri) URI(URL)でソースを指定


最も使いやすいのはString pathによるsetDataSourceです。
このあたりは、try/catchをしっかりする必要があるみたいで、上記のソースコードのままではコンパイルエラーとなる場合があります。
エラーが出た場合は、以下のように修正してください。

        try {
			mp.setDataSource(path);
		} catch (IllegalArgumentException e) {
			// TODO 自動生成された catch ブロック
			e.printStackTrace();
		} catch (IllegalStateException e) {
			// TODO 自動生成された catch ブロック
			e.printStackTrace();
		} catch (IOException e) {
			// TODO 自動生成された catch ブロック
			e.printStackTrace();
		}
        try {
			mp.prepare();
		} catch (IllegalStateException e) {
			// TODO 自動生成された catch ブロック
			e.printStackTrace();
		} catch (IOException e) {
			// TODO 自動生成された catch ブロック
			e.printStackTrace();
		}

関連する記事:

Sponsored Link

1 Comment

技術書新刊 発売中

アンドロイドアカデミアには、CIやテスト、互換検証など実務に生きるノウハウをあつめています

技術書新刊 発売中

Android Next!はAndroid 7.0に対応したはじめての技術書です!


The Web Explorer 2はCSSの中央寄せやWebAudioなど未来を読み解く一冊です


Revised TypeScript in DefinitelylandはTypeScript 2.0(β)に対応した解説書です。インストールから型定義まで幅広くサポートしています


技術書をかこう!はエンジニアらしい執筆環境を構築、HowTo本です