2012-04-07 8 views
0

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; 
} 
+2

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. –

+0

@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

+0

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. –

Antwort

0

B # ist die gleiche Note wie C. Sharps einen Halbton höher als die Basisnote gehen und Wohnungen gehen noch einen halben Ton tiefer als die Basisnote. So ist zum Beispiel E # dasselbe wie F. C-Ebene ist dasselbe wie B.

+0

Dies gilt nur für gleiche Temperament (obwohl zum Glück scheint, dass das OP interessiert ist). –

Verwandte Themen