音ゲー作成までの道のり２

#前回からの進捗
前回からは左右に振ると音が出るようになりました！...それだけですm(_ _)m
左右に振れば音が出るようにするのなど完成させる前の私は簡単だと思っていましたが、とてつもなくめんどくさい...
なぜか振ってもいないのに音が出たり、振っていなくても音が出ないようになったと思えば振っても音が出ないし、多重反応を起こすし、いろいろ工夫し、やっと左右に振ると音が出るようになりました！下記にて示します。

#ソースコード

```java:MainActivity.java
public class MainActivity extends AppCompatActivity implements SensorEventListener {
    ImageView Image1, Image2, Image3, Image4;
    int i,j, Delay;
    float X_Data, Y_Data, Z_Data;

    private Timer timer1;
    private CountUpTimerTask timerTask1;
    private Handler handler1 = new Handler();
    private Runnable runnable;
    private final Handler handler = new Handler();

    private SensorManager sensorManager;
    private TextView X_Data_TextView , Y_Data_TextView , Z_Data_TextView;

    SoundPool soundPool;
    int mp3_1,mp3_x;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        sensorManager = (SensorManager)getSystemService(SENSOR_SERVICE);
        X_Data_TextView = findViewById(R.id.X_Data_Text);
        Y_Data_TextView = findViewById(R.id.Y_Data_Text);
        Z_Data_TextView = findViewById(R.id.Z_Data_Text);
        StartCyclicHandler();

        Image1 = findViewById(R.id.image1);
        Image2 = findViewById(R.id.image2);
        Image3 = findViewById(R.id.image3);
        Image4 = findViewById(R.id.image4);
        Button startButton = findViewById(R.id.strat);
        Button endButton = findViewById(R.id.End);
        EditText et = findViewById(R.id.BpM);

        Image1.setImageResource(R.drawable.en);
        Image2.setImageResource(R.drawable.en);
        Image3.setImageResource(R.drawable.en);
        Image4.setImageResource(R.drawable.en);

        //EditTextに数字しか入力できないようにする
        et.setInputType(InputType.TYPE_CLASS_NUMBER);

        //入力された値をint型に変換
        String bpm = ((EditText) findViewById(R.id.BpM)).getText().toString();
        int BPM = Integer.parseInt((bpm));

        //効果音付けるのに必要なやつ
        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
            soundPool = new SoundPool(5, AudioManager.STREAM_MUSIC, 0);
        } else {
            AudioAttributes attr = new AudioAttributes.Builder()
                    .setUsage(AudioAttributes.USAGE_MEDIA)
                    .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
                    .build();
            soundPool = new SoundPool.Builder()
                    .setAudioAttributes(attr)
                    .setMaxStreams(5)
                    .build();
        }



        mp3_1 = soundPool.load(this, R.raw.pop, 1);
        mp3_x = soundPool.load(this,R.raw.feed1,1 );

        //STARTButton
        startButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                i = 0;

                String bpm = ((EditText) findViewById(R.id.BpM)).getText().toString();
                int BPM = Integer.parseInt((bpm));
                Delay = 60000 / BPM;

                if (null != timer1) {
                    timer1.cancel();
                    timer1 = null;
                }

                Image1.setImageResource(R.drawable.en);
                Image2.setImageResource(R.drawable.en);
                Image3.setImageResource(R.drawable.en);
                Image4.setImageResource(R.drawable.en);

                timer1 = new Timer();

                timerTask1 = new CountUpTimerTask();

                timer1.schedule(timerTask1, 0, Delay);
            }

        });

        //ENDButton
        endButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (null != timer1) {
                    timer1.cancel();
                    timer1 = null;
                }


                Image1.setImageResource(R.drawable.en);
                Image2.setImageResource(R.drawable.en);
                Image3.setImageResource(R.drawable.en);
                Image4.setImageResource(R.drawable.en);
            }
        });
    }

    class CountUpTimerTask extends TimerTask {
        @Override
        public void run() {
            handler1.post(new Runnable() {
                @Override
                public void run() {
                    if (i == 0) {
                        Image1.setImageResource(R.drawable.eng);
                        Image4.setImageResource(R.drawable.en);
                        soundPool.play(mp3_1, 2, 2, 0, 0, 1f);
                        i++;
                    } else if (i == 1) {
                        Image1.setImageResource(R.drawable.en);
                        Image2.setImageResource(R.drawable.eng);
                        soundPool.play(mp3_1, 2, 2, 0, 0, 1f);
                        i++;
                    } else if (i == 2) {
                        Image2.setImageResource(R.drawable.en);
                        Image3.setImageResource(R.drawable.eng);
                        soundPool.play(mp3_1, 2, 2, 0, 0, 1f);
                        i++;
                    } else {
                        Image3.setImageResource(R.drawable.en);
                        Image4.setImageResource(R.drawable.eng);
                        soundPool.play(mp3_1, 2, 2, 0, 0, 1f);
                        i = 0;
                    }
                }
            });

        }
    }


    @Override protected void onResume() {
        super.onResume();
        // Event Listener登録
        Sensor accel = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
        sensorManager.registerListener(this, accel, SensorManager.SENSOR_DELAY_NORMAL);
    }

    @Override protected void onPause() {
        super.onPause();
        // Event Listener登録解除
        sensorManager.unregisterListener(this);
        StoptCyclicHandler();
    }



    @Override public void onSensorChanged(SensorEvent event) {
        if(event.sensor.getType() == Sensor.TYPE_ACCELEROMETER){
            X_Data = (500+(event.values[0]*25));
            Y_Data = (500+(event.values[1]*25));
            Z_Data = (500+(event.values[2]*25));
        }
    }

    protected void StartCyclicHandler(){
        runnable = new Runnable() {
            @Override
            public void run() {

                X_Data_TextView.setText(String.format("%.3f",X_Data));
                Y_Data_TextView.setText(String.format("%.3f",Y_Data));
                Z_Data_TextView.setText(String.format("%.3f",Z_Data));

                if(X_Data>800){
                    soundPool.play(mp3_x, 2, 2, 0, 0, 1f);
                }
                else if (X_Data<150){
                    soundPool.play(mp3_x, 2, 2, 0, 0, 1f);
                }
            }

                handler.postDelayed(this,200); //200msの遅延
            }
        };
        handler.post(runnable);
    }

    protected void StoptCyclicHandler(){
        handler.removeCallbacks(runnable);
    }

    @Override public void onAccuracyChanged(Sensor sensor, int accuracy) {
    }

}
```

今回追加したのは、加速度センサを扱う部分と左右に振ると音が出るようにする部分です（そのまんま）。
左右に振る部分で工夫した点は、遅延を入れることです。
遅延を入れることにより、音が重複して鳴らなくなりました。