Forum: Mikrocontroller und Digitale Elektronik Digital/Analog Ton-Schläge bestimmen


von Walter L. (wallew)


Lesenswert?

Guten Tag, ich bin Frischling, also einmal blutiger Anfänger, und offen 
für jede Hilfe, lernfähig, leistungsbereit,kooperativ. Der Weg ist das 
Ziel, mir gehts also ums Basteln und Lernen.

Es geht um folgende Herausforderung:

Wenn man Klavier spielt, oder Violine, oder sonstiges, dann führt man 
bestimmte Bewegungen mit den Finger und den Händen aus. Diese Bewegungen 
sind Tastenschläge, Bogenstriche, Finger die auf Saiten fallen, etc.

Diese Bewegungen der Finger will ich nun in digitaler Form in einem 
Array gespeichert haben. Aber ohne dass ich Sensorische Handschuhe oder 
sowas trage die meine Tastenschläge registrieren. Sondern nur über das 
Audiosignal.

Wo findet ein Tastenschlag im Audiosignal statt? Da wo eine neue Noten 
erklingt.
Man spielt z.B. ein A, dann ein E#. Es sind 2 Events geschehen. Im 
Audiosignal hört man zunächst "nichts", dann ein A. Das ist eine 
Änderung von "nichts" auf A.
Dann spielt man E#, das ist eine Änderung von A auf E#.

Man kann sogar dann als drittes Event A und E# gleichzeitig anschlagen, 
dann ist das eine Änderung von E# auf eine Addition von A und E#.

Diese 3 Events will ich dann in einem Array als den Zustand 1 
abspeichern.

Es sollen z.B. 4 Takte eines Musikstücks analysiert werden, die 
insgesamt 12 Sekunden dauern. Das Array soll meinetwegen im 
Millisekundenbereich getaktet sein. Das heißt es wird jede Millisekunde 
geguckt, ob grade eine Event passiert ist oder nicht.
Wenn ja, 1, wenn nein 0. Nein heißt: Keine neue Taste wurde 
angeschlagen, die selbe erklingt weiter.
Wenn der Finger von der Taste abgehoben wird,d.h. wenn der Ton schnell 
ausklingt, dann ist das eine 1,keine 0, denn es hat ein Event/Änderung 
stattgefunden, nämlich von einem Ton zu "nichts".

Bei 12 Sekunden hätte das Array 12000 Slots.

Wie kann man sowas umsetzen?

Beschränken wir uns erstmal auf die Geige.
Wie filter man am besten die Audiosognale raus die man braucht? Die 
Geige klingt z.B. zwischen 100 Hz und 2600 Hz. Kann man das analog 
machen, in dem man einfach einpaar Tief und Hochpässe parallel schaltet, 
die jeweils einen Frequenzbereich abdecken?
Sind Fouriertransformationen nötig? Mich würde es interessieren wie man 
diese mit einfließen lässt. Wo finden die Fouriertransformationen z.B. 
statt? Kann man die irgendwie analog umsetzen? "Analoge 
Fouriertransformation"... muss ich mal googeln.

Ich hab so wenig Ahnung, und entsprechend viele Fragen. Alle 
elektrotechnisch nötigen Mittel werden vorhanden sein. Das einzige was 
fehlt ist mein KnowHow.

Ich kann mir noch nicht vorstellen wie die fertige Platine am Ende 
aussieht. Wie würde sie ungefähr aussehen? Was ist alles nötig?

Ich würde mir über Hilfe,Tipps,und Erläuterungen freuen.

Danke im Voraus

Mit freundlichen Grooves, wallew

PS: falls ich im falschen Forumsbereich bin, und eher in den analogen 
Bereich oder sonst was gehöre, entschuldigung, denn ich weiß ja selbst 
nicht wo mein Projekt einzuordnen ist. Eher in beide. Vielleicht sogar 
was mit DSP.

von Frank K. (fchk)


Lesenswert?

Das Stichwort heißt Kurzzeitspektralanalyse. Heißt also: Du nimmst n ms 
an Abtastwerten, wendest die FFT darauf an und schaust, was Du für ein 
Betragsspektrum bekommst (die Phase interessiert Dich ja nicht).

Da wirst Du dann ein Frequenzgemisch bekommen, aus dem Du dann den 
Grundton (oder bei mehreren Noten gleichzeitig die Grundtöne) 
herausfinden musst.  Bei mehreren gleichzeitig gespielten Noten ist das 
eine nicht triviale Aufgabe.

