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

Synopsis jusqu'à la dernière fois et les résultats de cette fois

Jusqu'à la dernière fois, j'ai pu créer un métronome et secouer le terminal gauche et droite pour faire un son. À partir de là, j'ai créé un simple lecteur de musique avec l'intention d'ajouter BGM, je vais donc décrire la mise en page et le code source ci-dessous.

Disposition

キャプチャM.PNG

activiti_main.xml


    <SeekBar
        android:id="@+id/Time_Seek"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginStart="75dp"
        android:layout_marginLeft="75dp"
        android:layout_marginEnd="75dp"
        android:layout_marginRight="75dp"
        android:layout_marginBottom="250dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.0"
        app:layout_constraintStart_toStartOf="parent" />

    <TextView
        android:id="@+id/Time_text1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="75dp"
        android:layout_marginLeft="75dp"
        android:layout_marginTop="4dp"
        android:text="0:00"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/Time_Seek" />

    <TextView
        android:id="@+id/Time_text2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="4dp"
        android:layout_marginEnd="75dp"
        android:layout_marginRight="75dp"
        android:text="- 0:00"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/Time_Seek" />

    <SeekBar
        android:id="@+id/Volume_seek"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginStart="75dp"
        android:layout_marginLeft="75dp"
        android:layout_marginEnd="75dp"
        android:layout_marginRight="75dp"
        android:layout_marginBottom="50dp"
        android:max="100"
        android:progress="50"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent" />

    <ImageView
        android:id="@+id/imageView"
        android:layout_width="30dp"
        android:layout_height="30dp"
        android:layout_marginEnd="10dp"
        android:layout_marginRight="10dp"
        android:layout_marginBottom="38dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toStartOf="@+id/Volume_seek"
        app:srcCompat="@drawable/sound" />

    <ImageView
        android:id="@+id/imageView2"
        android:layout_width="30dp"
        android:layout_height="30dp"
        android:layout_marginStart="10dp"
        android:layout_marginLeft="10dp"
        android:layout_marginBottom="38dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintStart_toEndOf="@+id/Volume_seek"
        app:srcCompat="@drawable/sound2" />

    <Button
        android:id="@+id/Music_button"
        android:layout_width="60dp"
        android:layout_height="60dp"
        android:layout_marginStart="150dp"
        android:layout_marginLeft="150dp"
        android:layout_marginTop="50dp"
        android:layout_marginEnd="150dp"
        android:layout_marginRight="150dp"
        android:layout_marginBottom="50dp"
        android:background="@drawable/play"
        app:layout_constraintBottom_toTopOf="@+id/Volume_seek"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/Time_Seek" />

    <Button
        android:id="@+id/beat1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="75dp"
        android:layout_marginLeft="75dp"
        android:layout_marginEnd="75dp"
        android:layout_marginRight="75dp"
        android:layout_marginBottom="75dp"
        app:layout_constraintBottom_toTopOf="@+id/Time_Seek"
        app:layout_constraintEnd_toStartOf="@+id/beat2"
        app:layout_constraintStart_toStartOf="parent" />

    <Button
        android:id="@+id/beat2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="75dp"
        android:layout_marginLeft="75dp"
        android:layout_marginEnd="75dp"
        android:layout_marginRight="75dp"
        android:layout_marginBottom="75dp"
        app:layout_constraintBottom_toTopOf="@+id/Time_Seek"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toEndOf="@+id/beat1" />

Code source

MainActivity.java


public class MainActivity extends AppCompatActivity {

    private MediaPlayer mp;
    private Button m_but,b_but1,b_but2;
    private SeekBar v_bar,m_bar;
    private TextView s_text,e_text;
    private int m_time;

    SoundPool soundPool;
    int mp3;

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

        m_but = findViewById(R.id.Music_button);
        b_but1 = findViewById(R.id.beat1);
        b_but2 = findViewById(R.id.beat2);
        s_text = findViewById(R.id.Time_text1);
        e_text = findViewById(R.id.Time_text2);

        //Chargement des chansons
        mp = MediaPlayer.create(this,R.raw.impact);
        mp.setLooping(true);
        mp.setVolume(1f,1f);
        m_time = mp.getDuration();

        //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 = soundPool.load(this, R.raw.pop, 1);

        m_bar = findViewById(R.id.Time_Seek);
        m_bar.setMax(m_time);
        m_bar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
            @Override
            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
                if(fromUser){
                    mp.seekTo(progress);
                    m_bar.setProgress(progress);
                }
            }

            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {

            }

            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {

            }
        });

        v_bar = findViewById(R.id.Volume_seek);
        v_bar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
            @Override
            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
                float v_num = progress / 100f;
                mp.setVolume(v_num,v_num);
            }

            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {

            }

            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {

            }
        });

        //Contrôle du bouton de lecture
        m_but.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if(mp.isPlaying()){
                    mp.pause();
                    m_but.setBackgroundResource(R.drawable.play);
                }
                else {
                    mp.start();
                    m_but.setBackgroundResource(R.drawable.stop);
                }
            }
        });

        b_but1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                soundPool.play(mp3, 2, 2, 0, 0, 1f);
            }
        });

        b_but2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                soundPool.play(mp3, 2, 2, 0, 0, 1f);
            }
        });


        new Thread(new Runnable() {
            @Override
            public void run() {
                while (mp !=null){
                    try {
                        Message msg = new Message();
                        msg.what = mp.getCurrentPosition();
                        handler .sendMessage(msg);
                        Thread.sleep(1000);
                    } catch (InterruptedException e){}
                }
            }
        }).start();
    }

    private Handler handler =new Handler(new Handler.Callback() {
        @Override
        public boolean handleMessage(Message msg) {
            int currentPosition = msg.what;

            //Mettre à jour la position de lecture
            m_bar.setProgress(currentPosition);

            //Mise à jour de l'étiquette du temps écoulé
            String elapsedTime = createTimeLabel(currentPosition);
            s_text.setText(elapsedTime);

            //Mise à jour de l'étiquette de temps restant
            String remainingTime = "- " + createTimeLabel(m_time-currentPosition);
            e_text.setText(remainingTime);

            return true;
        }
    });

    public String createTimeLabel(int time) {
        String timeLabel = "";
        int min = time / 1000 / 60;
        int sec = time / 1000 % 60;

        timeLabel = min + ":";
        if (sec < 10) timeLabel += "0";
        timeLabel += sec;

        return timeLabel;
    }
}

Bonne chance cette fois

Cela fait un moment depuis la dernière fois, mais il est assez difficile de créer un lecteur de musique simple, et la musique ne joue pas, c'est bon à jouer, mais quand elle est mise en pause, la musique ne joue pas ou la musique s'arrête. Et l'application s'arrêtera en même temps ... Je pense que c'était assez difficile, mais la cause en était que le contenu de mp était nul quand il s'est arrêté, donc j'ai pensé que cela causait une erreur lors de la lecture. Je suis. Je suis désolé si j'ai fait une erreur m (_ _) m Au fait, beaucoup de gens pensent que les deux boutons vierges de la mise en page sont étranges, mais lorsque vous appuyez dessus, vous entendrez un effet sonore! ... hein? Quoi d'autre? ・ ・ ・ c'est tout.

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
J'ai essayé d'illuminer le sapin de Noël dans un jeu de la vie
La voie de la création de services Web (partie 2)
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
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)
[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
[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