Logicielsmoto.com

Nous sommes le 28 Mar 2024, 11:14

Heures au format UTC + 1 heure




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

Inscription: 21 Aoû 2006, 09:06
Messages: 1802
Localisation: Brest
Hum.. Tu m'as donnée une autre idée pour traiter une voix. Si j'assume que le compteur (normalement 24bits) n'est incrémenté que sur ses 2 octets de poids faible (ce qui me semble toujours être le cas finalement), la gestion des compteur et des échantillons peut se faire comme ceci
Code:
LDX  #sample_beg; 3 <------------------------------+
LDB  #nnn       ; 2 <-+                            |
ADDB #freq_lo   ; 2   | mise a jour partie fract   |
STB  <back      ; 4 --+                            |
LDB  #freq_hi   ; 2                                |
ADCB #0         ; 2                                |
ABX             ; 3                                |
CMPX #sample_max; 4                                |
blt  conso3us   ; 3 --> bra --+                    |
LDX  #sampl_loop; 3           |                    |
LDB ,x          ; 4 <---------+                    |
STX  <back2     ; 5 -------------------------------+
ORB  #vol       ; 2
ADDA b,u        ; 5 => 44
donc avec environ 44us par échantillon et 189us pour l'ensemble des 4 voix. D'une part c'est plus rapide, mais plus compact :cool: Merci pour m'avoir fait reconsidérer l'algo.

_________________
Good morning, that's a nice Tnetennba


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

Inscription: 27 Juin 2006, 19:44
Messages: 1061
Localisation: France (24)
Pas de problème. C'est même plus clair maintenant.

_________________
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é: 16 Jan 2017, 23:56 
Hors ligne

Inscription: 21 Aoû 2006, 09:06
Messages: 1802
Localisation: Brest
1er essai pour produire un LA440 à l'unisson sur les 4 voix
Code:
(main)MP
        ORG     $9000

main    bsr     inivol
        ldy     #song
        jsr     playmod
        swi
        rts
       
inivol  ldu     #vol+128
        clrb
inivo1  pshs    b   
        andb    #$F0
        stb     ,-s
        lsrb
        lsrb
        lsrb
        lsrb
        orb     ,s+
        lda     ,s
        anda    #$0F
        mul
        addd    #112
        puls    b
        sta     b,u
        incb
        bne     inivo1
        rts

playmod pshs    d,x,y,u,dp,cc
      orcc   #$50
      
        lda     #$E7
        tfr     A,DP
        setdp   $E7
* init CNA
        ldd     <$E7CE
        pshs    d
        andb    #$FA
        std     <$E7CE
        lda     <$E7CD
        pshs    a
        ora     #$3F
        sta     <$E7CD
        lda     <$E7CF
        ora     #4
        sta     <$E7CF
        lda     <$E7C1
        pshs    a,dp
        anda    #$f7
        sta     <$E7C1
       
      setdp   playptn<-8
        ldd     #(playptn<-8)*256
        tfr     a,dp
      
        clra
        pshs    d   ; sentinel for end-of-song

        sty     <begsong      
        ldd     ,y++
        subd    #2
        leax    d,y
        stx     <p_instr
       
       
        jmp     <playptn

      setdp   $E7
exitmod puls    a,dp
        sta     <$E7C1
        lda     <$E7CF
        anda    #$FB
        sta     <$E7CF
        puls    a
        sta     <$E7CD
        ldd     <$E7CE
        puls    d
        std     <$E7CE
        ldd     <$E7CC

        puls    d,x,y,u,dp,cc,pc
       
DEF0    macro
        IFEQ    \2
\0      set     *-\1
        ENDC
        endm

VOICE   macro
        LDB     #0          ; 2
        ADDB    #0          ; 2  LSB frequence
        DEF0    ch_flo,1,\0
        STB     <*-3        ; 4
        LDB     #0          ; 2
        ADCB    #0          ; 2  MSB frequence
        DEF0    ch_fhi,1,\0
        LDX     #0          ; 3
tmp     set     *-2
        DEF0    ch_beg,2,\0
        ABX                 ; 3
        CMPX    #0          ; 4
        DEF0    ch_end,2,\0
        BLO     ch\0L1      ; 3
        LDX     #0          ; 3
        DEF0    ch_rpt,2,\0
