Forum: Mikrocontroller und Digitale Elektronik eine Tonhöhe mit mega8 bestimmen (später für midi wandlun


von Frank Fuchs (Gast)


Lesenswert?

ich habe wieder mit musik angefangen und habe mir für
meinen elektronischen kontrabass ein funk modul gebaut...
gestern ist mir dann bei der singstar werbung die idee
gekommen das ich eigentlich verstaubten synties mal
wieder hochfahren könnte und nun denke ich daran diese
per midi mit dem bass zu verbinden.

vorteil von einem bass ist das man sogesehen fast immer
nur einen ton spielt.                     so zur frage:

bass macht ton --> wie kann der atmel die tonhöhe messen?
               --> bekomme ich auch die anschlagstärke raus?

ich würde mich freuen wenn ihr mir einen kleinen startschuss
für die herangehensweise zur messung geben würdet, mit dem
programmieren und der tonhöhe/stärke zu midi wandlung tu ich
mich dann eher leicht... oder hat jemand sowas schon mal gemacht?

grüße, internessi

von Rufus T. Firefly (Gast)


Lesenswert?

Du willst Dir also einen Pitch-to-Midi-Converter bauen? Hut ab.

Um die Tonhöhe herauszufinden, bietet sich eine Fourier-Analyse des
Eingangssignales an - such' mal nach FFT.
Damit kannst Du dann auch die Signalamplitude bestimmen.

von Thomas Burkhardt (Gast)


Lesenswert?

Hi,

Tonhöhe ist die Frequenz. Einen Frequenzzähler kannst du zur Messung
recht einfach programmieren. Such u.A. mal nach µC-Stimmgeräten für
Saiteninstrumente, die machen genau das. Eine Frage bleibt natürlich:
Ich kann dir nicht sagen, was für schreckliche Signalformen das
Instrument macht. Oberwellen sind auf jeden Fall drauf. Inwieweit die
die Messung stören werden, ist noch rauszufinden. Nur als Warnung, denn
ich könnte mir schon vorstellen, dass der Zähler allerlei Mist mißt.

Die Signalamplitude ist ein Maß für die Anschlagstärke, kann also auch
erfasst werden...

Am besten wird wohl eine schnelle Abtastung sein und dann einiges an
Rechenleistung draufwerfen (DSP). Mit FFT oder dergleichen kannst du
Erfassung von Amplitude und Frequenz mit einem Mal erschlagen.

von Sandynister (Gast)


Lesenswert?

So mein Stand is da nicht mehr der neuste. Ich kann mich aber daran
erinnern, dass Roland da mal ein ziemlich gut funktionierendes System
fürm Stromgitarren gebaut hat (hab ich selbst auch mal getest, lustig
Schlagzeug auf ner Klampfe ;-), ich glaube die wollten mich nacher aus
dem Laden rausschmeissen :-)) ).
Für Bass funktionierte das aber nur sehr schlecht, da das System zur
Bestimmung der Frequenz immer zwei Schwingungen brauchte und die dauern
 halt bei tiefen Frequenzen. Die Latenzzeiten waren jedenfalls nicht
wirklich brauchbar.
Mir würde keine Lösung einfallen, um das zu umgehen.

von Frank Fuchs (Gast)


Lesenswert?

@Rufus
hmm ich hab mir das mit fem FFT mal angesehen und von einem kollegen
erklären lassen, das währe auch ein lösungsweg aber wir versuchen es
erstmal mit folgendem

@Thomas
>Tonhöhe ist die Frequenz.
ich nehme mal eine basswalk auf und sende den an meinem kollegen mit
oszi --> dann sehen wir wie gut/klar/rein die schwingungen sind, evtl.
noch einen tiefpass filter davor. evtl. reicht dann ja das zählen
aus... ist auf jeden fall einfacher und ein guter start.

@Sandynister
das roland teil habe ich auch schon gespielt mit der gitarre, aber
nicht als drumset sondern piano fettgrins super effekt auf der bühne
... latenzzeiten: könnte ein problem sein, ich mein eine oder 2 zehntel
sind kein thema daran gewähnt mann sich aber ne sekunde währe schon die
hölle... auf der anderen seite könnte man den syntie zusätzlich zum
signal mit streichern/flächen lauffen lassen dann ist es eher easy...

danke für euere hilfe, internessi

von Frank Fuchs (Gast)


Lesenswert?

Das mit dem Sampling der Tonhöhe und -stärke hab ich gestern
geschrieben und als Platine aufgebaut (übelst billiger Vorverstärker
aus der E-Schrottkiste + Prozessor). Hier mal was über den ADC bei 4
MHz rüberkommt (8 Bit Hex):

Ein tiefes "A" E-Kontrabass
122E465256697974697E8D9AA5B0B9C2C9D0D6D4A9896D56422F1F100000000000000000 
0000000000
223C4F50617276657A8997A3AEB7C0C8CFD6DBB794775E49362516100000000000000000 
0000000000
122A424E526576686C7E8D9AA6B0BAC3CAD1D7D5AB8A6F57433120110000000000000000 
0000000000

Ein "G" E-Kontrabass
11233B4F61717F8C989F7D614A35231200000000000000
132D4356677684909B9C795E4732201000000000000000
1F374C5E6E7C89959F96755A432F1D1100000000000000

Ein hohes "F" E-Kontrabass
2532353B3D2D14000000000000
10131520141410000000000000
152A313135321D000000000000

Man kann die Wellenberge fömich sehen grins

Ich habe der Einfachheit halber den ADC auf 8 bit
beschnitten und nur 4 MHZ intern benutzt und alles
unter 0x10 gesqelcht, ich denke das ergebniss lässt
sich noch stark verbessern und es sollte sich bei der
3.ten Welle eine Aussage über die Tonhöhe treffen lassen.

Wenn noch andere Intresse an dem Teil haben könnte ich
ja in das Codesammlung Forum gehen?

von Alisa 1387 (Gast)


Lesenswert?

Lass ruhig sehen, den code ;)

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.