Jouer un soundtrack Arkos Tracker 2

Jouer un soundtrack Arkos Tracker 2

Voici une mise a jour d’un billet précédent, où l’on expliquait comment jouer un soundtrack avec Arkos tracker. Dans la seconde version d’Arkos Tracker (AT2), il existe de nombreux formats de soundtracks, qui sont détaillés dans sa documentation intégrée, qui est très complète. Il y a même un article, en anglais, écrit pas Targhan himself, qui décrit la même chose que le présent billet. Il est possible de jouer des musiques sur de nombreuses architectures. Ce billet est simplement la pour démarrer rapidement, avec pour commencer un exemple simple, et dans un second temps une description des différents formats disponibles, avec leur avantage et inconvénients.

Exemple simple

Dans cet exemple, nous allons utiliser le format le plus simple et le plus compact, le format Lightweight. Les exemples et la documentation se trouvent dans le répertoire player/playerLightweight. Vous pourrez retrouver cet exemple sur la page rasm_live dédiée.

Une fois votre soundtrack créé, il faut l’exporter au format AKL. La façon la plus efficace est de générer un fichier sous forme de source et non en binaire, de façon à rester indépendamment de l’adresse ou l’on souhaite loger le fichier. De plus, il faudra prendre soin sélectionner l’option pour générer le fichier de configuration:

Ensuite il suffit d’adapter l’exemple fourni (PlayerLightweight.asm) avec le fichier que l’on a généré. Si on réduit le source au strict minimum:

        org #1000

        di                  ; Désactive les ITs systeme
        ld hl,#c9fb         ; Ei : RET en #38
        ld (#38),hl
        ld sp,#38
       
        ld hl,Music         ; Initialisation
        xor a               ; Subsong #0.
        call PLY_LW_Init


Mainloop:

	; Attente VBL	
        ld b,#f5
Sync:   in a,(c)
        rra
        jr nc,Sync

        ; Temporisation (optionelle)
        ; permet d'etre sur que l'attente VBL fonctionne
        ei    ; Rétablit les IT
        nop
        halt  ; Attente
        di    ; Arrete les ITs

        call PLY_LW_Play    ; Jouer la musique

        jr MainLoop

Music:
        ; La configuration n'est pas obligatoire, mais elle permet
        ; de réduire la taille du binaire produit (ici 1.6K au lieu de 1.8K)
        include "./barbapapa_lw_playerconfig.asm"       
        ; Soundtrack exporté
        include "./barbapapa_lw.asm"       
        
Player:
        include "./PlayerLightweight.asm"

Dans cet exemple, les 2 fichiers exportés sont barbapapa_lw.asm et barbapapa_lw_playerconfig.asm. Le second fichier est un fichier de configuration, qui n’est pas obligatoire, mais il permet de réduire (dans cet exemple) la taille du binaire produit de 1.8K a 1.6K.

L’attente avec le Halt permet de s’assurer que la boucle dure suffisament longtemps pour que l’attente VBL fonctionne. Elle n’est pas obligatoire, en particulier quand il y aura plus de code (et dont de temps machine utilisé) dans la boucle principale.

Les sources de cet exemple peuvent être récupérés ici ou encore consultés la. La commande rasm suivante permet de réaliser l’assemblage:

rasm buildme.asm
Cliquez ici pour lancer l’émulateur intégré et visualiser le résultat, directement depuis votre navigateur.

Jouer plusieurs soundtracks

Pour gérer plusieurs soundtrack, il faudra générer un fichier source pour chaque soundtrack, en prenant soin de paramétrer un préfixe différent à chaque fois. On pourra ensuite inclure les fichiers dans le source initial de la sorte:

Song1:
         include "./song1_lw_playerconfig.asm"       
         include "./song1_lw.asm" 
Song2:
         include "./song2_lw_playerconfig.asm"       
         include "./song2_lw.asm"        

Et initialiser l’une ou l’autre, par exemple la seconde:

 ld hl,Song2
 xor a          
 call PLY_LW_Init

Pour passer d’une soundtrack à une autre, il faudra arrêter la lecture (en appelant PLY_LW_Stop) et initialiser la nouvelle:

call PLY_LW_Stop  
ld hl,Song1
xor a          
call PLY_LW_Init

Jouer des FX

Il est possible de jouer des sons par exemple pour agrémenter un jeu. Les sons peuvent être joués sur le channel de son choix, éventuellement par dessus une musique en train de se jouer.

Il faut commencer par déclarant le symbole PLY_LW_MANAGE_SOUND_EFFECTS avant l’inclusion du player:

Player:
  PLY_LW_MANAGE_SOUND_EFFECTS EQU 1
  include "./PlayerLightweight.asm"

Notez que l’utilisation de FX nécessitera la présence du fichier PlayerLightweight_SoundEffects.asm. Ensuite il faut inclure le fichier FX généré précédemment:

SoundEffects:
        include "../mySoundEffects.asm"

Ensuite on procède à l’initialisation des effets:

        ld hl,SoundEffects
        call PLY_LW_InitSoundEffects

Enfin, il est possible de jouer le son sur un canal donné, en passant son numéro:

        ld c,0                         ;Channel 1
        ld a,0                         ;Numero du FX
        ld b,0                         ;Volume max
        call PLY_LW_PlaySoundEffect

Il est possible d’arrêter le son à tout moment :

ld a,0                                 ; Channel 1
call PLY_LW_StopSoundEffectFromChannel

A noter qu’il est possible de se contenter d’utiliser un player restreint aux FX uniquement, si l’on souhaite jouer des sons et pas de soundtrack (PlayerSoundEffects.asm)

Tour d’horizon des formats et players

Les principaux formats disponibles avec AT2 sont les suivants

  • Le format « lightweight » (AKL) utilisé dans l’exemple précédent. Il permet de lire la plupart des fichiers que l’on pourra produire avec AT2, sur CPC, MSX, Spectrum ou encore sharpMZ700. Il a l’avantage de produire des fichiers de taille réduite (soundtrack et player). Par contre il n’est pas le plus optimum en terme de temps CPU utilisé pour jouer, et nécessite de désactiver les interruptions pendant son utilisation.
  • Le format ‘Minimaliste‘ (AKM): C’est un format encore plus compact que le format lightweight, en retirant certains possibilités du format lightweight, comme certains sons hardware. Il est idéal pour une production 4K par exemple.
  • Le format ‘Générique’ (AKG) qui permet d’utiliser toutes les possibilités offertes par AT2, et est plus efficace que le format AKL en terme de CPU (mais il prend plus de place en mémoire)
  • Le format ‘Sound effect’, qui peut être utilisé pour jouer des sons sur un seul channel, soit par dessus une mélodie, soit de façon totalement indépendante, grâce à un player dédié

A noter qu’il existe aussi un format ‘MOD’ qui permet de jouer des samples. (un exemple ici)

Le format AKL est indiqué comme ‘plutot’ obsolète dans la documentation d’Arkos Tracker, car d’un coté le générique est plus versatile, et le minimaliste est plus compact. Il fonctionne cependant parfaitement, et il n’y a acune difficulté à passe à un autre format. Il suffit de choisir la bonne option d’export dans AT2, et d’inclure le player correspondant.

Liens