我試圖編寫一個函數,它以MIDI形式(C2,A4,Bb6)記錄音符並以赫茲爲單位返回它們各自的頻率。我不確定這樣做的最佳方法是什麼。我在兩種方法之間撕裂。 1)基於一個列表,我可以打開一個輸入並返回硬編碼的頻率值,因爲我可能只需要爲88個音符(在大鋼琴情況下)執行此操作。 2)一個簡單的數學方法,但是我的數學技能是一個限制,以及將輸入字符串轉換爲數值。最終,我一直在研究這一點,並可以使用一些方向。將音符轉換爲赫茲(iOS)
-6
A
回答
3
可以使用基於該公式的函數:
爲等於 回火規模的音符的頻率的基本公式是由
FN給出= F0 *(a)將正
其中
f0 =必須定義的一個固定音符的頻率。通常的選擇是將A置於中間C(A4)上方f0 = 440Hz。
n =遠離固定音符的半步數。如果你的記錄較高,n是正數。如果你在低音上,n是負數。
fn =音符的頻率n半步遠。 A =(2)1/12 = 2的twelth根=其中,當乘以本身12倍的數量等於2 = 1.059463094359 ...
http://www.phy.mtu.edu/~suits/NoteFreqCalcs.html
在Objective-C,這將是:
+ (double)frequencyForNote:(Note)note withModifier:(Modifier)modifier inOctave:(int)octave {
int halfStepsFromA4 = note - A;
halfStepsFromA4 += 12 * (octave - 4);
halfStepsFromA4 += modifier;
double frequencyOfA4 = 440.0;
double a = 1.059463094359;
return frequencyOfA4 * pow(a, halfStepsFromA4);
}
用下面枚舉定義:
typedef enum : int {
C = 0,
D = 2,
E = 4,
F = 5,
G = 7,
A = 9,
B = 11,
} Note;
typedef enum : int {
None = 0,
Sharp = 1,
Flat = -1,
} Modifier;
1
相關問題
- 1. 計算STFT的赫茲
- 2. 使Haskell代碼更習慣(440赫茲音)
- 3. 計算Soundbite w/iPhone的赫茲
- 4. C++從上採樣到22050 48000赫茲
- 5. 將頻率轉換爲鍵盤音符
- 6. 我的iOS應用程序使用8000赫茲採樣率的音頻單元返回扭曲的聲音
- 7. 將文本轉換爲符號,然後將符號轉換爲聲音
- 8. IOS和FFT(vDSP_fft_zrip):頻率低於appr。 100赫茲被切斷 - 爲什麼?
- 9. 如何將字符串轉換爲ios(Cocos2d)中的音頻(聲音)文件?
- 10. iOS將bool值轉換爲字符串
- 11. IOS將URL字符串轉換爲NSString?
- 12. 將音程轉換爲音符的轉換方法,運行到NumberFormatException
- 13. ios語音轉換爲文字
- 14. 使用iPhone識別20-24赫茲範圍內的聲音頻率
- 15. 需要將人的聲音轉換爲音符
- 16. 實時將音頻信號的FFT轉換爲MIDI音符
- 17. iOS:將id轉換爲int
- 18. 將Java轉換爲iOS
- 19. 將GIF轉換爲MOV IOS
- 20. 將NSJSONSerialization轉換爲ios 4
- 21. 將PDF轉換爲Keynote - iOS
- 22. 如何轉換爲iOS上的「組合變音符號」
- 23. 將法語重音字符轉換或轉換爲基本ASCII字符
- 24. 如何使用Phonegap將音頻文件轉換爲iOS上的base64字符串?
- 25. 如何在ios SDK中將語音轉換爲文本
- 26. 如何將音頻數據轉換爲iOS中的NSString?
- 27. 將帶變音符號的NSString轉換爲常量字符*
- 28. 如何將重音字符轉換爲Java中的HTML符號?
- 29. 將重音字符轉換爲ASCII字符
- 30. 使用TPAACAudioConverter將iOS直接錄音轉換爲.m4a文件(音頻/ mpeg-4)
好主意。去做。你有問題嗎? – matt
http://rypress.com/tutorials/objective-c/data-types/nsdictionary –