Die Programmiersprache Python besticht durch eine niedrige Lernschwelle und ihre vielseitigen Anwendungsmöglichkeiten. Besonders in Bereichen wie Akustik, Sounddesign oder Webentwicklung kann es von großem Vorteil sein, wenn Python in der Lage ist, Audiodateien abzuspielen. In diesem Artikel erfahren Sie, welche Methoden Ihnen dafür zur Verfügung stehen und wie Sie diese effektiv nutzen können.

Die Python-Bibliotheken

Für Python gibt es eine Vielzahl an Bibliotheken, die das Sound-Abspielen ermöglichen. Alle davon haben ihre Vor- und Nachteile, da kann die Auswahl schwierig sein. Hier sind einige der beliebtesten Möglichkeiten erklärt:

Eine gelbe und eine Blaue Schlange bilden das Logo. Python zum Sound abspielen verwenden können Sie seit 1997.

So sieht das Logo der Programmiersprache aus. Mit Python Sound abspielen ist jetzt womöglich einfacher denn je. Quelle: Pixabay

Pyaudio

Pyaudio kann mit einfachen Mitteln einen Output-Stream erzeugen. Dieser greift dann auf Audio-Möglichkeiten am Computer zu. Pyaudio basiert auf der Bibliothek Portaudio, die ursprünglich für die Programmiersprachen C und C++ gedacht war. Mit Pyaudio können Sie sowohl ein Array, als auch eine Datei als Audio abspielen.

import wave
import pyaudio


CHUNK = 1024

filename = input("WAV-Datei: ")

with wave.open(filename, 'rb') as wf:

    p = pyaudio.PyAudio()

    
    stream = p.open(format=p.get_format_from_width(wf.getsampwidth()),
                    channels=wf.getnchannels(),
                    rate=wf.getframerate(),
                    output=True)

    
    while len(data := wf.readframes(CHUNK)): 
        stream.write(data)

    
    stream.close()

    p.terminate()
  • Pyaudio kann Audio abspielen, aber keine Audio-Dateien lesen. Importieren Sie hierfür zunächst das in Python integrierte wave Modul. Mit diesem Modul kann Python WAV-Dateien einlesen und erstellen. Importieren Sie dann Pyaudio.
  • Legen Sie die Größe der CHUNK Variable fest. Die Chunk-Größe ist dafür verantwortlich, wie viele Daten von der Datei in den Speicher gelesen werden. Ist sie höher, kann das die Prozessorleistung verringern, aber die Verzögerung erhöhen. Ist sie niedriger, wird der Prozessor mehr belastet, aber die Verzögerung kann verringert werden. Das ist vor allem wichtig, falls Sie die Audio-Quelle in Echtzeit bearbeiten wollen. Wenn, wie in diesem Fall, nur eine WAV-Datei abgespielt werden soll, ist die Verzögerung nicht so wichtig.
  • Schreiben Sie nun ins Programm, wo Pyaudio die Datei finden kann. Die Variable filename soll den Dateipfad enthalten. In diesem Fall öffnet sich ein Fenster in das, bei Start des Programms, der Dateipfad eingegeben werden kann.

Das wave Modul

  • Nutzen Sie nun das wave Modul, welches die Datei als Binärdatei öffnet und ihr die Variable wf zuschreibt. Instantiieren Sie danach die Pyaudio Bibliothek und schreiben Sie ihr die Variable p zu. Pyaudio kann sich im Folgenden mit der Audio-Hardware verbinden.
  • Öffnen Sie im Anschluss den Audio-Datenstrom. Die Funktionen in diesem Abschnitt lesen die Spezifikationen der Datei. Die Bit-Tiefe, Anzahl der Kanäle (also zum Beispiel der Unterschied zwischen Mono und Stereo) und die Samplerate sind wichtige Parameter, um die Datei möglichst originalgetreu wiederzugeben. Mit der Anweisung output=True spezifizieren Sie, dass der Datenstrom zum Abspielen gedacht ist.
  • Im nächsten Abschnitt kommt die CHUNK Variable wieder ins Spiel. Starten Sie einen while loop, der so lange Stücke der Audio-Datei in den Datenstrom schreibt, bis das Ende der Datei erreicht ist. Schließen Sie im Anschluss mit stream.close()den Datenstrom und beenden Sie mit p.terminate() das Programm.

IPython

Wenn Sie Jupyter benutzen, ist IPython womöglich der schnellste Weg, um Audio abspielen zu können. Aber Vorsicht: IPython ist kein reines Python-Modul. Es verwendet die Möglichkeiten von Jupyter, Inhalte über HTML zu rendern und regelt den Audio-Datenfluss über den Browser. Das ist ideal für Musik- und andere Wissenschaflter’innen, erlaubt aber auch nicht die Genauigkeit und Anpassungsfähigkeit von Pyaudio oder anderen Bibliotheken.

from IPython.display import Audio

