哪里可以找到C#中免费,快速,可靠的FFT实现?
那可以用在产品中吗?或者有任何限制吗?
在印度的IIT-Bombay有这个技术节,在那里他们有一个名为"Artbots"的活动,我们应该设计具有艺术能力的艺术机器人.我有一个关于音乐机器人的想法,它以歌曲作为输入,检测歌曲中的音符并在钢琴上播放.我需要一些方法来帮助我计算歌曲音符的音高.关于如何去做的任何想法/建议?
我正在尝试使用C++进行实时音高检测.我正在测试一些来自Performous(http://performous.org/)的代码,因为其他一切对我来说都不起作用.我确信这有效,但我不能让它发挥作用.我已经尝试了几个星期了,而且我还没有能够得到任何音调检测代码.
我正试图找到一种方法来检测iPhone的麦克风录制的声音频率.我想检测声音频率是上升还是下降.
我想得到一个字节数组中音频字节的音高.这是我现在的代码:
byte[] wav = File.ReadAllBytes("test.wav");
for (int i = 44; i<wav.Length; i++)
{
// wav[i] is an audio byte, channel shifts every 2 bytes (I think)
}
Run Code Online (Sandbox Code Playgroud)
起初我认为wav文件是用数百或数千个块构建的,每个块都包含一个采样率,所以我试图扫描整个数组中的另一个字节序列,代表单词"WAVE",它是一个部分.块,但采样率仅在数组的开头,并且在44位之后,所有数组都只是音频数据本身.
音频字节只是十六进制值,我无法理解如何从该值获取任何信息.
更新:我已经下载了具有FFT算法的Math.NET库.这是FFT的文档:https://numerics.mathdotnet.com/api/MathNet.Numerics.IntegralTransforms/Fourier.htm 我已经阅读了所有的方法,但我不知道什么方法会做我想要的(给它几个字节的wav文件并获得它们的频率).
更新2:现在我使用Accord库进行FFT,我在youtube上找到了一个教程.这是我将音频字节转换为双数组的代码:
for (int i = 44; i<wav.Length; i+=BufferSize)
{
float currentSec = (float) audioLength / wav.Length * i;
byte[] buffer = new byte[BufferSize];
for (int j = 0; j < buffer.Length; j++)
{
if ((i + j + 1) < wav.Length)
buffer[j] = wav[i + j]; …Run Code Online (Sandbox Code Playgroud)