Bei der FFT ist noch etwas zu beachten: Du nimmst ja nur ein kurzes 
Audiostück. Damit multiplizierst Du Dein Eingangssignal quasi mit einer 
Rechteckfunktion. Im Frequenzbereich ergibt das eine Faltung mit einer 
(sin x)/x Funktion, was Dir Dein Spektrum versaut. Wenn Du anstelle der 
Rechteckfunktion eine andere "Fensterfunktion" verwendest, verringerst 
Du diesen Effekt.

Das ganze hat bis hierhin noch nichts mit angewandter Schaltungstechnik 
zu tun, sondern ist primär Signaltheorie und damit zu 90% höhere 
Mathematik. Dafür gibts Bücher, die Du durcharbeiten und verstehen 
solltest - dieses Forum kann das nicht leisten. Elektronik brauchst Du 
nicht, ein PC oder Mac und ein Mikrofon zum Aufnehmen von 
Audiobeispielen sind alles, was Du brauchst.

Und natürlich solide Mathematikkenntnisse - ohne die bist Du verloren.

fchk

von Walter L. (wallew)


Lesenswert?

"wendest die FFT darauf an und schaust, was Du für ein
Betragsspektrum bekommst "

Das habe ich jetzt nicht verstanden. Wofür brauch ich eine 
Spektralanalyse? Ich will doch nicht ein Betragsspektrum eines 
Musikabschnitts wissen, sondern die genauen Zeitpunkte, an denen neue 
Noten einsetzen. Ein Betragsspektrum gibt mir ja keine Aussage darüber, 
wann eine bestimmte Änderung passiert ist.

Kann sein dass ich aufgrund meiner Unwissenheit hier etwas 
missverstanden habe.

Im Prinzip braucht man ja "nur" eine Art Stimmgerät, das sehr schnell 
reagiert, höhere Harmonische ignoriert, und polyphon ist, also mehrere 
Töne wahrnimmt.
Auf einer Geige schafft man höchstens 6 Töne zu überlappen. Kommt auch 
auf den Raum an, in dem gespielt wird. Können also etwas mehr als 6 
sein.
Auf einem Klavier ist es mit Abstand mehr.
Es geht aber nicht unbedingt darum, einen zweiten oder dritten 
hinzugekommenen Ton unbedingt als solchen zu identifizieren. Es geht nur 
darum zwischen Vorher und Nachher zu unterscheiden. Vorher war es 1 Ton, 
aufeinmal mischt sich was dazwischen und die Summe der beiden Töne 
Nachher ist signifikant anders als Vorher.

von abcd (Gast)


Lesenswert?

Was Du suchst geht ungefähr in die Richtung "Onset Detection". Hier mal 
ein Paper dazu, das ich jetzt auf die schnelle gefunden habe und in die 
richtige Richtung geht:

http://nagasm.org/ASL/icmc2003/closed/CR1047.PDF

Die Kurzzeitspektralanalyse bzw. das Spektrogramm ist auf jeden Fall ein 
wichtiges Werkzeug. Dazu gibt es genug Literatur und Infos im Internet. 
Das solltest du verstehen bevor Du Dich an Dein eigentliches Problem 
wagst.

von Walter L. (wallew)


Lesenswert?

Achso. Die Spektralanalyse bezieht sich nicht auf den Takt, sondern nur 
auf die Millisekunde?

PS: Vielen Dank für das Paper.

von Björn R. (sushi)


Lesenswert?

So richtig Musiker bist du aber auch nicht, oder? E# gibts nicht, da 
bist du schon beim F. Zwischen E und F und zwischen H(int. B) und C 
gibts keine Halbtöne...

Insgesamt ein nicht ganz triviales Thema, was du dir da ausgesucht 
hast.Vielleicht solltest du für den Anfang etwas einfacheres versuchen, 
mit dem großen Ziel, irgendwann deine Musikerkennung zu bauen?

LG, Björn

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Björn R. schrieb:
> So richtig Musiker bist du aber auch nicht, oder? E# gibts nicht, da
> bist du schon beim F. Zwischen E und F und zwischen H(int. B) und C
> gibts keine Halbtöne...

Es gibt 'richtige' Musiker, die keine einzige Note lesen/schreiben 
können. Diese Truppe macht Musik quasi aus dem Bauch heraus und das 
oftmals sehr gut ;-)

von Walter L. (wallew)


Lesenswert?

