Home > android > Androidでmp3を再生する

Androidでmp3を再生する

Androidでmp3を再生する方法。

動作確認環境
  • Android SDK 0.9b
MediaPlayer

とっても簡単です。

MediaPlayer _mp;
_mp = MediaPlayer.create(this, R.raw.music);
try {
  _mp.prepare(); // 準備
  _mp.start(); // 再生
} catch (IOException e) {
  //例外処理
}

たったこれだけです。
唯一の注意点はmusic.mp3ファイルをres/raw/ディレクトリに配置する必要があります。
MediaPlayerは上の例の他にもsetDataSource(…)でファイルを指定する事も出来ます。
この方法を使うと、読み取り権限を持つディレクトリであればファイルをどこに設置してもOKです。

本当に簡単ですね。

prepare()は再生準備のためのメソッドだそうです。
メディアファイルを設定したら呼出すのがルールだそうです。
と、API仕様書に書いています。

これはどういうことでしょう?
具体的に何をやっているのか分かりません。
ということで、具体的に見るためにandroid.jarを展開してMediaPlayer.classを逆コンパイルしてみました。

% jar vxf android.jar
% cd android/media
% jad MediaPlayer

そしてMediaPlayer.prepare()は…

public native void prepare()
        throws IOException;

いきなりnative…
何も分かりませんでした…orz

おわりに

不明点(prepare)が未だ残ったままですが、とても簡単に音楽ファイルを再生出来る事が分かりました。

Source Code

とりあえず、コピペで実行出来るよう、ソースコードを公開しておきます。

My3Test.java

package com.adamrocker.android.mp3;
 
import java.io.IOException;
 
import android.app.Activity;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
 
public class Mp3Test extends Activity implements OnClickListener,
		OnCompletionListener {
  /* コンストラクタ作るのが面倒なので、フィールドで初期化 */
  private final float FONT_SIZE = 35;
  private MediaPlayer _mp = null;
  private Button _btn = null;
 
  /** Called when the activity is first created. */
  @Override
  public void onCreate(Bundle icicle) {
    super.onCreate(icicle);
    setContentView(R.layout.main);
 
    _btn = (Button) findViewById(R.id.btn);
    _btn.setTextSize(FONT_SIZE);
    _btn.setOnClickListener(this);
  }
 
  /**
   * メディアをセットする
   */
  public void onStart() {
    super.onStart();
    _mp = MediaPlayer.create(this, R.raw.music);//ファイルは res/raw/music.mp3
    try {
      _mp.prepare();
    } catch (IOException e) {
      e.printStackTrace();
    }
    _mp.setOnCompletionListener(this);
  }
 
  /**
   * 音楽再生
   */
  public void onClick(View arg0) {
    if (_mp.isPlaying()) {
      _mp.pause();
      _btn.setText("再生");
    } else {
      _mp.seekTo(0);
      _mp.start();
      _btn.setText("停止");
    }
  }
 
  /**
   * 終了処理
   */
  public void onStop() {
    super.onStop();
    if (_mp != null) {
      if (_mp.isPlaying()) {
        _mp.stop();
      }
      _mp = null;
    }
  }
 
  /**
   * メディアファイルの再生が終わった時のイベント
   */
  public void onCompletion(MediaPlayer arg0) {
    // 再生ボタン表示に切り替える
    _btn.setText("再生");
  }
}

main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
	android:orientation="vertical" android:layout_width="fill_parent"
	android:layout_height="fill_parent">
	<Button android:id="@+id/btn" android:layout_width="wrap_content"
		android:layout_height="wrap_content" android:text="再生" />
</LinearLayout>
関連のありそうなエントリ

Comments:4

terada 09-02-12 (木) 22:34

はじめまして。
AndroidもJavaも初心者ですが、こちらのサイトは情報量が多くて大変参考になります。

恐縮ですが質問させてください。
音楽再生アプリを作ろうと思って、こちらの記事を参考にすごく単純な「起動したら再生する」だけのアプリを作ろうとしていますが、emulatorでアプリが起動した瞬間にエラーが出て落ちてしまいます。
また、こちらの記事をそのままコピペして作ってみたアプリも同様でした。
原因に何か心当たりはありませんでしょうか??
よろしくお願いいたします!

「起動したら再生する」だけのアプリのソース
kocoha.net/sharefiles/SimpleMusicPlayer.zip

コピペしたアプリのソース
kocoha.net/sharefiles/Mp3Test.zip

(*スパム扱いされてしまったので先頭の文字を省いてます)

terada 09-02-12 (木) 22:40

エラーの画面もこちらに上げてみました。

kocoha.net/sharefiles/error.jpg

terada 09-02-13 (金) 13:52

たびたびすみません。

いろいろいじってみたところ、
try catch文の中の「IOException 」を「Exception 」と型の指定を変えるとうまく動作することが分かりました。

この二つの違いがいまいち分かりませんが(IOExceptionはデバイスエラーの時に発生するんですかね??)、とりあえず不具合解決しましたのでご報告いたします。
お騒がせしました。

piro5 09-05-23 (土) 11:47

1.5の場合ですが、MediaPlayer.createは内部でprepareを呼ぶので、アプリ側で明示的にprepareを呼んではならないようです。

そのため、サンプルを動かすとIllegalStateExceptionになります。prepareを呼ばずにstartを呼ぶとうまくいきます。

Comment Form
Remember personal info

*
To prove that you're not a bot, enter this code
Anti-Spam Image

Trackbacks:0

Trackback URL for this entry
http://www.adamrocker.com/blog/213/android_play_music.html/trackback/
Listed below are links to weblogs that reference
Androidでmp3を再生する from throw Life

Home > android > Androidでmp3を再生する

Twitter
Search
Feeds
Meta

Return to page top