The following software technologies will be used with this project:
.NET Framework 4.5.1: We will be leveraging the asynchronous task pattern implemented in .net 4.5, as well at the observable pattern built into the earliest editions of .NET. This will allow each emulated component to be executed on a separate thread, but governed by a common clock, to reproduce both the functionality and performance of real hardware.
WPF: This is a modern user interface technology meant to be a replacement for WinForms. It has more features, is easier to develop, supports hardware acceleration, and has a large developer base. The only downside is that it does not yet work with Mono; the workaround for this is that a subset of WPF known as Silverlight could be used which is compatible with Mono. Alternatively, since this software will be modular, a separate GUI could be written for Linux.
NAudio: While WPF has its strengths in window presentation and even graphical manipulation, it only offers basic playback of audio. The NAudio library allows playback of multiple-format files, to signal generation, to even sample manipulation. It is a mature product which has been in development since the first release of the .net framework. Moreover, it was written with unit-testing in mind and supports the injection of playback interfaces; the invocation of the audio library by a class can be tested without actually playing an audio.