Achso, muss ich mich hier auch noch rechtfertigen?
E# ist trotzdem eine mögliche Notation. Damit wird zwar das F 
beschrieben, manchmal ist diese Notation aber sinnvoller als ein F, da 
man beim Notenlesen z.B. Intervalle besser erkennen kann,da sich die 
Augen an Notenabstände auf den Notenlinien gewöhnen. So ist es z.B. 
einfacher eine Quinte zu erkennen. Würde man ein F notieren, wäre der 
Abstand (in mm) größer. Das Auge bräuchte länger um die Quinte zu 
erkennen. E# vereinfacht also das Notationssystem. So gibt es z.B. 
Tonarten die ein "erhöhtes E" besitzen. Damit ist das F gemeint. Notiert 
wird es aus systematischen Gründen trotzdem als E#.

Du hast recht, ich kann nicht viel mit Noten anfangen. Dafür ist mein 
musikalisches Gehör stark ausgeprägt. Somit sind für mich meistens keine 
Noten notwendig. Passiert alles per "Raushören", oder wie Knut sagen 
würde " aus dem Bauch heraus". Nur manchmal in schnellen, komplexen 
Passagen schau ich mal drüber.

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

James Karl Maxiwell schrieb:
> Achso, muss ich mich hier auch noch rechtfertigen?

Ist nicht neu hier - leider...

von Martin M. (capiman)


Lesenswert?

Lade dir mal "Audacity" herunter (gibt es für Windows, Mac, Linux).
Dort hast du die Möglichkeit, eine Audio-Aufnahme zu erstellen
und dir die enthaltenen Frequenzen anzeigen zu lassen.

http://audacity.sourceforge.net/

und

http://manual.audacityteam.org/man/Plot_Spectrum

von Walter L. (wallew)


Lesenswert?

Jo, bin schon dabei. Da gibts die Funktion der Spektralanalyse. Aber was 
soll ich da analysieren? Es macht ja keinen Sinn einen ganzen 
Musikabschnitt zu spektrographieren. Ich müsste Diesen Abschnitt in 
kleinere Abschnitte zerlegen, und diese spektrographieren, um die 
Auflösung zu erhalten, die man braucht, um eine Notennänderung zu 
erfassen. Ich sag mal... wenigtens in 100ms Abschnitte. Muss man das per 
Hand machen? oder gibts bei Audacity Möglichkeiten, Abschnitt von 
Abschnitt zu trennen?

Übrigens: das Paper auf das mich abcd hingewiesen hat:

http://nagasm.org/ASL/icmc2003/closed/CR1047.PDF

ist genau das richtige. Allerdings müsste ich mir nochmal die Herleitung 
und Implementation der Formeln anschauen. Man erfährt außerdem nicht, 
wie er genau diese Analyse gemacht hat, hat er sowas wie Labview 
benutzt?

von Frank K. (fchk)


Lesenswert?

Matlab ist das Tool der Wahl in der Signalverarbeitung.

fchk

von abcd (Gast)


Lesenswert?

Frank K. schrieb:
> Matlab ist das Tool der Wahl in der Signalverarbeitung.
>
> fchk

