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 des exemples ici .

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

    ; Attente première interruption 
    ei    
    nop
    halt  
    di    
    
    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 suffisamment 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.

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 ‘plutôt’ 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 aucune difficulté à passe à un autre format. Il suffit de choisir la bonne option d’export dans AT2, et d’inclure le player correspondant.

Liens