ch\0L0  STX     <tmp        ; 5
        LDB     ,x          ; 4
        ORB     #0          ; 2
        DEF0    ch_vol,1,\0
        IFEQ    \0
        LDA     b,u         ; 5 => 44
        ELSE
        ADDA    b,u
        ENDC
        endm
       
        org     ((*+255)<-8)*256
        setdp   *<-8
       
ch0L1   bra     ch0L0
ch1L1   bra     ch1L0
ch2L1   bra     ch2L0
ch3L1   bra     ch3L0
       
* plays one frame
c_play  pshs    U,X,Y
        ldu     #vol+128    ; 3
        ldy     #105

f_loop  set     *
        VOICE   0
        VOICE   1
        VOICE   2
        VOICE   3           ; => 44*4=176

        sta     $E7CD       ; 5 sortie son
       
        leay    -1,y        ; 5
        bne     f_loop      ; 3 ==> 189 cycles (5291khz)
       
        PULS    U,X,Y

*        bra     playptn

playptn ldb     ,y+
        beq     c_ret       ; 00000000
        bpl     c_call      ; 0xxxxxxx xxxxxxxx
        lslb
        lslb
        bcs     c_vol       ; 11ccvvvv
        lslb
        bcs     c_instr     ; 101xxxxx
        lslb
        bcs     c_freq      ; 1001ffff [ffffffff]
        bne     c_wait      ; 1000wwww [wwwwwwww]
        jmp     <c_play     ; 10000000

c_ret   ldy     ,s++        ; 9 cycles ouch!
        bne     playptn
        jmp     exitmod

c_call  leax    ,y+
        ldd     -1,x
        pshs    y
        ldx     #$0000
begsong set     *-2
        leay    d,x
        bra     playptn
* 4 x 5000/s tous les 200us
* la 440 =>  256*440z => 112640octets/sec ==> 22.5

ch_ref  set     ch_end

c_vol   ldu     #ch_ref
        lslb
        bcc     c_vol1
        leau    ch2L0-ch0L0,u
c_vol1  lslb
        bcc     c_vol2
        leau    ch1L0-ch0L0,u
c_vol2  stb     ch_vol-ch_ref,u
        bra     playptn

c_instr ldx     #$0000
p_instr set     *-2
        abx
        ldd     ,x
        addd    <begsong
        std     ch_beg-ch_ref,u
        ldd     2,x
        addd    <begsong
        std     ch_end-ch_ref,u
        ldd     4,x
        addd    <begsong
        std     ch_rpt-ch_ref,u
        jmp     <playptn

c_freq  bne     c_freq2
        ldd     ,y++
        bra     c_freq3
c_freq2 ldb     ,y+
        lda     -2,y
        suba    #%10010001
c_freq3 stb     ch_flo-ch_ref,u
        sta     ch_fhi-ch_ref,u
        jmp     <playptn

c_wait  ldb     ,y+
        lda     -2,y
        suba    #%10000001
        std     <f_loop-2
        jmp     <c_play
       
vol     RMB     256

sinus   fdb sindat-song+000
        fdb sindat-song+128
        fdb sindat-song+000

sindat       
    fcb $8,$8,$8,$9,$9,$9,$A,$A
    fcb $B,$B,$B,$C,$C,$C,$D,$D
    fcb $D,$D,$E,$E,$E,$E,$F,$F
    fcb $F,$F,$F,$F,$F,$F,$F,$F
    fcb $F,$F,$F,$F,$F,$F,$F,$F
    fcb $F,$F,$F,$E,$E,$E,$E,$D
    fcb $D,$D,$D,$C,$C,$C,$B,$B
    fcb $B,$A,$A,$9,$9,$9,$8,$8
    fcb $8,$7,$7,$6,$6,$6,$5,$5
    fcb $4,$4,$4,$3,$3,$3,$2,$2
    fcb $2,$2,$1,$1,$1,$1,$0,$0
    fcb $0,$0,$0,$0,$0,$0,$0,$0
    fcb $0,$0,$0,$0,$0,$0,$0,$0
    fcb $0,$0,$0,$1,$1,$1,$1,$2
    fcb $2,$2,$2,$3,$3,$3,$4,$4
    fcb $4,$5,$5,$6,$6,$6,$7,$7


* LA440 => 440*128*189/1000000=10.64448 [10:165]
               