Oder alternativ Octave ( http://www.gnu.org/software/octave/ ) wenn man 
keine Matlab Lizenz zur Verfügung hat.

von Abdul K. (ehydra) Benutzerseite


Lesenswert?

Ich denke auch, Notenlesen hat mit Musikmachen erstmal nichts zu tun. 
Mein Nachwuchs kann z.B. gerade die Noten absehen und spielen, aber sie 
nicht benennen! Ist aber ein anderes Thema.

Solche Software gibt es doch schon. Da gibts eine die überprüft, ob 
jemand richtig spielt und das automatisch benotet (Schulnoten ;-) Jain, 
sie setzt auch die falsche gespielte Note ins Notenblatt neben die 
korrekte Note.

Reicht die sowas nicht?

von Walter L. (wallew)


Lesenswert?

Ach das gibts wirklicH? Mist.Aber nicht für im-Takt-Spielen oder?
Aber nein, das reicht mir nicht, ich treffe alle Noten. Allerdings wäre 
eine Taktüberwachung eine gute Hilfe, Geschwindigkeit aufzubauen.

Die Noten zu treffen ist nicht das Problem ,das ich angehen will sondern 
eine im-Takt-sein-Überprüfung.

von Walter L. (wallew)


Lesenswert?

Ich weiß aber immernoch nicht ob diese aufwändigen Rechenarbeiten 
wirklich nötig sind. Ich schwanke jetzt zwischen 2 Wegen: entweder ich 
geh den STFT-Weg, oder vertiefe meinen ursprünglichen Gedanken:

Mein ursprünglicher Gedanke war, dass ich die Eigenschaften eines 
Stimmgeräts ausnutze. Ich will ja nicht ne kontinuierliche 
Spektralanalyse, sondern ich weiß ja von vornherein schon welche Töne, 
bzw welche Frequenzen auftreten werden. Ein Klavier hat z.B. 88 Tasten. 
Man muss also nur nach diesen 88 Frequenzen suchen. Dazu kommen noch 
kleine Abweichungen von höchstens +-20 cent, alles andere ist verstimmt. 
Wir gehen von gut gestimmten Instrumenten mit gut intonierten Solisten 
aus.
Wenn man eine Taste anschlägt, kommt am Anfang so viel Scheisse an 
(Scheisse die den guten Klang ausmacht, aber in der digitalen Analyse 
nur im Weg steht). Kann man das nicht einfach verwerfen? Einfach nen 
Filter für jede Taste, 88 Pässe, die parallel arbeiten. Ist mein Gedanke 
hirnrissig?Um eine Spektralanalyse wird man wohl nicht herum kommen, 
aber wenigstens den Input säubern?

EDIT:
Eine kleine Ergänzung zu meinem ursprünglichen Gedanken. Ich hab meine 
Idee in einer schlaflosen Nacht mal weiter vertieft. Dabei ist mir ein 
einfacher Weg eingefallen, Fouriertransformationen völlig weg zu lassen.
Gleichzeitig sind mir einige Schwachpunkte aufgefallen.
1.Die Einschwingzeit
2.Die Zuverlässigkeit und das Rauschen. Ein Filter verursacht manchmal 
fehlerhafte Ergebnisse... z.B. durch Umwelteinflüsse, oder durch die 
Laune der Natur. Bei 88 Filtern dagegen ist die Wahrscheinlichkeit für 
Fehler praktisch vorprogrammiert hoch.
3.Wenn man 88 Filter nebeneinander stehen hat, beeinflussen die sich 
nicht gegenseitig? entweder durch Dipolstrahlung, oder einfach dadurch 
dass sie scahltungsmäßig nicht voneinander getrennt sind? Es kommt auch 
drauf an wie die genau verschaltet sind.
Dazu habe ich mir folgende Schaltung überlegt:

Es ist nicht so kompliziert, dass man es als Skizze hochlädt.
Jeder der 88 Filter, der aus einem Kondensator und Spule besteht ist mit 
dem einen Ende an einem Operationsverstärker verbunden, der die 
Audiosignale verstärkt.
Die anderen Enden der Filter sind jeweils mit einem FlipFlop verbunden, 
der den Zustand der Filter (ob sie in diesem kleinen Zeitraum momentan 
angesprochen sind oder nicht) digitalisiert speichert. Der FlipFlop 
sollte eine gewisse Mindestspannung haben, damit nicht jedes kleine 
Etwas als Zustand 1 gespeichert wird.

Über diesen 88 Flipflops sind nochmal 88 FlipFlops, die den vorherigen 
Zustand speichern.

Diese 2 Reihen von 88 FlipFlops sind mit 88 Vergleichsoperationen 
verbunden, eine einfache "="-Operation. Also jeder Flipflop ist mit 
seinem Partner aus der darüberliegenden Reihe über diese 
Vergleichsoperation verbunden.

Jeder Vergleich liefert jeweils 0 oder 1. Man muss insgesamt 88 
Vergleichsoperationen überprüfen. Diese 88 Vergleichsergebnisse laufen 
in einen 7-bit Addierer, mit 88 Eingängen.

Je mehr Unterschiede zum vorherigen Zustand der gespielten Töne 
festgestellt werden, umso höher ist die Summe des Addierers. Diese Summe 
wird von einem Microcontroller in einen Datensatz mit zeitlicher 
Auflösung verwandelt. Also im Prinzip eine 2-Darstellung der Events. 
X-achse = zeit
Y-achse= Events, und deren Signifikanz(Summe der Unterschiede).

Im nächsten Schritt wird die Reihe Flipflops, die eben grade beschrieben 
wurde so gelassen wie sie ist. Stattdessen wird die andere Reihe, die 
nochweiter vorher beschrieben wurde, neu beschrieben. Die beiden werden 
wieder verglichen ... usw.

von Hannes L. (hannes)


Lesenswert?

Suche doch mal bei Tante G00-GEL nach "wav to midi converter".

...

von Walter L. (wallew)


Lesenswert?

danke, das könnte helfen. jetzt nur die frage: wie kann man das als 
echtzeit version umsetzen?

von Walter L. (wallew)



Lesenswert?

Aber würde trotzdem gerne wissen ob meine Methode überhaupt in Frage 
kommt. Denn das Umwandeln in Midi erfordert wieder rechnungsaufwändige 
Spektranalysen. Und es wird sehr unsaubere Ergebnisse geben wie ich 
grade festgestellt habe:
http://www.pluto.dti.ne.jp/araki/amazingmidi/

Das Programm ist sehr gut. Allerdings in Sachen Takt nicht so genau. Hab 
grade z.B. Bachs Invention Nr 8 in Midi umwandeln lassen, hab die midi 
datei im anhang. Als Mensch, und als jemand der das Original kennt, 
lässt sich der Takt wiedererkennen. Als Maschine wirds schwer.


Außerdem beinhaltet midi zu viele Informationen. Ich will ja nicht die 
Noten an sich wissen, sondern nur ob sie sich verändert haben.

von Frank K. (fchk)


Lesenswert?

James Karl Maxiwell schrieb:

> bzw welche Frequenzen auftreten werden. Ein Klavier hat z.B. 88 Tasten.
> Man muss also nur nach diesen 88 Frequenzen suchen. Dazu kommen noch

Meep. Da sieht man, dass Du keine Ahnung hast. Wenn Du am Klavier eine 
Taste drückst, kommt ein Frequenzgemisch heraus. Du hast einen Grundton 
und viele, viele Obertöne. Deine Vorstellung würde nur stimmen, wenn Du 
reine Sinustöne erzeugen würdest. Tust Du aber nicht.

Beschäftige Dich erst einmal mit der Theorie. Lies das hier:

http://www.dspguide.com/

Und ja, an einem Wochenende ist das nicht geschafft.

fchk

von Paul Baumann (Gast)


Lesenswert?

Eine Geige ist leichter als ein Klavier und eignet sich deshalb auch
besser als eine Orgel für leichte Musik.

;-)
MfG Paul

