Ich bastele gerade an einer Wanduhr, die ich mit einem (elektronischen)
Schlagwerk ausstatten will. Idealerweise soll sie jede Stunde eine
kleine Melodie spielen. Natürlcih kann man das einfach sampeln und
abspielen, aber das würde den ROM-Speicher sprengen. Nun suche ich nach
einer Methode, wie sich auf einfache Art glockenähnliche Töne
produzieren lassen.
Dabei bin ich auf die FM-Synthese gestossen, wie sie in den 80er Jahren
mal modern war und uns den typischen Synthie-Sound der damaligen Zeit
beschert hat. Vielleicht erinnert sich noch jemand an den legendären
Yamaha DX7. Dabei wird die Frequenz fb eines Sinusoszillators durch
einen weiteren Oszillator fm mit recht großem Modulationsindex b
moduliert.
y(t) = a*sin(2*Pi*fb*t + b*sin(2*pi*fm*t))
Allerdings handelt es sich dabei um eine Phasenmodulation, nicht FM. Ich
habe mal mit Matlab gespielt (s.u.), bei tiefen Frequenzen (220Hz)
klingt das schon einigermaßen, bei höheren (660Hz) aber eher nach Kuh-
als nach Kirchenglocke. Dem Klang fehlt noch die Fülle.
In der Praxis scheint es deutlich komplizierter zu sein, da mehrere
Oszillatoren das Signal modulieren, die auch noch unterschiedliche
verschaltet sein können. Ich finde das hochinteressant, konnte aber
keine gute Beschreibung finden. Etwas steht sich im Yamaha-Datenblatt:
https://map.grauw.nl/resources/sound/yamaha_ymf262.pdf
Mehr Oszillatoren bedeudet aber auch mehr Parameter, an denen man drehen
kann. Kennt jemand Literatur, die die Methode von der
technischen-mathematischen Seite beschreibt?
Zur Verfügung steht übrigens ein STM32F4 mit I2S und ein digitaler
Verstärker (MAX98357). Die nötige Rechenleistung müsste der µC spielend
erbringen können.
> Kennt jemand Literatur, die die Methode von der> technischen-mathematischen Seite beschreibt?
Noe, kenn ich nicht. Aber es haben sich wohl einige Leute
Muehe gegeben die alten Yamaha ICs in Microcontrollern
oder FPGAs zu emulieren. Wenn du so eine Emulation nimmst
dann koennte es ja mit alten Standardeinstellungen fuer so eine
Glocke passen.
Olaf
Es gibt doch genügend "Soundspeicher-IC's".
Dann MP3-Player, die man bestimmt so antriggern kann, dass die
nur diese eine gespeicherte "Glocke" als Sounddatei
so zeitnah abspielen können, wie der Minutenzeiger (Analoguhr?)
auf der 12 steht.
In dem Falle ist doch längst alles von Engelsglöckchen
am Weihnachtsbaum bis zum Dicken Pitter alles als Sound im Web
hinterlegt
Mike schrieb:> Natürlcih kann man das einfach sampeln und> abspielen, aber das würde den ROM-Speicher sprengen.
Es gibt doch externen Flash, z.B.:
1MB: W25Q80DVSNIG
16MB: W25Q128JVSIM TR
> Dann MP3-Player, die man bestimmt so antriggern kann, dass die
Ja diese DFPlayer. Verwende ich als Tuerklingel. Geht auch soweit gut.
Allerdings muss man da Etwas eigene Elektronik vorbasteln weil deren
Ruhestrom krass hoch ist. Macht man es richtig so reicht dann eine
Lithiumzelle fuer viele Jahre.
Aber Klangsynthese direkt mit dem Controller hat auch was!
Vor allem wenn man bedenkt was man mit Biestern wie dem RP2040 so alles
bruteforce machen kann.
Olaf
Mike schrieb:> Natürlich kann man das einfach sampeln und> abspielen, aber das würde den ROM-Speicher sprengen.
Mal nach aktuellen SD-Karten Preisen gegoogelt? Google Suche „STM32F4 SD
Card FAT Example“. Wenn Du die SD-Karte nur lesend zugreifst wird das
ewig und gut funktionieren.
> einer Methode, wie sich auf einfache Art glockenähnliche Töne> produzieren lassen.> Dabei bin ich auf die FM-Synthese gestossen, wie sie in den 80er Jahren> mal modern war und uns den typischen Synthie-Sound der damaligen Zeit> beschert hat. Vielleicht erinnert sich noch jemand
Musikalisch interessant, Verzerrungen, Aliasing usw. werden gerne als
stilistisches Element eingesetzt. Allerdings als Simulation einer
Glocke, die nach Glocke klingen soll, absoluter Mist.
> habe mal mit Matlab gespielt (s.u.), bei tiefen Frequenzen (220Hz)> klingt das schon einigermaßen, bei höheren (660Hz) aber eher nach Kuh-> als nach Kirchenglocke. Dem Klang fehlt noch die Fülle.> In der Praxis scheint es deutlich komplizierter zu sein,
Ein Piano müsste ja auch relativ einfach zu synthetisieren sein, der
Mechanismus ist ja eigentlich recht primitiv. Macht man aber nicht, es
wird gesampelt. Warum wohl?
Du hast doch schon die gesamte Hardware inkl. I2S, da fehlen noch 5
Leitungen zur SD-Card und es ist hardwareseitig fertig.
> Macht man aber nicht, es wird gesampelt. Warum wohl?
Du hast natuerlich grundsaetzlich recht. Aber meinst du nicht das der
Klang bei so einer kleinen Bastelaktion in der Hauptsache an dem
ueblicherweise verwendeten Minilautsprecher liegt?
Man koennte im uebrigen auch MP3-Dekodierung in Software machen
und dann die paar Toene direkt aus dem Controllerflash abspielen.
Ein RP2040 sollte das locker schaffen. STM32 ab 50-100Mhz
vermutlich auch wenn man die Bitrate nicht unnoetig hoch mach.
Olaf
Habe das selber auch schon gemacht.
Sogar .wav files in hoher audio (CD) Qualität mit 44.1kHz/16Bit lässt
sich easy von SD-Karte selbst im Single-Wire SPI Interface in Echtzeit
lesen, wenn die SPI Frequenz hoch genug ist um es dann per I2S
rauszusenden.
Wenn man Sample-Frequenz und Bitbreite kennt, kann man mit Audacity z.B.
auch RAW-files (ohne header) generieren und muss nichtmal den wav-header
interpretieren können.
Beispiel eines transponierten Weinglas-Klanges in ChucK mit 5
bandbeschränkten Wellenleitern (oder vereinfacht auch Modal-Synthese mit
5 exponentiell verfallenden Sinus-Oszillatoren) pro Ton:
Für Klangsynthese gibt es Csound. Damit lassen sich schon sehr
anspruchsvolle Klänge konstruieren.
https://csound.com/
Prinzipiell sollte das auch auf einen µC portierbar sein, denn die
Systeme, für die das ursprünglich mal entwickelt wurde, waren keine
Raketen.
> Zur Verfügung steht übrigens ein STM32F4
Hier liegt das Problem!
Such mal nach Videos von Keith Emerson. Zum Parameter einstellen
brauchst du mehrere Quadratmeter Schalter, Drehknöpfe und Patchkabel.
Typisch für Glockenklang sind die subharmonischen Anteile. Also müssen
für ein halbwegs überzeugendes Klangbild Frequenzen zugemischt werden,
die ganzzahlige Teile des Grundtons sind, also das Gegenteil von
Obertönen.
Eine Anmerkung schrieb:>> Zur Verfügung steht übrigens ein STM32F4>> Hier liegt das Problem!
Nein, gerade hier nicht.
> Such mal nach Videos von Keith Emerson. Zum Parameter einstellen> brauchst du mehrere Quadratmeter Schalter, Drehknöpfe und Patchkabel.
Ja, das waren noch Zeiten, als ein Synthesizer noch so groß wie eine
Schrankwand war :)
Im Fall des Glockenklangs auf Basis eines Mikrocontrollers belegen die
Parameter aber weniger als einen QuadratMILLImeter im Flash. Zur Eingabe
der Parameter muss man zwar einen PC anschließen, aber der kommt nach
getaner Arbeit wieder weg.
Sebastian schrieb:> Typisch für Glockenklang sind die subharmonischen Anteile. Also müssen> für ein halbwegs überzeugendes Klangbild Frequenzen zugemischt werden,> die ganzzahlige Teile des Grundtons sind, also das Gegenteil von> Obertönen.
So ist es. Im Wikipedia-Artikel wird das sogar recht detailliert
erläutert:
https://de.wikipedia.org/wiki/Klang_(Glocke)
> Das Glockenspiel ... klingt schon recht überzeugend, finde ich.
Damit es überzeugend ist, braucht es eine Kombination aus Theorie und
Bauchgefühl.
Sicherlich hilft es, wenn man die mathematischen Theorien kennt, aber
dann kommt hinzu - damit es auf einem kleinen Lautsprecher wie eine
riesige Kirchenglocke klingt, muss man Frequenzen, Dämpfungen, Echos,
usw nach Bauchgefühl hinzufügen.
Weiß nicht, wie du am besten das Gefühl dafür entwickelst. Mir gefällt
der Spruch: "Begreifen" kommt von "anfassen".
Die Theorien zu subharmonischen Anteilen lassen sich nicht begreifen.
Besser den Verlauf einer Fouriertransformation auf einem Bildschirm
anschauen. Im Quelltext Parameter andern und kompilieren? Viel zu
Abstrakt. Besser auf einem Moog Emulator an den Knöpfen spielen und
analysieren, wieso diese Parameter bei raus gekommen sind.
Christoph db1uq K. schrieb:> Das Glockenspiel von ElmChan am Ende des Threads> http://elm-chan.org/works/mxb/report.html> klingt schon recht überzeugend, finde ich.> "I could achieve to generate a sound like music box."> mit Wavetable-Synthese auf einem ATtiny45.
Ja, das klingt auch ziemlich nett. Ein sehr ähnliches Grundkonzept wie
das, was ich (allerdings erst Jahre später) hier verwendet habe:
Beitrag "Westminster Soundgenerator mit ATtiny85"
Die Unterschiede sind im Wesentlichen: der trade-off zwischen der
Kanalzahl und der Samplerate ist bei mir ein wenig anders ausgefallen
und ich verwende keine generierte Hüllkurve, sondern habe sie für jede
Frequenz der Generatorbank einzeln aus dem Original-Sound von BigBen
extrahiert.
Wenn es Q&D sein darf, dann nimm einen Piezosignalgeber mit eingebautem
Tongenerator, der Dauerton macht. Den steuerst du mittels
Schalttransistor oder Gatterausgang an und lötest einen Elko von
versuchsweise 470µF parallel. Das war der passende Wert bei mir, als ich
mein Eigenbau TTL-Grab in den 80'ern mit einem Schlagwerk ausgestattet
hatte.
Mit dem Stundenübertragspimpuls 2x 74192 getriggert, die die Stunden als
BCD Code übernommen haben und dann ca. im Sekundentakt count down
gezählt und bei Null angehalten haben, bis sie die nächste Stunde oder
auf Knopfdruck erneut getriggert wurden.
Gerald B. schrieb:> Wenn es Q&D sein darf, dann nimm einen Piezosignalgeber mit eingebautem> Tongenerator, der Dauerton macht.
Warum erkenne ich darin keinen "Glockenklang"?
Mike schrieb:> Mehr Oszillatoren bedeudet aber auch mehr Parameter,> an denen man drehen kann. Kennt jemand Literatur, die> die Methode von der technischen-mathematischen Seite> beschreibt?
Nein, das nicht -- aber wenn Du schon Samples von "guten"
Klängen hast, könnte man mit Monte-Carlo-Verfahren
(simuliertes Abkühlen o.ä.) versuchen, eine Konfiguration
zu finden, die diesen Klang möglichst genau erzeugt.
Man könnte es strunz doof mit einem 24 Stunden langen MP3 File auf SD
Karte und einem MP3 Player machen. Das dann in Endlosschleife abspielen.
Aber das wäre ja zu einfach.
Stefan ⛄ F. schrieb:> Man könnte es strunz doof mit einem 24 Stunden langen MP3 File auf> SD Karte und einem MP3 Player machen. Das dann in Endlosschleife> abspielen.> Aber das wäre ja zu einfach.
Da sollte man einmal genau über die Synchrinisierung nachdenken und dann
halte ich das für eine gute Lösung.
Eine Digital-Uhr mit Sekundenanzeige würde mich nerven, wenn ich zweimal
im Jahr von Hand nachstellen müsste.
Bei einem AA-Batterie-billo-Plastik Zeiger-Uhrwerk in eine Schallplatte
geschraubt wäre mir das herzlich egal, ab und zu mal die Zeiger mit dem
Zeigefinger anpassen ;)
Mike schrieb:> Dabei bin ich auf die FM-Synthese gestossen, wie sie in den 80er Jahren> mal modern war und uns den typischen Synthie-Sound der damaligen Zeit> beschert hat.
Dazu war der Ringmodulator zuständig...
Am Einfachsten und Ungenauesten geht es mit der PD-Synthese aus den
CasIo-Keyboards:
https://en.wikipedia.org/wiki/Phase_distortion_synthesis
In deinem Fall einfach 2 Sinuswellen mit z.B. einem Verhältnis von 3:2
oder 4:3. Allerdings sind auch das hell klingend Glockenklänge und die
Oberwellen sind starr an die Grundwelle gekoppelt.
Mit der (von Yamaha nicht erfundenen aber alleinig lizenserten) FM bist
du auf dem richtigen Weg, weil die flexibler modulierbar ist (was aber
richtig gemacht werden muss, sonst klingt es schlechter) - allerdings
bringt auch die nur eine hart verkoppelte Konstellation der OW zu den
GW.
In beiden Fällen kann man das mit entsprechenden Resonatoren
unterstützen, z.B.
Mani W. schrieb:> Dazu war der Ringmodulator zuständig...
eine Möglichkeit, wobei man dann für jeden Ton einen eigenen braucht.
Richtig vernünftig geht es mit einigen frei laufenden Primärsozillatoren
die auf die richtige Frequenz gestimmt werden und sich gegenseitig
Energie austauschen, sowie weiterer Resonatoren auf jeweils gleicher
Frequenz so, dass sie das Längsverhalten der Glocke abbilden. Das ergibt
ein 2-dimensionales Maschensystem, das man sich um die Längsachse
rotiert als Glocke vorstellen kann. So macht man es in Physical
Modelling Synthesizern. Noch genauer geht es mit einem FEM-Modell, wobei
man dann die Wandstärken mitberücksichtigen muss und nicht von fertigen
richtigen Frequenzhöhen ausgehen kann.
Etwas einfacher wiederum geht es mit einer unrichtigen aber im Idealfall
akzeptablen händischen Energieverteilung so, dass man z.B. 8
Oszillatoren der beteiligten Frequenzen tieffrequent auf- und
abschwellend moduliert und insgesamt langsam ausklingen lässt - wobei
die hohen Töne schneller verschwinden. Dann hat man die Schwebungen so
ungefähr. Das war die Vorgehensweise in den 90ern bei den VA-Synths mit
weniger Rechenleistung - Ein OSC, ein MOD eine ADSR und davon einfach
mehrere Stimmlayer.