The latest drop of the SDF adds a nice little feature for playing tones with the device. It works a lot like the old Beep API on the desktop where you provide a frequency and a duration and it plays the tone.
Here's a quick example of how it works:
Tone[] scale = new Tone[]
{
// up fast, using MIDI
new Tone { Duration = 10, MIDINote = 63},
new Tone { Duration = 10, MIDINote = 65},
new Tone { Duration = 10, MIDINote = 67},
new Tone { Duration = 10, MIDINote = 68},
new Tone { Duration = 10, MIDINote = 70},
new Tone { Duration = 10, MIDINote = 72},
new Tone { Duration = 10, MIDINote = 74},
new Tone { Duration = 10, MIDINote = 75},
// down slow, using freq (same notes as above)
new Tone { Duration = 100, Frequency = 622 },
new Tone { Duration = 100, Frequency = 587 },
new Tone { Duration = 100, Frequency = 523 },
new Tone { Duration = 100, Frequency = 466 },
new Tone { Duration = 100, Frequency = 415 },
new Tone { Duration = 100, Frequency = 391 },
new Tone { Duration = 100, Frequency = 349 },
new Tone { Duration = 100, Frequency = 311 },
};
SoundPlayer.PlayTone(scale);
You can see that this just plays an ascending scale of notes quickly, then the same scale descending, but slower. Note that the PlayTone method takes in an array of Tones, and a Tone can be initialized with either a Frequency or MIDI note value.