私は与えられたオクターブの音符の周波数を決定しようとしています。私の機能は以下の通りで、thisサイトのjavascriptに基づいています。作品を持っているものはすべて見つかりますが、その一部が欠けています。たとえば、B#
とC-
です。より完全な数式を使用するか、すでに使用している数式を調整する必要があります。それとも、私はばかだ、とB#
などのようなものはない? C.シャープベースノートより半音高い移動し、フラットベースノートよりも低い半音を行くよう音符の周波数を決定する方法は?
- (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;
}
B#のようなものがありますが、[均等チューニング](http://en.wikipedia.org/wiki/Equal_temperament)では、Cと同じことです。 –
@OliCharlesworth - ピアノになりますか平等な人ですか?私はそれが私がスケールを取得しようとしているものだと思う。私はBASICから古い[PLAY](http://www.antonis.de/qbebooks/gwbasman/index.html)コマンドを再現しようとしています。 – Justin808
ピアノは幾分ユニークですが、これは等気質の近似値です(http://en.wikipedia.org/wiki/Piano_key_frequenciesを参照)。しかし、あなたの目的のために、あなたが使った式はうまくいくはずです。 –