今、Android【Java】で音楽を再生する処理を作成しています。
ユーザからの入力なしに、自動で音楽を再生していきたいと思っています。
使用しているのはSoundPoolです。
音楽を再生させるときに、
for (int i = 0; i < 8; i++) {
codePlay.play(soundID[i], 1, 1, 0, 1, 0);//soundIDの中にはloadしたIDが格納されている。
}
とすると、うまく順々に再生させることができません。
そのために、指定した秒数流れたのが確認できたら、一度停止して、また再生を始めさせようと思うのですが
どのように実装したらいいのかがわからず困っています。
他の部分に干渉せずに処理を待つ、というやりかたか、そもそもSoundPoolではこんなことが出来るよ、等がありましたら、ぜひ教えて頂きたいです。
以下、再生部分のソース
public class MainActivity extends Activity {
static int loadEndFlag = 0;
static int[] soundID = {0,0,0,0,0,0,0};
static int[] codicide = {2, 0, 0, 0, 0, 0, 0, 2};
static int[] melody={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
static int[] harmony={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
static SoundPool codePlay//インスタンスの生成
//(ロードするファイルの数、AudioManager.STREAM_(種類)、サンプリングレートノクォリティ(default 0))
= new SoundPool(7, AudioManager.STREAM_MUSIC,0);
//0 = Am 1 = B 2 =C 3 = Dm 4 = Em 5= F 6 = G
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
SoundPool codePlay;//インスタンスの生成 //(ロードするファイルの数、AudioManager.STREAM_(種類)、サンプリングレートノクォリティ(default 0)) codePlay = new SoundPool(7, AudioManager.STREAM_MUSIC,0); soundID[0] = codePlay.load(this,R.raw.am4,1); soundID[1] = codePlay.load(this,R.raw.b4,1); soundID[2] = codePlay.load(this,R.raw.c4,1); soundID[3] = codePlay.load(this,R.raw.dm4,1); soundID[4] = codePlay.load(this,R.raw.em4,1); soundID[5] = codePlay.load(this,R.raw.f4,1); soundID[6] = codePlay.load(this,R.raw.g4,1); for(int i=0;i<soundID.length;i++) { Log.d("Checked", "soundID" + soundID[i]); } } @Override protected void onResume(){ super.onResume(); codePlay.setOnLoadCompleteListener(new SoundPool.OnLoadCompleteListener() { @Override public void onLoadComplete(SoundPool soundPool, int sampleId, int status) { if (0 == status) { //読み込みに成功するとステータスが0で帰って来る loadEndFlag = 1; } } }); if(loadEndFlag == 1) { Toast.makeText(this, "NOW - onResume", Toast.LENGTH_LONG).show(); codicide = SoundRandom(codicide); melody = melodySelect(codicide);(ここで、codicideという配列に、整数値を格納) for (int i = 0; i < 8; i++) { codePlay.play(codicide[i] - 1, 1, 1, 0, 1, 0);//codicide[i]と同じsoundIDに格納されている音を順番に再生。(させたい) } } } @Override protected void onDestroy() { super.onPause(); //インスタンス解放 for(int i=0;i<soundID.length;i++) { codePlay.unload(soundID[i]); codePlay.release(); } }
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/08/27 10:06
2015/08/27 10:33 編集
2015/08/27 11:31