C# NAudio: Как получить доступ к образцам, предоставленным SignalGenerator, чтобы сохранить их в формате WAVE?

У меня есть следующий конструктор, который успешно воспроизводит розовый шум непосредственно на моем устройстве вывода звука:

public WAVEManager(string inputFileName, string outputFileName)
{
        IWavePlayer outputDevice;
        outputDevice = new WaveOutEvent();

        SignalGenerator pinkNoiseGenerator = new SignalGenerator();
        pinkNoiseGenerator.Type = SignalGeneratorType.Pink;
        outputDevice.Init(pinkNoiseGenerator);
        outputDevice.Play();

        // Wait for 10 seconds
        System.Threading.Thread.Sleep(10000);
}

Это все отлично работает. Я понимаю, что теперь, если я хочу записать в.wav, я должен инициализировать WaveFileWriter следующим образом:

WaveFileWriter writer = new WaveFileWriter(outputFileName, pinkNoiseGenerator.WaveFormat);

А затем запишите в созданный файл WAVE:

writer.WriteData(buffer, 0, numSamples);

Суть в том, что я понятия не имею, как заселить buffer прямо из pinkNoiseGenerator, Я просмотрел документацию и примеры и не могу найти с этим ничего общего - думаю, это должно включать .Read() метод SignalGenerator класс, но поскольку генератор играет неопределенно, он не имеет определенной длины. Для меня это означает, что buffer не может быть заполнен так же, как если бы мы, скажем, читали напрямую из входного файла WAVE (насколько я могу судить).

Может ли кто-нибудь, пожалуйста, указать мне в правильном направлении?

Благодарю.

1 ответ

Решение

Вот как вы можете создать WAV-файл, содержащий 10 секунд розового шума:

var pinkNoiseGenerator = new SignalGenerator();
pinkNoiseGenerator.Type = SignalGeneratorType.Pink;
WaveFileWriter.CreateWaveFile16("pinkNoise.wav", pinkNoiseGenerator.Take(TimeSpan.FromSeconds(10)));
Другие вопросы по тегам