質問:
特定の楽器のように見える imageButton を押すとサウンド (音符) を再生する小さな Android アプリを設計しています。6 つの imageButtons で最大 10 個の音符を再生できます。ノート番号を配列に格納し、要素を特定の番号に設定します。 この部分はうまくいくようです
このアプリには、最近再生したものを再生できる機能があります。何らかの理由で、これは最初のノートを 10 回しか再生しません。新しい配列の値を理解していないように見えるため、常に for ループの最初の if ステートメントでハングアップします。ユーザーが特定の楽器で演奏したものを再生できるように、新しい配列値を読み取る必要があります。
コード:
public void drum1button(View view) { //This code snippet works as expected
if (studio.drumCount < 10){
new Thread(drum.drum1).start();
drum.drums[studio.drumCount] = 0;
Toast.makeText(getApplicationContext(),studio.drumCount + " drum.drums[studio.drumCount] = " + drum.drums[studio.drumCount],2).show();
studio.drumCount++;
}
else {
Toast.makeText(getApplicationContext(),"Record limit reached. Head to the studio!",5).show();
}
}
public void drum2button(View view) {
if (studio.drumCount < 10){
new Thread(drum.drum2).start();
drum.drums[studio.drumCount] = 1;
Toast.makeText(getApplicationContext(),studio.drumCount + " drum.drums[studio.drumCount] = " + drum.drums[studio.drumCount],2).show();
studio.drumCount++;
}
else {
Toast.makeText(getApplicationContext(),"Record limit reached. Head to the studio!",5).show();
}
}
public void drum3button(View view) {
if (studio.drumCount <10 ) {
new Thread(drum.drum3).start();
drum.drums[studio.drumCount] = 2;
Toast.makeText(getApplicationContext(),studio.drumCount + " drum.drums[studio.drumCount] = " + drum.drums[studio.drumCount],2).show();
studio.drumCount++;
}
else {
Toast.makeText(getApplicationContext(),"Record limit reached. Head to the studio!",5).show();
}
}
public void drum4button(View view) {
if (studio.drumCount < 10) {
new Thread(drum.drum4).start();
drum.drums[studio.drumCount] = 3;
Toast.makeText(getApplicationContext(),studio.drumCount + " drum.drums[studio.drumCount] = " + drum.drums[studio.drumCount],2).show();
studio.drumCount++;
}
else {
Toast.makeText(getApplicationContext(),"Record limit reached. Head to the studio!",5).show();
}
}
public void drum5button(View view) {
if (studio.drumCount < 10) {
new Thread(drum.drum5).start();
drum.drums[studio.drumCount] = 4;
Toast.makeText(getApplicationContext(),studio.drumCount + " drum.drums[studio.drumCount] = " + drum.drums[studio.drumCount],2).show();
studio.drumCount++;
}
else {
Toast.makeText(getApplicationContext(),"Record limit reached. Head to the studio!",5).show();
}
}
public void drum6button(View view) {
if (studio.drumCount < 10){
new Thread(drum.drum6).start();
drum.drums[studio.drumCount] = 5;
Toast.makeText(getApplicationContext(),studio.drumCount + " drum.drums[studio.drumCount] = " + drum.drums[studio.drumCount],2).show();
studio.drumCount++;
}
else {
Toast.makeText(getApplicationContext(),"Record limit reached. Head to the studio!",5).show();
}
}
Runnable drumPlayback = new Runnable() {
public void run() {
for (int i = 0; i < 10; i++) { //(was i = 10, typo in formatting when //pasting. Still does not work with i = 0
//handler.postDelayed(drumPlayback, 5000);
try {Thread.sleep(1000);} catch(Exception e) {}
if (drum.drums[i] == 0) {
new Thread(drum.drum1).start(); //this is the only one that plays
}
if (drum.drums[i] == 1) {
new Thread(drum.drum2).start();
}
if (drum.drums[i] == 2) {
new Thread(drum.drum3).start();
}
if (drum.drums[i] == 3) {
new Thread(drum.drum4).start();
}
if (drum.drums[i] == 4) {
new Thread(drum.drum5).start();
}
if (drum.drums[i] == 5) {
new Thread(drum.drum6).start();
}
}
}
};