1

(je me suis permis de créer un nouveau sujet histoire que les 5 gars et demi qui utilisent encore newcc65 - tous francais je parie ^^ - le retrouvent facilement)

Ce tutoriel simple montre comment jouer de la musique au format mod dans les programmes compilés avec newcc65.

Tout d'abord rendons à César ce qui appartient à César, le code original ainsi que le tracker permettant d'exporter les mods sont l'oeuvre de Björn Spruck.
Son site web : http://bjoern.spruck.net/lynx/
Le code original : http://bjoern.spruck.net/lynx/chip_in_c_1.1.tgz
Chipper, le tracker : http://bjoern.spruck.net/lynx/Chipper_1.7.6.0.zip

Vous aurez aussi besoin de mettre à jour newcc65 avec la version patchée par le même Björn :
Version patchée de newcc65 : http://bjoern.spruck.net/lynx/newcc65_exe.zip

Une fois que vous avez mis à jour newcc65, téléchargez mon archive qui contient le code et des mods d'exemple :
http://www.godwarriors.com/__REPOS/LYNX/mod3.zip

PARTIE I : les mods, création et compilation
Je ne suis pas un expert des trackers donc ne comptez pas sur moi pour vous expliquer comment créer un mod. Le plus simple reste encore de lancer Chipper :
1) Chargez un des exemples (dans le répertoire data/demosongs).
2) Exportez-le : Export > For BLL Driver > Export for BLL LyxAss (appelons-le "my_tune_data.asm")
3) Créez un nouveau fichier (par exemple my_tune.asm) en copiant le code suivant, et en ajustant le nom du fichier inclu :
include "soundbs.mac" run $8000 dc.w CHANNEL_0, CHANNEL_1, CHANNEL_2, CHANNEL_3 include "my_tune_data.asm"
(notez l'adresse $8000, c'est l'adresse ou le mod sera chargé et que vous pouvez modifier à votre convenance, voir plus bas)
Vous avez alors 2 fichiers asm : my_tune.asm et my_tune_data.asm
4) Assurez-vous que ces fichiers soient dans le repertoire res/mod (ou en tout cas dans le même répertoire que la version correcte du fichier soundbs.mac) et compilez-le avec la commande suivante:
lyxass -v my_tune.asm
5) Vous avez alors un fichier my_tune.o, que vous ajouterez à votre cartouche avec lynxer (voir mod3.mak)

PARTIE II : le code
Il y a 3 fichiers de Björn qui sont repris quasiment tel quel :
- file_bs3.h/.c : Contient un loader de fichier qui semble solide (100% asm). La seule méthode qui nous intéresse est LoadFileTo qui charge un fichier à une adresse mémoire donnée.
- soundbs.h/.c et macros.h : l'API proprement dite (voir partie III).

Il y a enfin le "main", mod3.c, ou j'ai fait le principal de mon travail, à savoir nettoyer et virer tout ce qui était inutile. Le programme s'explique de lui même je pense, si on est familier avec newcc65 en tout cas.
Compilez et linkez tous ces fichiers, et le tour est joué.

PARTIE III : l'API soundbs
Rien de sorcier ici. Enfin si le code l'est quand même un peu, mais bonne nouvelle on peut se contenter d'utiliser les 3 fonctions exportées, à savoir SndInit(), SndStart() et enfin SndStop(). Mais avant de pouvoir utiliser l'API il faut d'abord charger le code à l'adresse reservée. Pour jouer un mod, le code ressemblera donc toujours à ca :
// Charge le fichier "fileId" à une adresse définie pour Chipper (0x8000 ici), initialise soundbs avec le mod chargé ensuite LoadFileTo(fileId, CHIPPER_ADDRESS); SndInit(); // No comment SndStart(); // No comment non plus ^^ SndStop();
La seule subtilité restante, c'est donc cette fameuse adresse mémoire. En fait, on peut charger le mod où on veut mais on doit définir une adresse statiquement et il n'est pas possible d'en changer durant l'exécution du programme. Personnellement, comme je ne pense pas utiliser le buffer de collision, je charge mes mods à partir de 0xa000. Une fois une adresse choisie, il faut encore la mettre à jour à TROIS emplacements différents :
1) dans le fichier "my_tune.asm", mettez à jour la ligne "run $8000"
2) dans le fichier soundbs.c, aux alentours de la ligne 220, soit dans le corps de la fonction SndStart, il faut mettre à jour les 8 adresses mémoire, en prenant bien garde à l'incrément. Dans mon exemple on aurait donc $a000, puis $a001 sur la seconde ligne, etc.
3) Enfin, il faut donner cette adresse lors de l'appel à LoadToFile