von Walter L. (wallew)


Lesenswert?

fchk schrieb:

>Wenn Du am Klavier eine
>Taste drückst, kommt ein Frequenzgemisch heraus. Du hast einen Grundton
>und viele, viele Obertöne. Deine Vorstellung würde nur stimmen, wenn Du
>reine Sinustöne erzeugen würdest. Tust Du aber nicht.

Ja das mit den Obertönen ist mir schon klar (Geige-und-Klavier-Spieler), 
ich sagte ja "da kommt viel Scheisse an, die zwar den guten Klang 
ausmacht, aber für Signalverarbeitung nur im Weg steht".

Diese Obertöne werden doch durch den Filter ausgelöscht, oder nicht? Der 
Filter lässt nur eine Frequenz passieren.

Oder meinst du, dass die Obertöne eines tiefen Ton eventuell die Filter 
eines höheren Tons ansprechen? Ja, das wäre ärgerlich, aber dennoch kein 
Problem.... Dann spricht ein tiefes G halt einpaar Oktaven drüber auch 
an, was solls. Ist doch kein Problem oder?
Dann hat sozusagen jeder Tastenschlag eine Charakteristik. Außerdem sind 
die Amplituden der Oberwellen geringer als der Grundton. Kann man das 
ganze eventuell dadurch optimieren dass man ne Mindestgrenze einführt?

EDIT:Aber Danke für das Buch, bzw den Guide. Ich schau mir das aber erst 
an, wenn ihr mich vollständig von meinen anfängerhaften Fantasien 
abgebracht habt.

von Frank K. (fchk)


Lesenswert?

James Karl Maxiwell schrieb:

>>Wenn Du am Klavier eine
>>Taste drückst, kommt ein Frequenzgemisch heraus. Du hast einen Grundton
>>und viele, viele Obertöne. Deine Vorstellung würde nur stimmen, wenn Du
>>reine Sinustöne erzeugen würdest. Tust Du aber nicht.
>
> Ja das mit den Obertönen ist mir schon klar (Geige-und-Klavier-Spieler),
> ich sagte ja "da kommt viel Scheisse an, die zwar den guten Klang
> ausmacht, aber für Signalverarbeitung nur im Weg steht".
>
> Diese Obertöne werden doch durch den Filter ausgelöscht, oder nicht? Der
> Filter lässt nur eine Frequenz passieren.
>
> Oder meinst du, dass die Obertöne eines tiefen Ton eventuell die Filter
> eines höheren Tons ansprechen? Ja, das wäre ärgerlich, aber dennoch kein
> Problem.... Dann spricht ein tiefes G halt einpaar Oktaven drüber auch
> an, was solls. Ist doch kein Problem oder?

