I've fixed a bug in my old code and using one pitch seems to sound not so bad
wip on this ...
Cool stuff, looking forward!
Ok, I did it. In this test only one channel of the SCC is used
The test rom is here
It can work both as ASCII-8 or SCC mapper
In the former case it needs an SCC in the other slot
Now we can have or up to 4 voices mixed by the HW each with its volume, or mix voices and music using also channel 5
[WYZ], stay tuned
;-)
Sounds really good! And only 1 channel controlled at 60 Hz.
The SCC is really crazy powerful. If only it was the default sound chip instead of the PSG, I can only imagine the synthesis techniques people would’ve used. Cut-off filter effects, waveforms morphing in the frequency domain, synthesis of real voice and instruments...
Did you put any effort in compressing the memory?
@artrag making "diabluras". Black Magic in progress.
It needs 34 bytes per frame and per voice (32 bytes for wave + 2 for period)
I.e. 2040 bytes per second at 60Hz
What about this?
The waveforms can perhaps be shared when their DFT is similar to reduce the storage requirements.
Then it would be 4 bytes per frame per voice, 2 for a pointer to a wave and 2 for a period, plus a table of n 32 byte waves.
It would probably reduce fidelity because the odds that waves are exactly the same are probably low so you would have to give them "similarity scores". And it would only save memory if more than every 16th waveform can be reused. But it’s a thought.
Now the same rom can play up to 4 voices at the same time
Plug this rom and run this basic line
? usr(0): ? usr(1): ? usr(2): ? usr(3)
What about this?
The waveforms can perhaps be shared when their DFT is similar to reduce the storage requirements.
Then it would be 4 bytes per frame per voice, 2 for a pointer to a wave and 2 for a period, plus a table of n 32 byte waves.
It would probably reduce fidelity because the odds that waves are exactly the same are probably low so you would have to give them "similarity scores". And it would only save memory if more than every 16th waveform can be reused. But it’s a thought.
The fact I use a single pitch is already a source of quality loss... I would use k-means clustering if needed, but I would avoid other compression for the moment.
The same player with a better organization of the data in ROM
As before plug this rom using SCC mapper (or ASCII-8 mapper but than plug an SCC in the other slot) and type this line:
? usr(0):? usr(7):? usr(2):? usr(3)
what about modulating the pitch and make voices sing a song controlled by a music tracker?