小编Luc*_*use的帖子

如何使用 NAudio 实时计算 FFT(ASIO 输出)

我正在对吉他(小提琴)英雄进行克隆编程,作为本学年的期末项目。

这个想法是从我的电小提琴中获取输入,通过 FFT 对其进行分析,进行一些逻辑和绘图,然后通过扬声器输出。也许并行线程中的一些步骤。

我已经实现了 Asio 低延迟输入输出,但在实现实时 FFT 时遇到了很大的问题。

这是设置 asioOut 和 SampleAggregator 的代码。样本聚合器应存储每次调用 AudioAvailable() 时添加的样本,并在样本数量超过 fftLength 时触发 FFT 计算。

private static int fftLength = 8192;
private SampleAggregator sampleAggregator = new SampleAggregator(fftLength);

void asioStartPlaying(object sender, EventArgs e)
{
    sampleAggregator.PerformFFT = true;
    sampleAggregator.FftCalculated += new EventHandler<FftEventArgs>(FftCalculated);
    var asioOut = new AsioOut();
    BufferedWaveProvider wavprov = new BufferedWaveProvider(new WaveFormat(48000, 1));
    asioOut.AudioAvailable += new EventHandler<AsioAudioAvailableEventArgs> (asio_DataAvailable);
    asioOut.InitRecordAndPlayback(wavprov, 1, 25);
    asioOut.Play();
}

void asio_DataAvailable(object sender, AsioAudioAvailableEventArgs e)
{
    byte[] buf = new byte[e.SamplesPerBuffer*4];

    for (int …
Run Code Online (Sandbox Code Playgroud)

c# fft naudio asio

5
推荐指数
1
解决办法
1万
查看次数

标签 统计

asio ×1

c# ×1

fft ×1

naudio ×1