Turtlegrafik mit Java

HomeAufgabenDruckenJava-Online

Sound

Die Turtle kann verschiedene Töne abspielen. Dazu wird die Funktion playTone(frequency, duration) verwendet. Der erste Parameter bestimmt die Tonfrequenz in Hz, der zweite Parameter die Abspieldauer in Millisekunden. Hier 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

Diese Frequenzen lassen sich berechnen. Wenn man von einem Grundton (z. Bsp. 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 Faktoren? 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 .

 

Beispiel 1: Eine Melodie spielen
Hier sollen mehrere Töne nacheinander abgespielt werden. Die zugehörigen Tonfrequenzen werden in einer Liste zusammengefasst. Mit einer for-Schleife kann man dann die Liste durchgehen und die Töne mit der Funktion playTone() abspielen.

// ToneEx1.java

import ch.aplu.turtle.*;

public class  ToneEx1
{
  public ToneEx1()
  {
    Turtle = new Turtle();

    int[]f = {262, 294, 330, 349, 392, 392, 392, 440, 440, 440, 440, 392};

    for (int = 0; i < 12; i++)
       t.sound(f[i], 300);
  }

  public static void main(String[] args)
  {
    new ToneEx1();
  }
}
 

Erklärungen zum Programmcode:

sound(f[i], 300)
Spielt Tone mit der Frequenz f[i] 200 Millisekunden lang

 

Beispiel 2: Die Turtle zeichnet eine Treppe und spielt dabei immer höhere Töne. Wenn man eine c-dur Tonleiter abspielen will, muss man die Halbtöne zwischen e' und f' und zwischen h' und c'' beachten. Nach 3 ganzen Tönen folgt ein Halbton, dann wieder 3 ganze Töne und ein Halbton.

// ToneEx2.java

import ch.aplu.turtle.*;

public class ToneEx2
{
  private Turtle = new Turtle();
  private double = 264;
  private double = 1.059463;

  public ToneEx2()
  {
    t.hideTurtle();
    t.setPos(-100-100);
    for (int = 0; i < 2; i++)
    {
      for (int = 0; j < 3; j++)
      {
        step();
        f = * * r;
        t.sound(f, 300);
        t.sleep(200);

      }
      step();
      f = * r;
      t.sound(f, 300);
        t.sleep(200);
    }
  }

  private void step()
  {
    t.forward(30);
    t.right(90);
    t.forward(30);
    t.left(90);
  }

  public static void main(String[] args)
  {
    new ToneEx2();
  }
}
 
 


Erklärungen zum Programmcode:

sound(f, 300)
Spielt Tone mit der Frequenz f 300 Millisekunden lang