iphone - C/C++/Obj-C 实时算法从人声输入中确定音符(不是音高)

标签 iphone algorithm signal-processing detection pitch

我想检测的不是音高,而是所唱音符的音高等级

因此,无论是 C4 还是 C5 并不重要:它们必须都被检测为 C。

想象一下钟面上排列的 12 个半音,指针指向音级。这就是我所追求的!理想情况下,我希望能够判断所唱的音符是准确还是略微偏离。

这不是之前提出的问题的重复,因为它引入了以下约束:

  1. 声源是单一人声,希望背景干扰可以忽略不计(尽管我可能需要处理这个问题)

  2. Octave 不重要,只有音级

编辑——链接:
Real time pitch detection
Using the Apple FFT and Accelerate Framework

最佳答案

请在此处查看我的答案以获得顺利的频率检测:https://stackoverflow.com/a/11042551/1457445

就将此频率捕捉到最近的音符而言——这是我为我的调谐器应用程序创建的一种方法:

- (int) snapFreqToMIDI: (float) frequencyy {

    int midiNote = (12*(log10(frequencyy/referenceA)/log10(2)) + 57) + 0.5;
    return midiNote;
}

这将返回 MIDI 音符值 ( http://www.phys.unsw.edu.au/jw/notes.html )

为了从这个 MIDI 音符值中得到一个字符串:

- (NSString*) midiToString: (int) midiNote {
    NSArray *noteStrings = [[NSArray alloc] initWithObjects:@"C", @"C#", @"D", @"D#", @"E", @"F", @"F#", @"G", @"G#", @"A", @"A#", @"B", nil];
    return [noteStrings objectAtIndex:midiNote%12];
}

有关使用输出平滑实现音高检测的示例,请查看 musicianskit.com/developer.php

关于iphone - C/C++/Obj-C 实时算法从人声输入中确定音符(不是音高),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4062099/

相关文章:

iphone - 我可以使用相同的方法传入不同的 UIViewController 子类吗?

名称聚类算法

algorithm - 简单游戏算法的链接

iphone - 用户将 NSNumbers 输入变量的好方法

ios - 为什么我的 iPhone 无法连接到我的 Mac mini 共享的 ipv6 网络?

java - 多项计划

matlab - 在Matlab中反转soundsc

matlab - MatLab 中的矩形函数/方波

c - 从麦克风插头获取原始信号

iphone - 如何向推送通知警报 View 添加操作?