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 ;)