0

Androidの画面上のボタンが押され、すべてのオーディオ品質が優れている場合、eclipse:javaでいくつかのオーディオファイルを適切に再生することに問題はありません。しかし、私が作ろうとしているプログラムはビートメーカーのスタジオで、ボタンを押すのはとても速いです。直前に同じボタンを押してから、ボタンを押してオーディオ サンプルを発射できるようになるまでには、わずかな遅延があります (約 0.5 秒)。希望の時間にボタンを押すことができることが非常に重要な場合、明らかにこれは音楽アプリに問題をもたらします. アプリケーションでボタンをより速く押すことができるようにする方法について何かアドバイスはありますか?

package studio.music;

import android.app.Activity;
import android.graphics.Color;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class StudioActivity extends Activity implements OnClickListener{

MediaPlayer mp1,mp2;
Button button_one,button_two;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) { //The activity is being Created   Create any threads/streams here
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    mp1 = MediaPlayer.create(this, R.raw.bassfifteen);
    mp2 = MediaPlayer.create(this, R.raw.snarenine);
        button_one = (Button) findViewById(R.id.buttonOne);
            button_one.setOnClickListener(this);            
        button_two = (Button) findViewById(R.id.buttonTwo);
            button_two.setOnClickListener(this);        
}

@Override
protected void onStart(){ //The activity is about to become visible
    super.onStart();    
    //TODO set state for program start
}

@Override
protected void onResume(){ //The activity has become visible(it is now "resumed")
    super.onResume();
    //TODO set state for program resume
}

@Override
protected void onPause(){ // Another activity is taking focus (this activity will be "paused")
    super.onPause();
    //TODO set state for program hang
}

@Override
protected void onStop(){ // This activity is no longer visibled (it is "stopped")
    super.onStop();
    //TODO set state for program drop back
}

@Override
protected void onDestroy(){ // The Activity is about too be destoryed (exiting)  Destroy all threads and streams here
    super.onDestroy();
    //TODO set state for program exit
}

@Override
public void onClick(View v) {

//Where the audio is fired  
if(v == button_one){    mp1.start();}
if(v == button_two){    mp2.start();}
}

}

4

2 に答える 2

0

SoundPool低レイテンシーの再生を提供するものを使用します。

すぐに使用できるサンプルは、Android スニペットで入手できます。要件に合わせて調整するのは簡単です。

于 2012-05-25T11:53:20.670 に答える
0

多分あなたはSoundPoolに行くべきです。MediaPlayerと比較すると、soundpoolはかなり軽量なオブジェクトだからです。ここに2つの比較があります。

http://www.stealthcopter.com/blog/2010/08/android-soundpool-vs-mediaplayer-focus-on-soundboards-and-memory-problems/

ご覧のとおり、SoundPool は小さなファイル用に設計されています。これは、SoundPoolがシンプルで良い仕事をしていると述べている他のリンクです..

https://stackoverflow.com/a/5339437/603744

于 2012-05-25T11:54:53.947 に答える