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