こんにちは、私はアンドロイドプログラミングの初心者です。私の問題は、音が重ならないように、配列のサイズに応じて、次のループを何度も繰り返す前に遅延を作りたいということです。
これが私のコードです:
protected void managerOfSound() {
int size = tempq.size();
for (int i = 0; i < tempq.size(); i++) {
String u =tempq.get(i);
//WHOLE
if (u.equals("a4")){
mp = MediaPlayer.create(this, R.raw.a4);
mp.start();
}else if (u.equals("b4")){
mp = MediaPlayer.create(this, R.raw.b4);
mp.start();
}else if (u.equals("c4")){
mp = MediaPlayer.create(this, R.raw.c4);
mp.start();
}
}
}
Thread.sleep を使用してみましたが、ボタン クリックを使用してサウンドの再生を停止する必要がありますが、Thread.sleep のためにボタンをクリックできないため、使用を無視する必要があります。しかし、誰かがその解決策を持っている場合に備えて、これが私のコードです。私はすでに Thread.currentThread.interrupt を試しましたが、それを使用すると音が再び重なってしまいます。
Thread.sleep を使用したコード:
protected void managerOfSound() {
int size = tempq.size();
for (int i = 0; i < tempq.size(); i++) {
String u =tempq.get(i);
//WHOLE
if (u.equals("a4")){
mp = MediaPlayer.create(this, R.raw.a4);
mp.start();
try {
Thread.sleep(2000);
} catch (InterruptedException ie) {
// TODO Auto-generated catch block
}
}else if (u.equals("b4")){
mp = MediaPlayer.create(this, R.raw.b4);
mp.start();
try {
Thread.sleep(2000);
} catch (InterruptedException ie) {
// TODO Auto-generated catch block
}
}else if (u.equals("c4")){
mp = MediaPlayer.create(this, R.raw.c4);
mp.start();
try {
Thread.sleep(2000);
} catch (InterruptedException ie) {
// TODO Auto-generated catch block
}
}
}
}
私が試した別の方法は postDelayed ですが、最初のループの後に遅延していないようです。
postDelayed のコードは次のとおりです。
protected void managerOfSound() {
int size = tempq.size();
for (int i = 0; i < tempq.size(); i++) {
String u =tempq.get(i);
//WHOLE
if (u.equals("a4")){
mp = MediaPlayer.create(this, R.raw.a4);
handler.postDelayed(new Runnable(){
@Override
public void run() {
mp.start();
}
},4000);
}else if (u.equals("b4")){
mp = MediaPlayer.create(this, R.raw.b4);
handler.postDelayed(new Runnable(){
@Override
public void run() {
mp.start();
}
},4000);
}else if (u.equals("c4")){
mp = MediaPlayer.create(this, R.raw.c4);
handler.postDelayed(new Runnable(){
@Override
public void run() {
mp.start();
}
},4000);
}
}
}
また、他の人が提案したように、4000 を (i+1)* 4000 に変更しようとしましたが、それでも機能しません。また、遅延をif elseステートメントの外に置いてみましたが、結果はまったく同じです。
私の問題を提案して助けてくれる人はいますか? お願いします。私は一週間一緒に働いています。前もって感謝します。