Noten spielen mit SetChannelRate
Übersicht

![]() |
RatchetBetreff: Noten spielen mit SetChannelRate |
![]() Antworten mit Zitat ![]() |
---|---|---|
Meine Funktion CalculateRate soll die Rate für eine Note berechnen die ich dann mit SetChannelRate verwenden möchte. Übergeben wird die Note (siehe Konstanten), die Oktave in der gespielt werden soll, und die Basis-Oktave. Die Basis-Oktave ist 4, das bedeutet in Oktave 4 wird die Note C mit Rate 1 abgespielt, also ganz normal so wie man den Sound geladen hat. Die Oktave kann von 1 bis 8 gehen, sodass ich ein Spektrum von eben 8 Oktaven habe - der Ausgangssound liegt also in der Mitte.
Das funktioniert auch für die Oktaven 3-5, bei den anderen habe ich merkwürdige Effekte, dass z.B. ein C auf einmal ein G der Oktave darunter ist. Irgendwas ist doch hier oberfaul. Meine Formel ist bestimmt absoluter Schwachsinn, oder? Bloss ich komme da einfach nicht weiter. BlitzMax: [AUSKLAPPEN] Const NOTE_C: Byte = 0 |
||
[iMac 27"] [3,4GHz Intel Core i5 ] [8GB Ram] [NVIDIA GeForce GTX 775M 2GB] [MacOS X Yosemite] [BlitzMax + MaxGui] [Monkey X Pro] |
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
die korrekte formel lautet:
FrquenzHalbton = OktavFrequenz * Halbton * 1.0594631 Also z.b. "A"=440 Hz, dann ist "Bb"= (440* 1 * 1.0594631)Hz, und "H"= 440* 2 * 1.0594631 damit kommst Du ziemlich genau auf das nächste A, was dann 880Hz ergibt Die Channelrate verhält sich ebenso. Daraus ergeben sich die folgenden Umrechnungsfaktoren: Code: [AUSKLAPPEN] 0.Ton f= 1.00000000
1.Ton f= 1.05946314 2.Ton f= 1.12246203 3.Ton f= 1.18920708 4.Ton f= 1.25992107 ; C:E = wie 4:5 theoretisch 1 : 1.250 5.Ton f= 1.33483982 ; C:F = wie 3:4 theoretisch 1 : 1.333 6.Ton f= 1.41421354 7.Ton f= 1.49830711 ; C:G = wie 2:3 theoretisch 1 : 1.500 8.Ton f= 1.58740103 9.Ton f= 1.68179286 10.Ton f= 1.78179741 11.Ton f= 1.88774860 12.Ton f= 2.00000000 ; C:C = wie 1:2 theoretisch 2 : 2.000 Die Oktave ist immer ... Code: [AUSKLAPPEN] OKT= INT(Note/12)
Der Halbton immer ... Code: [AUSKLAPPEN] HT = Note Mod 12
Die Frequenz: Code: [AUSKLAPPEN] 440* (2^OKT) * 2^(HT/12)
In deiner Formel steckt der Fehler also nur im Oktav-Teil der Frequenz statt Code: [AUSKLAPPEN] Result = 2.0 ^ (Note / 12.0) * ((Octave - BaseOctave) + 1)
muss es heißen: Code: [AUSKLAPPEN] Result = 2.0 ^ (Note / 12.0) * (2.0^(Octave - BaseOctave) )
eine Unterscheidung in zwei Fälle ist dann auch nicht mehr nötig! |
||
- Zuletzt bearbeitet von Midimaster am Mi, Sep 07, 2011 19:45, insgesamt 2-mal bearbeitet
![]() |
Ratchet |
![]() Antworten mit Zitat ![]() |
---|---|---|
Tausend Dank, Midimaster! ich habe es eben noch einmal selber versucht, aber das ist mir einfach zu hoch. Die Logik dahinter hatte ich zwar verstanden, du hattest mir dazu schon mal netterweise viel Material geschickt, aber das umsetzen in eine vernünftige Formel wollte halt nicht. Danke danke ![]() |
||
[iMac 27"] [3,4GHz Intel Core i5 ] [8GB Ram] [NVIDIA GeForce GTX 775M 2GB] [MacOS X Yosemite] [BlitzMax + MaxGui] [Monkey X Pro] |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group