Damit meine Übungen mit dem CPLD nicht beim Blink- und Lauflicht enden, hab ich mal eine Soundausgabe probiert. Bei dieser Version werden Rechtecksignale für die Tonleiter über 3 Oktaven erzeugt und hintereinander abgespielt. Je Note sind ca. 0,5 Sek. als Tondauer fix vorgegeben. Ich bin kein Musiker und es mag sein, dass das Ganze noch fehlerbehaftet ist. Auch meine VHDL ist sicher noch verbesserungswürdig, was ich aber als Newbie derzeit nicht erkennen kann. Die Tonfrequenz einer Note steigt stets um den Faktor 2 in der nächst höheren Oktave. In der mittleren Oktave hat der "Kammerton A" 440Hz. Ich habe jedoch alle Frequenzen für 3 Oktaven fest vorgegeben, da ein Versuch mit der Multiplikation inkl. der erforderlichen Abfragen die Kapazität meines XC95144XL sprengte. Hier spitzen sicher die Profis die "Ohren" und denken an Optimierung. Für mich ein Wort, von dem ich bei CPLDs aber noch keine Ahnung habe. Daher wurde stattdessen erfolgreich versucht, alle Tonfrequenzen für 3 Oktaven fest vorzugeben. Die Frequenzen hab ich mal in einer Exceldatei beigelegt, falls jemand an die Nutzung für eine Türglocke oder so denkt. Wie gesagt, ich bin kein Musiker, aber mir fällt auf, dass die Frequenzen für die Noten #E und F (sicher ist die Bezeichnung auch falsch?) identisch sind und dasselbe gilt für die Noten #B und C von der nächst höheren Oktave. K. A. ob ich falsche Frequenzwerte habe oder ob das so richtig ist. Letzteres (#B und C) hab ich in meinen Definitionen drin gelassen, weshalb man diesen Ton doppelt so lang hört wie die übrigen. Ersteres (#E und F) hab ich erst gar nicht definiert. Natürlich könnte man das Ganze noch weiter aufbohren, um Melodien korrekter abspielen zu lassen. Hierzu müssten Ton- und Pausendauer definierbar sein, was aber mehr Ressourcen erfordert. Bin gespannt, ob jemand von Euch Lust hat, diesen Faden weiter zu spinnen. ;-) Hier mal bekannte Noten ;-) g e e - f d d - c d e f g g g - g e e - f d d - c e g g c c - - d d d d d e f - e e e e e f g - g e e - f d d - c e g g c c c c Geht leider derzeit nicht, da Pausen fehlen und z. B. ee als ein Ton mit doppelter Länge ohne Pause dazwischen ausgegeben wird. Man könnte als Pause eine unhörbare Frequenz ausgeben lassen, die jedoch aber auch ohne entsprechende Vorkehrung ca. 0,5 Sekunden mit meinem Code dauern wird. Bei Bedarf lade ich noch eine kleine Elektronikschaltung für die Ausgabe über einen Lautsprecher hoch. 1MHz für die Tonerzeugung und 12MHz für die Tondauer wurden verwendet.
Karl-Heinz M. schrieb: > Hier mal bekannte Noten ;-) "Hänschen klein", na gut... ;-) Bei dem Lied könntest du aber (weil nur Viertel vorkommen) die Pausen als "Note" abarbeiten... > da ein Versuch mit der Multiplikation inkl. der erforderlichen Abfragen > die Kapazität meines XC95144XL sprengte. Ja klar, denn da könntest du auch mit einer Tabelle was machen, aber für die nötige Genauigkeit bist du da bald an der Grenze. > Hier spitzen sicher die Profis die "Ohren" und denken an Optimierung. Ich denke an ein kleines "FPGA" z.B. Lattice MachXO oder Spartan3AN
Karl-Heinz M. schrieb: > Wie gesagt, ich bin kein Musiker, aber mir fällt auf, dass die > Frequenzen für die Noten #E und F (sicher ist die Bezeichnung auch > falsch?) identisch sind und dasselbe gilt für die Noten #B und C von der > nächst höheren Oktave. K. A. ob ich falsche Frequenzwerte habe oder ob > das so richtig ist. Letzteres (#B und C) hab ich in meinen Definitionen > drin gelassen, weshalb man diesen Ton doppelt so lang hört wie die > übrigen. Ersteres (#E und F) hab ich erst gar nicht definiert. Das kommt daher, dass Du in der Tonleiter nicht nur ganze, sondern auch Halbtonschritte hast. In der C-Dur Tonleiter (was Du als Basis nimmst) liegen diese zwischen E und F, resp. H (amerikanisch B) und C. Das H# ist also auch das C, und das E# das F. Sieht man sehr schön beim Klavier, da fehlt an diesen Stellen die schwarze Taste.
1 | IF (stop_sound = '1') THEN -- wenn die Tondauer erreicht wurde |
2 | stop_sound <= '0'; -- Tondauer kann wieder starten |
3 | counter1 <= 0; -- stoppe aktuelle Frequenzausgabe |
4 | END IF; |
Diese Abfrage findet in einem Prozess aber ohne Taktabfrage statt. Weiterhin hast du zwei Takt-Abfragen in dem Prozess. Du solltest dir nochmals anschauen, wie man getaktete Prozesse richtig beschreibt. DuArte
DuArte schrieb: > Diese Abfrage findet in einem Prozess aber ohne Taktabfrage statt. > Weiterhin hast du zwei Takt-Abfragen in dem Prozess. Du solltest dir > nochmals anschauen, wie man getaktete Prozesse richtig beschreibt. Danke, ändere ich, muss ich mir noch ansehen, aber: Ich brauche 2 Zeiten: Takt 1 zum Zählen der Frequenz und parallel dazu Takt 2 zum Zählen der Tondauer. Ich wüsste nicht, wie ich beide Zeiten mit nur einem Zähler machen sollte. Lass bitte mal sehn ;-) Ich hatte zuerst auch 2 Prozesse dafür, konnte aber den counter oder einen Schalter nicht im andren Prozess abfragen. Ist mir jetzt schon klar, warum das nicht geht.
DuArte schrieb: > Diese Abfrage findet in einem Prozess aber ohne Taktabfrage statt. > Weiterhin hast du zwei Takt-Abfragen in dem Prozess. Du solltest dir > nochmals anschauen, wie man getaktete Prozesse richtig beschreibt. Ich hab Änderungen vorgenommen und hoffe, es passt jetzt so. Sonst bitte einen Hinweis, wo ich eingreifen kann oder mich schlau machen kann, danke. Gefundene Fehler sind korrigiert. Die lange Pause nach dem Abspielen aller Noten ist jetzt weg, er startet sofort neu. Die doppelten Notenfrequenzen sind auch raus. Die Tondauer musste ich auf ca. 0,35 Sek. reduzieren, sonst passte das nicht mehr in meinen CPLD. Leider habe ich keinen weiteren Quarzoszillator mit 1MHz, sonst könnte ich die Ressourcen reduzieren. Er braucht für die Zählung bis auf 4194303 (0,35 Sek.) bei 12MHz 22 bits. Bei einem Quarzoszillator mit 1MHz würde hierfür weniger verbraucht werden.
Karl-Heinz M. schrieb: > Bei einem Quarzoszillator mit 1MHz würde hierfür weniger verbraucht > werden. Das war das erste, was ich an meinem CPLD-Testboard modifiziert habe: statt einer festen Taktfrequenz einen variablen Taktgeber ;-) Duke
Duke Scarring schrieb: > Das war das erste, was ich an meinem CPLD-Testboard modifiziert habe: > statt einer festen Taktfrequenz einen variablen Taktgeber ;-) Per Poti, Drehko oder wie? Hast mal ein Schaltbild dafür? Wie stabil ist die Frequenz? Driftet ordentlich?
Karl-Heinz M. schrieb: > Per Poti, Drehko oder wie? Hast mal ein Schaltbild dafür? > Wie stabil ist die Frequenz? Driftet ordentlich? Per Poti. Die XAPP078 (die Xilinx gar nicht mehr kennen will :-/ ) verwendet einen TLC555. Ich hab einen NE555 dafür verwendet. Die Stabilität und die Drift hab ich nicht gemessen. Aber der duty-cycle veschiebt sich bei hohen Frequenzen. Für Lauflicht u.ä. Lernspielereien reicht es :-) Duke
danke und den Poti hast Du selbst rein gebatselt? Der ist nicht im Schaltbild. Ok, für unsere Übungen reicht so etwas völlig, da braucht es keinen Quarzoszillator, denke und hoffe ich ;-)
Duke Scarring schrieb: > Für Lauflicht u.ä. Lernspielereien reicht es :-) Und sogar zum Basteln mit der Seriellen Schnitte... ;-)
Karl-Heinz M. schrieb: > Duke Scarring schrieb: >> Das war das erste, was ich an meinem CPLD-Testboard modifiziert habe: >> statt einer festen Taktfrequenz einen variablen Taktgeber ;-) > > Per Poti, Drehko oder wie? Hast mal ein Schaltbild dafür? > Wie stabil ist die Frequenz? Driftet ordentlich? In diesem Zusammenhang eventuell interessant: Beitrag "Re: Einstellbarer Taktgeber bis 20Mhz ?"
aubergine mit usb-anschluss schrieb: > In diesem Zusammenhang eventuell interessant Interessant schon, aber ich hätte Angst Luft zu holen. Bestimmt hätte ich das Teil bald als Fremdkörper zwischen den Zähnen ;-) Sorry, nix für mich, kaum wahrnehmbar, geschweige denn das Löten... Vielleicht, wenn ich meinem Uhrmacher das Löten beibringe, kann der es ;-)
Duke Scarring schrieb: > Die XAPP078 (die Xilinx gar nicht mehr kennen will :-/ ) Ist viell. was für Dich: http://dangerousprototypes.com/docs/CPLD:_Complex_programmable_logic_devices
Michael schrieb: > Schon gesehen: mir gefällt mein CPLD besser ;-)) Ist toll, aber momentan bin ich noch nicht reif für FPGAs.
Du kannst mit einem PLD einen einfachen Rechteckgenerator bilden, um die OSCs zu formen. Du brauchts nur die 12 Töne = 12 toggle Register und davon die jeweiligen Hälften pro Oktave. Deren Ausgänge alle auf IIR-Filter, um Sinüsse zu gewinnen. Dann wie bei der IFFT amplituden- und phasenrichtig zusammenmischen und matrixartig in Kanäle stopfen. Für die Tongeneration würde ich mir was anderes überlegen: Ein Tableau wo Notenlängen und -höhen dynamisch gesetzt werden und in eine ADSR-pipeline gegeben werden. Dann sind die Notenzahlen von der Zahl der Tongeneratoren unabhängig.
Jaromir schrieb: > Deren Ausgänge alle auf IIR-Filter, um Sinüsse zu gewinnen. ... > Ein Tableau wo Notenlängen und -höhen dynamisch gesetzt werden > und in eine ADSR-pipeline Wieviele Flipflops haben denn deine CPLDs?
Karl-Heinz M. schrieb: > Wie gesagt, ich bin kein Musiker, aber mir fällt auf, dass die > Frequenzen für die Noten #E und F Ja, in der Tat ist das derselbe Ton. Es gibt nämlich kein #E :-)
BSDler schrieb: > Karl-Heinz M. schrieb: >> Wie gesagt, ich bin kein Musiker, aber mir fällt auf, dass die >> Frequenzen für die Noten #E und F > > Ja, in der Tat ist das derselbe Ton. Es gibt nämlich kein #E :-) In C-Dur beispielsweise nicht. Aber es gibt Tonarten, da existiert er, hört sich aber genau so an wie F in C-Dur. http://de.wikipedia.org/wiki/Versetzungszeichen
Simon K. schrieb: > In C-Dur beispielsweise nicht. Aber es gibt Tonarten, da existiert er, > hört sich aber genau so an wie F in C-Dur. Das "E-is" wie es korrekt heisst, gehört zu einer anderen Tonart, als das "F" und klingt nur in der chromatischen Stimmung gleich, d.h. es hat dieelbe Grundfrequenz. In der reinen Stimmung ist das z.B. nicht der Fall. In B-dur hätte der Ton F z.B. über 699Hz, statt 698,5, wenn ich richtig rechne.
> Ja, in der Tat ist das derselbe Ton. Es gibt nämlich kein #E :-)
Doch, gibt es, nennt sich dann "eis" und ist das Selbe wie ein "f"
(Stichwort: enharmonische Verwechslung)
Jürgen S. schrieb: > Simon K. schrieb: >> In C-Dur beispielsweise nicht. Aber es gibt Tonarten, da existiert er, >> hört sich aber genau so an wie F in C-Dur. > > Das "E-is" wie es korrekt heisst, gehört zu einer anderen Tonart, als > das "F" und klingt nur in der chromatischen Stimmung gleich, d.h. es hat > dieelbe Grundfrequenz. In der reinen Stimmung ist das z.B. nicht der > Fall. In B-dur hätte der Ton F z.B. über 699Hz, statt 698,5, wenn ich > richtig rechne. Ah, so wars, Danke! Ist schon länger her bei mir mit der Musiktheorie.
Also ehrlich gesagt, denke ich nicht, dass es einen Unterschied macht, ob ein Synthesizer ein halbes Herz höher tönt oder tiefer und ob das überhaupt jemand hört.
Manfred Zielke schrieb: > Also ehrlich gesagt, denke ich nicht, dass es einen Unterschied macht, > ob ein Synthesizer ein halbes Herz höher tönt oder tiefer und ob das > überhaupt jemand hört. Bei 40Hz schon... ;-) Oder andersrum: wenn 2 Töne raus- und zusammenkommen, der eine mit 699Hz und der andere mit 698.5Hz, dann hört man das leicht an der dabei entstehenden Schwebung.
Lothar Miller schrieb: > Oder andersrum: wenn 2 Töne raus- und zusammenkommen, der eine mit 699Hz > und der andere mit 698.5Hz,´ Ich glaube, es ging darum, ob man hören kann, dass der Ton als solcher ein halbes Herz geringer ausfällt, nicht im Vergleich. Absolut wird man das sicher nicht hören.
T.G. schrieb: > Absolut wird man > das sicher nicht hören. Ich bin nicht sicher, aber ich könnte mir vorstellen, dass es Spezies wie Klavierstimmer etc. gibt, die das vermutlich raushören. Wie sollten die sonst ihren Job machen? Genauso, wie es feine (Parfumerie-)Nasen gibt, gibt es in der Musik sicher feine, geschulte Ohren.
@ Karl-Heinz M. (Firma: www.khmweb.de) (khmweb) >> Absolut wird man >> das sicher nicht hören. >Ich bin nicht sicher, aber ich könnte mir vorstellen, dass es Spezies >wie Klavierstimmer etc. gibt, die das vermutlich raushören. Wie sollten >die sonst ihren Job machen? Eben durch den Vergleich Der Töne und der daraus entstehenden Dissonanz. http://de.wikipedia.org/wiki/Dissonanz Bin aber auch nicht vom Fach, alles nur Vermutung ;-)
Ja, in der Tat: Gute Musiker können das wirklich hören und nicht wenige sogar absolut! Erfahrungsgemäss werden von Einigen schon rund 20Cent absolute Notenabweichung als falsch erkannt. Das wären bei den erwähnten 40Hz sogar etwas weniger, als die 0,5Hz. Relativ zu anderen Noten oder im AB-Vergleich geht es noch viel genauer. Im direkten Gleichklang mit anderen Noten kann Tonhöhenvaration eigentlich jeder hören: Man nehme eine kleine Terz: Die Töne liegen zwar zwar rund 25% auseinander, die Interferenz produziert aber eine tieffrequente Schwebung, die um so ausgeprägter ist, je präziser die Frequenzen gehalten werden. Bei Synthesizern und anderen elektronischen Tongeneratren werden diese meist sehr stur gehalten, während bei akustischen Instrumenten mehr Dynamik drin steckt. Daher kommt es hier zu stark wechselnden Schwebungslautstärken, deren Frequenz sofort eine deutlich andere ist, wenn die Töne minimal abweichen. Das ist ja gerade der Effekt der reinen Stimmung und zugleich das Problem bei elektronischer Musik, denn bei bei mathematisch idealen Verhältnissen gibt der jeweilige Startzeitpunkt eine zufällige Phasenlage vor, mit der die Interferenz dann agiert. Ein "guter" Synthesizer muss daher die Frequenzen eines Akkords unabhängig voneinander modulieren, sonst klingt es steril. Leider sind die Modulatoren selber meist wiederum sterile LFOs und damit auch wieder mathematisch korrelliert. Für dieses Problem gibt es durchaus Lösungen, die allerdings ein tiefergehendes Verständnis der Vorgänge von sich beeinflussenden Schwingungen in Instrumenten erfordert (samt einiger kluger Ideen, wie man diese geschickt modelliert) und die auch nicht mehr in ein PLD passen:-) Bei der PLD-Version von Karl-Heinz dürfte das so sein, dass die Töne infolge der Rundung der Inkremente nicht korrekt sind und weder chromatisch noch rein schwingen, sondern in einer festen Relation schweben, die einen stärker, die anderen schwächer. Ein Tipp: Egal, ob gerundete Festfrequenz oder DDS mit erhöhter Auflösung, es gibt entweder statische Schwebungen oder die Phasensprünge mit dynamischen wechselnden Schwebungen. Der erste und einfachste Lösungsansatz ist, die entstehenden Töne minimal i der Tonhöhe zu modulieren un zudem die Wellen mit einem IIR zu filtern. Dadurch wandeln sich die Phasensprünge in eine Mischung aus Phasen- und Amplitudenbewegung um, die viel unauffälliger klingt. @Karl-Heinz: Warum hast Du denn in Deiner TF-Tabelle das #B und andere Indentitäten nochmals aufgeführt? Bei der Chromatischen Stimmung sind das doch dieselben Töne.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.