C# 为什么读取方法中的源提供程序为空
在下面的代码中,我正在初始化变量,然后手动调用ISampleProvider的Read方法。检查时,我看到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
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没有空值