song    fdb     sinus-song

        fcb     %11001111       ; voix 0: vol 15
        fcb     %10100000       ; instru 0
        fcb     %10010001+10,165 ;freq 440hz

        fcb     %11011111       ; voix 1: vol 15
        fcb     %10100000       ; instru 0
        fcb     %10010001+10,165 ;freq 440hz
       
        fcb     %11101111       ; voix 2: vol 15
        fcb     %10100000       ; instru 0
        fcb     %10010001+10,165 ;freq 440hz

        fcb     %11111111       ; voix 3: vol 15
        fcb     %10100000       ; instru 0
        fcb     %10010001+10,165 ;freq 440hz
       
        fcb     %10000000      ; play frame
        fcb     %10000000      ; play frame
        fcb     %10000000      ; play frame
        fcb     %10000000      ; play frame
        fcb     %10000000      ; play frame
        fcb     %10000000      ; play frame
        fcb     %10000000      ; play frame
        fcb     %10000000      ; play frame
        fcb     %10000000      ; play frame
        fcb     %10000000      ; play frame
        fcb     %10000000      ; play frame
        fcb     %10000000      ; play frame
        fcb     %10000000      ; play frame
        fcb     %10000000      ; play frame
        fcb     %10000000      ; play frame
        fcb     %10000000      ; play frame
        fcb     %10000000      ; play frame
        fcb     %10000000      ; play frame
        fcb     %10000000      ; play frame
        fcb     %10000000      ; play frame
        fcb     %10000000      ; play frame
        fcb     %10000000      ; play frame
        fcb     %10000000      ; play frame
        fcb     %10000000      ; play frame
        fcb     %10000000      ; play frame
        fcb     %10000000      ; play frame
        fcb     %10000000      ; play frame
        fcb     %10000000      ; play frame
        fcb     %10000000      ; play frame
        fcb     %10000000      ; play frame
        fcb     %10000000      ; play frame
        fcb     %10000000      ; play frame
        fcb     %10000000      ; play frame
        fcb     %10000000      ; play frame
        fcb     %10000000      ; play frame
        fcb     %10000000      ; play frame
        fcb     %10000000      ; play frame
        fcb     %10000000      ; play frame
        fcb     %10000000      ; play frame
        fcb     %10000000      ; play frame
       
        fcb     0 ; RETURN

        end     main
Mouais, ca a l'air de vouloir donner quelque chose.

Prochaine étape aapter le convertisseur midi dans ce nouveau format et faire jouer des sinus + du precussion.

_________________
Good morning, that's a nice Tnetennba


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

Inscription: 21 Aoû 2006, 09:06
Messages: 1802
Localisation: Brest
Bon.. 1er test avec ce player.
Fichier(s) joint(s):
tst.zip [14.44 Kio]
Téléchargé 546 fois
Ben bof.. Les sinus passent bien, mais les hautes fréquences (note midi > 70) sont distordues. Ce qu'il se passe pour ces notes, c'est qu'on avance de 9 échantillons toutes les 189us. Or le sinus utilise 64 échantillons, donc on approche un peu trop de la freq max. Idéalement il ne faudrait pas dépasser freq-max/16 pour pouvoir jouer les 12 notes d'une game, et là on doit être à freq-max/8.

Il y a aussi le rebouclage pile au début de l'échantillon qui me plait moyen... Je vais voir si l'on fait un modulo ca se passe mieux. Affaire à suivre.

[EDIT] ok, c'est nettement mieux quand on ne repart pas strictement au début de l'échantillon mais qu'on fait un modulo (physiquement on garde la phase). Par contre ca pose un soucis car le LEAX $nnnn,X qu'on devrait faire est trop couteux à mon gout. Je vais voir si on peut faire mieux en ne travaillant que sur le registre D.
Fichier(s) joint(s):
Commentaire: Pas LDX #DEBUT_echantion en fin d'échantillon, mais LEAX #(REPET_echantillon-FIN_echantillon) histoire de faire un module (i.e. garder la phase).. C'est vachement mieux.
tst-corrigé.zip [14.48 Kio]
Téléchargé 557 fois

_________________
Good morning, that's a nice Tnetennba


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

Inscription: 27 Juin 2006, 19:44
Messages: 1061
Localisation: France (24)
Très bien. Les fréquences sont justes, même dans les aigus, ce qui est une prouesse pour du 5000Hz.

