Yeah, the lookup table is looking more and more the right way to go. But it's not going to stop me from releasing the latest software. :-) Mike. --- In korgpolyex@yahoogroups.com, ASSI <Stromeko@...> wrote: > > On Samstag 20 September 2008, korgpolyex800 wrote: > > Wow, now that I look at it in C, it definitely needs improvement. > > If it's really implemented like you've commented, that would be so bad > you should have heard as the longest cycle would be 9. Maybe your > assembler uses different mnemonics, but I think RLC should be "rotate > circular", not "rotate through carry". If so, then the C expression > transforms to something more complicated: > > m = ((m ? m : -m) << 1) + (m&0x80 ? 44 : 43); > > Since you're not using a homogeneous recurrence (by virtue of adding > 43) zero is actually not a forbidden state and by excluding zero you > indeed shorten the longest cycle from 128 to 121. A better > recurrence would therefore be: > > m += (m&0x80 ? 44 : 43); > > or equivalently: > > ; my pseudo random number generator - used for the LFO randomiser > ; returns a random number in A > > RANDOMIZE: push h ; save HL > lxi h, M_RANDOM ; point at the previous value > mov a, m ; put the seed value into A > RANDOMIZEA: rlc ; rotate A circular > adi 43 ; add 43 offset > mov m, a ; save in seed > pop h ; load HL > ret ; return with pseudo random in A > > The cycles associated with different seed values then are (seed before > the colon, cycle length at the end in brackets): > > 0: 43, 129, 46, 135, 58, 159, 106, 255, 42, 127, 41, 125, 37, 117, 21, > 85, 213, 214, 216, 220, 228, 244, 20, 83, 209, 206, 200, 188, 164, > 116, 19, 81, 205, 198, 184, 156, 100, 243, 18, 79, 201, 190, 168, > 124, 35, 113, 13, 69, 181, 150, 88, 219, 226, 240, 12, 67, 177, 142, > 72, 187, 162, 112, 11, 65, 173, 134, 56, 155, 98, 239, 10, 63, 169, > 126, 39, 121, 29, 101, 245, 22, 87, 217, 222, 232, 252, 36, 115, 17, > 77, 197, 182, 152, 92, 227, 242, 16, 75, 193, 174, 136, 60, 163, 114, > 15, 73, 189, 166, 120, 27, 97, 237, 6, 55, 153, 94, 231, 250, 32, > 107, 1, 45, 133, 54, 151, 90, 223, 234, 0, > [128] > 2: 47, 137, 62, 167, 122, 31, 105, 253, 38, 119, 25, 93, 229, 246, 24, > 91, 225, 238, 8, 59, 161, 110, 7, 57, 157, 102, 247, 26, 95, 233, > 254, 40, 123, 33, 109, 5, 53, 149, 86, 215, 218, 224, 236, 4, 51, > 145, 78, 199, 186, 160, 108, 3, 49, 141, 70, 183, 154, 96, 235, 2, > [60] > 9: 61, 165, 118, 23, 89, 221, 230, 248, 28, 99, 241, 14, 71, 185, 158, > 104, 251, 34, 111, 9, > [20] > 30: 103, 249, 30, > [3] > 44: 131, 50, 143, 74, 191, 170, 128, 44, > [8] > 48: 139, 66, 175, 138, 64, 171, 130, 48, > [8] > 52: 147, 82, 207, 202, 192, 172, 132, 52, > [8] > 68: 179, 146, 80, 203, 194, 176, 140, 68, > [8] > 76: 195, 178, 144, 76, > [4] > 84: 211, 210, 208, 204, 196, 180, 148, 84, > [8] > 212: 212, > [1] > > There is a slight DC bias to the longest sequence and a strong one to > all the others. I think it would be easier to just put a random > table into memory (if you can spare the 256 bytes). That way you > could even make this a general waveform by allowing to load new > tables into memory and/or switch between different ones later on. > > > Achim. > -- > +<[Q+ Matrix-12 WAVE#46+305 Neuron microQkb Andromeda XTk]>+ > > Factory and User Sound Singles for Waldorf Blofeld: > http://Synth.Stromeko.net/Downloads.html#WaldorfSounds >
Message
Re: random LFO
2008-09-21 by korgpolyex800
Attachments
- No local attachments were found for this message.