www.mikrocontroller.net

Forum: Digitale Signalverarbeitung / DSP mehrere Töne gleichzeitig wiedergeben


Autor: Thimo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich möchte ein Klavier bauen, das wie folgt funzt:

Taste 1 drücken - Ton 1 wird abgespielt.
Taste 2 drücken - Ton 2 wird abgespielt.
Taste 1 und 2 gleichzeitig drücken - Ton 1 und 2 werden abgespielt.

Am besten der Ton ist kein Piepen, sondern klingt so, wie der richtige 
Sound eines Klavier. (Ton auf nehmen - wav - wiedergeben)
Ich habe ca 40 Tasten :-)
was ist die preiswerteste Lösung das zu realisieren?

Ich bin totaler Anfänger was Mikrocontroller angeht bzw. DSPs

Vielen Dank

Thimo

Autor: Michael O. (mischu)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn es nur um den Preis geht....
http://www.thomann.de/de/casio_sa_45.htm

Wenn nicht - kann was aufwendiger werden.

Mit Klavierton aufzeichnen und bei Tastendruck wiedergeben wird es nicht 
getan sein. Dein Sample hat nur eine endliche Länge. Wird die Taste sehr 
lange gehalten, musst Du das sample natlos wiederholen - ohne Klicken 
oder andere Artefakte.

Die Wiedergabe aber perfekt wie ein Piano klingen lassen, das bekommen 
teilweise nicht mal etablierte Firmen hin - wie soll das dem Hobbyisten 
mit einem Bastelprojekt gelingen??

Normalerweise hätte ich dir zu einem ATMEGA geraten. Allerdings 
benötigst Du relativ viel Speicher für die Klänge - die werden 
vermutlich nicht mehr in den internen Flash passen. Mehrere Töne mischen 
bekommt man auch ohne DSP hin.
Für einen ordenlichen Klang benötigst Du aber eine vernünftige 
Abtastrate (Richtung 32...48kHz), mehrere Tasten heisst - Berechnung für 
mehrere Kanäle durchführen. Der Haken fängt mit einer Anschlagdynamik 
an. Die muss sauber gemessen, ein Modell berechnet werden und mit dem 
Wavesample verknüpft werden. Sollen dann noch Oberwellen hinzu gefügt 
werden wird es anstrengend.

Eigentlich ein schönes Endlosprojekt um in die DSPtechnik einzusteigen 
:)

Autor: mki (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du kannst ja versuchen die Töne mathematisch zu beschreiben. Um bei 
deinem kleinen Beispiel zu bleiben etwa so:

Ton_1 = sin(omega_1*t)
Ton_2 = sin(omega_2*t)

Und beide zusammen:
Ton_3 = sin(omega_1*t)+sin(omega_2*t)

Das sind bei 40 Tönen zwar sehr viele Berechnungen aber du sparst die 
den Speicherplatz für deine wav Dateien.

Autor: eProfi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ein solches Projekt kenne ich für Kirchen-Orgel-Simulation auf PC-Basis:
Hauptwerk - the world's most advanced virtual pipe organ.
http://www.hauptwerk.com/

Könnte -mit einigen Anpassungen- auch für Piano funktionieren.

Der Aufwand richtet sich danach, wie real es klingen soll.

wavetables wäre der erste Begriff zum Suchen.

Autor: MaWin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> was ist die preiswerteste Lösung das zu realisieren?

Ein (alter) PC.

Dir ist aber schon klar, daß das mit einem Klavier so viel Ähnlichkeit 
hat, wie eine Autohupe mit einer Trompete?

Autor: Gerrit Buhe (gbuhe)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Thimo,

Du kannst in der Numerik bzw. digitalen Signalverarbeitung einfache 
saubere (Sinus-)Töne mit Hilfe von digitalen Oszillatoren erzeugen. Dazu 
sind pro Oszillator nur zwei Speicherstellen und wenige matehmatische 
Operationen pro Abtastwert aufzuwenden. Das sieht dann z.B. so aus:

Y(n) = SIN_OMEGA*dirac(n) + 2*COS_OMEGA*Y(n-1) - Y(n-2)

SIN_OMEGA und COS_OMEGA sind Konstanten. SIN_OMEGA*dirac(n) ist der 
Initialwert, der die Amplitude bestimmt.

SIN_OMEGA = sin(2*pi*fc/fs)

mit fc - gewollte Oszillatorfrequenz, fs - Abtastrate

COS_OMEGA bestimmt die Oszillatorfrequenz: COS_OMEGA = cos(2*pi*fc/fs)

Wenn Du beide Konstanten ausgerechnet hast und SIN_OMEGA in die 
Speicherstelle Y(n-1) schreibst, mußt Du nur für jeden Abtastwert des 
Oszillators folgendes rechnen:

Y(n) = 2COS_OMEGA*Y(n-1) - Y(n-2)

Es bleibt also nur eine Multiplikation und eine Subtraktion pro Sample 
zu rechnen und ein perfekter Sinus kommt heraus. Natürlich mußt Du bei 
jedem Durchlauf Y(n-1) in die Speicherstelle Y(n-2) und Y(n) nach Y(n-1) 
für den nächsten Durchlauf schieben.

Versuche es einfach mal in der numerischen Simulation aus 
(www.scilab.org, oder www.octave.org).
Da es sich um eine rückgekoppelte Struktur handelt (IIR), ist die 
Amplitude und Frequenz nicht ohne weiteres modulierbar. Das ganze System 
würde instabil werden.

Mit einem Klavierton hat das natürlich nichts zu tun, sondern mit ganz 
sauberen Sinustönen.

Viele Grüße!

Gerrit, DL9GFA

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.