_________________
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é: 24 Jan 2017, 16:54 
Hors ligne

Inscription: 24 Juil 2010, 16:08
Messages: 454
Localisation: France
Y'a pas un moyen de faire des samples de 256 octets et de faire un adressage avec un offset sur 8 bits? Mon assembleur 6809 est un peu rouillé mais il me semble avoir vu ce genre de choses. ça permettrait de faire le modulo "gratuitement", non?


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

Inscription: 21 Aoû 2006, 09:06
Messages: 1802
Localisation: Brest
Pour du sinus, des crénaux ou des dents de scie oui on peut faire des échantillons sur 256 ou moins et avoir un code plus adapté, mais comme je voudrais faire un vrai mod-player je voudrais possiblement pouvoir supporter des instruments arbitraires (y compris des voix humaines) de quelques Ko.

_________________
Good morning, that's a nice Tnetennba


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

Inscription: 27 Juin 2006, 19:44
Messages: 1061
Localisation: France (24)
Au pire, tu peux arrondir la longueur de tous tes samples à un multiple de 256 octets, ce qui te permettrait d'avoir un compteur sur 16 bits au lieu de 24 bits.

_________________
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é: 24 Jan 2017, 18:25 
Hors ligne

Inscription: 21 Aoû 2006, 09:06
Messages: 1802
Localisation: Brest
Là je ne comprends pas trop. En fait les 24 bits sont comme suit: [addresse échantillon: 16bits].[fraction d'addresse: 8bits]. La fraction est nécessaire pour avoir une bonne précision dans la fréquence. Avec seulement 16 bits soit je perds en précision de fréquence, soit je perds en longueur d'échantillons (256 octets maxi).

Un truc que je n'ai pas utilisé ce sont les décalages. Disons qu'un instrument fasse maxi 13bits (8ko: c'est enorme, près de 2sec à lui seul), on peut utiliser un compteur 16bits et le convertir en addresse par décalage. Cependant le cout d'un décalage par voix serait d'environ 12cycles, soit 48 cyles sur les 200 autorisés à 5khz. Ca me semble bien trop.

Bon je crois que je vais rester pour l'instant à la version 24bits complètement sur les accus. C'est pas si lent que ca car j'en suis à 197 cycles par passe, donc encore au desssus de 5khz.

_________________
Good morning, that's a nice Tnetennba


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

Inscription: 27 Juin 2006, 19:44
Messages: 1061
Localisation: France (24)
Samuel Devulder a écrit:
La fraction est nécessaire pour avoir une bonne précision dans la fréquence.

Ok. C'est moi qui ai mal cerné le problème :oops:

_________________
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é: 24 Jan 2017, 20:10 
Hors ligne

Inscription: 21 Aoû 2006, 09:06
Messages: 1802
Localisation: Brest
Pour voir ce que ca donne avec les 24bits complètement avec les accus, voici une conversion de la musique du jeu Aladdin (toujours depuis un fichier midi).
Fichier(s) joint(s):
aladdin.gif
aladdin.gif [ 7.47 Kio | Vu 13047 fois ]
Fichier(s) joint(s):
Commentaire: Pas mal pour un début?
aladin.zip [30.33 Kio]
Téléchargé 555 fois
Pas mal non? Petit rappel des fonctionnalités du player:
  • Le moteur fait tourner 4 voix totalement indépendantes controllables à la fois en fréquence (16 bits) et en volume (0 à 15)
  • Chaque voix peut jouer un instrument situé n'importe où en RAM et de n'importe quelle taille.
  • Les échantillons des instruments sont sur 4 bits, parce que 4 échantillons de 4 bits font un maximum de 63 ce qui est la valeur maxi atteignable par le CNA.
  • Un instrument peut être à passe unique (il joue puis s'arrête, par exemple une percussion) ou avec bouclage (tant qu'on reste appuyé ca joue, exemple: touche d'orgue.)
  • La partition à jouer est encodée dans une sorte de langage machine qui est interprété par le player. Ce langage est hyper compact et permet de factoriser des morceaux de partition identiques et obtenir un taux de compression des partitions proche de LZW.
  • Sortie du player par simple appui d'une touche clavier.
  • Fréquence de sortie finale 1/197µs ~5khz

Reste maintenant le gros morceau. Convertir les fichiers MOD amiga dans un truc exploitable par ce player.

_________________
Good morning, that's a nice Tnetennba


Dernière édition par Samuel Devulder le 24 Jan 2017, 22:50, édité 2 fois.

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

Inscription: 27 Juin 2006, 19:44
Messages: 1061
Localisation: France (24)
Je ne ferais que me répéter, mais les notes sont jouées très justes. C'est important, surtout pour les accords, qui sinon sonneraient faux.
Il me tarde d'écouter une version avec samples.

_________________
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é: 26 Jan 2017, 17:08 
Hors ligne

Inscription: 21 Aoû 2006, 09:06
Messages: 1802
Localisation: Brest
Prehisto a écrit:
Il me tarde d'écouter une version avec samples.

Je viens de terminer l'écriture d'un outil de conversion PROTRACKER pour le player. Ca donne un résultat très intéressant, jugez par vous même. :love: (n'oubliez pas que c'est un petit thomson au bout et que les échantillons sont sur 4 bits@5khz pour relativiser la qualité)
Fichier(s) joint(s):
Commentaire: Convertisseur MOD (ProTracker) + exemple
mp.zip [33.42 Kio]
Téléchargé 561 fois

Bon il y a 2/3 trucs qu'il faurait amméliorer, mais la preuve de principe est là:
il est possible de jouer des MOD amiga sur Thomson :bien:

Quelques points qu'il serait bien de faire:
  • re-tester la version avec LDX pour redémarrer avec perte de phase en cas de blouclage (car avec le SUBD, il peut y avoir des débordements quand l'échantillon ne boucle pas)
  • rendre le tempo thomson dynamique. Dans cette version il est fixe de sorte à avoir 6 "frames" toutes les 20ms (tempo de 125BPM, standard sur amiga), mais cela produit des patterns de 6x64 lignes qui sont on peu trop gros.
  • rendre les volumes un chouilla moins linéaire, ca qui respecte mieux le fonctionnement de l'oreille en permettant de mieux entendre les sons faible (voir mu-law)
  • Mieux compresser les patterns. C'est eux qui sont les plus gros dans les chiptunes.
  • trouver une façon efficace de pouvoir extraires 2 échantillons par octets (gain de place) [idée: faire parfois ORB #$F0, parfois ORB #$0F + deux tables de volume suivant le demi échantillon qui nous intéresse]
  • Etudier si il ne serait pas utile de réduire les fréquences>256 (cad des incréments d'échantillons de plus de 1 octet par boucle) à moins de 256 (cad incrément <1.0) en sous-échantillonant les instruments. Avec des incréments plus petits que 1, le player pourrait être bien plus rapide et produire un son de meilleur qualité tout en évitant les débordements mentionnés plus haut. Ca peut avoir du sens car la plupart des instruments sont de fréquence <5khz, et donc avance à moins de 1 échantillon par boucle du player ce qui est bien. Les autres avancent de 5-6 échantillons à la fois, mais ca veut juste dire que l'instrument est 5-6 fois trop gros en mémoire (sur-échnatilloné).

_________________
Good morning, that's a nice Tnetennba


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: MOD ?
MessagePosté: 26 Jan 2017, 20:50 
Hors ligne

Inscription: 27 Juin 2006, 19:44
Messages: 1061
Localisation: France (24)
Un MOD plus gros, maintenant ? Avec des samples moins chiptune ? :oui:

_________________
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é: 26 Jan 2017, 21:20 
Hors ligne

Inscription: 21 Aoû 2006, 09:06
Messages: 1802
Localisation: Brest
Plus gros ca va être un poil plus dur car très vite on sature en RAM. Avec les MODULES de la démo "interference" (de sanity je crois) on avoisine les 32ko. J'arrive même pas à charger dans assembler ca ca écrase la page 0.

Bon en plus... je viens de réaliser que j'ai un bug dans la lecture du MOD: les échantillons sont signés et je les traitres comme non-signés! Ca explique le ronflement qu'on entend ainsi que certaines distorsions qui font très "chip-mod".

Sinon j'ai repéré une zik de jeux que je trouvais sympa à l'époque et qui n'est pas encore trop grosse. A suivre...

_________________
Good morning, that's a nice Tnetennba


Dernière édition par Samuel Devulder le 26 Jan 2017, 21:31, édité 1 fois.

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 Précédente  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 40 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