Moved TonePlayer to its own file.
Moved TonePlayer to its own file.

--- a/Jump/Jump.csproj
+++ b/Jump/Jump.csproj
@@ -49,6 +49,7 @@
     <Compile Include="TwelveToneNote.cs" />
     <Compile Include="Constants.cs" />
     <Compile Include="SineSegment.cs" />
+    <Compile Include="TonePlayer.cs" />
   </ItemGroup>
   <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
 </Project>

--- a/Jump/Program.cs
+++ b/Jump/Program.cs
@@ -10,62 +10,6 @@
 using OpenTK.Input;
 
 namespace Jump {
-
-public sealed class TonePlayer : IDisposable {
-	public ALSourceState State {
-		get;
-		private set;
-	}
-
-	private int buffer;
-	private readonly int source;
-
-	public void BufferData(short[] audioData) {
-		if (this.buffer != 0) {
-			AL.DeleteBuffer(this.buffer);
-			this.buffer = 0;
-		}
-		this.buffer = AL.GenBuffer();
-		AL.BufferData(this.buffer, ALFormat.Stereo16, audioData, audioData.Length * 2, Constants.SampleRate);
-	}
-
-	public void Stop() {
-		AL.SourceStop(this.source);
-	}
-
-	public void PlayBuffer() {
-		AL.Source(this.source, ALSourcei.Buffer, this.buffer);
-		AL.SourcePlay(this.source);
-		State = ALSourceState.Playing;
-	}
-
-	public void PlayBufferSync() {
-		this.PlayBuffer();
-
-		this.WaitToStopPlaying();
-	}
-
-	public void WaitToStopPlaying() {
-		do {
-			int state;
-			Thread.Sleep(31);
-			AL.GetSource(source, ALGetSourcei.SourceState, out state);
-			State = (ALSourceState)state;
-		}
-		while (State == ALSourceState.Playing);
-	}
-
-	public TonePlayer() {
-		this.buffer = AL.GenBuffer();
-		this.source = AL.GenSource();
-	}
-
-	public void Dispose() {
-		this.Stop();
-		AL.DeleteBuffer(this.buffer);
-		AL.DeleteSource(this.source);
-	}
-}
 
 class MainClass {
 	public const ushort COLOR_MASK = 0xF;

--- /dev/null
+++ b/Jump/TonePlayer.cs
@@ -1,1 +1,65 @@
+using System;
+using System.Threading;
+using OpenTK.Audio;
+using OpenTK.Audio.OpenAL;
 
+namespace Jump {
+
+public class TonePlayer : IDisposable {
+	public ALSourceState State {
+		get;
+		private set;
+	}
+
+	private int buffer;
+	private readonly int source;
+
+	public void BufferData(short[] audioData) {
+		if (this.buffer != 0) {
+			AL.DeleteBuffer(this.buffer);
+			this.buffer = 0;
+		}
+		this.buffer = AL.GenBuffer();
+		AL.BufferData(this.buffer, ALFormat.Stereo16, audioData, audioData.Length * 2, Constants.SampleRate);
+	}
+
+	public void Stop() {
+		AL.SourceStop(this.source);
+	}
+
+	public void PlayBuffer() {
+		AL.Source(this.source, ALSourcei.Buffer, this.buffer);
+		AL.SourcePlay(this.source);
+		State = ALSourceState.Playing;
+	}
+
+	public void PlayBufferSync() {
+		this.PlayBuffer();
+
+		this.WaitToStopPlaying();
+	}
+
+	public void WaitToStopPlaying() {
+		do {
+			int state;
+			Thread.Sleep(31);
+			AL.GetSource(source, ALGetSourcei.SourceState, out state);
+			State = (ALSourceState)state;
+		}
+		while (State == ALSourceState.Playing);
+	}
+
+	public TonePlayer() {
+		this.buffer = AL.GenBuffer();
+		this.source = AL.GenSource();
+	}
+
+	public void Dispose() {
+		this.Stop();
+		AL.DeleteBuffer(this.buffer);
+		AL.DeleteSource(this.source);
+	}
+}
+}
+
+