Как получить звуковой файл для воспроизведения при каждом нажатии кнопки в Android? - PullRequest
2 голосов
/ 07 июля 2011

Я бы хотел воспроизвести звук, нажимая кнопку, например, ударяя по барабану, чтобы воспроизведение звука происходило так же быстро, как я нажимаю кнопку. Сейчас мне нужно дождаться окончания звука, прежде чем он снова заиграет. Вот как у меня настроен звук.

MediaPlayer snareMP;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.playdrums);

final MediaPlayer snareMP = MediaPlayer.create(this, R.raw.snare);

ImageView snareDrum = (ImageView) findViewById(R.id.snare);

snareDrum.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            snareMP.reset();
            snareMP.prepare();
            snareMP.start();
        }
    });

Любая помощь очень ценится.

Спасибо!

Ответы [ 2 ]

0 голосов
/ 07 июля 2011

Я собираюсь поделиться кодом, который я написал некоторое время назад, и я думаю, что он делает то же самое, что вы ищете;Я надеюсь, что это поможет, и я был бы признателен за некоторые очки репутации, если это так:)

Вот оно:

import com.myProject.R;

import android.app.Activity;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.view.Window;
import android.widget.Button;

public class Camera extends Activity {

    private MediaPlayer snapMP;

    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        getWindow().requestFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.camera);

        Button snap = (Button)findViewById(R.id.snapButton);
        snap.setOnClickListener(new View.OnClickListener() {
            public void onClick(View view) {
                freeSnapMP();
                snapMP = MediaPlayer.create(Camera.this, R.raw.camera_snap2);
                snapMP.start();
            }
        });
    }


    protected void onDestroy() {
        super.onDestroy();
        freeSnapMP();
    }

    private void freeSnapMP(){
        if (snapMP != null){ snapMP.stop(); snapMP.release(); snapMP = null; }
    }

}
0 голосов
/ 07 июля 2011

Попробуйте это:

public void onClick(View v) {
    if (snareMP.isPlaying()){
        snareMP.stop();
        snareMP.reset();
    }
    snareMP.prepare();
    snareMP.start();
}
...