Logicielsmoto.com

Nous sommes le 19 Mar 2024, 06:05

Heures au format UTC + 1 heure




Poster un nouveau sujet Répondre au sujet  [ 280 messages ]  Aller à la page 1, 2, 3, 4, 5 ... 19  Suivante
Auteur Message
 Sujet du message: MOD ?
MessagePosté: 08 Jan 2017, 23:42 
Hors ligne

Inscription: 21 Aoû 2006, 09:06
Messages: 1800
Localisation: Brest
L'an dernier j'expliquais la musique 1 bit. C'est pas mal, mais beaucoup moins riche que ce que ce que le CNA permet. Or j'ai pondu ce bout de code
Code:
(main)MP
        ORG     $9000
   
f_v0    equ     1234
f_v1    equ     2345
f_v2    equ     3456
f_v3    equ     4567

        setdp   *<-8

; compteur 24bits pour une voix
VOICE   macro
        LDB     #00         ; 2
s0\0    set     *-1
        ADDB    #f_\0&255   ; 2  LSB frequence
        STB     <s0\0       ; 4
        LDD     #S_BEG\0    ; 3
s2\0    set     *-2
        ADCB    #f_\0<-8    ; 2  MSB frequence
        ADCA    #0          ; 2
        CMPD    #S_END\0    ; 5
        LBHS    L0\0        ; 5(6)
        FCB     $10         ; 1 ==> CMPD so no-op
L0\0    SUBD    #S_LOOP\0-S_END\0 ; 4
        std     <s2\0       ; 5 => 35
        endm
       
        ldu     #vol
        ldx     #100
frame
; fait avancer les 4 pointeurs sur sample
        VOICE   v0
        VOICE   v1
        VOICE   v2
        VOICE   v3          ; => 140
   
volv0   equ     7*16
volv1   equ     7*16
volv2   equ     7*16
volv3   equ     7*16

; mix des 4 samples après ajout des volumes
        ldb     <s2v0       ; 4
        orb     #volv0      ; 2 (volume voix 0)
        lda     b,u         ; 5
       
        ldb     <s2v1       ; 4
        orb     #volv1      ; 2 (volume voix 1)
        adda    b,u         ; 5
       
        ldb     <s2v2       ; 4
        orb     #volv2      ; 2 (volume voix 2)
        adda    b,u         ; 5
       
        ldb     <s2v3       ; 4
        orb     #volv3      ; 2 (volume voix 3)
        adda    b,u         ; 5 ==> 44
       
        sta     $E7CD       ; 5 sortie son
       
        NOP                 ; 2 attente
       
        leax    -1,x        ; 5
        lbne     frame      ; 5(6) ==> 200 cycles

vol     fcb     0,0,0,0     ; table des volumes
        fcb     0,0,0,0
        fcb     0,0,0,0
        fcb     0,0,0,0
;... on a 16 tables de 16 valeurs pour des volumes de 0 à 15
vol15   fcb     0,1,2,3     ; vol max
        fcb     4,5,6,7
        fcb     8,9,10,11
        fcb     12,13,14,15
           
; un sample bidon
SAMPLE  macro       

; debut       
S_BEG\0
        fcb     $1,$2,$3    ; sample: 4 bits
; bouclage quand on a déjà atteint la fin une fois
S_LOOP\0
        fcb     $3,$2,$1
; fin
S_END\0
        endm

        SAMPLE  v0
        SAMPLE  v1
        SAMPLE  v2
        SAMPLE  v3
       
        end
Qui joue 5000 fois par secondes 4 samples (4bits) incépendants, situés n'importe où en RAM, chacun avec son propre volume, et sa propre répétition. Le truc de programmation cool c'est le FCB $10, qui transforme le SUBD faisant le bouclage du sample en CMPD inoffensif tout en compensant le LBHS pour avoir un timing constant. Je suis assez fier de cette astuce :D

L'ensemble de la boucle "frame" dure 100*200µs, soit 20ms, ce qui est pile la durée d'un VBL et d'une "frame" dans un module AMIGA .... :voyons:

