Töne - Klavier

Hallo zusammen,

Töne mit dem Arduino erzeugen ist ja kein Problem über die tone Funktion, vielleicht hat ja jemand Ahnung wie ich jetzt aber Klavierklang bekomme. Vielleicht hat ja jemand ein ähnliches Problem und kann seine Lösung(sansätze) hier teilen.

Mit freundlichen Grüßen und vielen Dank,
Ludwig

Ludwig98Mueller:
Töne mit dem Arduino erzeugen ist ja kein Problem über die tone Funktion, vielleicht hat ja jemand Ahnung wie ich jetzt aber Klavierklang bekomme.

Klavierklang bekommst du mit einem Arduino alleine gar nicht. Weil es sich - wie du ganz richtig schreibst - um KLANG und nicht nur um einen einfachen Ton handelt.
Klang ist ein "... komplexes Schallereignis ..." (Wikipedia). Die Betonung liegt auf "komplex". Voraussetzung für eine komplexe Schwingung ist aber, dass sich mehrere Wellen/Schwingungen überlagern um eben einen Klang zu erzeugen. Ein Synthesizer kann das und ist speziell dafür konstruiert. Ein Arduino kann das (aus mehreren Gründen) leider nicht. Die Möglichkeiten mit einem Arduino mehrere Schwingungen gleichzeitig zu erzeugen sind sehr beschränkt (ausserdem schafft er eigentlich nur Rechteckschwingungen).

Du könntest aber einen Synthesizer mit einem Arduino steuern - über MIDI.

Ohaaaaa, da hast du dir aber etwas gigantisches vorgenommen...

Mit der tone()-Funktion kommst du da gar nicht weiter, sondern müsstest dich Step by Step an Sound-Synthese herantasten. Zunächst müsstest du erst mal testen, wie du aus diversen Bytes erst mal via DA-Wandler entsprechende Wave-Formen erzeugen könntest. Diese dann vielleicht mit wechselnden Frequenzen, um Tonleitern zu erzeugen. So etwas habe ich schon mit Rechteck-, Sägezahn- und Dreieck-Signalen hinter mir. Das ganze klingt dann aber noch recht statisch nach so 'nem schnöden Digital-Synthesizer. Wenn es dann an Sinus geht kannst du das mit dem Arduino wahrscheinlich gar nicht mehr "in Time" realisieren, sondern müsstest evt. vorher eine Wave-Table berechnen, die dann je nach Ton schnell in den µC gelesen und umgewandelt wird. Hinzu kommen noch so "Spielereien" wie ADSR-Hüllkurve und / oder LFO (Low-Frequency-Oszillator) für Tonmodulationen und so. Und für einen "fetten" Klang brauchst du mindestens 2, besser 3 VFO (Oszillatoren) und Filter (12dB/24dB)

Eine Alternative wäre m.E. ein Teensy 3.2, der hat mehr Speicher und ist vielleicht schnell genug für solche Operationen. Ebenso wäre es vielleicht möglich, die betreffenden Samples je Ton von einer SD-Card oder ähnliches einzulesen.

Immerhin sind in den vielleicht bekannten Casio-/Yamaha-Keyboards fette Sound-Chips enthalten, die genau diese vordefinierten Wave-Tables aus dem Speicher abrufen können.

Ich spiele selbst mit dem Gedanken, mal "irgendwann" (wieder) einen Synthi zu bauen. Aber im Moment schreckt mich noch der Aufwand ab das ganze Zeugs digital aufzubereiten. Da ist es viel viel leichter, so etwa mit analogen Geräten zu bauen (wäre ja für mich nicht das erste Mal)

Ein "leichtes" Unterfangen wird es auf keinen Fall, wenn du abgesehen von hässlichem Gequieke etwas "vernünftiges" machen möchtest.

Gruß, Rudi

*Nachsatz:
Wie @uxomm schon so goldrichtig schrieb, hat KlavierKLANG absolut nix mit dem Gepiepe aus dem Arduino zu tun. Mit an Sicherheit grenzender Wahrscheinlichkeit brauchst du gleich mehrere Komponenten dazu, die sich alle synchronisieren und harmonisch zusammenspielen müssen, bevor du nur "eine" saubere Tonleiter damit spielen kannst...

Es gibt Midi-Synthesizer die den Klang verschiedener Musikinstrumente erzeugen können.
Der VS1053 ist ein solches IC SparkFun Music Instrument Shield - DEV-10587 - SparkFun Electronics
Watterott.com liefert es auf Nachfrage mit etwas längeren Lieferzeiten.
Grüße Uwe

Vielen Dank euch allen,

Das mit dem Rechtecksignal vom Arduino war mir klar, perfekter Klang zeichnet sich über Sinus Wellen aus, z.B. Die Gitarrensaite die sich in einer bestimmten Anzahl an Bögen kurzzeitig verformt und dann schwingt, also so dass eine gerade Anzahl an Bögen reinpasst, ich hab von einer bekannten das Projekt gehört eine Sinuskurve zu erzeugen, aber mit Assembler, mal schauen ob ich dort was abgreifen kann.

Gruß,
Ludwig

PS: es soll keine große Kunst hier werden, es geht nur darum einen Roboter in der Schule mit einem Startton auszustatten

Wie wäre es dann mit einem mp3 Player für den Arduino?
Das dürfte noch mit am einfachsten und billigsten sein.

Dann nimm einen kleinen MP3 Player den Du mit Arduino ansteuerst.
Grüße Uwe

PS: es soll keine große Kunst hier werden, es geht nur darum einen Roboter in der Schule mit einem Startton auszustatten

Och schaaaade... so ein Synthi wäre doch eine echte Herausforderung, egal aus welchem Gemisch "analog / digital" er entstehen würde. Aber das ist nichts für "einen alleine" und kostes sicherlich viel Zeit und Geld... :wink:

Aber wenn es nur um einen etwas "besseren" Start-Ton für deinen Robby geht - dann bau doch vielleicht eine kleine Sound-Synthese mit einem TLC7524IN. Damit habe ich bereits ohne viel Aufwand und ohne Bibliotheken schönere Töne produziert als mit "tone()".