Windows Interface: Server Object LibraryBy Mark David [21030170+]
It became obvious when I began working on this piece of the project that what was actually needed was two components. Here is the first of these two, called ChromaServer. It can be referenced from any Microsoft Visual Studio environment, and accomplishes the following for the application developer:
- Handling of the serial communications between the computer and the Chroma(s)
- Construction of command byte sequences to the Chroma(s), and parsing of command byte sequences from the Chroma(s)
- Creation and maintenance, insofar as is possible, of an object structure with properties which represent the current state of the Chroma(s)
- Recording and playback of Chroma performances
So far, it seems to be doing a pretty good job. The third point is not completely possible for a couple of reasons, which are explained in the doc and the FAQs. I don't believe, however, that this will get in the way of the utility of the eventual application; this primarily because I will be treating the Chroma as a peripheral, not a storage device. Program information will be stored on the computer and written to the Chroma as needed, not vice versa. The interface (exposed properties, methods and events) for recording and playback of performances is pretty skeletal with this version, but will grow as I find out more precisely what is required.
This is the Version 0.03. I've tested it quite a bit, but it no doubt still has bugs. If you find any, please do let me know. Any suggestions for improvement are welcome, also, although I may or may not decide to incorporate them. The source is there, too, if anyone wants to embellish it.
Here are the files:
- the install for the component, ChromaServer.zip. It's about 1.5Mbytes, due to Microsoft's install packaging bloat routines, but the .dll itself is only 172K after installation. The doc is included with the install. Unzip and run setup.exe.
- the documentation, in HTML or MS Word 2000 ChromaServer.doc
- the source files, zipped ChromaServerSource.zip
This component is very closely structured around the Chroma's programming interface, with objects like Programs and Instruments, and methods that parallel the Chroma's command language. The second component will be an OCX, with a set of controls structured more like a synthesizer's interface (oscillator, filter, amplifier, etc.). For now, I'm putting the code that translates between these two models in the client application; someday, I may package that as a component as well.
Finally, a big thank you to David Clarke [21030085++] for publishing the source for his tape2txt utility, from which I was able to infer the structure of the 59-byte packed Chroma Program format, used in the ReadProgram and WriteProgram commands.