Finally got the DH-100 digital horn telling the Atari8 what tones to make and when. There was a couple of times I didn't think it was going to happen. Luckily the compiled basic program runs fast enough to keep up with the filtered data from the Arduino. Some sound tests have been recorded and placed in the following ZIP file.
Nothing has been done to enhance the sound from the Pokey chip other then combining 2 channels to allow the use of 16 bits to define the tones. The breath controller was turned on during the recording to maximize any delay that may exist.
While messing with the mixer and sound effects I recorded a bonus file for your listening pleasure. Cranked up the sound effects to full on, so I hope it don't make your ears bleed.
I may record some music when I get the band together. (Or should I say, I have to get the ST operational and remember how the Band-In-A-Box software works)
The technical stuff:
This project has been ongoing over the last 6 months and will continue to be modified/ tweaked probably as often as it is used. Older blog entries begin with "DH100". It should make them easier to find.
The Arduino interface hardware hasn't changed since it was last described. It is close to being a good general purpose design for manipulating the joystick port. I'm debating if I should design a PC board for an Arduino shield. I have to build 5 or 6 more interfaces for the Atari MIDI rack of my dreams.
The software used for the Arduino and Atari8 are in the following zip file. You should be able to follow most of the logic. I tried to comment.
DH100-2-ATARI8 folder. Holds the Arduino program. The biggest difference from the last blog entry is that a counter for the Breath control data was added. The counter keeps track of the number of 208 MIDI commands (pressure control set points) have been received. Then every 15th data point is sent to the Atari and the counter reset. This greatly reduce the number of data points being sent to the Atari and still give some degree of volume control.
DHMIDI.EXE is the compiled DHMIDI.BAS using the MMG BASIC Compiler. The double precession integer math used instead of the floating point package greatly increased the speed of the program. Most of the received MIDI commands are printed to the screen since the display doesn't need to be turned off to save processor time.
DHMIDI.BAS is the program that receives the data from the Arduino and turns it into sounds.
This may help if you wish to examine the code.
1-9 Title and program information
10 GOSUB 14000 to set up variables, then GOTO 500 to start
100-150 subroutine to get a byte of data from the joystick port- returns x
500-530 gets input - if command then split upper and lower bits
600-630 Pressure sensor command - set new volume
700-720 Set Portomento flag
800-830 Set Atari Distortion level - should be used to select different voice envelopes
900-990 Plays note when portomento is turned off or redirects to portomento routine
2000-2060 portomento slide to next note. Same number steps between any 2 notes
14000-14200 sets up variables, tables, register names, motor control bit, unitize sound registers
15000-15170 data for audio control bytes Low byte, High byte and double byte. Used to save time calculating these number when called. Saved so MIDI note number = index
15500 data for distortion number. 10 -pure tone. upper 4 bits of AUDIO Control 2 location.
It hurts my brain when I try to think of all the ways this program can be improved/modified. The system works as a monophonic sound source when any MIDI instrument is hooked up and transmitting data on channel 1.