Et voilà !

Note : je relirais demain, j'ai peut-être et même surement zappé des trucs vu l'heure ^^

2

Merci, c'est clair et j'ajoute dans ma todolist ! J'essayerai de tester quand j'aurai assez de temps pour ça.

Et concernant le problème avec l'émulateur ? toujours d'actualité ? il faut tester sur flashcard ?
avatarWebmaster du site Ti-FRv3 (et aussi de DevLynx)
Si moins de monde enculait le système, alors celui ci aurait plus de mal à nous sortir de si grosses merdes !
"L'erreur humaine est humaine"©Nil (2006) // topics/6238-moved-jamais-jaurais-pense-faire-ca

3

Non aucun soucis avec l'émulateur, ca marche très bien. C'est sur du vrai hardware que j'étais pas sûr wink

4

J'ai testé un peu tout ca, très gourmand en ram le bébé sad

Le fichier produit par chipper est sacrément fourre-tout comparé à une compo abcmusic... Mais bon c'est super d'avoir une autre alternative pour la zik !

Donc... Merci Lordkraken ! top

5

Merci Sage surtout, j'ai juste nettoyé son exemple pour ne garder que l'essentiel... et écris le tuto pour clarifier le truc smile

6

C'est bizzare Fadest est pas intervenu dans ce sujet, pourtant si il y a quelqu'un qui s'y connait en musique sur Lynx c'est lui !!


GT dehors
avatar< SCPCD > j'aurais du dire "les doigts dans le cul vu que le java c'est de la merde"
Je suis Goto !

7

C'est parce que tu n'as pas lu 3 topics plus bas (á l'instant ou je postes,oui, c'est relatif, comme en asm ou comme un guru meditation Amiga, tu dois apprécier l'effort grin)

8

La question était dans l'autre topic, mais celui-ci est plus adapté vu que c'est le tuto le plus complet :

lordkraken (./41) :
@fadest : je n'arrive pas non plus à détecter quand la zik se termine ; la solution la plus simple c'est surement de faire boucler le mod directement dans l'éditeur (der luchs doit savoir comment faire je suppose - si c'est possible en tout cas).
En fait, pour boucler, c'est tout con, je ne sais pas si c'est pas documenté ou si j'ai pas trouver la doc, mais dans le source ASM, dans la définition des channel, il suffit d'encapsuler par DO ... LOOP
Exemple :
CHANNEL_2: DO 0 PATTERN ENVIROS PATTERN PATTERN_00 PATTERN PATTERN_02 LOOP CHAN_STOP
DO 0 permet de boucler indéfiniment, sinon, il suffit de préciser le nombre de fois ou l'on veut que ça boucle.

9

Bon à savoir smile

(du coup je vais aller vérifier si les ziks que j'ai loop bien comme ca - Turbo Laser Lynx sur AA m'a fait qq compos smile )

10

Si elles bouclent déjà, c'est probablement le cas. C'est à partir d'un post de Karri sur AA que j'ai creusé et retrouvé l'info, je suppose que Turbo Laser Lynx était déjà dans la boucle.

Autre sujet, les bruitages, comment fais tu pour avoir musique et bruitages en même temps?
De mon coté, je prévois 2 ou 3 voies pour la musique et 1 ou 2 voies pour les effets sonores, mais j'ai galéré pour piloter l'ensemble (musique qui boucle + effets sonores à la demande), ma seule solution a été de modifier le fichier soundbs.c pour créer des nouvelles procédures externes permettant de piloter une voie. Mais si ça se trouve, il y a beaucoup plus simple...

11

Oui, supprimer la musique #fadest#
avatarZeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

12

En vieillissant, ma position devient moins tranchée sur le sujet. La musique, ce n'est pas totalement inutile dans un jeu, ça a même un intérêt énorme en fait
Celui de bouffer de l'espace mémoire pour rien et servir d'argument pour dire qu'on n'a plus de place pour le code et qu'on ne peut plus rien rajouter au jeu gni

13

grin
avatarZeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

14

SI ça intéresse quelqu'un, j'ai modifié mon code de façon à jouer des pistes indépendamment les unes des autres. Ca sert a quoi me demanderez-vous ? Et bien à mettre des effets sonores sur ces mêmes pistes (1 effet sonore par piste, donc oui 4 au maximum).
La ou c'est intéressant c'est qu'on peut mixer dans un même mod des pistes musicales et des pistes avec des effets, et ensuite jouer ces effets pendant que la musique joue !