[THOMSON] Jouer des MODs amiga
Modérateurs : Papy.G, fneck, Carl
-
- Messages : 7964
- Inscription : 18 sept. 2010 12:08
- Localisation : Brest et parfois les Flandres
[THOMSON] Jouer des MODs amiga
Une petite info au passage pour ceux qui s'intéressent à la musique sur 8bits.
Je viens de réaliser une preuve de concept qu'il est possible de jouer des MODs (des... enfin un... et plutot chiptune) Amiga (ProTracker) sur thomson: ici.
[EDIT], vous vous souvenez de chuck-rock et de sa musique de folie ?
Et bien le thomson sait ausi le faire!!! Cliquez sur l'image... ou poussez le volume de la video suivante
Je viens de réaliser une preuve de concept qu'il est possible de jouer des MODs (des... enfin un... et plutot chiptune) Amiga (ProTracker) sur thomson: ici.
[EDIT], vous vous souvenez de chuck-rock et de sa musique de folie ?
Et bien le thomson sait ausi le faire!!! Cliquez sur l'image... ou poussez le volume de la video suivante
Dernière modification par __sam__ le 15 févr. 2017 12:42, modifié 1 fois.
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
Re: Concours de musique 1-bit
Bravo. Du coup ça reste du 1-bit ou c'est autre chose ? La fiche wikipedia du TO8 indique que le générateur de son est 1bit, et le DAC est 6bit. Est-ce que ta routine simule le 4bit (valeur indiquée sur l'autre forum) via du 1bit ?
Pour info, Utz a réussi à faire aussi un lecteur de MOD sur zx spectrum (en pur 1bit) :
https://soundcloud.com/irrlicht-project ... zbmod-test
Pour info, Utz a réussi à faire aussi un lecteur de MOD sur zx spectrum (en pur 1bit) :
https://soundcloud.com/irrlicht-project ... zbmod-test
-
- Messages : 7964
- Inscription : 18 sept. 2010 12:08
- Localisation : Brest et parfois les Flandres
Re: Concours de musique 1-bit
J'utilise le DAC pour cette fois ci. Le DAC 6 bits est bien pour les MOD car 4 voix de 4 bits chacune font 6 bits au total. Pile poil la valeur du DAC.
Merci pour le lien. Il faudra que je regarde le travail de UTZ pour la conversion car je trouve que le format MOD n'est pas des plus propre. On trouve par exemple des effets qui débordent du pattern vers le pattern suivant. Résultat: le pattern qui suit ne sonne pas de la même façon suivant celui qui le précède. Ils ne sont pas complètement indépendants. Apparemment il a fait un convertisseur depuis le format XM. Peut-être que ce dernier est mieux ficelé...
On sait via les experiences de Daniel sur MO5 avec carte SD qu'il est aussi possible de produire autre chose que des BEEP avec le buzzer thomson. Mais ce n'est pas simple. L'éventuel player de MOD 1bit sur thomson ne sera pas pour tout de suite
Merci pour le lien. Il faudra que je regarde le travail de UTZ pour la conversion car je trouve que le format MOD n'est pas des plus propre. On trouve par exemple des effets qui débordent du pattern vers le pattern suivant. Résultat: le pattern qui suit ne sonne pas de la même façon suivant celui qui le précède. Ils ne sont pas complètement indépendants. Apparemment il a fait un convertisseur depuis le format XM. Peut-être que ce dernier est mieux ficelé...
On sait via les experiences de Daniel sur MO5 avec carte SD qu'il est aussi possible de produire autre chose que des BEEP avec le buzzer thomson. Mais ce n'est pas simple. L'éventuel player de MOD 1bit sur thomson ne sera pas pour tout de suite
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
Re: musique 1-bit
Bonjour Sam,
J'ai écouté ton preview laissé sur logicielsmoto (the beast) et je dois avouer que ce n'est pas si mal que cela. C'est même très bien pour un thomson. Le rendu sonore me fait penser aux premières routines sur Atari ST. Cela pourrait s'expliquer par une fréquence de sampling trop basse (autour de 8khz) ou d'une table d'échantillonnage mal ajustée.
Effectivement, les MOD sont très gourmands niveau pattern et pose un réel problème sur lequel je m'étais, il y a quelques années penché dessus. Une ligne comprend 4 piste sur 32 bits et un pattern compte 64 lignes (rude dilemme). Pour jouer une note, il faut 4 informations:
- Le code de la note (sur 2 o)
- Le numéro du sample (sur 1/2 o bits poids fort)
- L'effet à appliquer (sur 1/2 o bits poids faible)
- La valeur de l'effet (sur 1 o)
On pourrait rogner un o en créant une table de note (perte de TM)
On pourrait grider, c'est à dire que la lecture ne se ferait plus par ligne mais par piste en ajoutant une durée. (perte de TM aussi)
On pourrait aussi faire en fonction des évènements mais le pattern serait déstructuré et il faudrait créer une table supplémentaire. (La meilleur solution)
Ce n'est pas si simple en fait.
Mais je pense que tu y as déjà réfléchi.
En attendant je vous souhaite à tous tout mes voeux pour 2017
J'ai écouté ton preview laissé sur logicielsmoto (the beast) et je dois avouer que ce n'est pas si mal que cela. C'est même très bien pour un thomson. Le rendu sonore me fait penser aux premières routines sur Atari ST. Cela pourrait s'expliquer par une fréquence de sampling trop basse (autour de 8khz) ou d'une table d'échantillonnage mal ajustée.
Effectivement, les MOD sont très gourmands niveau pattern et pose un réel problème sur lequel je m'étais, il y a quelques années penché dessus. Une ligne comprend 4 piste sur 32 bits et un pattern compte 64 lignes (rude dilemme). Pour jouer une note, il faut 4 informations:
- Le code de la note (sur 2 o)
- Le numéro du sample (sur 1/2 o bits poids fort)
- L'effet à appliquer (sur 1/2 o bits poids faible)
- La valeur de l'effet (sur 1 o)
On pourrait rogner un o en créant une table de note (perte de TM)
On pourrait grider, c'est à dire que la lecture ne se ferait plus par ligne mais par piste en ajoutant une durée. (perte de TM aussi)
On pourrait aussi faire en fonction des évènements mais le pattern serait déstructuré et il faudrait créer une table supplémentaire. (La meilleur solution)
Ce n'est pas si simple en fait.
Mais je pense que tu y as déjà réfléchi.
En attendant je vous souhaite à tous tout mes voeux pour 2017
Dernière modification par jasz le 30 janv. 2017 11:08, modifié 2 fois.
-
- Messages : 7964
- Inscription : 18 sept. 2010 12:08
- Localisation : Brest et parfois les Flandres
Re: musique 1-bit
Merci.
C'est même pire que ça car outre les 4x32 bits par lignes, il y a entre chaque lignes environ 6 lignes intermédiaires (les frames: une toutes les 20ms en fait), ça fait vraiment beaucoup de données à traiter, en plus de la génération/mixage du son. C'est un sacré taf, et mon player hyper optimisé carbure à seulement 5khz. Je pense qu'il sera difficle d'aller plus vite étant donné tous les effets à supporter. Pour relativiser j'ai lu que les player PROTRacker sur Amiga peuvent mettre jusqu'à 10raster-lines (0.64ms) pour traiter les effets d'une frame. Imagine faire ça avec un CPU 16x plus lent (à minima)
Il faut surveiller logicielsmoto. J'y publie mes résultat intermédiaires, et il y a des trucs surprenant (par exemple le proto de musique pour lemmings par psygnosis )
C'est même pire que ça car outre les 4x32 bits par lignes, il y a entre chaque lignes environ 6 lignes intermédiaires (les frames: une toutes les 20ms en fait), ça fait vraiment beaucoup de données à traiter, en plus de la génération/mixage du son. C'est un sacré taf, et mon player hyper optimisé carbure à seulement 5khz. Je pense qu'il sera difficle d'aller plus vite étant donné tous les effets à supporter. Pour relativiser j'ai lu que les player PROTRacker sur Amiga peuvent mettre jusqu'à 10raster-lines (0.64ms) pour traiter les effets d'une frame. Imagine faire ça avec un CPU 16x plus lent (à minima)
Il faut surveiller logicielsmoto. J'y publie mes résultat intermédiaires, et il y a des trucs surprenant (par exemple le proto de musique pour lemmings par psygnosis )
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
Re: musique 1-bit
J'avais dans le temps soulevé la question sur logicielsmoto et sur le site de louis. Seul regret, les sources postées (adapter d'un player que j'avais réalisé sur Atari) ont disparues. Il suffit que je remette la main sur la disquette pour désassembler tout ceci et l'adapter (à nouveau) sur TO. A moins que quelqu'un avais récupéré mes sources. Ce qui est moins sûr
-
- Messages : 7964
- Inscription : 18 sept. 2010 12:08
- Localisation : Brest et parfois les Flandres
Re: musique 1-bit
Oui la pérennité des trucs qu'on met sur le web n'est jamais garantie.
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
Re: musique 1-bit
Je viens de retrouver une trace de mes travaux sur le site de Daniel
http://dcmoto.free.fr/forum/messages/592819_0.html
Peut-être cela pourra t'aider. Il y a le source du traitement de la partition et celui de la création du digit en page 2. Le tout commenté
Edit:
J'en profite pour répondre à Fool-duplex (vaux mieux tard que jamais ):
Avec cette routine, je visais les 10-11khz mais la routine de création du digit risque de ruiner cet espoir alors contentons nous de 8khz. Ce serait déjà pas si mal.
Pour info, cette routine est la copie conforme de celle que j'ai codé pour la gamme st-stf. Elle est inspirée du code de la demo froggies over the fence d'OVR (celui du menu). Elle joue la partition à 21khz en utilisant que la moitié de la tm contre 17khz pour l'originale . J'ai pu la monter jusqu'à 23khz avec un cycle machine complet... Mais pas plus Pour un simple st dépourvu de blitter c'est déjà pas si mal. Comme sur Thomson, la création du digit prend beaucoup de temps à la machine et plus la fréquence est grande et plus il faut de temps. Donc, la routine a été optimisée au maximum (du moins sur Atari). Le traitement des samples est légèrement différent que sur un player mod traditionnel pour justement gagner un peu de temps.
Pour les commandes, il n'est pas nécessaire de toutes les exporter. Les commandes classiques suffisent amplement dans un premier temps: 1, 2, 3, 4, 6, A, C, D, et F. Les commandes E sont des extensions aux commandes classiques et se traitent de la même manière. Peu utilisées du reste.
A ce propos on pourrait s'inspirer de cette commande pour grappiller quelques octets sur la partition. On aurait donc 3 octets par pistes à traiter au lieu de 4.
Le schéma deviendrait alors:
numéro de commande (1/2 o poids fort)
note (1/2 o poids faible + 1 o)
numéro du sample (1/2 o poids fort)
valeur de la commande (1/2 o poids faible)
Cela déstructure le pattern mais la chose n'est pas impossible. Seul défaut pour le volume (commande C). Il se retrouve codé sur 4 bits et prend donc une valeur de 0 à 15. Il faut voir si c'est pertinent.
http://dcmoto.free.fr/forum/messages/592819_0.html
Peut-être cela pourra t'aider. Il y a le source du traitement de la partition et celui de la création du digit en page 2. Le tout commenté
Edit:
J'en profite pour répondre à Fool-duplex (vaux mieux tard que jamais ):
Avec cette routine, je visais les 10-11khz mais la routine de création du digit risque de ruiner cet espoir alors contentons nous de 8khz. Ce serait déjà pas si mal.
Pour info, cette routine est la copie conforme de celle que j'ai codé pour la gamme st-stf. Elle est inspirée du code de la demo froggies over the fence d'OVR (celui du menu). Elle joue la partition à 21khz en utilisant que la moitié de la tm contre 17khz pour l'originale . J'ai pu la monter jusqu'à 23khz avec un cycle machine complet... Mais pas plus Pour un simple st dépourvu de blitter c'est déjà pas si mal. Comme sur Thomson, la création du digit prend beaucoup de temps à la machine et plus la fréquence est grande et plus il faut de temps. Donc, la routine a été optimisée au maximum (du moins sur Atari). Le traitement des samples est légèrement différent que sur un player mod traditionnel pour justement gagner un peu de temps.
Pour les commandes, il n'est pas nécessaire de toutes les exporter. Les commandes classiques suffisent amplement dans un premier temps: 1, 2, 3, 4, 6, A, C, D, et F. Les commandes E sont des extensions aux commandes classiques et se traitent de la même manière. Peu utilisées du reste.
A ce propos on pourrait s'inspirer de cette commande pour grappiller quelques octets sur la partition. On aurait donc 3 octets par pistes à traiter au lieu de 4.
Le schéma deviendrait alors:
numéro de commande (1/2 o poids fort)
note (1/2 o poids faible + 1 o)
numéro du sample (1/2 o poids fort)
valeur de la commande (1/2 o poids faible)
Cela déstructure le pattern mais la chose n'est pas impossible. Seul défaut pour le volume (commande C). Il se retrouve codé sur 4 bits et prend donc une valeur de 0 à 15. Il faut voir si c'est pertinent.
-
- Messages : 7964
- Inscription : 18 sept. 2010 12:08
- Localisation : Brest et parfois les Flandres
Re: musique 1-bit
Il y a quand même des trucs bizzares dans le format ProTracker. Tu va peut-être pouvoir m'expliquer.
Sur le morceau "dream off (mco)" de hmc (marco schindler) pour le cracktro de Pinball Fantasies par le groupe SkidRow (disponible sur cette page), au pattern 06, row 03, canal 3, je trouve: C#6 17...902, qui dit jouer le sample #17 à partir de l'offset 2*256 (effet 902) à la hauteur DO de l'octave 6. Ok jusque là tout va bien, sauf que le sample #17, fait 324 octets, ce qui est moins que l'offset de 512 demandé!!!
C'est quoi cette blague?!?
Qu'est-ce qu'on est supposé jouer quand l'offset déborde de l'instrument?
Sur le morceau "dream off (mco)" de hmc (marco schindler) pour le cracktro de Pinball Fantasies par le groupe SkidRow (disponible sur cette page), au pattern 06, row 03, canal 3, je trouve: C#6 17...902, qui dit jouer le sample #17 à partir de l'offset 2*256 (effet 902) à la hauteur DO de l'octave 6. Ok jusque là tout va bien, sauf que le sample #17, fait 324 octets, ce qui est moins que l'offset de 512 demandé!!!
C'est quoi cette blague?!?
Qu'est-ce qu'on est supposé jouer quand l'offset déborde de l'instrument?
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
Re: musique 1-bit
En fait, la valeur de l'offset est multipliée par 128 et non par 256. Et pour répondre à ton interrogation, si l'offset "déborde" il n'est tout simplement pas joué. Selon les players, soit le sample est muté soit il est joué normalement
Exemple:
Dans cet exemple, le sample est muté car sa longueur si débordement est passée à 1. La longueur reprendra sa valeur à la prochaine note. Sinon faire comme si la commande n'existait pas, il suffit de faire le branchement directement sur rts.
J'en profite pour rebondir sur ce ci contre
Exemple:
Code : Tout sélectionner
PT_sampleoffset
move.b PTv_SampleOffs(a6),d0
lsl.w #7,d0
cmp.w PTv_SmpLength(a6),d0
bge.s PT_sofskip
sub.w d0,PTv_SmpLength(a6)
add.w d0,d0
add.l d0,PTv_SmpStart(a6)
rts
PT_sofskip
move.w #$0001,PTv_SmpLength(a6)
rts
J'en profite pour rebondir sur ce ci contre
C'est vrai... J'ajoute que pour ceci on utilise normalement une table des sinus comme pour le tremolopulkomandy sur logicielsmoto a écrit :Pour le vibrato, c'est une "vibration" de la fréquence autour de celle de la note, plus ou moins forte selon le paramètre de l'effet. Donc au lieu d'être à 440Hz, la fréquence est à 440, puis 441, puis 442, puis 441, 440, 339, 338, 339, ...
Code : Tout sélectionner
PT_vibratotable
dc.b 000,024,049,074,097,120,141,161
dc.b 180,197,212,224,235,244,250,253
dc.b 255,253,250,244,235,224,212,197
dc.b 180,161,141,120,097,074,049,024
Dernière modification par jasz le 30 janv. 2017 17:55, modifié 1 fois.
-
- Messages : 7964
- Inscription : 18 sept. 2010 12:08
- Localisation : Brest et parfois les Flandres
Re: musique 1-bit
Tu es sur du x128 ? Dans la doc PMT ils disentet dans cette discussion sur pouet.net ils indiquentDonc c'est bien x256 dans tous ces cas là.
Le seul truc que je vois qui fait x128 c'est dans le code ASM d'un vieux replayer ProtTracker:Mais c'est peut-être un bug. La valeur x256 pour moi a du sens puisqu'un sample fait max 0xFFFF.
Pfff... alors x128 ou x256? Ce qui est sur c'est que x128 éviterait le débordement pour skidrow.
[Edit] j'ai essayé les deux, et bizzarement x128 ne sonne pas bon du tout malgré l'absence de débordement.
Code : Tout sélectionner
9xx Sample Offset Yes Starts playing the sample at the position xx × 256 (instead of position 0). This effect does not do anything if there is no note in the same pattern cell.
Enfin dans ce player en C, la routine once_upon_src/cool_mzx/pt.c:pt_play() contient9xx starts the sample at xx00, i.e. FF00 = 65280 samples is the highest possible start value in MOD / XM.
Code : Tout sélectionner
switch (cmdprm) /* komentojen käsittely, 1. kerta */
{
.../...
case 0x900: sd_setoffset((int)prm<<8); break;
Le seul truc que je vois qui fait x128 c'est dans le code ASM d'un vieux replayer ProtTracker:
Code : Tout sélectionner
pt_SampleOffset
MOVEQ #0,D0
MOVE.B n_cmdlo(A6),D0
BEQ.B pt_sononew
MOVE.B D0,n_sampleoffset(A6)
pt_sononew
MOVE.B n_sampleoffset(A6),D0
LSL.W #7,D0<=== ICI
Pfff... alors x128 ou x256? Ce qui est sur c'est que x128 éviterait le débordement pour skidrow.
[Edit] j'ai essayé les deux, et bizzarement x128 ne sonne pas bon du tout malgré l'absence de débordement.
Dernière modification par __sam__ le 30 janv. 2017 18:03, modifié 1 fois.
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
Re: musique 1-bit
Regarde le code que j'ai joint et constate la différence avec le tiens Mais je suis formel, on fait bien un lsl #7
Dernière modification par jasz le 30 janv. 2017 18:14, modifié 2 fois.
-
- Messages : 7964
- Inscription : 18 sept. 2010 12:08
- Localisation : Brest et parfois les Flandres
Re: musique 1-bit
Punaise, ya un truc alors.. parce que sur les échantillons sans débordement ca tombe bien avec le x256. Avec le x128 ca tombe trop tot dans l'instrument.
Dans ce tuto
le gars dit dans la description
Dans ce tuto
le gars dit dans la description
Serait-ce une différence entre le format orginel et ce qu'il est devenu au fil du temps ? (comme par exemple l'usage de la note B-3 qui fait planter le chipset amiga mais qui est utilisé sur les players d'autres plateformes)Additional stuff: To calculate the offset you take the first two hexadecimal numbers from the position from where in the sample you want to start. Therefore FF00 (65280) becomes the maximum offset which is very close to the maximum length for a sample (65535) so half way through that would translate to 80(hex).
Dernière modification par __sam__ le 30 janv. 2017 18:15, modifié 1 fois.
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
Re: musique 1-bit
Je m'explique. Pourquoi 128, simplement parce que c'est le maximum que l'operateur lsl accepte. Ensuite on compare si débordement. Si c'est le cas on skip sinon on soustrait le résultat D0 à la longueur du sample. Ce résultat D0 est ensuite multiplié par 2 (voici les 256 ) et ajouté à l'adresse de début de sample.
-
- Messages : 7964
- Inscription : 18 sept. 2010 12:08
- Localisation : Brest et parfois les Flandres
Re: musique 1-bit
Je suis un peu perdu, mais ce que je comprends, c'est que c'est 256 en octet parce que dans le ProTracker il faut tout (les longeurs, les indexes, etc) multiplier par deux à cause du fait qu'il travaille en interne sur des words 16bits. Apparemment ce serait lié inialement au fait que le chipsets l'amiga ne travaille que sur des multiples de words 16bits. Du coup le LSL#7 devient un x256 quand on compte en octet.
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos