[sdiy] Logs on a micro? Was: Reverse engineer an EPROM encoding?
MTG
grant at musictechnologiesgroup.com
Wed Nov 13 00:19:28 CET 2013
I have made some progress in figuring out this EPROM/ASIC/DAC combo that
Kawai were using in the mid-80's, but I need some help with coding
suggestions. You may recall some of the details by looking back in the
archives. It's a drum machine that stores the sounds in some kind of log
format. The ASIC then anti-logs the data before presenting it to the
DAC. The ASIC does mixing and volume control.
I made an EPROM containing a 12-bit ramp and inserted it in the drum
machine. Then for every friggin single step of that ramp, I recorded the
output from the ASIC to the DAC. Here is the transfer function:
http://musictechnologiesgroup.com/blog/wp-content/uploads/2013/11/Kawai_R100_DGU.bmp
So one obvious way of pre-encoding my own sound data would be to use a
look-up table for the data I've recorded. BUT I'm looking for
alternatives and since there has been talk about fixed point math and
the like before... I thought people here might help. In a nutshell, it
looks to me like for every 80h change in input data, the output data
doubles. I wonder if there is a some binary math I can do here that do
the same thing?? Here are some sample values:
EPROM out DAC Input
(hex) (decimal)
--------- ---------
000 0
080 0 (1/16)
100 0 (1/8)
180 0 (1/4)
200 0 (1/2)
280 1
300 2
380 4
400 8
480 16
500 32
580 64
600 128
680 256
700 512
780 1024
7FF 2048 (rail)
I don't think it's piecewise linear either, but I've not had time to
look at the in-between values.
GB
On 10/16/2013 12:40 PM, Scott Nordlund wrote:
> Several drum machines did use Mu-law encoding (Drumulator or something; I don't remember). And several others used floating point DACs (various Yamaha models since they were into that sort of thing). But you'd be able to tell this from the DAC circuits themselves. I do think it's likely that the waveforms are stored in logarithmic format, which is exponentiated before being sent to the DAC, but for a different reason. Two part question: (1) Is it possible to control the amplitudes of the individual drum sounds? (2) Is it a multiplying DAC configuration where the sounds are scaled by a time-multiplexed control voltage fed into the DAC's Vref pin? If (1) is yes and (2) is no, it's most likely that the wave data is stored in a logarithmic format for easier amplitude control. As in the DX7, amplitude is controlled by adding the amplitude value to the logarithmic format waveform data, then passing the result through an exponential table. y = exp(log(a)+log(b)) is equivalent to y = a*b.
It's more efficient because it requires only a lookup table rather than a multiplier.
>
More information about the Synth-diy
mailing list