HomeTurtlegrafikGPanelRobotik WebTigerPython
 Python - Online
sound
Deutsch   English   

16. SOUND

 

 

DU LERNST HIER...

 

wie die Turtle verschiedene Töne und Melodien abspielen kann und dabei sogar Figuren zeichnet.

 

 

TONFREQUEENZEN

 

Um verschiedene Töne abzuspielen, verwendest du die Funktion
playTone(frequency, duration).
Der erste Parameter bestimmt die Tonfrequenz in Hz (Herz), der zweite Parameter die Abspieldauer in Millisekunden. Hier einige Tonfrequenzen:

Ton Frequenz Ton Frequenz Ton Frequenz

c 131 c' 262 c'' 524
d 147 d' 294 d'' 588
e 165 e' 330 e'' 650
f 175 f' 349 f'' 698
g 196 g' 392 g'' 784
a 220 a' 440 a'' 880
h 247 h' 494 h''' 988

Um Instrumente zu stimmen, wurde das a' mit der Frequenz 440 Hz als Kammerton festgelegt. Die übrigen Frequenzen lassen sich berechnen.   Die Zahlen in der Tabelle sind gerundet.

 

 

MUSTERBEISPIELE

 

Um mehrere Töne nacheinander abzuspielen, kannst du die zugehörigen Frequenzen in einer Liste zusammenfassen. Mit einer for-Schleife gehst du die Liste durch und spielst du die Töne mit playTone(frequency, duration). ab.

Programm:

from gturtle import *
      
song = [262, 294, 330, 349, 392, 392, 392, 0, 440, 440, 440, 440, 392]

for f in song:
    playTone(f, 250)
► In Zwischenablage kopieren

 

In der Funktion playTone() kannst du die Töne auch mit den Ton-Namen c, d, e, f, g, a, h, c', d', e'.... oder eine weitere Oktave höher c'', d'', e'' ... festlegen. Die Ton-Buchstaben müssen in Anführungszeichen stehen.  

Programm:

from gturtle import *
    
song = ["c'","d'","e'","f'","g'","g'","g'",0,"a'","a'","a'","a'","g'"]
song2 = ["c''","d''","e''","f''","g''","g''","g''",0,"a''","a''",
         "a''","a''","g''"]

for f in song:
    playTone(f, 250)
delay(1000)
for f in song2:
    playTone(f, 250)
► In Zwischenablage kopieren

 

Beispiel 3: Töne abspielen und zeichnen

Die Turtle zeichne eine Treppe und spielt dabei immer höhere Töne ab. Die Funktion playTone(f, 500) ist blockierend, Das Programm wartet beim Zeichnen jeder Stufe 500 Ms, bis der Ton fertig abgespielt ist und beginnt erst dann die nächste Stufe zu zeichnen. Wenn man will, dass das Abspielen des Tons und das Zeichnen gleichzeitig erfolgt, muss man die nichtblockierende Funktion
playTone(f, 500, block = False) verwenden.

 

Programm:

from gturtle import *

def step():    
    forward(20) 
    right(90)
    forward(30) 
    left(90)   
      
song = [262, 294, 330, 349, 392, 440, 494, 524]
for f in song:
    playTone(f, 500, block = False)
    #playTone(f, 500)
    step()
► In Zwischenablage kopieren

 

Beispiel 4: Mehrere Töne gleichzeitig abspielen
Du möchtest drei Töne gleichzeitig (C dur Akkord) abspielen. Auch hier verwendest du die nicht blockierende Funktion playTone().

Programm:

from gturtle import *

playTone(262, 2000, block = False)
playTone(330, 2000, block = False)
playTone(392, 2000, block = False)
► In Zwischenablage kopieren

 

Beispiel 5: Verschiedene Musikinstrumente wählen
Mit der Funktion playTone(frequency, duration, instrument) kannst du zum Abspielen verschiedene Instrumente wählen: Klavier, Gitarre, Trompete, Geige, Orgeln, Harfe (harp), Xylofon (xylophone).

Programm:

from gturtle import *

song = ["c'", "e'", "g'", "c''"]

for f in song:
    playTone(f, 600, instrument="piano")
for f in song:
    playTone(f, 600, instrument="guitar")
for f in song:
    playTone(f, 600, instrument="trumpet")
for f in song:
    playTone(f, 600, instrument="violin")