Die Obertöne sind ganzzahlige Vielfache der Grundfrequenz. Wobei der 
Grundton nicht unbedingt der stärkste Ton im Spektrum sein muss. Es kann 
auch sein, dass die Obertöne dominieren - dann bekommst Du den Grundton 
nur aus den Abständen der Obertöne heraus. Die Summe aller Frequenzen 
ergibt die instrumentenspezifische Wellenform, die sich auch noch ändern 
kann, je nachdem, wie gespielt wird.

fchk

PS: steht alles auch im Buch

von Walter L. (wallew)


Lesenswert?

Hmm,Ok...
Da sind außerdem nicht nur ganzzahlige Vielfache drin, sondern auch 
Quintensprünge, also reine Intervalle (das was auch bei Flageoletten 
rauskommt).

Aber dennoch bin ich nicht zu 100 % überzeugt, ich entschuldige mich für 
meine Sturheit.
Wenn ich z.B. ein tiefes G anschlage, dann hat es eine andere 
Charakteristik als wenn ich das G eine Oktave höher anschlage. Mag sein, 
dass dann die falschen Filter angesprochen werden, aber insgesamt 
besteht dennoch ein Unterschied, sonst würde ja das tiefe G so klingen 
wie das nächste G.

Dann müsste ich mein Konzept ändern und sagen:ich addiere nicht die 
einzelnen Vergleichsergebnisse, sondern guck mir die Charakteristik an.

... Da muss man 88 bit überprüfen, das sind 2^88 Kombinationen. Ich weiß 
grade auf die Schnelle nicht wie man das effizient machen kann.

> die sich auch noch ändern
>kann, je nachdem, wie gespielt wird.

Das könnte ein Problem bereiten. Meine Methode ist sehr unsicher. Man 
darf deshalb nicht bloß schauen, ob sich ein Muster vom anderen 
unterscheidet oder nicht, sondern wie stark es sich unterscheidet. Denn 
es kann ja sein dass der gleiche gehaltene Ton zwischenzeitlich andere 
Filter anspricht.

Andererseits ist es vorteilhaft, wenn man 2 mal den selben Ton 
anschlägt, dies auch als 2 Events zu erfassen. Wenn man einen Ton 
anschlägt, erhält man erstmal diese Transienten, und die unterscheiden 
sich beim nächsten Anschlagen mit hoher Wahrscheinlichkeit. Die klingen 
aber schnell ab.

von Walter L. (wallew)


Lesenswert?

Ich weiß es ist etwas anstrengend das hier alles zu lesen. Aber ich 
danke Euch echt für jede Unterstützung. Da fühlt man sich nicht 
ignoriert, und halbwegs gefördert. Ich bin angehender Physikstudent, 
Semenster beginnt im Winter. Eure Feedbacks geben mir weiteren Ansporn 
der Sache nachzugehen und zu lernen,und solches Wissen, gekoppelt mit 
praktischer Umsetzung, kann fürs Studium nicht schaden. Den DSP Guide 
nehm ich mir auf jedenfall vor. Hab extra jetzt ne Sammlung an Papern 
und PDFs und Links, das ist schon viel Lernstoff.
Aber das mit dem Analogkram will ich erstmal für mich klarstellen.

von wieOskar (Gast)


Lesenswert?

Du willst also einen 88bit Flash ADC bauen!? Die Auswertung ist doch 
dann ganz einfach. Nimm einfach genug RAM und bau dir einen Lookup 
table. Wird mir hoher wahrscheinlichkeit keine sinnvollen Ergebnisse 
liefern aber die Sturheit ist befriedigt.

Jaja das bisschen Analogkram intererssiert heutzutage ja keinen mehr. 
Wir leben schließlich im digitalen Zeitalter;-)

von abcd (Gast)


Lesenswert?

Dein Problem ist komplexer als Dir vielleicht bewusst ist. Ohne digitale 
Signalverarbeitung ist es wahrscheinlich kaum oder nur mit massivem 
Aufwand und Know-How lösbar. Schon die handelsüblichen Stimmgeräte 
funktionieren ja nicht immer so perfekt und brauchen meiner Erfahrung 
nach schon ein paar 100ms, um einen Ton sauber zu erkennen.
Generell gibt es mal noch zu sagen: Eine FFT ist so eine Art Filterbank. 
Natürlich kannst du das auch analog aufbauen, aber wozu? Damit wird es 
weder besser noch einfacher.

