Tag: asio

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

我正在编写吉他(小提琴)英雄的克隆作为本学年的最终项目。 我的想法是从我的电子小提琴中获取输入,通过FFT进行分析,做一些逻辑并绘制并通过扬声器输出。 也许是并行线程中的一些步骤。 我已经实现了Asio低延迟输入输出,但我在实现实时FFT时遇到了很大的问题。 这是一个与sampleAggregator一起设置asioOut的代码。 样本聚合器应存储每次调用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(FftCalculated); var asioOut = new AsioOut(); BufferedWaveProvider wavprov = new BufferedWaveProvider(new WaveFormat(48000, 1)); asioOut.AudioAvailable += new EventHandler (asio_DataAvailable); asioOut.InitRecordAndPlayback(wavprov, 1, 25); asioOut.Play(); } void asio_DataAvailable(object […]

NAudio Asio录制和播放

我正在尝试编写自己的VST主机,为此我需要录制和播放Asio驱动程序的音频(在我的情况下是音频接口)。 这就是我试图使用NAudio的AsioOut的原因。 出于测试目的,我目前只是尝试记录输入,复制并将其播放到输出。 我的代码如下所示: var asioout = new AsioOut(); BufferedWaveProvider wavprov = new BufferedWaveProvider(new WaveFormat(44100, 2)); asioout.AudioAvailable += new EventHandler(asio_DataAvailable); asioout.InitRecordAndPlayback(wavprov, 2, 25); asioout.Play(); … void asio_DataAvailable(object sender, AsioAudioAvailableEventArgs e) { Array.Copy(e.InputBuffers, e.OutputBuffers, e.InputBuffers.Length); e.WrittenToOutputBuffers = true; } 这样我听不到任何输出。 我也这样试过: void asio_DataAvailable(object sender, AsioAudioAvailableEventArgs e) { byte[] buf = new byte[e.SamplesPerBuffer]; for (int i = […]

如何使用AsioOut使用NAudio录制和播放

我正在尝试使用C# 直接 获得声音输入并以较少的延迟发送输出 。 我正在使用支持ASIO的库NAudio以获得更好的延迟。 特别是,我使用AsioOut对象进行录制,另一个用于使用BufferedWaveProvider初始化的回放, BufferedWaveProvider填充了一个回调函数: OnAudioAvailable ,它允许我使用ASIO缓冲区。 问题是我听到了各种故障和延迟的声音。 我认为问题在于OnAudioAvailable函数,其中缓冲区充满了从声卡输入的数据。 声明: NAudio.Wave.AsioOut playAsio; NAudio.Wave.AsioOut recAsio; NAudio.Wave.BufferedWaveProvider buffer; 播放程序: if (sourceList.SelectedItems.Count == 0) return; int deviceNumber = sourceList.SelectedItems[0].Index; recAsio = new NAudio.Wave.AsioOut(deviceNumber); recAsio.InitRecordAndPlayback(null, 2, 44100); //rec channel = 1 NAudio.Wave.WaveFormat formato = new NAudio.Wave.WaveFormat(); buffer = new NAudio.Wave.BufferedWaveProvider(formato); recAsio.AudioAvailable += new EventHandler(OnAudioAvailable); //Collego l’output col […]