Ich versuche, die Häufigkeit einer Note in einer bestimmten Octive zu bestimmen. Meine Funktionen sind unten und ich gründete sie von der Javascript auf this Site. Alles, was es funktioniert hat, finden Sie, aber es fehlt einige, zum Beispiel B#
und C-
. Wenn es eine vollständigere Formel zu verwenden gibt oder vielleicht eine Anpassung an die Formel, die ich bereits verwende. Oder bin ich einfach dumm und es gibt keine B#
?Wie man Notenfrequenzen bestimmt?
- (int)getNoteNumber:(NSString*)note
{
note = [note uppercaseString];
DLog(@"%@", note);
if ([note isEqualToString:@"A"])
return 0;
else if ([note isEqualToString:@"A#"] || [note isEqualToString:@"B-"])
return 1;
else if ([note isEqualToString:@"B"])
return 2;
else if ([note isEqualToString:@"C"])
return 3;
else if ([note isEqualToString:@"C#"] || [note isEqualToString:@"D-"])
return 4;
else if ([note isEqualToString:@"D"])
return 5;
else if ([note isEqualToString:@"D#"] || [note isEqualToString:@"E-"])
return 6;
else if ([note isEqualToString:@"E"])
return 7;
else if ([note isEqualToString:@"F"])
return 8;
else if ([note isEqualToString:@"F#"] || [note isEqualToString:@"G-"])
return 9;
else if ([note isEqualToString:@"G"])
return 10;
else if ([note isEqualToString:@"G#"])
return 11;
}
- (void)setFreq:(int)note
{
float a = powf(2, self.octive);
float b = powf(1.059463, note);
float freq = roundf((275.0 * a * b)/10);
self.toneGen.frequency = freq;
}
Es gibt so etwas wie B #, aber in einer [gleichmäßigen Stimmung] (http://en.wikipedia.org/wiki/Equal_Temperament), es ist das gleiche wie C. –
@OliCharlesworth - wäre ein Klavier gleichmütig sein? Ich denke, das ist, was ich versuche, eine Skala von zu bekommen. Ich versuche den alten [PLAY] (http://www.antonis.de/qbebooks/gwbasman/index.html) Befehl von BASIC zu reproduzieren. – Justin808
Ein Piano ist etwas einzigartig, da es eine Annäherung an die gleiche Temperament ist (siehe http://en.wikipedia.org/wiki/Piano_key_frequencies). Aber für Ihre Zwecke sollte die Formel, die Sie verwendet haben, in Ordnung sein. –