The adaptive model I used is something similar to what you describe flyguille, i.e. to minimize the steps of two channels But the S/N ratio is still quite high and it can't be compensated for really. It all depends on how far from the wanted value you get when you change the most important PSG channel.
Grauw, I'm working on a MSX1 demo atm and I actually decided to go with the more noisy but less CPU intensive and memory requiering model similar to the one you are working on. The reason is of course to free up resources to do other things like nice graphics.
Hopefully I'll finish this demo this weekend and then I'll pick up the adaptive sample player and see what I can do.
Dvik, cool, I’m looking forward to it.
With regard to the noise, I haven’t heard it yet, but it can’t possibly be worse than e.g. Oh Shit!
Which I played quite a lot, btw.
~Grauw
It sounds at least 10 times better than Oh Shit. The S/N is not that much better but the dynamics in the sound is a lot better. The bass tones sounds close to Moonsound In fact the whole demo sounds like Moonsound if you'd put a lowpass filter around 6kHz and played in front of a jet engine.
I can try to post a beta of the demo tonight. I need to do some cleanup and fix the music but I think I can have something to show tonight.
ARTRAG: Ah, I see, I outputted the wrong values . I have put the real table online now.
However, the observation that it sounded better is interesting... Perhaps the noise is compensated for by higher output values?
[WYZ]: what if you try out this table (output range up to 2.0)?
DB 00,00,00, 01,00,00, 03,00,00, 03,01,00, 05,00,00, 05,01,00
DB 05,03,00, 05,03,01, 07,00,00, 07,01,00, 07,03,00, 06,05,02
DB 07,05,00, 07,05,01, 07,05,03, 07,06,02, 09,00,00, 09,01,00
DB 09,03,00, 09,03,01, 09,05,00, 09,05,01, 08,07,04, 09,06,02
DB 10,02,00, 10,02,01, 10,03,02, 09,08,00, 10,05,02, 10,06,01
DB 09,08,04, 10,06,04, 10,07,02, 11,01,00, 11,03,00, 11,03,01
DB 11,04,02, 11,05,01, 11,05,03, 11,06,02, 10,09,02, 11,07,01
DB 11,07,03, 11,08,00, 10,09,06, 12,00,00, 11,08,04, 12,03,00
DB 12,03,01, 12,05,00, 12,05,01, 12,05,03, 12,05,04, 12,07,00
DB 12,07,01, 12,07,03, 12,07,04, 12,07,05, 12,08,02, 11,09,08
DB 11,10,06, 12,09,00, 12,09,01, 12,09,03, 12,09,04, 12,09,05
DB 13,02,01, 13,03,02, 13,04,02, 12,09,07, 13,05,03, 13,06,02
DB 13,06,04, 13,07,02, 13,07,03, 13,08,00, 13,08,01, 13,08,03
DB 12,11,01, 13,08,05, 12,11,04, 12,11,05, 13,09,03, 13,08,07
DB 13,09,05, 12,11,07, 13,10,00, 13,10,01, 12,11,08, 13,10,04
DB 14,00,00, 13,09,08, 13,10,06, 14,04,00, 14,04,01, 14,04,03
DB 14,05,03, 13,11,02, 14,07,00, 14,07,01, 14,07,03, 14,07,04
DB 14,07,05, 14,08,02, 14,07,06, 14,08,05, 14,09,00, 14,08,06
DB 14,09,03, 14,09,04, 14,09,05, 13,12,03, 14,09,06, 13,12,05
DB 14,09,07, 14,10,03, 14,10,04, 13,12,07, 13,11,10, 14,10,06
DB 13,12,08, 14,10,07, 14,11,00, 14,11,01, 14,11,03, 14,11,04
DB 14,11,05, 15,00,00, 14,11,06, 15,02,00, 14,11,07, 15,03,02
DB 15,04,02, 15,05,02, 15,06,01, 15,06,03, 15,06,04, 15,06,05
DB 14,11,09, 14,12,05, 15,08,02, 15,07,06, 15,08,04, 14,12,07
DB 15,08,06, 15,09,02, 15,09,04, 15,08,07, 15,09,05, 15,09,06
DB 15,10,00, 15,10,01, 15,10,03, 15,10,04, 15,10,05, 14,13,01
DB 14,13,03, 14,13,04, 15,10,07, 15,11,00, 15,11,01, 15,11,02
DB 14,13,07, 15,11,05, 15,11,05, 15,11,06, 15,10,09, 14,12,11
DB 15,11,07, 14,13,09, 14,13,09, 15,11,08, 15,12,00, 15,12,00
DB 15,12,02, 15,11,09, 14,13,10, 15,12,05, 15,12,06, 15,12,06
DB 14,14,00, 14,14,01, 15,11,10, 14,14,04, 15,12,08, 14,14,05
DB 14,14,06, 14,14,06, 14,14,07, 15,12,09, 15,13,00, 15,13,00
DB 15,13,01, 15,13,03, 15,13,04, 15,12,10, 14,14,09, 15,13,06
DB 14,13,12, 14,13,12, 15,13,07, 15,13,08, 15,13,08, 14,14,10
DB 15,12,11, 15,12,11, 15,13,09, 15,13,09, 15,13,09, 15,13,09
DB 14,14,11, 14,14,11, 14,14,11, 15,13,10, 15,13,10, 15,13,10
DB 15,14,00, 15,14,00, 15,14,00, 15,14,02, 15,14,03, 15,14,04
DB 15,14,05, 15,13,11, 15,14,06, 14,14,12, 15,14,07, 15,14,07
DB 15,14,08, 15,14,08, 15,14,08, 15,14,08, 15,14,09, 15,14,09
DB 15,14,09, 15,13,12, 15,13,12, 15,13,12, 15,13,12, 15,14,10
DB 15,14,10, 15,14,10, 15,14,10, 14,14,13, 14,14,13, 14,14,13
DB 14,14,13, 15,14,11, 15,14,11, 15,14,11, 15,14,11, 15,14,11
DB 15,14,11, 15,15,00, 15,15,00, 15,15,00
~Grauw
Dvik: hehehe .
I’m anxious to hear it, but I haven’t got anything better than an emulator overhere... hope that works well enough.
Have you tried, does it help if you play the sample on R800 or 7MHz? (just to see how much it helps to noice problem)
How to cut a spike:
LD A,10
LD D,5
LD BC,#6A1
OUT (#A0),A
OUT(C),D
OUT(C),B
(This was not a serious idea )
@dvk
I will try to generate tables from your measures
Btw
When do you observe lower spikes?
Maybe when you minimize the volume changes on each channel?
If yes, as there are lots duplicate configurations is is possible to find
the best configuration for channel volumes in order to minimize the
changes on each one
This replay routine is faster:
; ;PSG sample replay routine ; ;hl = sample start address ;de = sample length ; dec de ld b,e inc b inc d exx ld c,#A1 ld d,PSG_SAMPLE_TABLE / 256 ld b,0 exx Loop: ld a,(hl) inc hl exx ld e,a add a,a ld l,a ld h,b ;h = 0... b is always 0 rl h add hl,de ld b,(hl) inc hl ld d,(hl) inc hl ld e,(hl) ld a,8 out (#A0),a ;play as fast as possible inc a out (c),b out (#A0),a out (c),d inc a out (#A0),a out (c),e ld b,8 ;timing wait loop WaitLoop: djnz WaitLoop exx djnz Loop dec d jp nz,Loop ret ;align table to an address multiple of 256 ;assembler must be able to handle DS 0 - otherwise, use IF for that case DS (0-$) AND #FF PSG_SAMPLE_TABLE:
Note that the sample table must be aligned on an address multiple of 256. This is for the table lookup speed improvement. That aside, the looping speed has also improved.
~Grauw