Rationale
WinAmp has been one of the most popular music players since it began
in 1997. With the users in place, who would not want to have a standalone
remote to control WinAmp?
Background
I have wanted to build a WinAmp remote control for a long time now.
Several years ago I found a plugin that allowed the user to control the
basic functionality of WinAmp with a few pushbuttons over serial communications.
From that point I figured the next logical step was to provide feedback
to the user via an LCD. That is when the idea was born. I had neither
the time nor effort available until we were required to build something
for ECE 476. I approached Joe with the idea, and aside from him wanting
to build a self contained air hockey puck, he was all for the idea...
and the WinAmp Controller was born.
Logical Structure
The WinAmp controller can be split into two basic pieces: the plugin
and the controller, which communicate serially.
Plugin
The plugin is a way to hook into WinAmp. It is also known as a dynamic
linked library or dll. It is nothing more than a backend server waiting
on requests via the com port. When a request is received (a byte comes
in on the receive line), the data is translated and the request is serviced
either by sending a command to WinAmp, or returning some data regarding
the request.
Controller
The controller provides the interface for the user, consisting of eight
buttons and an LCD. The hardware runs on a 16.0 MHz Atmel Mega 32 microcontroller.
Hardware/Software Tradeoffs
As a first step we wrote an external application to control WinAamp. The
drawbacks of this implementation were lack of overall control of WinAmp,
and the application had to be started separate from, and after WinAmp
had started. The external application limited the control to simply play,
pause, stop, volume, and track changes.
Since our goal was to provide the user with a more powerful interface,
including viewing current song information and the entire playlist, we
had to develop a plugin. Now we have total control of WinAmp’s API
and the plugin loads when WinAmp is started.