MediaPlayerでのフェードインフェードアウト

2,301 views
Skip to first unread message

1996

unread,
May 5, 2012, 9:49:54 AM5/5/12
to 日本Androidの会

Androidの会の皆様おつかれさまです。1996と申します。


MediaPlayerで音を再生中にフェードアウトしたいのですが、

setStreamVolumeでは段階的な上げ下げしかできず、音がカクカクしてしまいましたので、
MediaPlayer.setVolumeを使うというのは調べてみて分かったのですが、

//フェードアウト

private Handler h = new Handler();
private Runnable fadeOut;

btn.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {

h.postDelayed(fadeOut, 300);

}});




fadeOut = new Runnable() {

@Override
public void run() {

float fl = 1.0f;
float fr = 1.0f;
//down
mep.setVolume(fl, fr);

fl -= .05f;
fr -= .02f;

h.postDelayed(fadeOut, 300);

}};


このようにしてみても音に変化が見られません。


なにがおかしいのかもわかりません。
皆様のご助力をどうか宜しくお願い致します!

MORIHIRO

unread,
May 5, 2012, 11:26:10 AM5/5/12
to android-g...@googlegroups.com
動作確認もしていない手抜きの回答になりますが、
以下のリンク先のサンプルコードなんかどうでしょうか?

 http://stackoverflow.com/questions/4573667/how-to-mute-mediaplayer-in-android


2012年5月5日土曜日 22時49分54秒 UTC+9 1996:

Hisao Kitamura

unread,
May 6, 2012, 4:28:06 AM5/6/12
to 日本Androidの会
1996様

こんにちは、北村といいます。
ソースコード見た感じだと、
===
//down
mep.setVolume(1.0f, 1.0f);
===
のように、1をセットしているのが原因ではないでしょうか?

私がリリースしているアラームアプリではフェードイン機能をsetVolumeで実現しています。
フェードインのソースコードを貼っておきますので参考にしてください。

private float mCurrentVolume = 1.0f; // フェードインするときにチェックする

// フェードインを行うために、ボリュームを調整するハンドラ
private Handler fadeHandler = new Handler(){
@Override
public void handleMessage(Message msg) {
if(msg.what == MESSAGE_FADEIN){
if(mPlayer == null)return;

if (!isPlaying()) {
mCurrentVolume = 0f;
mPlayer.setVolume(mCurrentVolume, mCurrentVolume);
mPlayer.seekTo(0);
mPlayer.start();
fadeHandler.sendEmptyMessageDelayed(MESSAGE_FADEIN, 400);
} else {
mCurrentVolume += 0.01f;
if (mCurrentVolume < 1.0f) {
fadeHandler.sendEmptyMessageDelayed(MESSAGE_FADEIN, 400);
} else {
mCurrentVolume = 1.0f;
}
mPlayer.setVolume(mCurrentVolume, mCurrentVolume);
}
}
}
};

よろしくお願いします。

On 5月6日, 午前12:26, MORIHIRO <morihiro.s...@gmail.com> wrote:
> 動作確認もしていない手抜きの回答になりますが、
> 以下のリンク先のサンプルコードなんかどうでしょうか?
>
> http://stackoverflow.com/questions/4573667/how-to-mute-mediaplayer-in...

1996

unread,
May 6, 2012, 5:52:32 AM5/6/12
to 日本Androidの会

MORIHIRO様 有り難う御座います!

リンク先のコード拝見させて頂き、自分なりに以下の様なコードを書いてみました。

//ボタンを押す度に、音量を0.2ずつ下げたい (5回押下→音量0にしたい)
btn.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {

float f = 1.0f; //初期音量
float vol = 0.2f; //
mep.setVolume(f -= vol, f -= vol);

}});

上記のコードでテストしてみますと、
ボタンを押してみて1回目は下がったように聴こえるのですが、2回目以降は音に変化がありません。

何か見落としている点が有るのでしょうか・・・

ご助力お願い致します!!





On May 6, 12:26 am, MORIHIRO <morihiro.s...@gmail.com> wrote:
> 動作確認もしていない手抜きの回答になりますが、
> 以下のリンク先のサンプルコードなんかどうでしょうか?
>
> http://stackoverflow.com/questions/4573667/how-to-mute-mediaplayer-in...
>
Message has been deleted

1996

unread,
May 6, 2012, 7:46:06 AM5/6/12
to 日本Androidの会

北村様 有り難う御座います

北村様のソースがとても参考になり、お陰様でフェードイン/アウト実装出来ました!!

とても助かりました!どうも有り難う御座いました!


On May 6, 5:28 pm, Hisao Kitamura <taosoftware.kitam...@gmail.com>
wrote:

MORIHIRO

unread,
May 6, 2012, 7:52:01 AM5/6/12
to android-g...@googlegroups.com
リンク先のコードとはあまり関係のないコードのようですが、、、
少なくとも変数 f はメンバ変数とかにしておかないと毎回 0.8 が設定されるだけですよ。

2012年5月6日日曜日 18時52分32秒 UTC+9 1996:

1996

unread,
May 7, 2012, 10:34:19 AM5/7/12
to 日本Androidの会

MORIHIRO様 有り難う御座います

> 少なくとも変数 f はメンバ変数とかにしておかないと毎回 0.8 が設定されるだけですよ。
気付けませんでした・・・わざわざどうも有り難う御座います。
勉強になります。
Reply all
Reply to author
Forward
0 new messages