filename = input("WAV-Datei: ")

display(Audio(filename))

Importieren Sie zunächst die Audio-Klasse des Ipython.display Moduls. Ordnen Sie dann der Variable für den Dateipfad filename eine Benutzereingabe zu. Nutzen Sie im Anschluss display(Audio(filename)), um dem Display die Datei und das Medium (also in diesem Fall Audio) zuzuweisen. Starten Sie dann das Programm und geben Sie in das Textfeld den Dateinamen ein. Sie erhalten nun eine Oberfläche, mit der die Datei abgespielt werden kann.

Python Sound abspielen — Sounddevice

Die Sounddevice Bibliothek basiert, wie Pyaudio, auf der PortAudio Bibliothek für C und C++. Mit Sounddevice können Sie mit sehr wenigen Eingaben eine Datei als Audio abspielen. Für mehr Kontrolle bietet die Bibliothek aber auch die Möglichkeit, den Audio-Datenstrom direkt zu bestimmen, ähnlich wie Pyaudio.

import sounddevice as sd
from scipy.io import wavfile

filename = input("WAV-Datei: ")

sd.play(*wavfile.read(filename))
sd.wait()
  • Der einfachste Weg um mit Sounddevice eine WAV-Datei abzuspielen ist mithilfe des Scipy-Moduls wavfile. Dieses ermöglicht es die nötigen Informationen über die Datei direkt an Sounddevice weiterzugeben.
  • Importieren Sie dafür zunächst Sounddevice und das wavfile Modul von Scipy. Fragen Sie im Anschluss nach der Benutzereingabe des Dateinamen mit filename = input("WAV-Datei: ").
  • Mit der Funktion sd.play(*wavfile.read(filename)) können Sie dann Sounddevice den Auftrag zum Abspielen geben. Innerhalb der Klammer passiert folgendes: wavfile.read() liest die Datei filenameein. Die Funktion liefert ein Tupel mit der Samplerate und den Audiodaten. Durch den Operator * werden diese Daten direkt der sd.play() Funktion zugespielt.
  • Mit sd.wait() können Sie sichergehen, dass sich das Programm erst schließt, wenn die Datei fertig abgespielt ist.

Pygame

Wie der Name schon sagt, ist die Pygame Bibliothek eigentlich zum Spiele-Programmieren gedacht. Mit dem pygame.mixer Modul ist sie auch geeignet, um Audio abzuspielen.

import time
import pygame

pygame.mixer.init()

filename = input("WAV-Datei: ")

pygame.mixer.music.load(filename)

pygame.mixer.music.play()

while pygame.mixer.music.get_busy():  
    time.sleep(1)

Importieren Sie zunächst Pygame und das (bereits in Python enthaltene) time Modul. Initialisieren Sie Pygame im Anschluss mit pygame.mixer.init(). Das Argument filename = input("WAV-Datei: ") ist für den Dateinamen gedacht. Laden Sie dann mittels pygame.mixer.music.load(filename) die WAV-Datei und spielen sie mit pygame.mixer.music.play() ab. In einem Jupyter Notebook schaltet sich das Programm ab, wenn der Code einmal durchgelaufen ist. Wenn im Hintergrund dann noch ein Audio-Datenstrom offen ist, wird dieser mit beendet. Fügen Sie um das zu verhindern eine while Schleife ein, die überprüft ob die Datei noch abgespielt wird und das Schließen des Programms in der Zeit verhindert.

Python Sound abspielen — Playsound

Das playsound Modul enthält eine gleichnamige Funktion, die Audio abspielen kann. Vieles, was bei den anderen Bibliotheken explizit eingegeben werden muss, macht playsoundautomatisch.  Allerdings fehlt Genauigkeit. Es gibt keine eingebaute Funktion um das Abspielen zu pausieren oder andere Dinge mit dem Datenstrom zu machen. Genau so kann playsound nicht mehrere Kanäle zur gleichen Zeit offen haben. Das ist praktisch, wenn Sie einen kurzen Audio-Clip abspielen und nicht direkt einen ganzen Codeblock schreiben wollen. Um mit playsound eine WAV-Datei abzuspielen, braucht es drei Dinge:

from playsound import playsound 

filename = input("WAV-Datei: ")

playsound(filename)
  • Importieren Sie zunächst playsound.
  • Geben Sie im Anschluss mit filename = input("WAV-Datei: ") die Möglichkeit den Dateinamen einzugeben.
  • Rufen Sie dann die playsound Funktion auf. Setzen Sie als Argument die filename Variable.

Wie Sie sehen gibt es viele verschiedene Wege eine WAV-Datei mit Python abzuspielen. Je nach Anwendungsbereich können manche davon praktischer sein als andere. Wenn Sie mit dem abgespielten Sound Daten transportieren, wird das „Audifikation“ genannt. Mehr über Audifikation und Sonifikation erfahren Sie in einem weiteren Artikel.