Forum: Mikrocontroller und Digitale Elektronik Glockenklänge mit Mikrocontroller erzeugen


von Mike (Gast)


Lesenswert?

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.
1
% FM bell sound 
2
duration = 4;       % sound duration [s]
3
fs = 32000;         % sampling rate [s^-1]
4
amp = 0.4;          % amplitude
5
freq = 220;         % carrier frequency
6
fmod = 1.4;         % modulation freq relative to carrier
7
bmod = 2;           % modulation index
8
decay = 0.5;        % decay time [s]
9
t = linspace(0,duration-1/fs,fs*duration);
10
env = exp(-t/decay);    % decay envelope
11
y = amp*env.*sin(2*pi*freq*t + bmod*sin(2*pi*freq*fmod*t));
12
sound(y,fs);        % play the sound

von Olaf (Gast)


Lesenswert?

> 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

von ●DesIntegrator ●. (Firma: FULL PALATINSK) (desinfector) Benutzerseite


Lesenswert?

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

von nasd@ad.com (Gast)


Lesenswert?

SD-Karte mit WAV Samples anbinden? Dann reicht sogar ein ATTiny

von Peter D. (peda)


Lesenswert?

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

von Olaf (Gast)


Lesenswert?

> 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

von Harald A. (embedded)


Lesenswert?

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.

von Olaf (Gast)


Lesenswert?

> 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

von Ramachandran B. (ramachandran_b)


Lesenswert?

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.

von Illi (Gast)


Lesenswert?

Vielleicht am Wochenende mal eine Kirchenglocke aufnehmen und mit Matlab 
versuchen ein paar Funktionen anzufitten?

Gruß Illi

von Frank E. (Firma: Q3) (qualidat)


Lesenswert?

Vielleicht ein Kompromiss?

Also die einzelnen Glocken samplen und dann die Samples 
programm-gesteuert abspielen?

von ●DesIntegrator ●. (Firma: FULL PALATINSK) (desinfector) Benutzerseite


Lesenswert?

Illi schrieb:
> Vielleicht am Wochenende mal eine Kirchenglocke aufnehmen

wird schon am Windkrachen im Microfon scheitern

von PicoUser (Gast)


Angehängte Dateien:

Lesenswert?

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:
1
3 => int N;
2
3
for (0 => int i; i < N; i++) {
4
    BandedWG bwg => dac;
5
    2 => bwg.preset;
6
    (6 - i) * 55 => bwg.freq;
7
    (4 + i) * 5.0 / N => bwg.noteOn;
8
    32::second / 55 => now;
9
}
10
11
3 * 4 * 32::second / 55 => now;

Die (relativen) Frequenzen der 5 Moden im obigen BWG-Preset #2 sind aus:

https://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.111.2366

4.3 3-D Case I: Wine Glasses and Glass Harmonicas


https://chuck.cs.princeton.edu

https://chuck.stanford.edu

von DerEgon (Gast)


Lesenswert?

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.

von Eine Anmerkung (Gast)


Lesenswert?

Na ja, wenn du es mit Technologie aus den 70er Jahren baust, bekommst du 
halt den typischen 70er Synthesizer Sound.

von Eine Anmerkung (Gast)


Lesenswert?

> 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.

von Sebastian (Gast)


Lesenswert?

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.

von Yalu X. (yalu) (Moderator)


Lesenswert?

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)

von Christoph db1uq K. (christoph_kessler)


Lesenswert?

Beitrag "Tür-Gong-IC o.ä. gesucht"

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.

: Bearbeitet durch User
von Eine Anmerkung (Gast)


Lesenswert?

> 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.

von c-hater (Gast)


Lesenswert?

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.

von Karl B. (gustav)


Lesenswert?

Sebastian schrieb:
> Typisch für Glockenklang sind die subharmonischen Anteile.

Ähh.
Genau das dachte ich beim Abhören des wav files oben.
https://www.mikrocontroller.net/attachment/571540/foo.wav
Nen Tick tiefer der letzte Ton und es wird eher ein runder Klang draus.
Temperierte Stimmung vergessen! Sonst schwirren die Terzen etc.
Stichwort:
Hermode
http://www.hermode.com/

ciao
gustav

von Gerald B. (gerald_b)


Lesenswert?

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.

von DerEgon (Gast)


Lesenswert?

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"?

von Grummler (Gast)


Lesenswert?

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.

von Stefan F. (Gast)


Lesenswert?

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.

von WF88 (Gast)


Lesenswert?

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

von Mani W. (e-doc)


Lesenswert?

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...

von michael_ (Gast)


Lesenswert?

Früher gab es mal programmierte Chip mit allen möglichen Sounds.
Hundegebell, Schiffssirene, Kojek usw.
Vielleicht auch Glocken.

von Axel R. (axlr)


Lesenswert?

michael_ schrieb:
> Schiffssirene, Kojek usw.

"Kojek" fetzt. ich kenn nur "Oleg und Bolek" 😊

von J. S. (engineer) Benutzerseite


Lesenswert?

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.

von PicoUser (Gast)


Lesenswert?

Karl B. schrieb:
> Temperierte Stimmung vergessen!

War doch reine und nicht temperierte Stimmung (eine Oktave tiefer als 
die 660/550/440 Hz beim SAE800). Für Melodien tönt es halt besser, wenn 
die unteren Moden fast ganzzahligen Vielfache der Grundfrequenz sind 
(wie bei den unterschliffenen Klangplatten beim Vibraphon, siehe z.B. 
10.1119/1.2339497). Preset #3 (Klangschale) benutzt 12 Resonatoren (d.h. 
einfache angestoßene rückgekoppelte Biquads, optional mit 
Verzögerungsketten) für einen reicheren Klang.

https://www.dafx.de/papers/DAFX02_Serafin_Wilkerson_Smith_bowl_resonators.pdf

http://wissenschaft-schulen.de/alias/material/schwingungen-von-weinglaesern/1192461

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
Noch kein Account? Hier anmelden.