for f in song:
    playTone(f, 600, instrument="organ")
► In Zwischenablage kopieren

 

Beispiel 6: Einfaches Klavier
Mit zwei for-Schleifen zeichnest du zuerst die weissen und die schwarzen Tasten einer Oktave. Per Mausklick kannst du eine Melodie spielen. Aus der x-Koordinate des Mausklicks berechnest du, welche Taste geklickt wurde. Bei den schwarzen Tasten verwendest du zusätzlich die Funktion getPixelColorStr(), die die Farbe der Unterlage zurück gibt.  

Programm:

from gturtle import *

def drawPiano():
    setPenColor("black")
    for x in range(-200, 160, 50):
        setPos(x, -100)
        for k in range(2):
            fd(216).rt(90).fd(50).rt(90)
    setPenWidth(32)
    for x in [-150, -100, 0, 50, 100, 200]:
        setPos(x, 0)
        fd(100)

def onMousePressed(x, y):
    if x > -200 and x < 215 and y > -100 and y < 100:
        i = int((x + 200)/50)
        setPos(x, y)
        if getPixelColorStr() == "black":
            k = int((x + 215) / 50)
            f = blacktones[k]
        else:
            f = whitetones[i]
        playTone(f, 400, block = False)

whitetones = [262, 294, 330, 349, 392, 440, 494, 524]
blacktones = [0, 277, 311, 0, 360, 415, 466, 0, 555]

makeTurtle(mousePressed = onMousePressed)
hideTurtle()
drawPiano()
addStatusBar(20)
setStatusText("Click a piano key to play!")
► In Zwischenablage kopieren

 

 

MERKE DIR...

 

Mit der Funktion playTone(frequency, duration, instrument) kann die Turtle Töne abspielen. Falls die Turtle gleichzeitig auch zeichnen soll, oder falls du mehrere Töne (Akkord) gleichzeitig abspielen möchtest, verwendest du die nicht blockierende Funktion playTone(frequency, duration, block = False).

 

 

ZUM SELBST LÖSEN

 
1.

Ergänze das Beispiel 1 mit weiteren Tönen, so dass das Lied ganz abgespielt wird.

2. Spiele die c-dur Tonleiter (c, d, e, f, g, a, h, c) mit verschiedenen Instrumenten.
3. Mit for f in reversed(song): kannst du die Töne in umgekehrten Reihenfolge abspielen. Spiele die Tonleiter aus der Aufgabe 2 zuerst hinauf und dann in umgekehrter Reihenfolge zurück. Versuche es auch mit anderen Melodien.
4.

a) Spiele die 8 Töne der c-dur Tonleiter und zeichne dazu immer grössere Quadrate.

b) Spiele die 8 Töne in umgekehrter Reihenfolge und zeichne auch die Quadrate in umgekehrter Reihenfolge (zuerst das grösste Quadrat).

 


5 Ergänze das Klavier im Beispiel 5 mit einer zweiten Oktave. Wähle dabei die Ton-Bezeichnung c, d, e, ..., c', d', e', f', ... c'' für die weissen und c#, d#, f#, g#, a#,c#', d#', f#', g#', a#' für die schwarzen Tasten.

   
16-1
Technisch Hinweise:

Diese Frequenzen lassen sich berechnen. Wenn man von einem Grundton (a' mit f = 440 Hz) ausgeht, erhält man die Frequenz des darauf folgenden Halbtons mit dem Faktor 1.05946 und den nächsten ganzen Ton mit dem Faktor 1.05946 * 1.05946 ≈ 1,122. (z. Bsp. h' = 440 * 1.122 = 494). Die Frequenzen in der Tabelle sind gerundet.

Warum diese Faktorem? Eine Oktave (Frequenzverhältnis c'' : c' = 2 : 1) ist in zwölf Halbton-Schritte aufgeteilt.
Ein Halbton = 1/12 Oktave. Dies entspricht dem Frequenzverhältnis = zwölfte Wurzel aus 2 = 1.05946.

16-2
Technisch Hinweise:

In der englischen Notation werden die Noten mit Grossbuchstaben bezeichnet.

c, d, e, f ... entspricht C3, D3, E3, F3,...
c', d', e', f'... entspricht C4, D4, E4, F4, ...
c'', d'', e'', f'', entspricht C5, D6, E5, F5, ...