Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 实时Fft-AsioOut+;样本聚合器_C#_Wpf_Naudio - Fatal编程技术网

C# 实时Fft-AsioOut+;样本聚合器

C# 实时Fft-AsioOut+;样本聚合器,c#,wpf,naudio,C#,Wpf,Naudio,我需要帮助 我目前正在做我的论文项目,这是一个由ASIO驱动程序编写的应用程序。简而言之,写下你玩的游戏。关于Naudio,我是个新手,我有一个将声音转换成FFT的问题。我用一个叫做“GuitarLink”的设备捕捉声音,该设备通过ASIO4ALL运行。 所以我需要实时比较和弦的频率 目前,程序给了我两个值,X和Y。 (我正在使用“SampleAggregator”类和AsioOut) 主要 private-SampleAggregator-SampleAggregator=new-Sample

我需要帮助

我目前正在做我的论文项目,这是一个由ASIO驱动程序编写的应用程序。简而言之,写下你玩的游戏。关于Naudio,我是个新手,我有一个将声音转换成FFT的问题。我用一个叫做“GuitarLink”的设备捕捉声音,该设备通过ASIO4ALL运行。 所以我需要实时比较和弦的频率

目前,程序给了我两个值,X和Y。 (我正在使用“SampleAggregator”类和AsioOut)

主要

private-SampleAggregator-SampleAggregator=new-SampleAggregator(fftLength);
公共主窗口()
{
初始化组件();
dispatchermer.Tick+=新事件处理程序(SoClose);
Dispatchermer.Interval=新的时间跨度(0,0,0,0,500);
dispatchermer.Start();
}
void SoClose(对象发送方,事件参数e)
{
试一试{
如果(PBass==true){
sampleAggregator.PerformFFT=true;
sampleAggregator.FftCalculated+=新事件处理程序(FftCalculated);
var asioOut=新的asioOut();
BufferedWaveProvider wavprov=新的BufferedWaveProvider(新的波形格式(48000,1));
asioOut.AudioAvailable+=新事件处理程序(asio_数据可用);
asioOut.InitRecordAndPlayback(wavprov,1,25);
玩游戏;
I1E.Text=“”+频率;
}              
}
抓住
{
MessageBox.Show(“错误”错误“排除算法和错误”);
}
私有void FftCalculated(对象发送方,FftEventArgs e)
{
//抛出新的NotImplementedException();
对于(var i=0;i
样本聚合器类

public class SampleAggregator
{
    // FFT
    public event EventHandler<FftEventArgs> FftCalculated;
    public bool PerformFFT { get; set; }

    // This Complex is NAudio's own! 
    private Complex[] fftBuffer;
    private FftEventArgs fftArgs;
    private int fftPos;
    private int fftLength;
    private int m;

    public SampleAggregator(int fftLength)
    {
        if (!IsPowerOfTwo(fftLength))
        {
            throw new ArgumentException("FFT Length must be a power of two");
        }
        this.m = (int)Math.Log(fftLength, 2.0);
        this.fftLength = fftLength;
        this.fftBuffer = new Complex[fftLength];
        this.fftArgs = new FftEventArgs(fftBuffer);
    }

    bool IsPowerOfTwo(int x)
    {
        return (x & (x - 1)) == 0;
    }

    public void Add(float value)
    {
        if (PerformFFT && FftCalculated != null)
        {
            // Remember the window function! There are many others as well.
            fftBuffer[fftPos].X = (float)(value * FastFourierTransform.HammingWindow(fftPos, fftLength));
            fftBuffer[fftPos].Y = 0; // This is always zero with audio.
            fftPos++;
            if (fftPos >= fftLength)
            {
                fftPos = 0;
                FastFourierTransform.FFT(true, m, fftBuffer);
                FftCalculated(this, fftArgs);
            }
        }
    }
}


     public class FftEventArgs : EventArgs
   {


  [DebuggerStepThrough]
   public FftEventArgs(Complex[] result)
   {
       this.Result = result;
   }
   public Complex[] Result { get; private set; }

   public string resultado ="";



   void FftCalculated(object sender, FftEventArgs e)
   {

   }
公共类样本聚合器
{
//快速傅里叶变换
公共事件事件处理程序FFT计算;
公共bool PerformFFT{get;set;}
//这个建筑群是NAudio自己的!
私人综合体[]fftBuffer;
私人FftEventArgs fftArgs;
私人国际保税港区办事处;
私人国际飞行长度;
私有INTM;
公共样本聚合器(int FFTLENGHT)
{
如果(!IsPowerOfTwo(fft长度))
{
抛出新的ArgumentException(“FFT长度必须是2的幂”);
}
this.m=(int)Math.Log(fftLength,2.0);
this.fft长度=fft长度;
this.fftBuffer=新络合物[fftLength];
this.fftArgs=新的FftEventArgs(fftBuffer);
}
bool IsPowerOfTwo(int x)
{
返回值(x&(x-1))==0;
}
公共无效添加(浮动值)
{
if(PerformFFT&&FftCalculated!=null)
{
//记住窗口功能!还有很多其他功能。
fftBuffer[fftPos].X=(float)(值*FastFourierTransform.HammingWindow(fftPos,fftLength));
fftBuffer[fftPos].Y=0;//对于音频,此值始终为零。
fftPos++;
如果(fftPos>=FFTLENGHT)
{
fftPos=0;
快速傅立叶变换(真,m,fftBuffer);
FFT计算(即fftArgs);
}
}
}
}
公共类FftEventArgs:EventArgs
{
[调试步骤至]
公共FftEventArgs(复杂[]结果)
{
结果=结果;
}
公共复合体[]结果{get;private set;}
公共字符串resultado=“”;
void FftCalculated(对象发送方,FftEventArgs e)
{
}
问题是,当我演奏音符时,传递的值不会受到影响

对不起,如果你不懂的话,我的英语不是很好

public class SampleAggregator
{
    // FFT
    public event EventHandler<FftEventArgs> FftCalculated;
    public bool PerformFFT { get; set; }

    // This Complex is NAudio's own! 
    private Complex[] fftBuffer;
    private FftEventArgs fftArgs;
    private int fftPos;
    private int fftLength;
    private int m;

    public SampleAggregator(int fftLength)
    {
        if (!IsPowerOfTwo(fftLength))
        {
            throw new ArgumentException("FFT Length must be a power of two");
        }
        this.m = (int)Math.Log(fftLength, 2.0);
        this.fftLength = fftLength;
        this.fftBuffer = new Complex[fftLength];
        this.fftArgs = new FftEventArgs(fftBuffer);
    }

    bool IsPowerOfTwo(int x)
    {
        return (x & (x - 1)) == 0;
    }

    public void Add(float value)
    {
        if (PerformFFT && FftCalculated != null)
        {
            // Remember the window function! There are many others as well.
            fftBuffer[fftPos].X = (float)(value * FastFourierTransform.HammingWindow(fftPos, fftLength));
            fftBuffer[fftPos].Y = 0; // This is always zero with audio.
            fftPos++;
            if (fftPos >= fftLength)
            {
                fftPos = 0;
                FastFourierTransform.FFT(true, m, fftBuffer);
                FftCalculated(this, fftArgs);
            }
        }
    }
}


     public class FftEventArgs : EventArgs
   {


  [DebuggerStepThrough]
   public FftEventArgs(Complex[] result)
   {
       this.Result = result;
   }
   public Complex[] Result { get; private set; }

   public string resultado ="";



   void FftCalculated(object sender, FftEventArgs e)
   {

   }