Tag zusammen,
ich hatte mir gerade zum Testen meines Audiosystems ein kleines Script 
geschrieben, welches Sinustöne unterschiedlicher Frequenzen als 
WAV-Dateien ablegt. Ist eigentlich nichts Besonderes, aber vielleicht 
erweist es dem einen oder anderen von euch gute Dienste beim Testen 
analoger Filter, beim Kontrollieren des eigenen Hörvermögens, beim 
Kontrollieren von Line-Pegeln oder was euch sonst noch einfällt ;)
Jede WAV-Datei beinhaltet einen 3-sekündigen Sinuston. Im ersten Drittel 
wird die Amplitude linear von 0 % auf 100 % angehoben und im zweiten 
Drittel gehalten. Im letzten Drittel wird die Amplitude von 100 % auf 0% 
linear abgesenkt. (ramp-up, sustain, ramp-down)
Die Verteilung der Frequenzen ist exponentiell.
Das Programm wird einfach über die Kommandozeile mit einem 
php-Interpreter gestartet. Die Konfiguration erfoglt einfach über die 
darin enthaltenen Konstanten. Die Dateien werden im aktuellen 
Verzeichnis abgelegt und "01234.567 Hz.wav" benannt.
Die wichtigsten Stellschrauben sind wie folgt:
| 1 | Gesamtdauer der WAV-Datei in Sekunden
 | 
| 2 | define('DURATION', 3.0);
 | 
| 3 | 
 | 
| 4 | Die Sample-Rate in Hz
 | 
| 5 | define('SAMPLE_RATE', 44100);
 | 
| 6 | 
 | 
| 7 | Anzahl der Audiokanäle (die anderen Kanäle werden phasenverschoben generiert)
 | 
| 8 | define('CHANNEL_COUNT', 1); // mono
 | 
| 9 | 
 | 
| 10 | Audioqualität, Auflösung in Bit
 | 
| 11 | (andere Werte funktionieren möglicherweise nicht richtig)
 | 
| 12 | define('BITS_PER_SAMPLE', 16);
 | 
| 13 | 
 | 
| 14 | Unteres Limit für die Frequenzen in Hz
 | 
| 15 | define('MIN_FREQ', 20.0);
 | 
| 16 | 
 | 
| 17 | Oberes Limit für die Frequenzen in Hz
 | 
| 18 | define('MAX_FREQ', 20000.0);
 | 
| 19 | 
 | 
| 20 | Garantierte Frequenz
 | 
| 21 | Alle anderen Frequenzen ordnen sich darum an (Beispiel: Kammerton a1)
 | 
| 22 | define('FIX_FREQ', 440.0);
 | 
| 23 | 
 | 
| 24 | Anzahl der Töne Pro Oktave (auf 1 setzen um nur 2er-Potenzen von FIX_FREQ zu erzeugen)
 | 
| 25 | define('TUNES_PER_OCTAVE', 12);
 | 
Die oben genannte Voreinstellung generiert alle (weitgehend) hörbaren 
Frequenzen einer Klaviatur mit gleichstufig temperiertem Intervall um 
den Kammerton a1.
Ich versuche nachher mal ein paar Proben anzuhängen - durch die Größe 
der WAV-Dateien kann ich leider nur Auszüge anhängen.
Wenn begründetes Interesse besteht kann ich bei der Code-Qualität 
nochmal nachbessern.
Schöne Grüße und viel Spaß damit,
Kai
ps: meine obere Hörgrenze liegt bei etwa 17 kHz ;)