Mir ist nun auch noch nicht ganz klar, was du nun genau willst. Wenn es 
wirklich nur um die Erkennung von Notenanfängen geht, hast du schon ein 
Paper in dem genau das beschrieben wird und es gibt noch viele ähnliche 
verfahren. Wenn es dir zusätzlich auch noch um die Erkennung der Tonhöhe 
geht wird es extrem kniffelig. Es gibt schon Systeme dafür. Aber so wie 
die angesprochenen wav-to-midi-converter funktioniert das eben nicht 
immer wirklich gut. Tatsächlich ist mir kein Algorithmus bekannt, der 
für jegliche Arten von Eingangssignalen zufrieden stellende Ergebnisse 
gibt. Wahrscheinlich gibt es etwas, das für reine Pianosignale 
einigermaßen zufriedenstellend funktioniert. Aber dieser Algorithmus ist 
dann weit entfernt von den Grundlagen, die dir noch fehlen.

Mein Tipp: Arbeite dich in Octave ein. Nimm eine 10s Pianoaufnahme mit 
einer überschaubaren Anzahl an Anschlägen und versuche mal einen 
Onset-Detector zu programmieren der halbwegs funktioniert. Dann kannst 
du weiter schauen. Aber bis dahin ist es schon ein ordentliches Stück 
Arbeit für jemanden ohne DSP Vorkenntnisse.

von LostInMusic (Gast)


Lesenswert?

>Die Obertöne sind ganzzahlige Vielfache der Grundfrequenz.

Bei einem echten Klavier (und ich vermute auch anderen 
Saiteninstrumenten) kommt dann noch dazu, dass die Frequenzen aller 
Oberschwingungen etwas nach oben "verzogen" sind - je mehr, desto höher 
die Harmonische ist. Der Grund dafür ist die leicht nichtlineare 
Charakteristik realer Saiten aus Stahl und Kupfer. Kein Material ist ja 
perfekt linear. Der Effekt ist nicht sehr groß, aber (auch) er trägt zum 
klanglichen Reichtum des Pianosounds wesentlich bei - übrigens einem der 
komplexesten Klänge aller Musikinstrumente überhaupt. Klavierstimmer 
berücksichtigen das, indem sie den Diskant frequenzmäßig absichtlich 
etwas "stretchen".

>Mag sein, dass dann die falschen Filter angesprochen werden,

Das wird garantiert so sein. Lass Dir mit einem Wort sagen, worin das 
zentrale Problem der Angelegenheit besteht: Mustererkennung. Leider 
ist das ein Feld, auf dem sich PCs nach wie vor nur ausgesprochen 
bescheidene Fähigkeiten abringen lassen, im Vergleich mit jenen, zu 
denen ein menschliches Gehirn fähig ist. Auch Jahrzehnte intensiver 
Forschung auf dem Gebiet der künstlichen Intelligenz haben daran 
erstaunlich wenig ändern können.

https://www.youtube.com/watch?v=qmB27SIGtho

(Der erste Teil von 7 insgesamt.)

von Walter L. (wallew)


Lesenswert?

Ja, "onset detection" ist genau die richtige Sache. Ich hab mir nur 
gedacht:
In dem paper das du mir gezeigt hast, da wird praktisch nur nach 
irgendeiner Art Onset gesucht, also irgendeiner Art Änderung. Dafür 
wurde ein kontinuierliches Spektrum benutzt.
Ich dachte, es würde die Sache vereinfachen, wenn ich statt eines 
kontinulierlichen Spektrums ein "diskretes Spektrum" nehme, da ich ja 
schon weiß, welche Töne vorkommen werden.
Ich wollte also so viele Informationen wie möglich als Vorbedingung 
voraussetzen.

von Walter L. (wallew)


Lesenswert?

Genau, Patternrecognition.88-bit Muster. Da fällt mir spontan Stichwort 
"neural networks" ein. Die sind durch ihrer massiv-parallele 
Verarbeitungsweise dafür besser geeignet. Aber das führt schon zu weit 
oder?

von abcd (Gast)


Lesenswert?

James Karl Maxiwell schrieb:
> Dafür
> wurde ein kontinuierliches Spektrum benutzt.
> Ich dachte, es würde die Sache vereinfachen, wenn ich statt eines
> kontinulierlichen Spektrums ein "diskretes Spektrum" nehme, da ich ja
> schon weiß, welche Töne vorkommen werden.

