|
|||||||||||||||||||||||||||||||||||||||||||
|
Comme promis, nous allons voir aujourd'hui la modulation, la synthèse en mode non automatique du DMA et la compression par les deltas de Fibonacci. Programme varié mais chargé, alors on commence tout de suite... Partie 1 : la modulation 1. Le principe On travaille avec deux canaux sonores : le premier est initialisé avec la table d'onde normale, c'est celui que l'on veut moduler. Les données de la table d'onde du second seront envoyées vers un registre du premier plutôt que vers le convertisseur numérique/analogique et serviront à modifier le son normalement émis. 2. Modulation de fréquence et d'intensité Si ces données sont envoyées vers le registre d'intensité (AUDxVOL) on parlera de modulation d'intensité ou de modulation d'amplitude (AM), si au contraire elles sont envoyées vers le registre de période (AUDxPER) on parlera de modulation de fréquence (FM). On peut d'ailleurs envoyer les données sur ces deux registres pour obtenir les deux types modulations simultanément. 3. Du côté de la programmation Tout ce petit monde est orchestré par le registre ADCKON d'adresse $DFF09E en écriture et $DFF010 en lecture. Voici la signification des bits de ce registre :
4. Listing Rien de tel qu'un petit exemple pour bien comprendre, un classique qui est dans tous les bons bouquins (et même dans les mauvais, c'est dire... ) : la sirène... Partie 2 : synthèse sonore non automatique 1. Le principe Lorsque l'on active le canal du DMA son, on l'a déjà vu, le DMA prélève automatiquement les mots de données de la table d'onde les uns après les autres et on a droit à une jolie petite interruption quand on a fini le cycle (ou plutôt quand on commence le suivant). Mais on peut aussi faire nous-même ce travail, sans activer le canal du DMA son, en envoyant directement les données dans les registres dans lesquels il lit habituellement. Dans ce cas, les interruptions auront lieu une fois les deux échantillons (qui forment le mot à transférer dans les dits registres) joués. Les registres de données audio sont : Mais pourquoi se fatiguer à tout faire soit même alors que le DMA fait cela automatiquement sans qu'on s'occupe de lui ? 2. Les avantages Cette technique est très utile pour toutes les applications qui touchent au temps réel, par exemple si vous voulez transformer votre Amiga en synthétiseur et modifier les paramètres en même temps ou aussi dans les programmes de numérisations pour les options de "monitoring" quand on est en train de numériser... enfin bref, pour toutes les routines sonores qui dépassent le stade de la simple reproduction après coup. 3. Les inconvénients Par contre, vous ne rencontrerez jamais une telle technique dans une intro ou une démo car elle est extrêmement coûteuse en temps de calcul et si on ne charge pas à temps les deux nouveaux échantillons dans les registres AUDxDAT, le dernier sera répété. Une technique réservée à des applications spécialisées donc... Partie 3 : la compression par deltas de Fibonacci 1. Le principe Sous cette appellation barbare se cache en fait une technique fort simple. La compression delta, grandement utilisée en informatique, consiste à coder la différence entre deux données consécutives au lieu des données elles-mêmes. Ici, nous allons coder sur 4 bits la différence entre deux échantillons audio consécutifs de 8 bits. La taille d'un fichier comprimé de cette façon sera donc : 1 (pour la valeur initiale) + (taille normale-1) / 2 ...mais avec 4 bits on aura donc seulement 2^4 = 16 différences possibles (on devra donc faire des approximations donc perte de qualité sonore) d'où l'intérêt de choisir de bonnes valeurs. Tout cela pour en venir à la compression par deltas de Fibonacci qui est reconnue par le format IFF 8SVX et donc par des programmes tels que Perfect Sound (vous savez l'option COMP...). Les auteurs de ce format on choisit de coder les deltas (différences) sur 4 bits (d'où 50% de réduction par rapport aux 8 bits normaux d'un échantillon) mais ils auraient également pu choisir de coder sur 6 bits par exemple (25% de réduction) et ils ont pris comme valeurs pour les deltas les nombres appartenant à la légendaire série de Fibonacci. Celle-ci est définie par : Fib(1) = 1 Fib(2) = 2 Fib(n) = Fib(n-1) + Fib(n-2) 2. Les avantages Ils sont énormes : d'une part les temps de compression et de décompression sont vraiment minimes, d'autre part on connaît la réduction du volume d'information qui est constante et de plus relativement importante : 50% ici. 3. Les inconvénients Le gros désavantage est bien sûr dû à la perte d'information puisque certaines différences devront être ramenées au nombre de Fibonacci le plus proche. La suite de Fibonacci est telle que les pertes seront d'autant plus importantes que la valeur de l'échantillon variera brutalement. Les petits deltas seront par contre parfaitement codés. Cette compression doit être utilisée avec discrétion... certains sons passeront aussi bien, d'autres un peu moins bien... 4. Le listing Des programmes tels que Perfect Sound se servent de cette technique mais lorsque l'on veut récupérer un tel fichier pour soi, il faut se le décompresser tout seul. Même la plupart des lecteurs IFF 8SVX ignorent cette (dé)compression. Je vous propose donc une petite routine de décompression. Elle est entièrement commentée donc pas de problème mais sachez tout de même qu'elle suppose que vous ayez réservé de la place pour le fichier compressé auparavant ce qui est tout à fait normal d'ailleurs. En plus, elle vous permettra peut-être de réviser quelques bases de 68000 parce qu'à force de tripatouiller les registres DMA, sprites, Copper, etc. on finit vite par en oublier. Bon, c'est tout pour aujourd'hui, la prochaine fois on commencera à voir comment faire des trucs délirants avec l'échantillonnage, le MIDI, j'en passe, et des plus bruyants... ("ASM : les mamies ne lui disent pas merci...").
|