Ohoh! :D Ceci permettrait techniquement de pouvoir jouer des MODs amiga sur thomson après conversion dans un format sympathique. Je n'ai pas essayé de voir si les échantillons sur 4bits@5khz sonnent bien, mais la perspective de jouer des MODs me plait bien. En tout cas au niveau des timings on est bon.

_________________
Good morning, that's a nice Tnetennba


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: MOD ?
MessagePosté: 09 Jan 2017, 12:24 
Hors ligne

Inscription: 27 Juin 2006, 19:44
Messages: 1058
Localisation: France (24)
Tu es sûr de ton coup pour le "SUBD #S_LOOP\0-S_END\0" ? Parce que retirer un nombre négatif, c'est ajouter un nombre positif. Et le loop devrait looper, pourtant.

_________________
Marche a suivre pour s'inscrire sur ce forum
Do not forget to contact one of the administrators to validate your registration.
Le site des démos de Puls
L'émulateur Teo


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: MOD ?
MessagePosté: 09 Jan 2017, 13:58 
Hors ligne

Inscription: 21 Aoû 2006, 09:06
Messages: 1800
Localisation: Brest
Tu as raison, c'est dans l'autre sens qu'il faut faire: "SUBD #S_END\0-S_LOOP\0". Il faut bien sur garder le SUBD pour le transformer en CMPD.

_________________
Good morning, that's a nice Tnetennba


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: MOD ?
MessagePosté: 09 Jan 2017, 23:19 
Hors ligne

Inscription: 27 Juin 2006, 19:44
Messages: 1058
Localisation: France (24)
Enfin bon, j'ai quand même l'impression que c'est un premier jet :oops: vu que le passage du "lbne frame" tombe dans le vide...

_________________
Marche a suivre pour s'inscrire sur ce forum
Do not forget to contact one of the administrators to validate your registration.
Le site des démos de Puls
L'émulateur Teo


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: MOD ?
MessagePosté: 10 Jan 2017, 08:11 
Hors ligne

Inscription: 21 Aoû 2006, 09:06
Messages: 1800
Localisation: Brest
Oui ca n'est pas l'intégralité du player. C'est la routine centrale. Autour d'elle il faut ajouter la lecture des patterns, mais cela ne pose pas de problèmes particuliers. J'en ai déjà réalisé pleins. C'est surtout les temporisations de cette boucle interne qui permet de se rendre compte de la faisabilité du projet. Et là ca me semble joueable

En ce moment je suis en train de concevoir un encodage des commandes (set-vol(chl), set-freq(chl), set-instr(chl), wait(delay)) qui soit à la fois compact et efficace. Une fois cela fait la boucle interne s'etoffera pour avoir un moteur complet. Restera ensuite la conversion des fichiers MOD dans ce format pour lequel j'ai une piste prometteuse.

Restez branchés :)

_________________
Good morning, that's a nice Tnetennba


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: MOD ?
MessagePosté: 10 Jan 2017, 21:37 
Hors ligne

Inscription: 21 Aoû 2006, 09:06
Messages: 1800
Localisation: Brest
Héhé, je sais réduire la boucle de 200cycles à 181cycles, soit de 5khz à 5.524khz. :)

Ok c'est bien d'être 10% plus rapide mais pourquoi suis-je si content de cette valeur? :voyons: Parce que 5.524*8 est très très proche de 44100khz. Les conversions seront facilités je pense. :bien:
Code:
     36  3     9000 20   22       L1v0   bra           L0v0
