[JAVA] La route pour créer un jeu sonore 2

Progrès depuis la dernière fois

Dès la dernière fois, vous pouvez faire un son en le secouant d'un côté à l'autre! ... c'est tout m (_ _) m Avant de le terminer, je pensais qu'il serait facile de faire un son en le secouant d'un côté à l'autre, mais c'est terriblement ennuyeux ... Pour une raison quelconque, il n'y a pas de son même si je ne le secoue pas, ou si je pense qu'il n'y a pas de son même si je ne le secoue pas, il n'y a pas de son même si je le secoue, cela provoque de multiples réactions, j'ai imaginé diverses choses, et finalement le secoue à gauche et à droite Fait maintenant un son! Indiqué ci-dessous.

Code source

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

        //Autoriser uniquement la saisie de nombres dans EditText
        et.setInputType(InputType.TYPE_CLASS_NUMBER);

        //Convertir la valeur saisie en type int
        String bpm = ((EditText) findViewById(R.id.BpM)).getText().toString();
        int BPM = Integer.parseInt((bpm));

        //Celui dont vous avez besoin pour ajouter du son
        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();
        //Inscription à l'écouteur d'événements
        Sensor accel = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
        sensorManager.registerListener(this, accel, SensorManager.SENSOR_DELAY_NORMAL);
    }

    @Override protected void onPause() {
        super.onPause();
        //Écouteur d'événement non enregistré
        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); //Retard de 200 ms
            }
        };
        handler.post(runnable);
    }

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

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

}

Ce que j'ai ajouté cette fois, c'est la partie qui gère le capteur d'accélération et la partie qui émet un son lorsqu'elle est secouée à gauche et à droite (c'est à droite). Le point que j'ai imaginé dans la partie qui oscille d'un côté à l'autre est d'ajouter un retard. En ajoutant un delay, les sons ne sont plus dupliqués.

Recommended Posts

La route pour créer un jeu sonore 2
La route pour créer un jeu sonore 3
La route pour créer un jeu sonore 1
La voie de la création d'un service Web (partie 1)
La route de JavaScript à Java
La voie de la création de services Web (partie 2)
Java SE8 Silver ~ La route à franchir ~
Création d'un servlet dans l'environnement Liberty
Mémorandum pour nettoyer le code Ruby
La route vers la japonaisisation des rails conçoit des messages d'erreur
Faire une marge à gauche du TextField
Définir l'heure de LocalDateTime à une heure spécifique
Présentez docker à l'application que vous créez
3. Créez une base de données à laquelle accéder à partir du module Web
Une brève introduction à terasoluna5, voir le texte ci-dessous
Comment exécuter l'application SpringBoot en tant que service
Création d'un jeu Chinchiro avec Ruby 4th Création d'un processus de progression du jeu
Points à surveiller lors de la création d'un framework
Comment faire un MOD pour Slay the Spire
Je souhaite ajouter une fonction de suppression à la fonction de commentaire
Créer un référentiel local
Road to REPL (?) Création (3)
Créer un cas de test
[Java] J'ai essayé de créer un jeu Janken que les débutants peuvent exécuter sur la console
Road to REPL (?) Création (1)
Road to REPL (?) Création (2)
[Rails] Traitement après l'ajout d'une colonne à la table de devise
Comment faire une capture d'écran avec l'émulateur Android Studio
SDWebImage: Comment vider le cache pour une UIImageView particulière
[Débutant] Essayez de créer un jeu RPG simple avec Java ①
Comment créer un formulaire pour sélectionner une date dans le calendrier
Comment créer une partie d'espace réservé à utiliser dans la clause IN
[IOS] Ce que vous devez savoir avant de créer un widget
Je veux appeler une méthode et compter le nombre
Je souhaite créer un formulaire pour sélectionner la catégorie [Rails]
Créer une méthode pour renvoyer le taux de taxe en Java
[Ruby] Comment récupérer le contenu du double hachage
Comment ajouter les mêmes index dans un tableau imbriqué
Je veux donner un nom de classe à l'attribut select
Ajouter une ombre au bouton Swift (et aussi au cercle)
Un mémorandum pour atteindre le lieu qui démange pour Java Gold
[ruby] Création d'un programme qui ne répond qu'à des conditions spécifiques
[jsoup] Comment obtenir la totalité de la documentation