<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Matthis Nachtmann, Autor bei SystMus</title>
	<atom:link href="https://systmus.blogs.uni-hamburg.de/author/matthias-nachtmann/feed/" rel="self" type="application/rss+xml" />
	<link>https://systmus.blogs.uni-hamburg.de</link>
	<description>Online-Magazin des Instituts für Systematische Musikwissenschaft</description>
	<lastBuildDate>Fri, 09 Jan 2026 21:03:14 +0000</lastBuildDate>
	<language>de</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://systmus.blogs.uni-hamburg.de/wp-content/uploads/2019/04/logoImg-150x150.jpg</url>
	<title>Matthis Nachtmann, Autor bei SystMus</title>
	<link>https://systmus.blogs.uni-hamburg.de</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Python Audio — Datei erhalten</title>
		<link>https://systmus.blogs.uni-hamburg.de/python-audio-datei-erhalten/</link>
		
		<dc:creator><![CDATA[Matthis Nachtmann]]></dc:creator>
		<pubDate>Wed, 21 Jan 2026 07:00:37 +0000</pubDate>
				<category><![CDATA[Tutorials: Musikwissenschaft]]></category>
		<category><![CDATA[Akustik]]></category>
		<category><![CDATA[audio]]></category>
		<category><![CDATA[musikpsychologie]]></category>
		<category><![CDATA[signalverarbeitung]]></category>
		<category><![CDATA[sound-design]]></category>
		<guid isPermaLink="false">https://systmus.blogs.uni-hamburg.de/?p=5969</guid>

					<description><![CDATA[<p>Das Speichern und Abspielen von Arrays als Audiodateien in Python kann für Musikwissenschaftler&#8217;innen äußerst wertvoll sein. Neben der Sound-Synthese spielt auch die Weiterverarbeitung in anderen Programmen eine wichtige Rolle in der Forschung. Auch als Sound-Designer ist der Blick über den... <a class="more-link" href="https://systmus.blogs.uni-hamburg.de/python-audio-datei-erhalten/">Weiterlesen &#8594;</a></p>
<p>Der Beitrag <a href="https://systmus.blogs.uni-hamburg.de/python-audio-datei-erhalten/">Python Audio — Datei erhalten</a> erschien zuerst auf <a href="https://systmus.blogs.uni-hamburg.de">SystMus</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Das Speichern und Abspielen von Arrays als Audiodateien in Python kann für Musikwissenschaftler&#8217;innen äußerst wertvoll sein. Neben der Sound-Synthese spielt auch die Weiterverarbeitung in anderen Programmen eine wichtige Rolle in der Forschung. Auch als Sound-Designer ist der Blick über den Tellerrand der klassischen Programme eine gute Übung für die Kreativität. Lernen Sie hier, wie Sie Ihre Kreationen oder Forschungsprojekte als WAV-Datei speichern können.</p>
<h2 id="was-ist-eine-wav-datei">Was ist eine WAV-Datei</h2>
<p>Die WAV-Datei, auch Wave oder Wave-Datei genannt, ist ein Audio-Dateiformat, welche bis zu 4 GB groß sein kann. Während MP3-Dateien verlustbehaftet komprimiert sind, kann ein WAV.Kontainer unkomprimierte PCM-Rohdaten enthalten.</p>
<div id="attachment_7131" style="width: 310px" class="wp-caption aligncenter"><img fetchpriority="high" decoding="async" aria-describedby="caption-attachment-7131" class="size-medium wp-image-7131" src="https://systmus.blogs.uni-hamburg.de/wp-content/uploads/2025/02/wave-1951973_1280-300x169.jpg" alt="Drei übereinander geschichtete Wellen. Auf englisch „waves“. Sie können mit Python Audio Dateien im WAV-Format erstellen." width="300" height="169" srcset="https://systmus.blogs.uni-hamburg.de/wp-content/uploads/2025/02/wave-1951973_1280-300x169.jpg 300w, https://systmus.blogs.uni-hamburg.de/wp-content/uploads/2025/02/wave-1951973_1280-1024x577.jpg 1024w, https://systmus.blogs.uni-hamburg.de/wp-content/uploads/2025/02/wave-1951973_1280-768x432.jpg 768w, https://systmus.blogs.uni-hamburg.de/wp-content/uploads/2025/02/wave-1951973_1280-945x532.jpg 945w, https://systmus.blogs.uni-hamburg.de/wp-content/uploads/2025/02/wave-1951973_1280-600x338.jpg 600w, https://systmus.blogs.uni-hamburg.de/wp-content/uploads/2025/02/wave-1951973_1280.jpg 1188w" sizes="(max-width: 300px) 100vw, 300px" /><p id="caption-attachment-7131" class="wp-caption-text">Der Name der WAV-Datei ist vom englischen Begriff „wave“ abgeleitet und bedeutet „Welle“. Sie können mit Python Audio Dateien im WAV-Format erstellen. Quelle: <a href="https://pixabay.com" target="_blank" rel="noopener">Pixabay</a></p></div>
<h2>Python Audio Datei erhalten (3 Methoden)</h2>
<p>Drei der praktischsten Methoden um aus einem Array eine WAV-Datei zu erstellen sind:</p>
<ul>
<li><strong>Scipy</strong> ist für den wissenschaftlichen Gebrauch konzipiert. Die Bibliothek glänzt durch ihre Einfachheit und Genauigkeit.</li>
<li>Das <code class="language-python">wave</code>Modul ist bereits in Python enthalten und benötigt keine zusätzlichen Bibliotheken.</li>
<li><strong>Soundfile </strong>ist ebenfalls schnell, einfach und vielseitig.</li>
</ul>
<h2>Python Audio — Sinus erstellen</h2>
<p>Um eine WAV-Datei zu erhalten, benötigen Sie zunächst ein NumPy-Array. In diesem sind mehrdimensional Daten gespeichert. Die Daten in einem Array lassen sich als Graph darstellen oder als Audio abspielen. Ein Ton kann entstehen, wenn die Daten sich in gleichmäßigen Abständen wiederholen. Das nennt man Periodizität. Nicht-periodische Daten können auch als Audio abgespielt werden, klingen für das menschliche Ohr allerdings wie Rauschen.</p>
<pre><code class="language-python">import numpy as np 

samplerate = 44100

def signal(f=440, s=1, A=1, fileformat=np.int16):
    t = np.linspace(0, s, int(s*samplerate), endpoint=False) 
    amplitude = (np.iinfo(fileformat).max)*A
    sine = amplitude * np.sin(2*np.pi*f*t)
    return sine.astype(fileformat)
</code></pre>
<p>Dieser Quelltext definiert die Funktion <code>signal()</code>. Diese können Sie mit beliebigen Werten aufrufen. Die Funktion gibt ein Array mit den Werten eines Sinus zurück. Die wichtigsten Werte sind:</p>
<ul>
<li><code>f</code> die Frequenz und somit Tonhöhe des Sinus.</li>
<li><code>s</code> die Länge des Sinus in Sekunden.</li>
<li><code>A</code> die Amplitude, sie beeinflusst wie die Lautstärke des Signals vom Computer gelesen wird. <code>A=1</code> ist in diesem Fall der höchstmögliche Wert des Dateiformates und <code>A=0</code> wäre Stille.</li>
<li><code>fileformat</code> die Art der Enkodierung beziehungsweise die Bit-Tiefe. Geben Sie hier <code>np.int16</code> für 16-Bit PCM, <code>np.int32</code> für 32-Bit PCM oder <code>np.uint8</code> für unsignierte 8-Bit PCM Enkodierung an.</li>
</ul>
<p>In einem eigenen Artikel erklären wir ausführlich, wie Sie in <a href="https://systmus.blogs.uni-hamburg.de/python-sinus-sinuskurve-plotten-mit-numpy-und-matplotlib/" target="_blank" rel="noopener">Python einen Sinus plotten und abspielen</a>.</p>
<h2 id="python-audio--datei-erhalten-mit-scipy">Python Audio — Datei erhalten mit SciSciPy</h2>
<p>SciPy ist eine Python Bibliothek. Sie ist für die Anwendung im wissenschaftlichen Bereich gedacht und hat viele nützliche Funktionen. Eine davon ist die <code>write</code> Funktion aus dem Modul <code>scipy.io.wavfile()</code>. Mit diesem Modul können Sie Eingangsdaten erstellen und Ausgangsdaten auslesen.</p>
<pre><code class="language-python">from scipy.io.wavfile import write
sine=signal(f=440, s=1, A=0.5, fileformat=np.int16)
write('python_audio.wav', samplerate, sine.astype(np.int16))
</code></pre>
<p>Importieren Sie zunächst das Modul mit <code>from scipy.io.wavfile import write</code>.<br />
Rufen Sie dann <code>sine=signal(f=440, s=1, A=0.5)</code> mit den gewünschten Werten auf. Geben Sie im Anschluss einen Namen für die Datei ein. Beachten Sie, den Namen in Anführungszeichen zu setzen und mit <code>.wav</code> zu beenden. Fügen Sie die Variable für die <code>samplerate</code> hinzu und geben Sie mit <code>sine.astype(np.int16)</code> die Enkodierungsform an — in diesem Fall 16-bit PCM.<br />
Die Funktion sollte dann eine Datei mit dem gewählten Namen im gleichen Ordner abspeichern, in dem das Programm gelaufen ist.</p>
<h2 id="python-audio--wave-modul">Python Audio — <code class="language-python">wave</code>Modul</h2>
<p>Sollten Sie keine Lust haben weitere Bibliotheken zu installieren ist hier ein weiterer Weg in Python eine Audio-Datei zu erhalten: Das in Python eingebaute <code>wave</code>-Modul.</p>
<pre><code class="language-python">import wave 

sine=signal(f=440, s=1, A=0.5, fileformat=np.int16)

filename = 'python_audio.wav' 

with wave.open(filename, 'wb') as wf:
    wf.setnchannels(1)  
    wf.setsampwidth(2) 
    wf.setframerate(samplerate)
    wf.writeframes(sine.tobytes())
</code></pre>
<p>Importieren Sie zuerst das <code>wave</code> Modul. Legen Sie im Anschluss den Namen der Datei in der Variable <code>filename</code> fest.<br />
Nutzen Sie die <code>wave.open()</code> Funktion:</p>
<ul>
<li>Um mit <code>wf.setnchannels(1)</code> die Menge der Ausgangs-Kanäle festzulegen. Wenn Sie einen einzelnen Kanal einstellen, wie in diesem Fall, wird die Datei in Mono gespeichert.</li>
<li>Legen Sie mit <code>wf.setsampwidth(2)</code> die Bit-Tiefe fest. Ein Wert von <code>2</code> bedeutet eine Bit-Tiefe von 16, <code>4</code> wären 32 Bit. Da das Sinus-Array auch mit 16-Bit gespeichert wurde, bietet sich 16 Bit hier an.</li>
<li>Bei <code>wf.setframerate()</code> reicht es, wenn Sie die vorher festgelegte <code>samplerate</code> Variable angeben.</li>
<li>Schreiben Sie dann mit <code>wf.writeframes(sine.tobytes())</code> das Sinus-Array auf eine WAV-Datei.</li>
</ul>
<h2 id="python-audio--das-soundfile-modul">Python Audio — Das Soundfile Modul</h2>
<p>Die <code>write</code> Funktion des Soundfile Moduls eignet sich ebenfalls, um in Python Audio-Dateien zu erhalten.</p>
<pre><code class="language-python">import soundfile as sf

sine=signal(f=440, s=1, A=0.5, fileformat=np.int16)

filename = 'python_audio.wav'
sf.write(filename, sine, samplerate)
</code></pre>
<p>Installieren Sie dafür zuerst das Modul. Importieren Sie es dann mit <code>import soundfile as sf</code>. Legen Sie den Dateinamen fest und speichern Sie ihn in der Variable <code>filename</code>.<br />
Schreiben Sie nun mit <code>sf.write()</code> unter Angabe der<code>samplerate</code> das Sinus-Array als WAV-Datei. Das Modul übernimmt die Enkodierung von 16 Bit PCM aus dem Array. Diese haben Sie beim Aufrufen der Funktion <code>signal()</code> festgelegt.</p>
<p>Wie Sie sehen gibt es viele verschiedene Wege eine WAV-Datei in Python zu erzeugen. Je nach Anwendungsbereich können manche davon praktischer sein als andere. In einem weiteren Artikel zeigen wir Ihnen, wie Sie <a href="https://systmus.blogs.uni-hamburg.de/python-sound-abspielen-so-gehts/">in Python Audio abspielen</a>.</p>
<p>Der Beitrag <a href="https://systmus.blogs.uni-hamburg.de/python-audio-datei-erhalten/">Python Audio — Datei erhalten</a> erschien zuerst auf <a href="https://systmus.blogs.uni-hamburg.de">SystMus</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Python Sound abspielen — so gehts</title>
		<link>https://systmus.blogs.uni-hamburg.de/python-sound-abspielen-so-gehts/</link>
		
		<dc:creator><![CDATA[Matthis Nachtmann]]></dc:creator>
		<pubDate>Sat, 17 Jan 2026 07:00:48 +0000</pubDate>
				<category><![CDATA[Tutorials: Musikwissenschaft]]></category>
		<category><![CDATA[audio]]></category>
		<category><![CDATA[audio-programmierung]]></category>
		<category><![CDATA[python]]></category>
		<guid isPermaLink="false">https://systmus.blogs.uni-hamburg.de/?p=1094</guid>

					<description><![CDATA[<p>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... <a class="more-link" href="https://systmus.blogs.uni-hamburg.de/python-sound-abspielen-so-gehts/">Weiterlesen &#8594;</a></p>
<p>Der Beitrag <a href="https://systmus.blogs.uni-hamburg.de/python-sound-abspielen-so-gehts/">Python Sound abspielen — so gehts</a> erschien zuerst auf <a href="https://systmus.blogs.uni-hamburg.de">SystMus</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>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.</p>
<h1>Die Python-Bibliotheken</h1>
<p>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:</p>
<div id="attachment_7134" style="width: 310px" class="wp-caption aligncenter"><img decoding="async" aria-describedby="caption-attachment-7134" class="wp-image-7134 size-medium" src="https://systmus.blogs.uni-hamburg.de/wp-content/uploads/2025/02/python-8665904_1280-300x169.jpg" alt="Eine gelbe und eine Blaue Schlange bilden das Logo. Python zum Sound abspielen verwenden können Sie seit 1997." width="300" height="169" srcset="https://systmus.blogs.uni-hamburg.de/wp-content/uploads/2025/02/python-8665904_1280-300x169.jpg 300w, https://systmus.blogs.uni-hamburg.de/wp-content/uploads/2025/02/python-8665904_1280-1024x577.jpg 1024w, https://systmus.blogs.uni-hamburg.de/wp-content/uploads/2025/02/python-8665904_1280-768x433.jpg 768w, https://systmus.blogs.uni-hamburg.de/wp-content/uploads/2025/02/python-8665904_1280-1536x865.jpg 1536w, https://systmus.blogs.uni-hamburg.de/wp-content/uploads/2025/02/python-8665904_1280-2048x1154.jpg 2048w, https://systmus.blogs.uni-hamburg.de/wp-content/uploads/2025/02/python-8665904_1280-945x532.jpg 945w, https://systmus.blogs.uni-hamburg.de/wp-content/uploads/2025/02/python-8665904_1280-600x338.jpg 600w" sizes="(max-width: 300px) 100vw, 300px" /><p id="caption-attachment-7134" class="wp-caption-text">So sieht das Logo der Programmiersprache aus. Mit Python Sound abspielen ist jetzt womöglich einfacher denn je. Quelle: <a href="https://pixabay.com" target="_blank" rel="noopener">Pixabay</a></p></div>
<h2 id="python-sound-abspielen--pyaudio">Pyaudio</h2>
<p><a href="https://people.csail.mit.edu/hubert/pyaudio/" target="_blank" rel="noopener">Pyaudio</a> 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.</p>
<pre><code class="language-python">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()
</code></pre>
<ul>
<li>Pyaudio kann Audio abspielen, aber keine Audio-Dateien lesen. Importieren Sie hierfür zunächst das in Python integrierte <code>wave</code> Modul. Mit diesem Modul kann Python WAV-Dateien einlesen und erstellen. Importieren Sie dann Pyaudio.</li>
<li>Legen Sie die Größe der <code>CHUNK</code> Variable fest. Die <em>Chunk-Größe</em> 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.</li>
<li>Schreiben Sie nun ins Programm, wo Pyaudio die Datei finden kann. Die Variable <code>filename</code> soll den Dateipfad enthalten. In diesem Fall öffnet sich ein Fenster in das, bei Start des Programms, der Dateipfad eingegeben werden kann.</li>
</ul>
<h3>Das <code>wave</code> Modul</h3>
<ul>
<li>Nutzen Sie nun das <code>wave</code> Modul, welches die Datei als Binärdatei öffnet und ihr die Variable <code>wf</code> zuschreibt. Instantiieren Sie danach die Pyaudio Bibliothek und schreiben Sie ihr die Variable <code>p</code> zu. Pyaudio kann sich im Folgenden mit der Audio-Hardware verbinden.</li>
<li>Ö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 <code>output=True</code> spezifizieren Sie, dass der Datenstrom zum Abspielen gedacht ist.</li>
<li>Im nächsten Abschnitt kommt die <code>CHUNK</code> Variable wieder ins Spiel. Starten Sie einen <code>while</code> 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 <code class="language-python">stream.close()</code>den Datenstrom und beenden Sie mit <code class="language-python">p.terminate()</code> das Programm.</li>
</ul>
<h2 id="python-sound-abspielen--ipython">IPython</h2>
<p>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&#8217;innen, erlaubt aber auch nicht die Genauigkeit und Anpassungsfähigkeit von Pyaudio oder anderen Bibliotheken.</p>
<pre><code class="language-python">from IPython.display import Audio

filename = input("WAV-Datei: ")

display(Audio(filename))
</code></pre>
<p>Importieren Sie zunächst die <code>Audio</code>-Klasse des <code>Ipython.display</code> Moduls. Ordnen Sie dann der Variable für den Dateipfad <code>filename</code> eine Benutzereingabe zu. Nutzen Sie im Anschluss <code class="language-python">display(Audio(filename))</code>, 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.</p>
<h2 id="python-sound-abspielen--sounddevice">Python Sound abspielen — Sounddevice</h2>
<p>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.</p>
<pre><code class="language-python">import sounddevice as sd
from scipy.io import wavfile

filename = input("WAV-Datei: ")

sd.play(*wavfile.read(filename))
sd.wait()
</code></pre>
<ul>
<li>Der einfachste Weg um mit Sounddevice eine WAV-Datei abzuspielen ist mithilfe des Scipy-Moduls <code>wavfile</code>. Dieses ermöglicht es die nötigen Informationen über die Datei direkt an Sounddevice weiterzugeben.</li>
<li>Importieren Sie dafür zunächst Sounddevice und das <code>wavfile</code> Modul von Scipy. Fragen Sie im Anschluss nach der Benutzereingabe des Dateinamen mit <code>filename = input("WAV-Datei: ")</code>.</li>
<li>Mit der Funktion <code>sd.play(*wavfile.read(filename))</code> können Sie dann Sounddevice den Auftrag zum Abspielen geben. Innerhalb der Klammer passiert folgendes: <code>wavfile.read()</code> liest die Datei <code>filename</code>ein. Die Funktion liefert ein Tupel mit der Samplerate und den Audiodaten. Durch den Operator <code>*</code> werden diese Daten direkt der <code>sd.play()</code> Funktion zugespielt.</li>
<li>Mit <code>sd.wait()</code> können Sie sichergehen, dass sich das Programm erst schließt, wenn die Datei fertig abgespielt ist.</li>
</ul>
<h2 id="python-sound-abspielen--pygame">Pygame</h2>
<p>Wie der Name schon sagt, ist die Pygame Bibliothek eigentlich zum Spiele-Programmieren gedacht. Mit dem <code>pygame.mixer</code> Modul ist sie auch geeignet, um Audio abzuspielen.</p>
<pre><code class="language-python">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)
</code></pre>
<p>Importieren Sie zunächst Pygame und das (bereits in Python enthaltene) <code>time</code> Modul. Initialisieren Sie Pygame im Anschluss mit <code>pygame.mixer.init()</code>. Das Argument <code>filename = input("WAV-Datei: ")</code> ist für den Dateinamen gedacht. Laden Sie dann mittels <code>pygame.mixer.music.load(filename)</code> die WAV-Datei und spielen sie mit <code>pygame.mixer.music.play()</code> 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 <code>while</code> Schleife ein, die überprüft ob die Datei noch abgespielt wird und das Schließen des Programms in der Zeit verhindert.</p>
<h2>Python Sound abspielen — Playsound</h2>
<p>Das <code>playsound</code> Modul enthält eine gleichnamige Funktion, die Audio abspielen kann. Vieles, was bei den anderen Bibliotheken explizit eingegeben werden muss, macht <code>playsound</code>automatisch.  Allerdings fehlt Genauigkeit. Es gibt keine eingebaute Funktion um das Abspielen zu pausieren oder andere Dinge mit dem Datenstrom zu machen. Genau so kann <code>playsound</code> 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 <code>playsound</code> eine WAV-Datei abzuspielen, braucht es drei Dinge:</p>
<pre><code class="language-python">from playsound import playsound 

filename = input("WAV-Datei: ")

playsound(filename)
</code></pre>
<ul>
<li>Importieren Sie zunächst <code>playsound</code>.</li>
<li>Geben Sie im Anschluss mit <code>filename = input("WAV-Datei: ")</code> die Möglichkeit den Dateinamen einzugeben.</li>
<li>Rufen Sie dann die <code>playsound</code> Funktion auf. Setzen Sie als Argument die <code class="language-python">filename</code> Variable.</li>
</ul>
<p>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 <a href="https://systmus.blogs.uni-hamburg.de/sonifikation-daten-hoerend-verstehen/">Audifikation und Sonifikation</a> erfahren Sie in einem weiteren Artikel.</p>
<p>Der Beitrag <a href="https://systmus.blogs.uni-hamburg.de/python-sound-abspielen-so-gehts/">Python Sound abspielen — so gehts</a> erschien zuerst auf <a href="https://systmus.blogs.uni-hamburg.de">SystMus</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Python Sinus – Sinuskurve plotten mit NumPy und Matplotlib</title>
		<link>https://systmus.blogs.uni-hamburg.de/python-sinus-sinuskurve-plotten-mit-numpy-und-matplotlib/</link>
		
		<dc:creator><![CDATA[Matthis Nachtmann]]></dc:creator>
		<pubDate>Mon, 24 Mar 2025 07:00:36 +0000</pubDate>
				<category><![CDATA[Tutorials: Musikwissenschaft]]></category>
		<category><![CDATA[audio]]></category>
		<category><![CDATA[signalverarbeitung]]></category>
		<category><![CDATA[sound-design]]></category>
		<guid isPermaLink="false">https://systmus.blogs.uni-hamburg.de/?p=3934</guid>

					<description><![CDATA[<p>In Python einen Sinus erstellen, plotten und abspielen können ist in den Musikwissenschaften und der Signalverarbeitung sehr hilfreich. Die Sinusfunktion ist eine mathematische Funktion, die sich mit einer gleichbleibenden Frequenz und Amplitude bis ins unendliche wiederholen kann. Hier erklären wir,... <a class="more-link" href="https://systmus.blogs.uni-hamburg.de/python-sinus-sinuskurve-plotten-mit-numpy-und-matplotlib/">Weiterlesen &#8594;</a></p>
<p>Der Beitrag <a href="https://systmus.blogs.uni-hamburg.de/python-sinus-sinuskurve-plotten-mit-numpy-und-matplotlib/">Python Sinus – Sinuskurve plotten mit NumPy und Matplotlib</a> erschien zuerst auf <a href="https://systmus.blogs.uni-hamburg.de">SystMus</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">In Python einen Sinus erstellen, plotten und abspielen können ist in den Musikwissenschaften und der Signalverarbeitung sehr hilfreich. Die Sinusfunktion ist eine mathematische Funktion, die sich mit einer gleichbleibenden Frequenz und Amplitude bis ins unendliche wiederholen kann. Hier erklären wir, wie Sie möglichst einfach mit Python einen Sinus plotten und abspielen können.</p>



<h2 class="wp-block-heading">Python, NumPy und Matplotlib</h2>



<p class="wp-block-paragraph">Um in Python eine Sinus-Kurve zu definieren, zu plotten und anhören zu können brauchen Sie die folgenden Dinge:</p>



<ol class="wp-block-list">
<li>Die Programmiersprache <em>Python</em>. Sie glänzt durch ihre Vielseitigkeit und ihre große Auswahl an Bibliotheken. Die <a href="https://systmus.blogs.uni-hamburg.de/musik-studieren-systematische-musikwissenschaft/" target="_blank" rel="noopener">Systematische Musikwissenschaft</a> verwendet Python zur Datenanalyse, als Basis für „Machine Learning“ oder zum Lösen von komplexen Rechenaufgaben.</li>



<li>Die Python-Bibliothek <a href="https://numpy.org/" target="_blank" rel="noopener">NumPy</a> dient als Grundlage für Berechnungen. Sie bietet eine Vielzahl an mathematischen Operationen, die in Python nicht enthalten sind. Ein gängiges Kürzel für numpy ist <code>np</code>.</li>



<li><a href="https://matplotlib.org/" target="_blank" rel="noopener">Matplotlib</a> ist ebenfalls eine Python-Bibliothek und dient zum Darstellen von Grafiken und Diagrammen. Die Dimensionen und Seitenverhältnisse der Darstellung sind in Matplotlib sehr leicht anzupassen. Wir verwenden das Matplotlib-Modul <code>pyplot</code>, im Folgenden abgekürzt als <code>plt</code>.</li>



<li><a href="https://ipython.org" target="_blank" rel="noopener">IPython</a> ist ein Interaktives Command-Line Interface und Teil der Entwicklungsumbgebung Jupyter. Es wird oft in der Datenanalyse verwendet und kann Audio abspielen.</li>
</ol>
<div id="attachment_7499" style="width: 310px" class="wp-caption aligncenter"><a href="https://systmus.blogs.uni-hamburg.de/wp-content/uploads/2025/03/Python-Sinus-Matplotlib-Graph.jpg"><img decoding="async" aria-describedby="caption-attachment-7499" class="wp-image-7499 size-medium" src="https://systmus.blogs.uni-hamburg.de/wp-content/uploads/2025/03/Python-Sinus-Matplotlib-Graph-300x169.jpg" alt="Ein Sinus in Python erstellt. Die Achsen sind beschriftet. " width="300" height="169" srcset="https://systmus.blogs.uni-hamburg.de/wp-content/uploads/2025/03/Python-Sinus-Matplotlib-Graph-300x169.jpg 300w, https://systmus.blogs.uni-hamburg.de/wp-content/uploads/2025/03/Python-Sinus-Matplotlib-Graph-768x432.jpg 768w, https://systmus.blogs.uni-hamburg.de/wp-content/uploads/2025/03/Python-Sinus-Matplotlib-Graph-945x532.jpg 945w, https://systmus.blogs.uni-hamburg.de/wp-content/uploads/2025/03/Python-Sinus-Matplotlib-Graph-600x338.jpg 600w, https://systmus.blogs.uni-hamburg.de/wp-content/uploads/2025/03/Python-Sinus-Matplotlib-Graph.jpg 960w" sizes="(max-width: 300px) 100vw, 300px" /></a><p id="caption-attachment-7499" class="wp-caption-text">Ein Python Sinus bei 440 Hz. Quelle: Matthis Nachtmann</p></div>





<h2 class="wp-block-heading">Python Sinus — Funktion definieren</h2>



<pre class="wp-block-code has-black-color has-white-background-color has-text-color has-background has-link-color has-regular-font-size wp-elements-7085d86f4edbdf8860742bedc8b04dbd"><code>import numpy as np 
import matplotlib.pyplot as plt 
from IPython.display import Audio 

samplerate = 44100 

def signal(f = 440, s = 1, A = 1, phi = 1, cycles = 1):</code></pre>



<p class="wp-block-paragraph">Um den Python Sinus zu definieren  öffnen Sie zunächst Python in der Entwicklungsumgebung <a href="https://jupyter.org/" target="_blank" rel="noopener">Jupyter Lab</a>. Natürlich können Sie auch andere Umgebungen verwenden.  Stellen Sie sicher, dass Numpy und Matplotlib installiert sind. IPython ist bei Jupyter Lab bereits enthalten. Importieren Sie nun Numpy, Matplotlib und IPython. Legen Sie die <code>samplerate</code> fest und definieren Sie dann eine Funktion mittels <code>def signal</code>. Die Funktion kann später mit beliebigen Werten aufgerufen werden. Hier sind die ersten Zeilen zu sehen — den gesamten Quelltext finden Sie weiter unten.</p>



<h2 class="wp-block-heading">Python Sinus — Parameter</h2>



<p class="wp-block-paragraph">Die Funktion haben Sie nun definiert, aber wofür sind die einzelnen Variablen zuständig? Die wichtigsten Werte für den Python Sinus sind:</p>



<ul class="wp-block-list">
<li>Der Parameter <code>samplerate</code> beschreibt die gleichnamige <em>Samplerate</em>. Diese bestimmt, wie viele Punkte pro Sekunde berechnet werden. Das ist entscheidend für die Auflösung der Funktion. Standard CD-Qualität ist <em>44.100</em> Hz. Nach dem <a href="https://de.wikipedia.org/wiki/Nyquist-Shannon-Abtasttheorem">Nyquist-Theorem</a> liegt die höchste darstellbare Frequenz bei der Hälfte der <code>samplerate</code> , also in diesem Fall <em>22.050 </em>Hz. Im Graphen ist die <code>samplerate</code> relevant für die Auflösung der Funktion, also wie akkurat sie dargestellt wird.</li>



<li>Die <em>Frequenz</em> <code>f</code> bestimmt die Tonhöhe. Meistens wird die <em>Frequenz</em> in Hz (also Wiederholungen pro Sekunde) angegeben. Der für Menschen hörbare Bereich befindet sich etwa zwischen <em>20 </em>Hz und <em>20.000 </em>Hz.</li>



<li>Die <em>Zeit in Sekunden</em> <code>s</code>: Dieser Parameter beschreibt die Dauer der Funktion in Sekunden. Die Zeit bestimmt außerdem die absolute Länge der <em>x-Achse</em> unseres Graphen.</li>



<li>Die <em>Amplitude</em> <code>A</code> beschreibt die höchste Auslenkung des Sinus vom Nullpunkt und bestimmt die Lautstärke. Viele digitale Audio-Systeme erwarten einen Wert von null bis eins. Zum Anhören ist <code>A = 1</code> deshalb die höchste sinnvolle <em>Amplitude</em>. <code>A = 0</code> wäre Stille.</li>



<li>Die <em>Nullphase</em> <code>phi</code> gibt an, in welcher Phase die Funktion anfängt. Wenn wir beispielsweise <code>phi = 0.5</code> angeben, verschiebt sich der Anfang der Funktion um einen halben Zyklus.</li>



<li>Die angezeigten <em>Zyklen</em> <code>cycles</code>: Bei einer Frequenz von <em>440 </em>Hz durchläuft der Sinus in einer Sekunde 440 Zyklen. Um den Sinus aus der Nähe betrachten zu können, ohne die Gesamtlänge des Arrays zu reduzieren, gibt es den Parameter <code>cycles</code>. Wenn <code>cycles = 1</code> ist, wird genau ein <em>Zyklus</em> des Sinus angezeigt.</li>
</ul>



<h2 class="wp-block-heading">Python Sinus — Rechnungen</h2>



<p class="wp-block-paragraph">Die wichtigsten Parameter der Funktion für den Python Sinus sind nun geklärt. Fügen Sie nun in den nächsten Zeilen die nötigen Formeln hinzu:</p>



<pre class="wp-block-code has-black-color has-white-background-color has-text-color has-background has-link-color has-regular-font-size wp-elements-9e335e4839fa6637b123e976efb2eeef"><code>t = np.linspace(0, s, int(T*samplerate), endpoint=False)</code></pre>



<p class="wp-block-paragraph">Benutzen Sie <code>np.linspace</code>, um ein Array zu erzeugen. Diese NumPy-Funktion erzeugt Punkte mit gleichem Abstand zwischen dem <em>Startpunkt</em> <code>(0)</code> und dem<em> Endpunkt</em> <code>(s)</code>. Wie viele Punkte erzeugt werden, ist abhängig von der <code>samplerate</code>, welche Sie bereits am Anfang definiert haben. Nehmen Sie mit <code>endpoint=False</code> den <em>Endpunkt</em> heraus, damit er nicht selbst mitgezählt wird.</p>



<pre class="wp-block-code has-black-color has-white-background-color has-text-color has-background has-link-color has-regular-font-size wp-elements-40e1d592c5cd8f63d9b700782d723899"><code>sine = A * np.sin(2 * np.pi * f * t - 2 * np.pi * phi)</code></pre>



<p class="wp-block-paragraph">Hier kommen die Parameter von oben wieder ins Spiel. Die <em>Amplitude</em> <code>A</code> steht als Faktor vor dem Rest der Funktion. Verwenden Sie die NumPy-Funktion <code>np.sin</code>, um den Sinus zu erzeugen. Für <em>π</em> (pi) gibt es die Funktion <code>np.pi</code>. Die Variable <code>f</code> ist die <em>Frequenz</em>. Die Variable <code>t</code> repräsentiert das Array von der Zeile darüber. Alles hinter dem Minus ist für die <em>Phasenverschiebung</em> zuständig: Der Sinus verschiebt sich entlang der <em>x-Achse</em> um einen <em>Zyklus</em> nach rechts, wenn in der Klammer <code>2*np.pi</code> abgezogen wird. Dahinter steht der Faktor zur Phasenverschiebung <code>phi</code>, den Sie oben in der Funktion definiert haben.<br />Die Variable <code>sine</code> repräsentiert nun ein Numpy-Array in Form einer Sinusfunktion mit allen nötigen Parametern und kann als Graph dargestellt, abgespielt oder zu einer Audio-Datei umgewandelt werden.</p>



<h2 class="wp-block-heading">Den Graphen erstellen</h2>



<p class="wp-block-paragraph">Inzwischen haben Sie ein Array, welches alle nötigen Daten für den Python Sinus enthält. Um dieses Array in einen Graphen zu verwandeln benötigen Sie einige Funktionen von Matplotlib.</p>



<pre class="wp-block-code has-black-color has-white-background-color has-text-color has-background has-link-color has-regular-font-size wp-elements-7910713f9e3392f859665f2584a195f1"><code>
plt.figure(figsize=(10, 6))
    plt.plot(t, sine)
    plt.title(f'Signal:{f} Hz, Amplitude:{A}, Nullphase:{phi}')
    plt.xlabel('Zeit (s)')
    plt.ylabel('Amplitude')
    plt.grid()
    plt.xlim(0, 1/(f/cycles))
    plt.ylim(-A-0.5, A+0.5)
    plt.axhline(0, color='black', lw=0.5, ls='--')
    plt.show() 

    return sine
</code></pre>



<ul class="wp-block-list">
<li><code>plt.figure</code> ruft den Graphen auf. Verwenden Sie im Anschluss <code>figsize</code>, um die Größe des Graphen festzulegen.</li>



<li><code>plt.plot</code> legt die Achsen fest, in diesem Fall symbolisiert die <em>x-Achse</em> die Zeit. Auf den durch <code>t</code> festgelegten Punkten, also der <code>samplerate</code>, wird dann der Sinus abgebildet.</li>



<li><code>plt.title</code> bestimmt den Titel. Im Titel stehen alle Werte, die Sie beim Aufrufen der Funktion bestimmt haben.</li>



<li><code>plt.xlabel</code> und <code>plt.ylabel</code>: Legen Sie hiermit die jeweiligen Beschriftungen für die Achsen fest. Die <em>x-Achse</em> stellt die Zeit dar und die <em>y-Achse</em> die Auslenkung zum jeweiligen Zeitpunkt.</li>



<li><code>plt.grid</code> aktiviert die Hilfslinien. Damit lässt sich die Auslenkung besser ablesen.</li>



<li><code>plt.xlim</code> legt fest, wie viel vom Graph gezeigt wird. Mit der Rechnung <code>1/(f/cycles)</code> können Sie einfach beim Aufrufen der Funktion entscheiden, wie viele Zyklen gezeigt werden sollen. Aus diesem Grund haben Sie vorher in der Funktion <code>cycles</code> eingebaut.</li>



<li><code>plt.ylim(-A-0.5, A+0.5)</code>: Lassen Sie die Limitierung der <em>y-Achse</em> relativ zur <em>Amplitude</em> <code>A</code> anzeigen.</li>
</ul>



<p class="wp-block-paragraph">Der Befehl <code>plt.axhline</code> vereinfacht die Visualisierung und <code>plt.show</code> ist nötig um den erstellten Graphen anzuzeigen. In der nächsten Zeile symbolisiert <code>return sine</code> das Ende der Funktion <code>signal</code>. Diese können Sie danach mit selbst gewählten Parametern aufrufen.</p>



<h2 class="wp-block-heading">Den Python Sinus erstellen und als Audio abspielen</h2>



<figure class="wp-block-audio"><audio src="https://systmus.blogs.uni-hamburg.de/wp-content/uploads/2025/02/sine.wav" controls="controls"></audio>
<figcaption class="wp-element-caption">So könnte sich ihren Python-Sinus anhören.</figcaption>
</figure>



<pre class="wp-block-code has-black-color has-white-background-color has-text-color has-background has-link-color has-regular-font-size wp-elements-3f6b6f1547342e423a82693c813dac97"><code>sine = signal(f = 440, s = 1, A = 0.8, phi = 0, cycles = 2)

Audio(sine, rate = samplerate)
</code></pre>



<p class="wp-block-paragraph">Zuerst haben Sie die nötigen Bibliotheken importiert und den Teil der Funktion definiert, mit dem das Array bestimmt und erstellt werden kann. Danach haben Sie die Werte für den Graphen bestimmt, welcher am Ende den Sinus anzeigt. Zu guter Letzt rufen Sie in der vorletzten Zeile die erstellte Funktion mit den gewünschten Werten auf. Für diesen Schritt haben Sie am Anfang das <em>IPython-Modul</em> <code>display</code> importiert. Mit <code>Audio</code> rufen Sie dieses auf und geben im Anschluss die <code>sine</code> Variable und die <code>samplerate</code> an. Im Anschluss gibt Python dann einen Graphen und eine Schaltfläche zum Abspielen des Sinus aus. Das Abspielen einer Funktion als Sound nennt sich übrigens <a href="https://systmus.blogs.uni-hamburg.de/sonifikation-daten-hoerend-verstehen/" target="_blank" rel="noopener">Audifikation</a>.</p>



<h2 class="wp-block-heading">Der gesamte Quelltext</h2>



<p class="wp-block-paragraph">Wenn Sie alle hier beschriebenen Schritte befolgt haben könnte ihr Quelltext am Ende so aussehen:</p>



<pre class="wp-block-code has-black-color has-white-background-color has-text-color has-background has-link-color has-regular-font-size wp-elements-276f64214cf5ab02ead58394209a6156"><code>import numpy as np
import matplotlib.pyplot as plt
from IPython.display import Audio

samplerate = 44100

def signal(f = 440, s = 1, A = 1, phi = 1, cycles = 1):
    t = np.linspace(0, s, int(s*samplerate), endpoint=False)
    sine = A * np.sin(2 * np.pi * f * t - 2 * np.pi * phi)

    plt.figure(figsize=(10, 6))
    plt.plot(t, sine)
    plt.title(f'Signal: {f} Hz, Amplitude: {A}, Nullphase: {phi}')
    plt.xlabel('Zeit (s)')
    plt.ylabel('Amplitude')
    plt.grid()
    plt.xlim(0, 1/(f/cycles))
    plt.ylim(-A-0.5, A+0.5)
    plt.axhline(0, color = 'black', lw = 0.5, ls='--')
    plt.show() 

    return sine

sine = signal(f = 440, s = 1, A = 0.8, phi = 0, cycles = 2)

Audio(sine, rate=samplerate)</code></pre>



<p class="wp-block-paragraph">In weiteren Artikeln plotten wir einen <a href="https://systmus.blogs.uni-hamburg.de/matlab-sinus/" rel="noopener">Sinus in Matlab</a>. Außerdem erklären Ihnen, wie Sie mittels eines <a href="https://systmus.blogs.uni-hamburg.de/spektrogramm-erstellen-was-ist-es-und-wie-man-es-macht/">Spektrogramms</a> jede Zeitreihe in ihre Sinuskomponenten zerlegen können.</p>



<h2 class="wp-block-heading">Quellen</h2>



<p class="wp-block-paragraph">NumPy. (n.d.). *NumPy*. [Wissenschaftliche Bibliothek für Python]. <a href="https://numpy.org/doc/stable/" target="_blank" rel="noopener">https://numpy.org/doc/stable/</a></p>



<p class="wp-block-paragraph">Hunter, J. D. &#8222;Matplotlib: A 2D Graphics Environment&#8220;, Computing in Science; Engineering, vol. 9, no. 3, pp. 90-95, 2007. <a href="https://doi.org/10.1109/MCSE.2007.55" target="_blank" rel="noopener">https://doi.org/10.1109/MCSE.2007.55</a></p>



<p class="wp-block-paragraph">Fernando Pérez, Brian E. Granger, IPython: A System for Interactive Scientific Computing, Computing in Science and Engineering, vol. 9, no. 3, pp. 21-29, May/June 2007. <a href="https://ipython.org" target="_blank" rel="noopener">https://ipython.org</a></p>

<p><!-- /wp:post-content --></p>
<p><!-- wp:paragraph --></p>
<p><!-- /wp:paragraph --></p><p>Der Beitrag <a href="https://systmus.blogs.uni-hamburg.de/python-sinus-sinuskurve-plotten-mit-numpy-und-matplotlib/">Python Sinus – Sinuskurve plotten mit NumPy und Matplotlib</a> erschien zuerst auf <a href="https://systmus.blogs.uni-hamburg.de">SystMus</a>.</p>
]]></content:encoded>
					
		
		<enclosure url="https://systmus.blogs.uni-hamburg.de/wp-content/uploads/2025/02/sine.wav" length="308744" type="audio/wav" />

			</item>
	</channel>
</rss>
