Android-Apps: Sound-Effekte

In diesem Video geht es um Sound-Effekte. Wir bauen Sounds in das Spiel „Bumm“ ein. Falls du das Spiel noch nicht kennst, schau dir die Videos zur Bumm-App auf unserem Kanal an. Du kannst dir das Spiel auch hier als Quellcode herunterladen und direkt loslegen Sounds einzubauen: Download der Bumm-App
Sound-Dateien
Um Sound-Effekte in der App abspielen zu können, benötigen wir Sound-Dateien, am besten im MP3-Format. Auf der Webseite notificationsounds.com findest du jede Menge davon. Such dir einfach die passenden Sounds heraus und lade sie als MP3-Dateien herunter.
In Android Studio erstellst du in der Ordnerstruktur im res-Ordner mit der rechten Maustaste ein neues „Android Resource Directory“, das nennst du „raw“.


Dann kopierst du deine heruntergeladenen MP3-Dateien im Windows Explorer (STRG+C) und fügst sie in den neuen raw-Ordner in Android Studio ein (STRG+V).

Sounds laden
Wenn die App startet, müssen die Sounds geladen werden, damit wir sie im Verlauf des Spiels sofort benutzen können, ohne dass es zu einer Verzögerung kommt. Daher erzeugen wir eine neue Methode, die wir „initSounds“ nennen. Die Methode rufen wir in der onCreate-Methode unserer MainActivity auf.

In der initSounds-Methode erzeugen wir einen SoundPool. Mit diesem SoundPool können wir Sounds laden und später auch abspielen.
soundPool = new SoundPool.Builder().build();
Da wir den SoundPool öfter brauchen, speichern wir die Instanz lokal in unserer MainActivity, am besten ganz oben, dort wo wir auch die Instanzen zu unseren Views halten.

Im Spiel wollen wir zwei Sounds abspielen. Den einen, wenn der Nutzer den korrekten Button tippt. Und den anderen, wenn der Nutzer einen Fehler macht, also den falschen Button tippt. Diese beiden Sounds laden wir mit dem SoundPool. Dabei gibt uns der SoundPool für jeden Sound eine ID zurück, die wir auch ganz oben in unserer MainActivity ablegen. Da es sich bei den IDs um ganze Zahlen handelt, sind sie vom Typ „int“.
Die initSounds-Methode sieht dann so aus:

R.raw.correct gibt die MP3-Datei für den Sound an, der abgespielt werden soll, wenn der Nutzer den korrekten Button tippt. Die MP3-Datei heißt correct.mp3. Falls die Datei bei dir anders heißt, musst du das R.raw entsprechend anpassen. Beispiel: Heißt die MP3-Datei coolersound.mp3, dann muss es R.raw.coolersound heißen.
Das gleiche gilt natürlich für R.raw.wrong. Das ist der Sound, der abgespielt werden soll, wenn der Nutzer einen Fehler macht, also den falschen Button antippt.
Sounds abspielen
Um die geladenen Sounds abzuspielen, können wir wieder den SoundPool verwenden. Den „korrekten“ Sound wollen wir abspielen, wenn der Nutzer den richtigen Button tippt. Ist das der Fall, wird die Methode „onCorrect“ aufgerufen. Und genau dort bauen wir den Sound ein.
soundPool.play(soundIdCorrect, 1, 1, 0, 0, 1);
Wir rufen dazu „play“ auf dem SoundPool auf und übergeben insgesamt 6 Argumente. Das erste ist die ID des Sounds, den wir abspielen wollen. Das zweite ist die Lautstärke des linken Tonkanals, das dritte die Lautstärke des rechten Tonkanals. Die Werte müssen zwischen 0 und 1 liegen. Die volle Lautstärke erreichst du mit der 1. Das vierte Argument gibt die Priorität an, mit der der Sound abgespielt werden soll. Wenn der Sound alle Sounds übertönen soll, die bereits zu hören sind, dann setze hier eine 1, ansonsten eine 0. Das fünfte Argument steht für „loop“. Setze es auf 1, wenn sich der Sound ständig wiederholen soll, aber wer will das schon, also besser auf 1. Und das sechste und damit letzte Argument steht für „rate“. Damit ist die Frequenz bzw. Geschwindigkeit gemeint, das sollte 1 sein, damit sich der Sound genauso anhört, wie er gedacht ist.
So sieht die onCorrect-Methode vollständig aus:

Den zweiten Sound bauen wir in die onError-Methode ein. Die wird aufgerufen, wenn sich der Nutzer für den falschen Button entscheidet und damit einen Fehler macht und das Spiel beendet wird bzw. von vorne startet.
soundPool.play(soundIdWrong, 1, 1, 0, 0, 1);
Die vollständige onError-Methode sieht so aus:

Das war’s schon. Starte die App, stell sicher, dass die Töne am Handy eingeschaltet sind, fahr die Lautstärke ordentlich hoch und lass es krachen!
Viel Spaß!