[JAVA] Der Weg zur Erstellung eines Soundspiels 2

Fortschritt vom letzten Mal

Vom letzten Mal an können Sie ein Geräusch machen, indem Sie es von einer Seite zur anderen schütteln! ... das ist es m (_ _) m Bevor ich es fertiggestellt habe, dachte ich, es wäre einfach, ein Geräusch zu machen, indem man es von einer Seite zur anderen schüttelt, aber es ist furchtbar nervig ... Aus irgendeinem Grund gibt es keinen Ton, selbst wenn ich ihn nicht schüttle, oder wenn ich denke, dass es keinen Ton gibt, auch wenn ich ihn nicht schüttle, gibt es keinen Ton, selbst wenn ich ihn schüttle, es verursacht mehrere Reaktionen, ich habe verschiedene Dinge erfunden und ihn schließlich nach links und rechts geschüttelt Jetzt macht ein Geräusch! Unten gezeigt.

Quellcode

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

        //In EditText dürfen nur Zahlen eingegeben werden
        et.setInputType(InputType.TYPE_CLASS_NUMBER);

        //Konvertieren Sie den eingegebenen Wert in den Typ int
        String bpm = ((EditText) findViewById(R.id.BpM)).getText().toString();
        int BPM = Integer.parseInt((bpm));

        //Die, die Sie benötigen, um Sound hinzuzufügen
        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 Registrierung
        Sensor accel = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
        sensorManager.registerListener(this, accel, SensorManager.SENSOR_DELAY_NORMAL);
    }

    @Override protected void onPause() {
        super.onPause();
        //Ereignis-Listener nicht registriert
        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 Verzögerung
            }
        };
        handler.post(runnable);
    }

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

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

}

Was ich dieses Mal hinzugefügt habe, ist der Teil, der den Beschleunigungssensor handhabt, und der Teil, der ein Geräusch macht, wenn er nach links und rechts geschüttelt wird (das ist richtig). Der Punkt, den ich in dem Teil entwickelt habe, der von einer Seite zur anderen schwingt, ist das Hinzufügen einer Verzögerung. Durch Hinzufügen einer Verzögerung werden die Sounds nicht mehr dupliziert.

Recommended Posts

Der Weg zur Erstellung eines Soundspiels 2
Der Weg zur Erstellung eines Soundspiels 3
Der Weg zur Erstellung eines Soundspiels 1
Der Weg zum Erstellen eines Webdienstes (Teil 1)
Der Weg von JavaScript nach Java
Der Weg zum Erstellen eines Webdienstes (Teil 2)
Java SE8 Silber ~ Der Weg zum Pass ~
Erstellen eines Servlets in der Liberty-Umgebung
Memorandum zum Bereinigen des Codes Ruby
Der Weg zur Japanisierung von Rails führt zu Fehlermeldungen
Machen Sie einen Rand links vom TextField
Stellen Sie die Zeit von LocalDateTime auf eine bestimmte Zeit ein
Führen Sie Docker in die Anwendung ein, die Sie erstellen
3. Erstellen Sie eine Datenbank für den Zugriff über das Webmodul
Eine kurze Einführung in terasoluna5 finden Sie im folgenden Text
So führen Sie die SpringBoot-App als Dienst aus
Erstellen eines Chinchiro-Spiels mit Ruby 4. Erstellen eines Spielfortschrittsprozesses
Dinge, auf die Sie beim Erstellen eines Frameworks achten sollten
Wie erstelle ich einen MOD für Slay the Spire?
Ich möchte der Kommentarfunktion eine Löschfunktion hinzufügen
Erstellen eines lokalen Repositorys
Weg zur REPL (?) Schöpfung (3)
Testfall erstellen
[Java] Ich habe versucht, ein Janken-Spiel zu erstellen, das Anfänger auf der Konsole ausführen können
Weg zur REPL (?) Schöpfung (1)
Weg zur REPL (?) Schöpfung (2)
[Rails] Verarbeitung nach Hinzufügen einer Spalte zur Entwicklertabelle
So machen Sie einen Screenshot mit dem Android Studio-Emulator
SDWebImage: So löschen Sie den Cache für eine bestimmte UIImageView
[Anfänger] Versuchen Sie, mit Java ein einfaches RPG-Spiel zu erstellen ①
So erstellen Sie ein Formular zur Auswahl eines Datums aus dem Kalender
So erstellen Sie ein Platzhalterteil zur Verwendung in der IN-Klausel
[IOS] Was Sie wissen müssen, bevor Sie ein Widget erstellen
Ich möchte eine Methode aufrufen und die Nummer zählen
Ich möchte ein Formular erstellen, um die Kategorie [Schienen] auszuwählen
Erstellen Sie eine Methode, um den Steuersatz in Java zurückzugeben
[Ruby] So rufen Sie den Inhalt des Doppel-Hash ab
So fügen Sie dieselben Indizes in ein verschachteltes Array ein
Ich möchte dem select-Attribut einen Klassennamen geben
Fügen Sie dem Swift-Button (und auch dem Kreis) einen Schatten hinzu.
Ein Memorandum, um den juckenden Ort für Java Gold zu erreichen
[ruby] Erstellen eines Programms, das nur auf bestimmte Bedingungen reagiert
[jsoup] So erhalten Sie die gesamte Dokumentation