.. pas trop loin ..
     12  2     900E C6   00       f_loop  LDB     #00         ; 2
     13                  900F     s0v0    set     *-1
     14  2     9010 CB   D2               ADDB    #f_v0&255   ; 2  LSB freq
     15  4     9012 D7   0F               STB     <s0v0       ; 4
     16  3     9014 CC   90AE             LDD     #S_BEGv0    ; 3
     17                  9015     s2v0    set     *-2
     18  2     9017 C9   04               ADCB    #f_v0<-8    ; 2  MSB freq
     19  2     9019 89   00               ADCA    #0          ; 2
     20  5     901B 1083 90B4             CMPD    #S_ENDv0    ; 5
     21  3     901F 24   DF               BLO     L1v0        ; 3
     22  3     9021 CC   90B1             LDD     #S_LOOPv0   ; 3
     23  5     9024 DD   15       L0v0    std     <s2v0       ; 5 => 31
.. repété encore 3x.. ==> 124

     54  4     906E D6   15               ldb     <s2v0       ; 4
     55  2     9070 CB   70               addb    #volv0      ; 2
     56  4+1   9072 A6   C5               lda     b,u         ; 5 (ou adda après)
.. répété 3x pour addition des voix ... ==> 4x11

     70  5     9086 B7   E7CD             sta     $E7CD       ; 5 sortie son
     71                           
     72  4+1   9089 30   1F               leax    -1,x        ; 5
     73  3     908B 26   81               bne     f_loop      ; 3 ==> total=181 cycles
avec les bons cotés:
  • La boucle fait 126 octets et on peu remplacer le LBNE final par un BNE
  • si S_LOOP==S_END (instrument sans boucle) la voix sera effectivement muette après un seul passage (avant on cyclait autour de S_END en débordant un peu ce quu pouvait provoquer un peu de bruit).

_________________
Good morning, that's a nice Tnetennba


Dernière édition par Samuel Devulder le 10 Jan 2017, 21:56, édité 6 fois.

Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: MOD ?
MessagePosté: 10 Jan 2017, 21:45 
Hors ligne

Inscription: 27 Juin 2006, 19:44
Messages: 1058
Localisation: France (24)
En mettant BLO au lieu de BHS, je pense que ça fonctionnera mieux ;)

_________________
Marche a suivre pour s'inscrire sur ce forum
Do not forget to contact one of the administrators to validate your registration.
Le site des démos de Puls
L'émulateur Teo


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: MOD ?
MessagePosté: 10 Jan 2017, 21:56 
Hors ligne

Inscription: 21 Aoû 2006, 09:06
Messages: 1800
Localisation: Brest
Oh oui :) La logique est inversée à présent.

_________________
Good morning, that's a nice Tnetennba


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: MOD ?
MessagePosté: 11 Jan 2017, 09:18 
Hors ligne

Inscription: 24 Juil 2010, 16:08
Messages: 454
Localisation: France
Pourquoi 44100Hz? Je ne crois pas qu'il y aie quoi que ce soit qui travaille à cette fréquence dans un MOD pour Amiga. Au mieux on va trouver du 31.5kHz (2* la fréquence de HBL de l'écran, sur laquelle tout est synchronisé sur Amiga)? Et apparament il y a d'autres problèmes qui font que la limite est plutôt autour de 28.5kHz. Mais ce n'est qu'une limite: Paula ajuste sa fréquence au sample qu'il est en train de générer.

Du coup le 44100Hz je vois pas d'ou il sort ici :voyons:


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: MOD ?
MessagePosté: 11 Jan 2017, 10:04 
Hors ligne

Inscription: 27 Juin 2006, 19:44
Messages: 1058
Localisation: France (24)
5524Hz, pas 44100Hz. Mais l'avantage, d'après Samuel, est que 44100 est plus proche d'un multiple de 5524 que d'un multiple de 5000. Question de proportion.

_________________
Marche a suivre pour s'inscrire sur ce forum
Do not forget to contact one of the administrators to validate your registration.
Le site des démos de Puls
L'émulateur Teo


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: MOD ?
MessagePosté: 11 Jan 2017, 10:14 
Hors ligne