"Kontinuierlich" im Sinne der Signaltheorie sind die Spektren in dem 
Paper nicht. Auch wenn es wahrscheinlich nicht explizit erwähnt wird 
handelt es sich dabei immer um abgetastete Signale und dementsprechend 
auch um abgetastete, nicht-kontinuierliche Spektren. Abgesehen davon 
weißt du zwar welche Töne vorkommen, aber nicht welche Frequenzen 
vorkommen bzw. welche (eventuell mehrere) Frequenzen zu welchem 
gespielten Ton gehören. Aber wenn du wirklich nur einen Onset-Detector 
bauen willst kann dir das auch völlig egal sein. Da musst du eben nur 
schauen, wann sich das Spektrum entsprechend stark verändert. Und da ist 
es auch wichtig, dass du möglichst das komplette Spektrum betrachtest 
und nicht nur deine ausgewählten Frequenzen. In den Obertönen steckt ja 
auch Energie und Information über Notenanschläge. Mit der FFT hat man 
einen schnellen schönen Algorithmus für das Spektrum. Also warum es sich 
nicht einfach machen und den nutzen?

Wenn du das geschafft hast kannst du immer noch verfeinern. Aber anstatt 
Dich jetzt weiter mit theoretischen Vorüberlegungen aufzuhalten solltest 
du nun einfach mal einen einfachen Onset-Detector implementieren und 
verstehen und DANN überlegen was und wie du etwas verbessern kannst.

von Abdul K. (ehydra) Benutzerseite


Lesenswert?

James Karl Maxiwell schrieb:
> Ach das gibts wirklicH? Mist.

Offensichtlich hast du keine Recherche hinter dir, oder?

> Aber nicht für im-Takt-Spielen oder?
> Aber nein, das reicht mir nicht, ich treffe alle Noten. Allerdings wäre
> eine Taktüberwachung eine gute Hilfe, Geschwindigkeit aufzubauen.
>

Wir wissen nicht, was es werden soll!


> Die Noten zu treffen ist nicht das Problem ,das ich angehen will sondern
> eine im-Takt-sein-Überprüfung.

Vermutlich kann diese erwähnte Software das auch. Und es wird nicht die 
einzige sein, die verfügbar ist.
Ich glaube ich hatte das hier gesehen:
http://www.google.de/search?q=mdr+genial+musiklehrer+noten+pc


Mach doch erstmal ne ordentliche Recherche!! z.B. Namen von 
Stimmgeräteherstellern auflisten und deren Patente durchforsten.

von James Karl Maxiwell (Gast)


Lesenswert?

Das was ich am Ende vorhabe, das gibt es in der Form wahrscheinlich doch 
noch nicht. Ich hab jetzt keine Recherche gemacht, aber zumindest meinte 
mein Geigenlehrer mal, als ich vor einem Jahr mal sowas angedeutet hab, 
gesagt, sowas gäbe es noch nicht als Gerät.

Ich weiß nicht ob es richtig ist, einfach alles preis zu geben. Es ist 
jetzt nichts atemberaubendes komplett neues. Das ist in etwa das gleiche 
wie die Software in der MDR Doku. Aber spezialisiert sich auf bestimmte 
Bereiche, und ist für bestimmte Spieler gedacht: Leute die schon spielen 
können und keine Intonationsprobleme haben. Wenn ich sowas hätte, hätte 
ich es gebraucht. Somit ist es nützlich.
Es soll helfen, besser zu werden. Es kann einen Lehrer nicht ersetzen. 
Eine Software kann sowas nicht von sich behaupten.

Kleine Kritik zur Schülerin aus dem MDR video: Einmal pro Woche zum 
Geigenunterricht zu gehen, das reicht absolut. Mehr Unterricht ist 
schlechter als wenig Unterricht, wie Fritz Kreisler sagen würde. Man 
muss den Unterricht nur wertschätzen. Das klappt nicht, wenn man 
Unterricht im Überfluss hat. Das ist wie ne Sitzung beim Psychologen. Es 
kommt nicht drauf an, wie oft man hingeht und wie intensiv man 
therapiert wird, sondern es kommt drauf an, wie man die Informationen 
die man erhält - und es sind in der Regel mehr als genug - zuhause 
reflektiert und verarbeitet. Im Prinzip ist mann dann sein eigener 
Geigenlehrer, man fragt sich z.B. , " was würde man Geigenlehrer sagen".

Auch wenn es der Fall sein sollte, dass es sowas schon gibt, auch wenn 
es nur in der Form einer Android-App ist oder so etwas, es würde sich 
trotzdem für mich persönlich lohnen, sich mit dem Thema auseinander zu 
setzen. Wie gesagt: Der Weg ist das Ziel.
Dann auch noch ein neues Patent dafür anzumelden wäre dann das 
Sahnehäubchen oben drauf.

PS:
Mich würde auch mal interessieren wie man das Thema aus der Sicht 
neuraler Netzwerke angehen kann? Ich glaube im DSP-Guide war ein Kapitel 
extra für sowas, falls ich mich nicht verguckt habe.

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.