Oui c'est une excellente idée
Comme la commutation est assez facile sur TO8/TO9+ ca ne devrait pas être pénalisant. Pour le dispatch en RAM cela peut se faire au chargement du MOD. Oui c'est une bonne idée. Il faut aussi que la partie pattern tienne dans les 16k de $6000 à $9FFF, ou alors faire aussi de la commutation à chaque frame (20ms). C'est possible aussi. A garder dans un coin pour plus tard (quand on aura des mods avec des instruments de 3-6secs voir plus
).
Pour ma part j'entrevois une facon rigolotte de compacter les samples. L'idée naïve serait de mettre deux échantillons audio consécutifs à chaque adresse. Ok c'est logique, mais cela aura un impact sur le player qui doit, pour chaque échantillon, regarder la partie fractionnaire de l'addresse pour savoir si c'est la partie haute ou basse de l'octet qu'il faut utiliser. Le temps d'execution va se ralonger énormément et la fréquence de sortie descendre appauvrissant sérieusement la qualité.
Or on peut être un poil plus malin
et se dire que la partie haute des octets appartient par exemple aux instruments pairs et la partie basse aux impairs. Donc au lieu qu'un octet appartienne à un seul instrument, il supperpose 2 instruments: l'un pair, l'autre impair. Comme si on avait un monde parallèle permettant de stocker le double de données. Ca fait penser à la supperposition d'états quantiques.. (au secours, il est fou!
).
Et c'est mieux ca ? Oui car la décision se fait au moment de l'attribution d'un instrument dans une voix (par modification du code en temps réel). Une fois de temps en temps et pas à chaque échantillon, ca change tout. Mais pour le player ca ne change pas beaucoup
. Cela ajoute seulement une instruction de 2 cycles par voix à la partie mixage
:
Code:
LDB $nnnnn ; récupération échantillon
ANDB #$0F ; pour ne travailler que sur la partie basse. $F0 pour l'autre partie <== C'EST LE SEUL AJOUT
ORB #$v0 ; volume (ou $0v pour les instruments sur l'autre moitié)
ADDA B,U ; ou B,Y pour l'autre moitié (U contient un table $vx (v=>volume, x=>échantillon), Y une table $xv où les indexes sont renversés)
A noter qu'à ce moment là on a un joli problème d'optimisation algorithmique à résoudre pour faire en sorte d'utiliser ce double rangement de façon optimale. En effet, il faut décider quels instruments mettre en partie haute et lesquels en partie basse, tout en minimisant la quantité de mémoire utilisée. C'est un problème voisin du
bin packing ou du
sac à dos. Ce sont des problèmes difficiles à résoudre algorithmiquement dans le cas général, aussi il faudra se contenter d'une approximation pas trop mauvaise de la solution optimale.
Mais même sans avoir recours à la superposition d'échantillons, il existe pas mal de MODs de tailles raisonnables (surtout issu des cracktros) qui sonnent très très bien. Il y a ~10 ans j'avais aspiré une partie du site
http://amigamusic.tripod.com (tripod, vous vous en souvenez?). Ca trainait au fin-fond de mon disk-dur du PC de l'époque (celui que j'utilise en ce moment: c'est dans les vieux pots qu'on fait les meilleures soupes!). Je les ai retrouvés, et il y a une plétore de MODs à explorer: 782 fichiers pour un total de 27Mo, soit des MODs de ~50ko environ ce qui est une bonne taille pour la conversion (les samples sont divisés par 4 pour s'accomoder de la fréquence du thomson).