Android Piano, все белые кнопки имеют одинаковый звук, все черные кнопки имеют одинаковый звук - PullRequest
0 голосов
/ 18 апреля 2020

Я сохранил все звуковые файлы в папке с именем raw в папке Resource .

In activity_main. xml white кнопки имеют идентификаторы, такие как w1, w2, w3, ..., w23. Аналогично черные кнопки имеют идентификаторы b1, b2, b3, ..., b16.

Я инициализировал все кнопки и добавил к ним прослушиватель, перебирая ArrayList, как показано в коде MainActivity. java

enter image description here

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);
    }
}

Выход

enter image description here

Здесь я заметил, что

  • Аудиоклип с именем w16.wav воспроизводится при нажатии любой белой клавиши.
  • Воспроизведение аудиоклипа с именем b16.wav при нажатии любой черной клавиши.

В чем причина этой проблемы? Как это решить?

Спасибо!

...