C# 为什么读取方法中的源提供程序为空

C# 为什么读取方法中的源提供程序为空,c#,audio,naudio,C#,Audio,Naudio,在下面的代码中,我正在初始化变量,然后手动调用ISampleProvider的Read方法。检查时,我看到sourceProvider.HasData(0)返回False,而sourceProvider.Read(缓冲区、偏移量、计数)返回0,尽管在调用之前初始化了sourceProvider public void init(AudioFileReader sourceProvider, int cutOffFreq,float oldRMS) { this.s

在下面的代码中,我正在初始化变量,然后手动调用ISampleProvider的Read方法。检查时,我看到
sourceProvider.HasData(0)
返回False,而
sourceProvider.Read(缓冲区、偏移量、计数)
返回0,尽管在调用之前初始化了
sourceProvider

    public void init(AudioFileReader sourceProvider, int cutOffFreq,float oldRMS)
    {
        this.sourceProvider = sourceProvider;
        this.cutOffFreq = cutOffFreq;

        filter_LowPass();            

        //Reading filtered bytes
        float []buff = new float[sourceProvider.Length];

        float sum=0;

        int r = Read(buff, 0, (int)sourceProvider.Length)/2;

        MessageBox.Show("Read: " + r);  Here this value is being shown 0
        for (int i = 0; i < r; i++)
            sum += buff[i] * buff[i];

        sum = (float)Math.Sqrt(sum / (float)r);
        MessageBox.Show("sum: " + sum);   //Output is coming NaN
        gain = (float)(oldRMS / sum);
        MessageBox.Show("Gain: " + gain); //Output is coming NaN
    }

    private void filter_LowPass()
    {
        channels = sourceProvider.WaveFormat.Channels;
        filters = new BiQuadFilter[channels];

        for (int n = 0; n < channels; n++)
            if (filters[n] == null)
                filters[n] = BiQuadFilter.LowPassFilter(44100, cutOffFreq, 1);
            else
                filters[n].SetLowPassFilter(44100, cutOffFreq, 1);
    }

    public int Read(float[] buffer, int offset, int count)
    {
        int samplesRead = sourceProvider.Read(buffer, offset, count);
        MessageBox.Show("Inside read: " + samplesRead); //Output is coming 0
        MessageBox.Show("Source Provider: " + sourceProvider.HasData(0)); //Output is coming False

        for (int i = 0; i < samplesRead; i++)
            buffer[offset + i] = gain * filters[(i % channels)].Transform(buffer[offset + i]);

        return samplesRead;
    }
public void init(AudioFileReader源提供程序、int-cutOffFreq、float-oldRMS)
{
this.sourceProvider=sourceProvider;
this.cutOffFreq=cutOffFreq;
滤波器_低通();
//读取过滤字节
float[]buff=新的float[sourceProvider.Length];
浮点数和=0;
int r=Read(buff,0,(int)sourceProvider.Length)/2;
MessageBox.Show(“读取:”+r);这里显示的是0
对于(int i=0;i

当我调用Read方法时,我的问题就来了。参数buff、offset和count都正确给出了

请看,其中的共识是“不,它们不应该”!很抱歉你能帮我解决我面临的问题吗?因为
init
是唯一的写用法,你会在调用
Read
之前调用它吗?能否创建一个显示空引用异常的简短示例?
sourceProvider.Length的实际值是多少?sourceProvider没有空值