我试图编写一个函数,它以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 –