Quote:
Originally Posted by Megol
8088 4.77MHz can play modules with a sound card or covox type device (DAC connected to the parallel port). Sure it isn't easy but still...
|
Yuck. I don't want to hear that.
Quote:
Originally Posted by Megol
A 386 even in the sx version have no problem mixing many 16 bit channels.
|
But without any kind of interpolation.
Quote:
Originally Posted by Megol
- "Batching", handle x samples from one channel at a time before switching channels.
|
Not necessarily better because of the extra loop control.
Quote:
Originally Posted by Megol
- Reduce the number of volume levels.
|
Totally useless, unless this number is reduced to just one.
Quote:
Originally Posted by Megol
- Reduce the number of sample frequencies + use generated code for changing pitch.
|
This kind of trick was used on the ST for the TCB tracker. NOT nice.
Quote:
Originally Posted by Megol
- Use pre-scaled samples.
|
Impractical ; not useful.
Quote:
Originally Posted by Megol
- Self-modifying code.
|
Ugly. Fails on any cpu with a cache.
Quote:
Originally Posted by Megol
- Mixing buffer with higher precision than input samples (8 bit samples -> 16 bit buffer, 16 bit samples -> 32 bit buffer), reduces overflow management.
|
Reduces overflow management but needs extra instructions to convert from 8 to 16 or 16 to 32. Useless for speed.
Quote:
Originally Posted by Megol
But the target platform have to be known before coding a mixing routine, a superscalar processor with fast multiply may work best with a tight routine with little optimizations, a superscalar with somewhat slower multiply may benefit from doing batching in order to use one multiplication instruction for doing two volume scalings and of course in a really slow machine one can't do too advanced optimizations as there isn't enough cycles available - so reducing sample precision + playback frequencies are really the only tool available.
|
If you have a superscalar processor you have enough horsepower to mix as many channels as you want, with interpolation. Even a 030 can do that. And you don't even need a fast multiply (in fact you don't need a multiply at all).