20. Soundeffekte

../../_images/sounds.svg

Das Hinzufügen von Sound zu deinem Spiel ist nicht zu schwierig. Es gibt zwei Schritte:

  1. Lade den Sound

  2. Spiele den Sound ab

Für diese Beispiele verwende ich eine Sounddatei mit dem Namen laser.ogg, die Sie hier herunterladen können ../../_static/laser.ogg. Stelle sicher, dass du die Datei im selben Verzeichnis wie das Python-Programm speicherst, das versucht, sie zu verwenden.

20.1. Laden von Sounds

../../_images/loading_sound.svg

Der folgende Code erstellt eine neue Variable mit dem Namen laser_sound. Er ruft die Funktion load_sound auf und übergibt den Dateinamen unseres Sounds.

laser_sound = arcade.load_sound("laser.ogg")

Damit dies funktioniert, musst du die eine Sounddatei mit dem Namen laser.ogg in dasselbe Verzeichnis wie deine Python-Datei herunterladen. Der Rechner findet den Sound nicht, wenn sie sich in einem anderen Verzeichnis befindet.

Dadurch wird der Sound geladen, aber nicht abgespielt. Wir wollen den Sound nur einmal laden. Wir möchten den Sound nicht jedes Mal von der Festplatte laden, wenn wir ihn abspielen. Er kann im Speicher bleiben.

20.2. Sounds abspielen

../../_images/headphones.svg

Der Code zum Abspielen von Sounds ist einfach. Rufe einfach die Funktion play_sound auf und übergebe die Variable, die wir auf den geladenen Sound gesetzt haben:

arcade.play_sound(laser_sound)

Wenn man die beiden zusammenfasst, könnte man denken, wir könnten dies tun, um Sounds abzuspielen:

import arcade

laser_sound = arcade.load_sound("laser.ogg")
arcade.play_sound(laser_sound)

Das geht aber nicht. Das Programm endet, bevor der Sound abgespielt werden kann. Die Funktion play_sound pausiert nicht, während der Sound abgespielt wird, sie kehrt sofort zurück und das Programm geht weiter. Wir hatten ein ähnliches Problem, als wir ein Fenster öffneten, und wir können es auf dieselbe Weise lösen:

1
2
3
4
5
6
import arcade

arcade.open_window(300, 300, "Sound Demo")
laser_sound = arcade.load_sound("laser.ogg")
arcade.play_sound(laser_sound)
arcade.run()

Aus diesem Grund empfehle ich, den Sound in der __init__-Methode der Klasse zu laden, die den Sound abspielen soll.

20.3. Sounds auslösen

../../_images/switch.svg

Wir wollen den Sound abspielen, wenn etwas passiert. Also lädt dieses Beispiel den Sound einmal während des __init__. Wenn der Benutzer die Leertaste drückt, wird der Sound ausgelöst.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import arcade


class MyApplication(arcade.Window):

    def __init__(self, width, height):
        super().__init__(width, height, "Trigger Sound With Key")

        # Load the sound when the application starts
        self.laser_sound = arcade.load_sound("laser.ogg")

    def on_key_press(self, key, modifiers):

        # If the user hits  the space bar, play the sound that we loaded
        if key == arcade.key.SPACE:
            arcade.play_sound(self.laser_sound)


def main():
    window = MyApplication(300, 300)
    arcade.run()

main()

20.4. Sounds finden

Tolle Webseiten, um kostenlose Sounds für dein Programm zu finden, sind:

  • OpenGameArt.org

  • www.freesound.org ist in Ordnung, erfordert aber ein Login, was ziemlich nervt.

  • Kenney.nl hat ein paar kostenlose Soundpakete, die du herunterladen kannst, und einige, die man günstig kaufen kann.

20.5. Dateiformate für Sounds

../../_images/waves.svg

Es gibt verschiedene Arten von Audiodateiformaten (sound file formats), in denen man Sounds finden kann:

  • .wav - Dies ist ein rohes „Wave“ -Format. Der Sound wird überhaupt nicht komprimiert. Man benötigt keine spezielle Bibliothek, um den Sound zu dekomprimieren, aber die Sounddatei selbst kann ziemlich groß sein.

  • .mp3 - MPEG Layer III Audio (mp3) ist eines der beliebtesten komprimierten Audiodateiformate. Durch dieses Dateiformat wurde Online-Musik immer beliebter. Einige der Komprimierungsalgorithmen sind jedoch patentiert, so dass sie für freie Software nicht geeignet sind.

  • .m4a - Apples Dateiformat für komprimiertes, aber ungeschütztes Audio.

  • .ogg - Eine Audiodatei, die Ogg-Vorbis (Open Source) zur Komprimierung verwendet. Eine weniger beliebte, aber patentfreie Methode zur Tonspeicherung.

Arcade sollte in der Lage sein, Dateien im MP3- oder Ogg-Format abzuspielen. Konvertiere den Sound in ein rohes WAV-Format, wenn du damit Probleme hast.

Wenn du Dateiformate konvertieren oder eine Audiodatei zuschneiden musst, empfehle ich die Verwendung des Programms Audacity.