mikrocontroller.net

Forum: Projekte & Code Generator für Testtöne


Autor: Kai G. (runtimeterror)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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:
Gesamtdauer der WAV-Datei in Sekunden
define('DURATION', 3.0);

Die Sample-Rate in Hz
define('SAMPLE_RATE', 44100);

Anzahl der Audiokanäle (die anderen Kanäle werden phasenverschoben generiert)
define('CHANNEL_COUNT', 1); // mono

Audioqualität, Auflösung in Bit
(andere Werte funktionieren möglicherweise nicht richtig)
define('BITS_PER_SAMPLE', 16);

Unteres Limit für die Frequenzen in Hz
define('MIN_FREQ', 20.0);

Oberes Limit für die Frequenzen in Hz
define('MAX_FREQ', 20000.0);

Garantierte Frequenz
Alle anderen Frequenzen ordnen sich darum an (Beispiel: Kammerton a1)
define('FIX_FREQ', 440.0);

Anzahl der Töne Pro Oktave (auf 1 setzen um nur 2er-Potenzen von FIX_FREQ zu erzeugen)
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 ;)

Autor: Kai G. (runtimeterror)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Anbei ein Beispiel mit 2 Tönen Pro Oktave.

Autor: Kai G. (runtimeterror)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Anbei ein Beispiel mit 12 Tönen Pro Oktave als Ergebnis der obigen 
Konfiguration.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.