sound

8. SOUND

 

 

DU LERNST HIER...

 

mit Oxocard Töne, Tonfolgen und kurze Melodien abzuspielen. Für die Speicherung der Tonfolgen verwendest du Listen.

 

 

MUSTERBEISPIELE

 

Eine Tonfolge abspielen
Um mit der Oxocard ein Tonfolge abzuspielen, brauchst du einen Kopfhörer oder einen aktiven Lautsprecher (mit einem Verstärker), den du direkt an die integrierte Audiobuchse einschliessen kannst.

Zuerst musst du das Modul music importieren. Dann kannst du mit dem Befehl playTone(f, 500) einen Ton mit der Frequenz f während 500 Millisekunden abspielen. Frequenzen einiger Töne findest du im Overlay-Fenster:

Um mehrere Töne nacheinander abzuspielen, erstells du eine Liste song mit den zugehörigen Frequenzen. Die Elemente einer Liste musst du in eckigen Klammern und mit Komma getrennt schreiben (Frequenz 0 legt eine Pause ein).

Zum Abspielen durchläufst du die Liste mit einer for-Schleife und entnimmst ihr die Frequenzen, die du playTone() übergibst. Hier ein Beispiel des Beginns eines Kinderlieds.

Programm:

from music import playTone

song = [262, 294, 330, 349, 392, 392, 392, 0, 440, 440, 440, 440, 392, 0, 
        349, 349, 349, 349, 330, 0, 330, 0, 294, 294, 294, 294, 262]

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

Statt Frequenzen kannst du auch eine musikalische Notation (r ist eine Pause) verwenden. Die Tonhöhen werden dabei durch einen Buchstaben und (eventuell ein Kreuz für einen Halbton nach oben) angegeben. Du kannst auch mit einem anschliessenden Doppelpunkt und einer Zahl sagen, dass dieser Ton länger ausgehalten wird. Folgende Töne der chromatischen Tonleiter sind verfügbar:

Programm:

'C', 'C#', 'D', 'D#', 'E', 'F', 'F#', 'G', 'G#', 'A', 'A#', 'H',
'c', ' c#', 'd', 'd#', 'e', 'f', 'f#', 'g', 'g#', 'a', 'a#', 'h', 
'c2', 'c2#', 'd2', 'd2#', 'e2', 'f2', 'f2#', 'g2', 'g2#', 'a2', 'a2#', 'h2',
'c3'

Das Kinderlied kannst du in musikalischer Notation so schreiben:

Programm:

from music import playTone

song = ['c', 'd', 'e', 'f', 'g', 'g', 'g:2', 'a', 'a', 'a', 'a', 'g', 'r',
       'f', 'f', 'f', 'f', 'e', 'r', 'e', 'r', 'd', 'd', 'd', 'd', 'c:3']

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

Programme mit Sound ergänzen

Es ist lustig, deine Programme mit Sound zu versehen. Hier bewegt sich die  Schlange die Treppe hinauf und spielt dabei immer höhere Töne.

 

 

 

 


Programm:

from oxosnake import *
from music import playTone

def step():
    forward()
    right(90)
    forward()
    left(90)
    
makeSnake()
setPos(0, 7)
scale = ['c','d','e','f','g','a','h','c2']

for tone in scale:
    playTone(tone, 300)
    step()
► In Zwischenablage kopieren


Eingebaute Melodien abspielen
Einige Melodien sind im Modul music eingebaut.   Mit folgendem Programm kannst du sie abspielen:

Programm:

from music import *
from oxocard import *

songs = [ENTERTAINER, RINGTONE, BIRTHDAY, JUMP_UP, JUMP_DOWN, DADADADUM, 
         POWER_UP, POWER_DOWN, PUNCHLINE, WEDDING, BOOGYWOODY, PRELUDE]

n = 1                  
for song in songs:
    display(n)
    n += 1
    for f in song: 
        playTone(f, 150)         
    sleep(3)
► In Zwischenablage kopieren

Du kannst auch einfacher der Funktion playSong() eine Liste mit Tönen übergeben, die sie dann abspielt:

playSong(ENTERTAINER)

oder falls du nach die Tondauer angeben willst:

playSong(ENTERTAINER, 300) (standardmässig ist sie 150 ms).

from music import *
playSong(ENTERTAINER, 300)

 

 

MERKE DIR...

 

Mit playSound(frequency, duration) kannst du einen Sound mit gegebener Frequenz (in Hertz) und Dauer (in Millisekunden) abspielen. Die Funktion kehrt erst zurück, wenn der Sound fertig gespielt ist, du kannst also nicht  mehrere Töne miteinander erzeugen.

 

 

ZUM SELBST LÖSEN

 

 

1.

Spiele den folgenden Song wiederholt ab und bestimme selbst die passende Geschwindigkeit.

song = ['d', 'd#', 'e', 'c2:2', 'e', 'c2:3', 'e', 'c2:3', 'c2', 'd2',
'd2#', 'e2', 'c2', 'd2', 'e2:2', 'h', 'd2:2', 'c2:4']

 

 


2.

Die (schnelle) Schlange startet zuerst an einer zufälligen Position in der untersten Reihe, bewegt sich nach oben und spielt dabei die Melodie JUMP_UP. Danach startet sie an einer zufälligen Position in der obersten Reihe, bewegt sich nach unten und spielt dabei die Melodie JUMP_DOWN. Diese Bewegungen wiederholt sie in einer endlosen Schleife.

 


3.

Die (schnelle) Schlage startet an einer zufälligen Position in der obersten Reihe und spielt während der Bewegung nach unten eine Tonfolge mit abnehmender Frequenz ab. Dies soll sich endlos wiederholen.

 

4.

Suche eine passende Vertonung zum folgenden Programm:

from oxosnake import *

makeSnake(speed = 90)
right(90)
repeat:
    if getX() == 7 or getX() == 0:
       left(180)
    forward()
 

 

Unbenanntes Dokument
Fachliche Hinweise:

Einige Tonfrequenzen:

Ton Frequenz Ton Frequenz    

h' 494 h'' 988    
a' 440 a'' 880    
g' 392 g'' 784    
f' 349 f'' 698    
e' 330 e'' 660    
d' 294 d'' 588    
c' 262 c'' 524 c''' 1048
8-2
Fachliche Hinweise:

Melodien, die Modul music definiert sind:

DADADUM - Eröffnung von Beethoven’s 5. Sinfonie in C Moll
ENTERTAINER - Scott Joplin’s Ragtime Klassiker
PRELUDE -J.S.Bach’s 48 Preludien und Fugen
RINGTONE - ein Klingelton
BOOGYWOODY - ein Boogie-Woogie Blues
BIRTHDAY - “Happy Birthday to You...”
WEDDING - der Chorus des Bräutigams aus Wagner’s Oper “Lohengrin”
PUNCHLINE - a lustiger Tonclip, nachdem ein Witz gemacht wurde
JUMP_UP - für Spiele, um auf eine Aufwärtsbewegung hinzuweisen
JUMP_DOWN - für Spiele, um auf eine Abwärtsbewegung hinzuweisen
POWER_UP - ein Fanfarenklang
POWER_DOWN - ein trauriger Fanfarenklang, wenn etwas verloren gegangen ist