To play a sine wave we can use the SignalGenerator class. This can produce a variety of signal types including sawtooth, pink noise and triangle waves. We will specify that we want a frequency of 500Hz, and set the gain to 0.2 (20%). This will help protect us from hurting our ears.
The SignalGenerator will produce a never-ending stream of sound, so for it to finish, we'd either just call Stop on our output device when we are happy, or we can se the Take extension method, to specify that we want just the first 20 seconds of sound.
Here's some sample code
var sine20Seconds = new SignalGenerator() {
Gain = 0.2,
Frequency = 500,
Type = SignalGeneratorType.Sin}
.Take(TimeSpan.FromSeconds(20));
using (var wo = new WaveOutEvent())
{
wo.Init(sine20Seconds);
wo.Play();
while (wo.PlaybackState == PlaybackState.Playing)
{
Thread.Sleep(500);
}
}Signal Generator can produe several other signal types. There are three other simple repeating signal patterns, for which you can adjust the gain and signal frequency.
triangle:
Gain = 0.2,
Frequency = 500,
Type = SignalGeneratorType.Triangle
square:
Gain = 0.2,
Frequency = 500,
Type = SignalGeneratorType.Squareand sawtooth:
Gain = 0.2,
Frequency = 500,
Type = SignalGeneratorType.SawToothThere are also two types of noise - pink and white noise. The Frequency property has no effect:
pink noise
Gain = 0.2,
Type = SignalGeneratorType.PinkNoisewhite noise:
Gain = 0.2,
Type = SignalGeneratorType.WhiteNoiseThe final type is the frequency sweep (or 'chirp'). This is a sine wave that starts at Frequency and smoothly ramps up to FrequencyEnd over the period defined in SweepLengthSecs. It then returns to the start frequency and repeats indefinitely
Gain = 0.2,
Frequency = 500, // start frequency of the sweep
FrequencyEnd = 2000,
Type = SignalGeneratorType.Sweep,
SweepLengthSecs = 2