Logicielsmoto.com http://www.logicielsmoto.com/phpBB/ |
|
Musique 1 bit (était: Re: Besoin d'un truc intelligent) http://www.logicielsmoto.com/phpBB/viewtopic.php?f=3&t=532 |
Page 1 sur 4 |
Auteur: | Samuel Devulder [ 26 Jan 2016, 17:20 ] |
Sujet du message: | Musique 1 bit (était: Re: Besoin d'un truc intelligent) |
Alors voilà je voudrais faire un code le plus compact possible qui réalise un truc du style B = (carry set) ? $3B : $33. Cela revient à faire B = $33 + (carry ? 8 : 0). Je ne vois qu'un truc naif pour faire ca Code: LDB #$33 Ca prend 9 cycles, ce qui me semble long. BCC *+4 ORB #8 ... J'ai bien pensé à ceci Code: LDB #%00110111 ce qui fait 8 cycles. C'est mieux, mais c'est pas encore ca. Est-ce qu'il y a mieux ?ADCB #0 ANDB #%00111011 ORB #%00000001 Si on avait un "SBCB B" qui vaut -1 si C=1 et 0 sinon, on pourrait imaginer Code: SBCB B Mais cette instruction n'existe pas Le plus proche serait le couple "STB ,-S SBCB ,S+" qui est beaucoup plus lent.
ANDB #%00001000 ORB #%00110011 |
Auteur: | Prehisto [ 26 Jan 2016, 21:01 ] |
Sujet du message: | Re: Besoin d'un truc intelligent |
Samuel Devulder a écrit: Code: LDB #$33 Ca prend 9 cycles, ce qui me semble long. BCC *+4 ORB #8 ... D'après mes calculs, cela ne fait que 7 cycles. Dans le pire des cas. Maintenant, si tu veux faire mieux que 7 cycles, et si tu as de la place à revendre : Code: BCC SKIP
LDB #$3B ... (suite du code) SKIP LDB #$33 ... (même suite du code que précédemment, dédoublée) |
Auteur: | Samuel Devulder [ 26 Jan 2016, 22:18 ] |
Sujet du message: | Re: Besoin d'un truc intelligent |
oops oui 7 cycles.. oops .. je ne sais plus calculer. Au secours ! La formule que je cherche à calculer sert à sortir un bit du buzzer. Pour tout dire, je suis en train d'étudier le bout de code trouvé ici. Je regarde si on peut l'adapter sur Thomson. Après tout la Forever approche La structure est simple (utilisation de 4 registres 16 bits pour les oscilloscopes indépendants, utilisation de cmp pour faire varier le rapport cyclique), mais on se rend compte de petite différences entre 6809 et Zx. Le Zx tournant à 4Mhz, ces instruction plus lentes sont au final plus rapides que 6809 pour la simple et bonne raison qu'émuler le fonctionnement sur 6809 requiert souvent des cycles de lecture/ecriture en mémoire là ou le ZX peut faire facilement des opération arithmétiques registres à registres. Dans tous les cas la tentative de portage fait réfléchir, et ca, j'aime bien |
Auteur: | Samuel Devulder [ 26 Jan 2016, 23:14 ] |
Sujet du message: | Player 4 voix |
Pour le moment la boucle principale que j'ai trouvée et qui joue 4 notes simples sur le buzzer est du style: Code: ; joue un pattern PLAYPTN PSHS D,X,Y,U STS <SAV LDS #$E7C0 LDD ,S TFR D,X EORB #8 TFR D,U LDY #duree ; <-- auto-modifié par le pattern LOOP ; oscillo 1 LDD #0 ; 3 ADD #freq1 ; 4 (auto modifié par le pattern) STD <*-5 ; 5 CMPA #rap1 ; 2 (rapport cyclique, auto modifié) BCC L10 ; 3 STX ,S ; 5 (buzzer 0) BRA L11 ; 3 L1O STU ,S ; 5 (buzzer 1) BRA L11 ; 3 L11 SET * ; => 3+4+5+2+3+5+3=25 cycles ; oscillo 2 LDD #0 ; 3 ADD #freq2 ; 4 (auto modifié par le pattern) STD <*-5 ; 5 CMPA #rap2 ; 2 (rapport cyclique, auto modifié) BCC L20 ; 3 STX ,S ; 5 (buzzer 0) BRA L21 ; 3 L2O STU ,S ; 5 (buzzer 1) BRA L21 ; 3 L21 SET * ; => 3+4+5+2+3+5+3=25 cycles ; oscillo 3 LDD #0 ; 3 ADD #freq3 ; 4 (auto modifié par le pattern) STD <*-5 ; 5 CMPA #rap3 ; 2 (rapport cyclique, auto modifié) BCC L30 ; 3 STX ,S ; 5 (buzzer 0) BRA L31 ; 3 L3O STU ,S ; 5 (buzzer 1) BRA L31 ; 3 L31 SET * ; => 3+4+5+2+3+5+3=25 cycles ; oscillo 4 LDD #0 ; 3 ADD #freq4 ; 4 (auto modifié par le pattern) STD <*-5 ; 5 CMPA #rap4 ; 2 (rapport cyclique, auto modifié) BCC L40 ; 3 STX ,S ; 5 (buzzer 0) BRA L41 ; 3 L4O STU ,S ; 5 (buzzer 1) BRA L41 ; 3 L41 SET * ; => 3+4+5+2+3+5+3=25 cycles LEAY -1,Y ; 4 BNE LOOP ; 3 => un tour = 107µs (56µs sur Zx) LDS #0 SAV EQU *-2 PULS D,X,Y,U,PC La structure avec deux "BRA" dans un même chemin d'exécution peut paraitre sub-optimale. C'est vrai, mais c'est nécessaire pour avoir une exécution en temps constant entre les chemins où l'on sort le buzzer à 1 et ceux où on le sort à 0. On est sensiblement 50% plus lent que le ZX. La note la plus elevée que l'on peut jouer avec cette routine est de période 214µs, soit 4.6khz ce qui correspond au Ré de l'octave 7. C'est pas mal et ca devrait permettre de jouer les notes jusqu'à l'octave 5 (la plus haute du piano?) de façon suffisamment précise (4 pour 1). Ce player est intéressant ca il dépasse ce que j'avais fait jusqu'à présent:
|
Auteur: | Samuel Devulder [ 26 Jan 2016, 23:14 ] |
Sujet du message: | Re: Besoin d'un truc intelligent |
J'ai aussi une version de la boucle qui utilise le CNA (PRC) et qui est plus courte et plus rapide Code: ; joue un pattern Avec lui on peut monter jusqu'à 6.6khz. C'est pas mal (sol# du 7eme octave), mais il faut le CNA. Il ferait un bon player pour l'entrée Intro (1ko). PLAYPTN PSHS D,X,Y,U STS <SAV LDX #0 LEAY ,X LEAU ,X LEAS ,U LDA #duree ; <-- auto-modifié par le pattern LOOP ; oscillo 1 LEAX $nnnn,X ; 8 (freq1) CMPX #rat1 ; 4 (rapport cyclique) ADCB #0 ; 2 ; oscillo 2 LEAY $nnnn,Y ; 8 (freq2) CMPY #rat2 ; 5 (rapport cyclique) ADCB #0 ; 2 ; oscillo 3 LEAU $nnnn,U ; 8 (freq3) CMPU #rat3 ; 5 (rapport cyclique) ADCB #0 ; 2 ; oscillo 4 LEAS $nnnn,S ; 8 (freq4) CMPS #rat4 ; 5 (rapport cyclique) ADCB #0 ; 2 ; sortie son LSLB ; 2 LSLB ; 2 LSLB ; 2 LSLB ; 2 STB <CNA ; 4 DECA ; 2 BNE LOOP ; 3 ; total = 15*4-1+12+5=>76µs LDS #0000 SAV SET *-2 PULS D,X,Y,U,PC Par contre ces players utilisent tout le CPU. Impossible de faire des effets en parallèle. On pourrait toutefois les utiliser dans un diaporama. Pour l'instant je préfère la 1ere version car elle n'utilise que le buzzer et on peut facilement modifier le player pour remplacer l'une des voix par un bruit (avec une optim à réaliser). On aurait donc un player permettant de jouer soit 4 voix, ou 3 voix+bruit. Ca serait vraiment très bien pour un thomson (sapiens ne fait que 3 voix il me semble) Il ne reste plus qu'à tester pour voir si le son produit n'est pas trop mauvais. |
Auteur: | Prehisto [ 27 Jan 2016, 00:01 ] |
Sujet du message: | Re: Besoin d'un truc intelligent |
Samuel Devulder a écrit: Par contre ces players utilisent tout le CPU. Impossible de faire des effets en parallèle. On pourrait toutefois les utiliser dans un diaporama. Ça reste toujours possible de faire des effets en parallèle, mais il faut intercaler les codes. Ce qui est très contraignant. Samuel Devulder a écrit: Pour l'instant je préfère la 1ere version car elle n'utilise que le buzzer et on peut facilement modifier le player pour remplacer l'une des voix par un bruit (avec une optim à réaliser). Et surtout qu'on peut l'utiliser sur tous les Thomson Samuel Devulder a écrit: On aurait donc un player permettant de jouer soit 4 voix, ou 3 voix+bruit. Ca serait vraiment très bien pour un thomson (sapiens ne fait que 3 voix il me semble) Heu... ça n'est pas ce que tu faisais sur tes démos précédentes ? |
Auteur: | Samuel Devulder [ 27 Jan 2016, 00:30 ] |
Sujet du message: | Re: Besoin d'un truc intelligent |
Oui le code marcherait sur tous les TO, et même sur les MO avec une adaptation mineure. Précédemment il y avait 2 voix + bruit. Là ca serait au choix 3voix+bruit ou 4 voix. Avec 4 voix, les conversions de morceaux midi serait bien meilleure je pense. J'ai les doigts qui me démangent de tester... mais il y a beaucoup à écrire avant de se rendre compte de ce que ca donne. Là il faut que j'aille me coucher. La suite plus tard... En attendant, voici ce que le player d'origine peut faire sur un ZX spectrum: https://soundcloud.com/irrlicht-project ... opic-test1 |
Auteur: | Prehisto [ 27 Jan 2016, 00:44 ] |
Sujet du message: | Re: Besoin d'un truc intelligent |
A demain sur la face B, alors |
Auteur: | Samuel Devulder [ 30 Jan 2016, 14:50 ] |
Sujet du message: | Re: Besoin d'un truc intelligent |
J'ai converti le player (code), et je suis déçu. Le résultat est très mauvais. On ne reconnait aucune note. Je ne vois pas ce qui cloche dans le code, et la seule explication que j'aie est le fait que jouer les 4 voix sur 1 bit de cette façon ne marche pas bien du tout avec le thomson. J'ai fait un pattern simple "ptn" qui joue une note sur 2 voix, et celle un octave en dessus sur les autres voix. Le résultat est désastreux sous emul. La phase où les 2 premières voix donnent une valeur 1 quand les deux dernières voix donne 0 donne une altenance élevée de 0/1/0/1, ce qui fait un sifflement insupportable. Ok, la valeur moyenne est 1/2 comme attendu, mais le sifflement gâche tout Fichier(s) joint(s): Image1.png [ 9.02 Kio | Vu 22832 fois ] Pfff.. dommage, vraiment. Je me mettais vraiment à réver de faire pleins de trucs avec ce player. |
Auteur: | Prehisto [ 30 Jan 2016, 17:35 ] |
Sujet du message: | Re: Besoin d'un truc intelligent |
Les vidéos que tu fais tourner sur MO5 utilisent bien ce type de génération sonore, non ? Dans ce cas, je vois mal pourquoi il y aurait un obstacle pour jouer plusieurs pistes. Si tu travaillais avec le bus 6 bits, il suffirait d'abord d'ajouter les valeurs de chaque piste - dont le volume serait donc divisé par 4 - avant injection, et non pas d'alterner l'injection des valeurs. |
Auteur: | Samuel Devulder [ 30 Jan 2016, 20:56 ] |
Sujet du message: | Re: Besoin d'un truc intelligent |
Oui, utiliser le CNA serait une solution, mais ce ne serait plus de la musique 1bit et ca ne tournerait pas sur tous les thomson. Au départ je voulais respecter le player ZX qui est assez souple, mais l'alternance 0/1 sur le buzzer c'est peut-être pas une bonne idée sur thomson. J'ai creusé le truc, et contrairement au player Zx, celui sur 6809 est 2x plus lent. Résultat, sur 6809 l'alternance 0/1 se fait à 18khz, et on l'entend très bien. En fait on la voit aussi très bien dans la capture écran ci-dessus (zone centrale floue). Sur Zx, le même accord est restitué à 36khz, largement au dessus de la fréquence de coupure d'une carte son PC (22khz quand le son est échantillonné à 44khz). Du coup le même accord que celui de la capture précédente donne ceci: On voit bien les marches d'escalier attendues. Pour les retrouver sur thomson il faudrait faire un player 4 voix en ~50 cycles cpu. Je n'y suis pas arrivé, mais si je réduit le nombre de voix par deux, notre player passe de 111cycles à 55cycles, et le son est nettement mieux. On voit aussi apparaitre les marche d'escalier sous audacity. Par contre 2voix c'est encore moins que mon player précédent. Pour vraiment être sur s'il faut accélérer le player d'un facteur 2, je devrais tester sur vraie machine. Si ca se trouve la bande passante du HP de la TV ne monte pas aussi haut que les 22khz d'une carte son et il coupe à 8khz.. auquel cas, le player 1 bit à 18khz sera correctement moyenné. |
Auteur: | Samuel Devulder [ 31 Jan 2016, 01:11 ] | ||
Sujet du message: | Musique 1 bit (était: Re: Besoin d'un truc intelligent) | ||
Bon j'ai fait une version utilisant le CNA. Ca marche mieux, mais ce faisant je me suis rendu compte que je convertissais mal les fréquences. Et là miracle, la version BUZZER marche beaucoup, beaucoup mieux. Je ne sais pas bien ce que j'ai changé car les fréquences erronéees ne l'étaient pas de beaucoup. Le code du player est resté le même, seuls les data sont différentes. Mystère... Par rapport au player d'origine je n'ai pas codé les effets de slide ni de note-cut. Du coup le renu est moins joli que la musique d'origine, mais ca montre que le principe fonctionne bien finalement. Code CNA ([EDIT]buggé): http://pastebin.com/Lq5wTJzk Code BUZZER ([EDIT]buggé): http://pastebin.com/C2JqUXta Allez, demain je vais faire en sort que les effets spéciaux soient traduits. Mon idée est de ne plus rendre les pattern de durée fixe, mais d'utiliser le 1er octet pour compter le nombre de 256 tours de boucle. Avec ca le notecut peut être codé simplement. L'octet suivant contiendra un bitmask indiquant s'il faut du bruit ou pas pour cette ligne. Les bits restants peuvent servir à faire des effets synchro avec la musique (couleur tour ecran ou animation de sprites par exemple). Dommage que je n'ai pas compris ce qui a décoincé la situation.
|
Auteur: | Samuel Devulder [ 31 Jan 2016, 16:51 ] | ||
Sujet du message: | Re: Musique 1 bit (était: Re: Besoin d'un truc intelligent) | ||
Ok, c'est confirmé: JE SUIS UN ANE! Un truc me turlupinait depuis hier: le morceau tourne trop vite. Sur Zx il faut 1min avant qu'il ne reboucle, et ma version ci-dessus reboucle en moins de 3 secondes. En fait, je ne lis que la 1ère ligne du pattern et oublies les suivantes. Au lieu qu'un pattern dure 20secs, il durait une ligne soit 13ms... Tu m'étonnes que la musique ne ressemble plus à rien après un tel tronçonnage (imagines ne jouer que les 3 première notes de chaque page d'un livret!) J'ai donc rattrapé cet énorme BUG, et introduit la traduction du "note-cut" (ca revient à couper le 4eme canal avant la fin de ligne. J'ai rusé en introduisant une notion de durée aux lignes du pattern), et à présent le son est EXCELLENT, tant au niveau CNA que dans la version BUZZER. Pfew et moi qui pensait abandonner parce que le son n'était pas bon, alors qu'en fait ca n'allait pas à cause de gros bugs tout cons. Il manque juste la traduction de l'effet "slide". Mais comme je ne comprends pas la différence dans le code ZX avec les sons normaux, je les ai traités comme des vrais son normaux. Ca crée sans doute une légère différence avec le morceau d'origine, mais on va dire que c'est pas grave. Le résultat est là: la musique 4voix sur le buzzer thomson est possible quand on ne s'y prends pas comme un manche. Le ZIP ci-joint contient un SAP avec le résultat. On peut comparer le son CNA avec le son BUZZER. Perso je trouve la version BUZZER est bien mieux (dans le CNA le son du "bruit" est trop fort). Il contient aussi le code source ainsi que le script perl me permettant de convertir les morceaux.
|
Auteur: | Prehisto [ 31 Jan 2016, 20:13 ] |
Sujet du message: | Re: Musique 1 bit (était: Re: Besoin d'un truc intelligent) |
Samuel Devulder a écrit: Ok, c'est confirmé: JE SUIS UN ANE! Certainement pas Samuel Devulder a écrit: Le résultat est là: la musique 4voix sur le buzzer thomson est possible quand on ne s'y prends pas comme un manche. A ce que je sache, tu es le premier de toute l'histoire du Thomson à avoir réussi à faire du 4 voix avec le buzzer
|
Auteur: | Samuel Devulder [ 31 Jan 2016, 21:01 ] |
Sujet du message: | Re: Musique 1 bit (était: Re: Besoin d'un truc intelligent) |
Si je ne suis pas à âne, c'est que je deviens vieux alors :P En tout cas ce player est sympa car on peut jouer sur le rapport cyclique et donc modifier le timbre des instruments (comme le PLAY du basic). Le générateur de bruit est en outre sensible au rapport cyclique et à la fréquence. Un truc pareil devrait pouvoir émuler pleins de percussions différentes. Il faudra passer un peu de temps à maitriser la gestion de tous ces paramètres. Prochaine étape pour moi: faire un convertisseur midi vers ce format "pattern" et expérimenter les paramètres pour reproduire des instruments divers et variés. Reste en suite à utiliser ce player dans un truc sympa. Si possible pour la Forever.. mais ca me semble trop proche. |
Page 1 sur 4 | Heures au format UTC + 1 heure |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |