- 2008-05-31 23:12
- android
Androidでmp3を再生する方法。
- Android SDK 0.9b
とっても簡単です。
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を逆コンパイルしてみました。
% cd android/media
% jad MediaPlayer
そしてMediaPlayer.prepare()は…
public native void prepare() throws IOException;
いきなりnative…
何も分かりませんでした…orz
不明点(prepare)が未だ残ったままですが、とても簡単に音楽ファイルを再生出来る事が分かりました。
とりあえず、コピペで実行出来るよう、ソースコードを公開しておきます。
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>
- Newer: 第4回Android勉強会に参加してきました
- Older: はてコ - はてなブックマーク コメント -
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を呼ぶとうまくいきます。
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
