vd-archiv:listings:4d2013-01-listings
**Dies ist eine alte Version des Dokuments!**
4d2013-01 Listings
Wave Engine (5)
\ -------1---------2---------3---------4---------5-----| cr cr ." Last edit: 22feb2013 22:40" cr \ ###################################################### \ Aus Tonnummer (1...478, entspr. ,,C ... c""") Frequenz \ und Phasenschritt berechnen. Die Schrittwerte werden \ in Tabellen geladen und dort vom Generator ausgelesen. \ ###################################################### \ \ Ausgehend vom "Kammerton" a' mit 440 Hz ergeben sich \ für den tiefsten (Subkontra-)Ton ,,C je nach Stimmung \ unterschiedliche Frequenzen: \ \ Reine Stimmung (Oktaven 1:2 und Quinten 2:3): \ Von a' aus 3 Quinten (3/2) und 3 Oktaven (2/1) tiefer: \ freq = 440/((3/2)^3*(2/1)^3) = 16,29630 [Hz] \ (Nur zum Vergleich, nicht verwendet) \ \ Fast reine temperierte Stimmung mit 53stel Oktaven: \ Von a' aus 40+4*53 = 252 Kommas (2^(1/53)) tiefer: \ freq = 440/(2^(1/53))^252 = 16,29822 [Hz] \ \ Die übliche temperierte Stimmung mit Zwölftel-Oktaven: \ Von a' aus 9+4*12 = 57 Halbtöne (2^(1/12)) tiefer: \ freq = 440/(2^(1/12))^57 = 16,35160 [Hz] \ \ Der vom Sinus-Generator benötigte Phasenschritt wird \ aus der Frequenz nach folgender Formel berechnet: \ step = freq * 2pi / frames/sec [rad (Bogenmaß)] \ \ Bei einer Auflösung von 44100 frames/sec beträgt der \ Phasenschritt für den tiefsten Ton: \ step = 16,29822 * 2pi / 44100 = 0,002322103 [rad] \ bzw. step = 16,35160 * 2pi / 44100 = 0,002329708 [rad] \ \ Dasselbe für den höchsten Ton c""", 9 Oktaven höher: \ step = 8344,690 * 2pi / 44100 = 1,188917 [rad] \ bzw. step = 8372,018 * 2pi / 44100 = 1,192810 [rad] \ \ ====================================================== 2e 1e 53e f/ f** fconstant 53root2 \ 2^(1/53) Komma 2e 1e 12e f/ f** fconstant 12root2 \ 2^(1/12) Halbton pi 2e f* fconstant 2pi fvariable 440Hz 440e 440Hz f! \ Stimmgabel fvariable frames \ Auflösung 44100e frames f! \ Draft: 11025e \ ------------------------------------------------------ \ Frequenz des tiefsten Tons der "53er"-Tabelle finden : base53 ( r-440Hz -- r-freq) 53root2 252e f** f/ ; \ Frequenz eines Tons der "53er"-Tabelle berechnen : freq53 ( r-440Hz offs53 -- r-freq) base53 53root2 s>f f** f* ; \ ------------------------------------------------------ \ Frequenz des tiefsten Tons der "12er"-Tabelle finden : base12 ( r-440Hz -- r-freq) 12root2 57e f** f/ ; \ Frequenz eines Tons der "12er"-Tabelle berechnen : freq12 ( r-440Hz offs12 -- r-freq) base12 12root2 s>f f** f* ; \ ------------------------------------------------------ \ Aus der Frequenz den Phasenschritt berechnen : freq>step ( r-freq -- r-step) 2pi f* frames f@ f/ ; \ Wandlung des "53er"-Offset in den "12er"-Offset : shrink ( offs53 -- offs12) 12 * 22 + 53 / ; \ ====================================================== \ Tabelle für die "53er"-Temperatur anlegen 478 dup constant ftab53-items \ 9*53 (9 Oktaven) +1 8 * dup constant ftab53-size \ 8-byte-Zellen create ftab53 allot \ 3824 bytes \ Aus dem Offset Adresse in "53er"-Tabelle berechnen. : fadr53 ( offs53 -- addr) 8 * ftab53 + ; \ Füllen der Tabelle für die "53er"-Temperatur : fill-ftab53 ( r-440Hz --) base53 freq>step \ Anfangston 16,3 Hz ftab53-items \ Anzahl Float-Werte 0 DO fdup i fadr53 f! \ Float-Wert laden 53root2 f* \ 1/53 Oktave höher LOOP fdrop ; \ Per Tonnummer Phasenschritt aus Tabelle ftab53 holen : f53@ ( Ton# -- r-step) 1- fadr53 f@ ; \ ====================================================== \ Tabelle für die "12er"-Temperatur anlegen 109 dup constant ftab12-items \ 9*12 (9 Oktaven) +1 8 * dup constant ftab12-size \ 8-byte-Zellen create ftab12 allot \ 872 bytes \ Aus dem Offset Adresse in "12er"-Tabelle berechnen. : fadr12 ( offs12 -- addr) 8 * ftab12 + ; \ Füllen der Tabelle für die "12er"-Temperatur : fill-ftab12 ( r-440Hz --) base12 freq>step \ Anfangston 16,3 Hz ftab12-items \ Anzahl Float-Werte 0 DO fdup i fadr12 f! \ Float-Wert laden 12root2 f* \ 1/12 Oktave höher LOOP fdrop ; \ Per Tonnummer Phasenschritt aus Tabelle ftab12 holen : f12@ ( Ton# -- r-step) 1- shrink fadr12 f@ ; \ ====================================================== \ shrink reduziert die (durch die spezielle Syntax sich \ ergebenden) 53 Töne pro Oktave auf 12 Töne pro Oktave, \ zum Auslesen der kleineren "12er"-Tabelle. \ \ Syntax C B# C\\ Db/ Db C# B## D// Ebb D C## Eb\\ \ Ton# 1 2 3 4 5 6 7 8 9 10 11 12 \ offs53 0 1 2 3 4 5 6 7 8 9 10 11 \ offs12 0 0 1 1 1 1 2 2 2 2 2 3 \ Piano C --- Cis ---------- D --------------- Dis \ \ Oktave 0 Oktave 1 Oktave 9 \ ("Subkontra") ("Kontra") ("6-gestr.") \ Ton# Offs Ton# Offs Ton# Offs \ C 1-2 -> 0 52-55 -> 12 476-478 -> 108 \ Cis/Des 3-6 -> 1 56-59 -> 13 -------------- \ D 7-11 -> 2 60-64 -> 14 \ Dis/Es 12-15 -> 3 65-68 -> 15 \ E 16-20 -> 4 69-73 -> 16 \ F 21-24 -> 5 -------------- \ Fis/Ges 25-29 -> 6 449-453 -> 102 \ G 30-33 -> 7 454-457 -> 103 \ Gis/As 34-37 -> 8 458-461 -> 104 \ A 38-42 -> 9 462-466 -> 105 \ Ais/B 43-46 -> 10 467-470 -> 106 \ H 47-51 -> 11 471-475 -> 107 \ ====================================================== 440Hz f@ fill-ftab53 440Hz f@ fill-ftab12 \ ====================================================== 0 [if] \ Zum Testen mit "1" einschalten cr ." +---------------------------+" cr ." | Die Tabellen sind geladen |" cr ." +---------------------------+" cr cr ." Stacks: " .s f.s \ must be zero cr cr ." Beispiele für die Konsole:" cr cr ." 7 set-precision" cr cr ." 440e base53 f. => 16.29822 Basisfrequenz" cr ." 440e 0 freq53 f. => 16.29822 Freq Ton #1" cr ." 440e 53 freq53 f. => 32.59645 Freq Ton #54" cr ." 440e 477 freq53 f. => 8344.690 Freq Ton #478" cr ." ftab53 f@ f. => 0.002322103 Step Ton #1" cr ." 0 fadr53 f@ f. => 0.002322103 Step Ton #1" cr ." 1 f53@ f. => 0.002322103 Step Ton #1" cr ." 477 fadr53 f@ f. => 1.188917 Step Ton #478" cr ." 478 f53@ f. => 1.188917 Step Ton #478" cr cr ." 440e base12 f. => 16.35160 Basisfrequenz" cr ." 440e 0 freq12 f. => 16.35160 Freq Ton #1" cr ." 440e 12 freq12 f. => 32.70320 Freq Ton #13" cr ." 440e 108 freq12 f. => 8372.018 Freq Ton #109" cr ." ftab12 f@ f. => 0.002329708 Step Ton #1" cr ." 0 fadr53 f@ f. => 0.002329708 Step Ton #1" cr ." 1 f53@ f. => 0.002329708 Step Ton #1" cr ." 108 fadr12 f@ f. => 1.192810 Step Ton #478" cr ." 478 f12@ f. => 1.192810 Step Ton #478" cr cr [endif] \ ======================================================
vd-archiv/listings/4d2013-01-listings.1495464876.txt.gz · Zuletzt geändert: 2017-05-22 16:54 von mka