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

Getting NullReferenceException when attempting to play an ISampleProvider in Naudio (c#)

我正在使用 Naudio 在 C# 中创建自己的软件合成器,并从生成一些简单的正弦波开始,然后播放它们。我想自己做,而不是使用 Naudio 的内置 SignalGenerator。 将我的自定义对象 sine 传递给 WaveOutEvent.Init 以生成正弦波(实现 ISampleProvider)时,我得到一个 NullReferenceException。我在调用 init 之前创建了 class SineWave 的实例,但我仍然得到 NullReferenceException.

我测试了我的WaveOutEventwo)和SineWavesine)对象是否都是nullif命令,像这样:

if (sineWave != null)
{
    Console.WriteLine("sine is not null");
}
if (waveOut != null)
{
    Console.WriteLine("wo is not null");
}

这两个语句都通过了,并且 sine is not nullwo is not null 都被写入了控制台。

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

正如 Nkosi 所说,问题是我从未分配 WaveFormat 变量。