EINFÜHRUNG |
Wie du weisst, werden die Soundsamples (Abtastwerte eines Sounds) in einer Liste abgespeichert und können mit dieser Liste wieder abgespielt werden. Willst du den Sound bearbeiten, so kannst du also ganz einfach diese Liste entsprechend verändern. |
LAUTSTÄRKE VERÄNDERN |
Das Programm soll die Lautstärke des Sounds auf einen Viertel reduzieren. Dazu kopierst du die Soundliste in eine andere Liste, wobei jedes Listenelement auf ¼ seines ursprünglichen Werts gesetzt wird. from soundsystem import * samples = getWavMono("mysound.wav") soundlist = [] for item in samples: soundlist.append(item // 4) openMonoPlayer(soundlist, 22010) play()
|
MEMO |
Um eine Liste umzukopieren, erstellst du zuerst eine leere Liste und füllst sie dann mit append(). Damit du wieder eine Liste mit Integers erhältst, musst duwir die Ganzzahldivision (mit verdoppeltem Bruchstrich) verwenden. |
VERWENDEN DES LISTENINDEX |
from soundsystem import * from gpanel import * samples = getWavMono("mysound.wav") makeGPanel(0, len(samples), -33000, 33000) for i in range(len(samples)): if i == 0: move(i, samples[i] + 10000) else: draw(i, samples[i] + 10000) for i in range(len(samples)): samples[i] = samples[i] // 4 for i in range(len(samples)): if i == 0: move(i, samples[i] - 10000) else: draw(i, samples[i] - 10000) |
MEMO |
Als Listenindex verwendet man oft den Variablennamen i. Wenn du mit einer for-Struktur
for i in range(10):
den Schleifenblock durchläufst, nennt man i auch einen Stepper.
|
SOUNDS GENERIEREN |
Es ist spannend, eigene Sounds zu erzeugen, indem du die Soundliste nicht von einer Sounddatei einliest, sondern die Listenelemente selbst erzeugst. Für einen "Rechtecksound" speicherst du über einen gewissen Indexbereich die Werte 5000 und nachfolgend über den gleich langen Bereich -5000 in die Liste. from soundsystem import * samples = [] for i in range(4 * 5000): value = 5000 if i % 10 == 0: value = -value samples.append(value) openMonoPlayer(samples, 5000) play() |
MEMO |
Die Abtastrate 10000 Hz entspricht einem Soundsample alle 0.1 ms. Wir wollen immer nach 10 Werten, also alle 1 ms das Vorzeichen ändern. Dies entspricht einer Rechteckperiode von 2 ms, was einen Klang von 500 Hz ergibt. Wir verwenden den Modulo-Operator %, der den Rest bei der Ganzzahldivision liefert. Die Bedingung i % 10 == 0 ist also wahr bei i = 0, 10, 20, 30, usw. |
AUFGABEN |
|