C# 尝试在Naudio(c)中播放ISampleProvider时获取NullReferenceException

C# 尝试在Naudio(c)中播放ISampleProvider时获取NullReferenceException,c#,audio,naudio,C#,Audio,Naudio,我正在用Naudio用C语言创建我自己的软件合成器,首先生成一些简单的正弦波,然后播放它们。我想自己做这件事,而不是使用Naudio的内置信号发生器。 当传递我的自定义对象sine以生成实现ISampleProvider到WaveOutEvent.Init的正弦波时,会抛出一个NullReferenceException。在调用init之前,我已经创建了一个类SineWave的实例,但仍然得到了NullReferenceException 我已经使用if命令测试了WaveOutEvent wo和

我正在用Naudio用C语言创建我自己的软件合成器,首先生成一些简单的正弦波,然后播放它们。我想自己做这件事,而不是使用Naudio的内置信号发生器。 当传递我的自定义对象sine以生成实现ISampleProvider到WaveOutEvent.Init的正弦波时,会抛出一个NullReferenceException。在调用init之前,我已经创建了一个类SineWave的实例,但仍然得到了NullReferenceException

我已经使用if命令测试了WaveOutEvent wo和SineWave sine对象是否都为null,如下所示:

if (sineWave != null)
{
    Console.WriteLine("sine is not null");
}
if (waveOut != null)
{
    Console.WriteLine("wo is not null");
}
这两条语句都通过了,sine和wo都被写入控制台

namespace AddSynth
{
    public class SineWave : ISampleProvider
    {
        public WaveFormat WaveFormat { get; }
        int frequency = 440;
        int sampleRate = 44100;
        double amp = 0.25;
        int phase = 0;
        public int Read(float[] buffer, int offset, int count)
        {
            int sampleCount = sampleRate / frequency;
            for (int i = 0; i < buffer.Length; i++)
            {
                buffer[i] = (float)(amp * Math.Sin(2 * Math.PI * frequency * i + phase));
            }
            return sampleCount;
        }
    }

    public class Playback
    {
        static void Main()
        {
            Playback playBack = new Playback();
            playBack.playAudio();
        }

        public void playAudio()
        {
            WaveOutEvent waveOut = new WaveOutEvent();
            SineWave sineWave = new SineWave();
            if (sineWave != null)
            {
                Console.WriteLine("sine is not null");
            }
            if (waveOut != null)
            {
                Console.WriteLine("wo is not null");
            }
            waveOut.Init(sineWave.ToWaveProvider());
            waveOut.Play();
            Console.ReadKey();
        }
    }
}

正如恩科西所说,问题是我从未分配过波形变量。

正弦波中的波形从未分配过,所以它总是为空。哦,我是个白痴。非常感谢,这很有效。
   at NAudio.Wave.SampleProviders.SampleToWaveProvider..ctor(ISampleProvider source)
   at NAudio.Wave.WaveExtensionMethods.ToWaveProvider(ISampleProvider sampleProvider)
   at AddSynth.Playback.playAudio() in C:\Users\User1\source\repos\AddSynth\AddSynth\Program.cs:line 44
   at AddSynth.Playback.Main() in C:\Users\User1\source\repos\AddSynth\AddSynth\Program.cs:line 29