[JAVA] Der Weg zur Erstellung eines Soundspiels 3

Synopse bis zum letzten Mal und die Ergebnisse dieser Zeit

Bis zum letzten Mal konnte ich ein Metronom erstellen und das Terminal nach links und rechts schütteln, um einen Ton zu erzeugen. Von dort aus habe ich einen einfachen Musik-Player mit der Absicht erstellt, Hintergrundmusik hinzuzufügen. Daher werde ich das Layout und den Quellcode unten beschreiben.

Layout

キャプチャ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" />

Quellcode

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

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

        //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 = 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) {

            }
        });

        //Steuerung der Wiedergabetaste
        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;

            //Aktualisieren Sie die Wiedergabeposition
            m_bar.setProgress(currentPosition);

            //Aktualisierung der verstrichenen Zeit
            String elapsedTime = createTimeLabel(currentPosition);
            s_text.setText(elapsedTime);

            //Verbleibende Aktualisierung der Zeitbeschriftung
            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;
    }
}

Viel Glück diesmal

Es ist eine Weile her seit dem letzten Mal, aber es ist ziemlich schwierig, einen einfachen Musikplayer zu erstellen, und die Musik wird nicht abgespielt, es ist gut zu spielen, aber wenn sie angehalten wird, wird die Musik nicht abgespielt oder die Musik stoppt. Und die App stoppt gleichzeitig ... Mein Eindruck war, dass es ziemlich schwierig war, aber was die Ursache war, war, dass der Inhalt des mp beim Stoppen null war, also dachte ich, dass es beim erneuten Abspielen einen Fehler verursachte. Ich bin. Es tut mir leid, wenn ich einen Fehler gemacht habe m (_ _) m Übrigens denken viele Leute, dass die beiden leeren Schaltflächen im Layout seltsam sind, aber wenn Sie sie drücken, hören Sie einen Soundeffekt! ... wie? Was sonst? ・ ・ ・ das ist alles.

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
Ich habe versucht, den Weihnachtsbaum in einem Lebensspiel zu beleuchten
Der Weg zum Erstellen eines Webdienstes (Teil 2)
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
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)
[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
[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