Inscription: 21 Aoû 2006, 09:06
Messages: 1800
Localisation: Brest
A noter aussi que 181*110 = 19910 nous amène à 58 cycles de moins qu'une VBL thomson (312*64µs), c'est à dire qu'en ajoutant quelques instructions qui font des trucs à l'écran (rasters ultra simples?) on peut gérer un effet graphique en parallèle (qui doit se faire en ~50 cycles... je sais pas si l'effet big-crunch tient dedans, sinon des rasters simplifiés). Bref cela apporte outre une qualité audio meilleure, une souplesse pour faire évoluer le code (on est pas encore "au taquet").

Concernant le 44100, c'est la fréquence utilisée par le player de Gasman en JS. Donc comme là on est 8 fois plus lent, il me suffira de prendre un échantillon sur 8 par rapport à ce qu'il produit. C'est super simple.

_________________
Good morning, that's a nice Tnetennba


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: MOD ?
MessagePosté: 15 Jan 2017, 00:58 
Hors ligne

Inscription: 21 Aoû 2006, 09:06
Messages: 1800
Localisation: Brest
Arg ya un (gros) bug
Code:
     16  3     9014 CC   90AE             LDD     #S_BEGv0    ; 3
     17                  9015     s2v0    set     *-2
...
     54  4     906E D6   15               ldb     <s2v0       ; 4  <==== ICI
     55  2     9070 CB   70               addb    #volv0      ; 2
     56  4+1   9072 A6   C5               lda     b,u         ; 5 (ou adda après)
Ce LDB ne va pas chercher l'échantillon pointé par les octets en (s2v0,s2v0+1) mais va juste charger l'octet en s2v0. Bon ca se répare, mais la boucle frame fait alors 193 cycles.
Code:
       LDD   <s2v0
...
       LDB   S_BEGv0
s2v0   set   *-2
       ADDB  #vol0
       LDA   b,u

_________________
Good morning, that's a nice Tnetennba


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: MOD ?
MessagePosté: 15 Jan 2017, 01:09 
Hors ligne

Inscription: 27 Juin 2006, 19:44
Messages: 1058
Localisation: France (24)
Oui, à moins que... Ton code étant très développé, visiblement, pourquoi ne pas charger en immédiat ? Ça ferait même gagner un cycle du coup.

_________________
Marche a suivre pour s'inscrire sur ce forum
Do not forget to contact one of the administrators to validate your registration.
Le site des démos de Puls
L'émulateur Teo


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: MOD ?
MessagePosté: 15 Jan 2017, 01:16 
Hors ligne

Inscription: 21 Aoû 2006, 09:06
Messages: 1800
Localisation: Brest
L'adresse de l'échantillon à mixer doit être les 2 octets de poids fort d'un compteur sur 24 bits qui est incrémenté suivant la fréquence de la note à jouer (de plusieurs octets à la fois pour les fréquences aigues à quelques fractions d'octet pour les plus basses). J'ai pas trop l'impression qu'en immédiat ca marcherait.

_________________
Good morning, that's a nice Tnetennba


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: MOD ?
MessagePosté: 15 Jan 2017, 07:37 
Hors ligne

Inscription: 27 Juin 2006, 19:44
Messages: 1058
Localisation: France (24)
:voyons: S'il y a des références que j'ignore encore, alors ok, ça n'est pas approprié. C'est vrai que pour ce genre d'optimisation, il vaut mieux avoir le code entier.

_________________
Marche a suivre pour s'inscrire sur ce forum
Do not forget to contact one of the administrators to validate your registration.
Le site des démos de Puls
L'émulateur Teo


Haut
 Profil  
Répondre en citant le message  
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 280 messages ]  Aller à la page 1, 2, 3, 4, 5 ... 19  Suivante

Heures au format UTC + 1 heure


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 6 invités


Vous ne pouvez pas poster de nouveaux sujets
Vous ne pouvez pas répondre aux sujets
Vous ne pouvez pas éditer vos messages
Vous ne pouvez pas supprimer vos messages
Vous ne pouvez pas joindre des fichiers

Rechercher:
Aller à:  
cron
Développé par phpBB® Forum Software © phpBB Group
Traduction par phpBB-fr.com