Я сохранил все звуковые файлы в папке с именем raw в папке Resource .
In activity_main. xml white кнопки имеют идентификаторы, такие как w1, w2, w3, ..., w23. Аналогично черные кнопки имеют идентификаторы b1, b2, b3, ..., b16.
Я инициализировал все кнопки и добавил к ним прослушиватель, перебирая ArrayList, как показано в коде MainActivity. java
MainActivity. java
package com.example.myapplication;
import androidx.appcompat.app.AppCompatActivity;
import android.annotation.SuppressLint;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.SeekBar;
import android.widget.Spinner;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;
public class MainActivity extends AppCompatActivity
{
ArrayList<Button> w = new ArrayList<Button>(); // To hold objects of White Buttons
ArrayList<Button> b = new ArrayList<Button>(); // To hold objects of Black Buttons
ArrayList<MediaPlayer> mpW = new ArrayList<MediaPlayer>(); // To hold sound clips corresponding to White Buttons
ArrayList<MediaPlayer> mpB = new ArrayList<MediaPlayer>(); // To hold sound clips corresponding to Black Buttons
SeekBar seekBar;
Spinner spnRaag;
EditText tThat, tPrahar, tVaadi, tSamvadi, tVarjya, tAroh, tAvroh;
List<Integer> temp,tempList,tempAroh,tempAvroh;
String aroh="|",avroh="|",swr,seq,destPath;
StringTokenizer st;
int i,next,sum,rows,columns,initSa,sa,startIndex;
boolean recording = false;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initialize();
setListeners();
}
@SuppressLint("ClickableViewAccessibility")
public void setListeners()
{
for(i = 0; i <= 22; i++) // Total Number of White Buttons on Virtual Piano are 23
{
((Button)w.get(i)).setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent evt) {
if (evt.getAction() == MotionEvent.ACTION_DOWN) {
((MediaPlayer)mpW.get(i-1)).start();
} else if (evt.getAction() == MotionEvent.ACTION_UP) {
((MediaPlayer)mpW.get(i-1)).pause();
}
return false;
}
});
}
for(i = 0; i <= 15; i++) // Total Number of Black Buttons on Virtual Piano are 16
{
((Button)b.get(i)).setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent evt) {
if (evt.getAction() == MotionEvent.ACTION_DOWN) {
((MediaPlayer)mpB.get(i-1)).start();
} else if (evt.getAction() == MotionEvent.ACTION_UP) {
((MediaPlayer)mpB.get(i-1)).pause();
}
return false;
}
});
}
seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
sa = progress + 1;
System.out.print("Current Sa : "+sa);
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
}
public void initialize()
{
temp = new ArrayList<Integer>();
tempList = new ArrayList<Integer>();
tempAroh = new ArrayList<Integer>();
tempAvroh = new ArrayList<Integer>();
seekBar = (SeekBar)findViewById(R.id.seekBar);
for(i = 0; i <= 22; i++)
{
w.add(i, (Button)findViewById(getResources().getIdentifier("w" + (i + 1), "id", getPackageName())));
mpW.add(i, MediaPlayer.create(this, getResources().getIdentifier("w" + (i + 1), "raw", getPackageName())));
}
for(i = 0; i <= 15; i++)
{
b.add(i, (Button)findViewById(getResources().getIdentifier("b" + (i + 1), "id", getPackageName())));
mpB.add(i, MediaPlayer.create(this, getResources().getIdentifier("b" + (i + 1), "raw", getPackageName())));
}
spnRaag = (Spinner)findViewById(R.id.spnRaag);
tThat = (EditText)findViewById(R.id.tThaat);
tPrahar = (EditText)findViewById(R.id.tThaat);
tVaadi = (EditText)findViewById(R.id.tThaat);
tSamvadi = (EditText)findViewById(R.id.tThaat);
tVarjya = (EditText)findViewById(R.id.tThaat);
tAroh = (EditText)findViewById(R.id.tThaat);
tAvroh = (EditText)findViewById(R.id.tThaat);
}
}
Выход
Здесь я заметил, что
- Аудиоклип с именем w16.wav воспроизводится при нажатии любой белой клавиши.
- Воспроизведение аудиоклипа с именем b16.wav при нажатии любой черной клавиши.
В чем причина этой проблемы? Как это решить?
Спасибо!