Logicielsmoto.com

Nous sommes le 28 Mar 2024, 19:24

Heures au format UTC + 1 heure




Poster un nouveau sujet Répondre au sujet  [ 280 messages ]  Aller à la page Précédente  1 ... 5, 6, 7, 8, 9, 10, 11 ... 19  Suivante
Auteur Message
 Sujet du message: Re: MOD ?
MessagePosté: 14 Fév 2017, 13:24 
Hors ligne

Inscription: 21 Aoû 2006, 09:06
Messages: 1802
Localisation: Brest
Prehisto a écrit:
Samuel Devulder a écrit:
A présent "State Of The Art" passe à 100% et sans aucun défaut notable pour mes oreilles!

Il y en a un petit encore : Dans Condom Corruption (musique de State Of The Art), les mesures à 2:10 et 2:25 sont incorrectes. On a l'impression que la lecture fait 2 fois le morceau de partition entier alors qu'elle devrait faire 3 fois la première partie du morceau de partition et ne faire qu'une fois la deuxième . En d'autres termes, alors que les mesures devraient être sous la forme "aaab", elles ressemblent plutôt à "abab".

Au chroniomètrre sur le morceau originel, 2:10 et 2:25 correspondent au pattern 36
Code:
00|C-601...F06|C-629...F85|A#611...A0C|D-518...F06
01|...........|........A0C|........A01|D-604...A0A
02|...........|........A0E|A#622......|D-618...C05
03|...........|C#613...C1E|...........|D-518...A0C
04|C-602......|........A01|A#6.....C02|D-604...A0A
05|...........|........A01|A#622......|D-618...C05
06|...........|........201|...........|D-518......
07|...........|........A01|A#6.....C02|D-604...A0A
08|C-603......|........201|B-622......|D-518......
09|...........|D#616...915|...........|D-5.....A0C
10|...........|D#516...916|B-6.....C02|D-604...A0A
11|...........|C#616...914|A#622......|D-618...C05
12|C-602......|G-620...A0E|...........|D-518......
13|...........|G-520...A0C|A#6.....C02|D-604...A0A
14|...........|........A0A|A#622......|D-618...C12
15|...........|F-620...A0E|...........|D#518...A0C
16|C-601......|C-629......|A#611...A0C|D-518......
17|...........|........A0C|........A01|D-604...A0A
18|...........|C-613...C1E|A#622......|D-618...C05
19|...........|........A01|...........|D-518...A0C
20|C-602......|........A01|A#6.....C02|D-604...A0A
21|...........|........101|A#622......|D-618...C05
22|...........|........A01|...........|D-518......
23|C-614......|........101|A#6.....C02|D-604...A0A
24|C-603......|........A01|A#622......|D-618...C05
25|C-616......|........101|...........|D-518...A0C
26|C-603...90F|C-607...909|A#6.....C02|D-604...A0A
27|...........|...........|B-622......|D-618...C05
28|C-602......|........C..|...........|D-518......
29|C-614......|...........|B-6.....C02|D-604...A0A
30|C-616......|A#529...A06|B-622...A0A|D#618...C05
31|C-614...901|........A0A|F#609...C2E|D#518...A0C
32|C-601......|C-629......|A#611...A0C|D-518......
33|...........|........A0C|........A01|D-604...A0A
34|...........|........A0E|A#622......|D-618...C05
35|...........|G-520...A0C|...........|D-518...A0C
36|C-602......|........A0A|A#6.....C02|D-604...A0A
37|...........|G-620...A0E|A#622......|D-618...C05
38|...........|F-520...A0C|...........|D-518......
39|C-614......|F-620...A0E|A#6.....C02|D-5.....A0C
40|C-603......|G-620...A08|A#622......|D-604...A0C
41|...........|........25E|...........|D-618...C12
42|...........|........A0E|A#6.....C02|D-518...A0C
43|...........|D-520...A0C|A#622......|D-618...C05
44|C-602......|........A0A|...........|D-518......
45|...........|D-620...A0E|A#6.....C02|D-604...A0A
46|...........|F-520...A0A|B-622......|D#518...A0C
47|C-616......|F-620...A0C|...........|D#6.....C05
48|C-626......|C-629......|A#611...A0C|D-518......
49|...........|........A0C|........A01|D-604...A0A
50|C-614......|........A0E|A#622......|D-618...C05
51|C-6.....901|C-629...92C|...........|D-518...A0C
52|...........|...........|A#6.....C02|...........
53|C-616......|...........|A#622......|D-6.....C05
54|C-614......|C#629...916|...........|D-518......
55|...........|...........|A#6.....C02|D-6.....C12
56|C-6.....901|C-629......|A#622......|F#626...915
57|C-616......|........A0C|...........|...........
58|B-5.....908|G-520...A0E|A#6.....C02|C-615......
59|........A0E|G-620...A0C|A#622......|C-6.....910
60|C-602......|G#520...A0E|...........|...........
61|...........|...........|A#6.....C02|C-615...920
62|C-616......|C-607...909|B-622...A0A|........A04
63|C-614......|........A06|F#609...C2E|...........

Sur le canal 1 (à gauche) on voit en 00,04,08,12 les instruments 1, 2, 3, 2. On retrouve cette succession en 16,20,24,28 puis 32,36,40,44. A partir de 48,52,56,60 ca change totalement. Je pense que c'est le motif en "aaab" dont tu fais référence.

Si je relance le script de conversion d'alors sans la compression et en ne lui faisant traduire que le canal1 (pour avoir un résultat plus liible), le pattern devient:
Code:
PAT36
* Row_0_36
 fcb $cf ; c:1 v:15
 fcb $91 ; s:1 <== 1
 fcb $85 ; d:5
* Row_1_36
 fcb $86 ; d:6
* Row_2_36
 fcb $85 ; d:5
* Row_3_36
 fcb $86 ; d:6
* Row_4_36
 fcb $92 ; s:2 <== 2
 fcb $86 ; d:6
* Row_5_36
 fcb $85 ; d:5
* Row_6_36
 fcb $86 ; d:6
* Row_7_36
 fcb $86 ; d:6
* Row_8_36
 fcb $93 ; s:3 <== 3
 fcb $85 ; d:5
* Row_9_36
 fcb $86 ; d:6
* Row_10_36
 fcb $86 ; d:6
* Row_11_36
 fcb $85 ; d:5
* Row_12_36
 fcb $92 ; s:2 <== 2: juqu'ici 1 2 3 2
 fcb $86 ; d:6
* Row_13_36
 fcb $8b ; d:11
* Row_15_36
 fcb $86 ; d:6
* Row_16_36
 fcb $91 ; s:1 <== 1
 fcb $85 ; d:5
* Row_17_36
 fcb $86 ; d:6
* Row_18_36
 fcb $86 ; d:6
* Row_19_36
 fcb $85 ; d:5
* Row_20_36
 fcb $92 ; s:2 <== 2
 fcb $86 ; d:6
* Row_21_36
 fcb $86 ; d:6
* Row_22_36
 fcb $85 ; d:5
* Row_23_36
 fcb $a0,$80 ; c:1 f:128 <=== changement de fréquence sur le canal 1 en ligne 23 !? Ah oui ok, c'est une autre intrument pas à la même frequence, ca colle. ouf!
 fcb $9e ; s:14
 fcb $86 ; d:6
* Row_24_36
 fcb $a0,$d4 ; c:1 f:212 <== retour à la fréquence C-6 avec le bon instru
 fcb $93 ; s:3 <== 3
 fcb $86 ; d:6
 fcb $90,$10 ; s:16
 fcb $85 ; d:5
* Row_26_36
 fcb $90,$32 ; s:50
 fcb $86 ; d:6
* Row_27_36
 fcb $85 ; d:5
* Row_28_36
 fcb $92 ; s:2 <== 2 : a nouveau 1 2 3 2
 fcb $86 ; d:6
* Row_29_36
 fcb $a0,$80 ; c:1 f:128
 fcb $9e ; s:14
 fcb $86 ; d:6
* Row_30_36
 fcb $a0,$d4 ; c:1 f:212
 fcb $90,$10 ; s:16
 fcb $85 ; d:5
* Row_31_36
 fcb $a0,$80 ; c:1 f:128
 fcb $90,$27 ; s:39
 fcb $86 ; d:6
* Row_32_36
 fcb $a0,$d4 ; c:1 f:212
 fcb $91 ; s:1 <== 1
 fcb $86 ; d:6
* Row_33_36
 fcb $85 ; d:5
* Row_34_36
 fcb $86 ; d:6
* Row_35_36
 fcb $86 ; d:6
 fcb $92 ; s:2 <== 2
 fcb $85 ; d:5
* Row_37_36
 fcb $86 ; d:6
* Row_38_36
 fcb $85 ; d:5
* Row_39_36
 fcb $a0,$80 ; c:1 f:128
 fcb $9e ; s:14
 fcb $86 ; d:6
* Row_40_36
 fcb $a0,$d4 ; c:1 f:212
 fcb $93 ; s:3 <== 3
 fcb $86 ; d:6
* Row_41_36
 fcb $85 ; d:5
* Row_42_36
 fcb $86 ; d:6
* Row_43_36
 fcb $86 ; d:6
* Row_44_36
 fcb $92 ; s:2 <== 2: 3e fois 1 2 3 2
 fcb $85 ; d:5
* Row_45_36
 fcb $86 ; d:6
* Row_46_36
 fcb $86 ; d:6
* Row_47_36
 fcb $90,$10 ; s:16
 fcb $85 ; d:5
* Row_48_36
 fcb $90,$1a ; s:26 <== intru 26.. ok c'est correct
 fcb $86 ; d:6
* Row_49_36
 fcb $85 ; d:5
* Row_50_36
 fcb $a0,$80 ; c:1 f:128
 fcb $9e ; s:14
 fcb $86 ; d:6
* Row_51_36
 fcb $86 ; d:6
* Row_52_36
 fcb $85 ; d:5 <== rien en row 52. correct
* Row_53_36
 fcb $a0,$d4 ; c:1 f:212
 fcb $90,$10 ; s:16
 fcb $86 ; d:6
* Row_54_36
 fcb $a0,$80 ; c:1 f:128
 fcb $9e ; s:14 <=== instru 14. ok
 fcb $86 ; d:6
* Row_55_36
 fcb $85 ; d:5
* Row_56_36
 fcb $86 ; d:6 <==  HUM ICI il etait supposé jouer l'instru 14 avec un offset de 256 et il ne joue rien!!! Il reste sur l'instru 14...
* Row_57_36
 fcb $a0,$d4 ; c:1 f:212
 fcb $90,$10 ; s:16
 fcb $86 ; d:6
* Row_58_36
 fcb $a0,$c9 ; c:1 f:201
 fcb $85 ; d:5
* Row_59_36
 fcb $81 ; d:1
 fcb $cc ; c:1 v:12
 fcb $81 ; d:1
 fcb $c9 ; c:1 v:9
 fcb $81 ; d:1
 fcb $c6 ; c:1 v:6
 fcb $81 ; d:1
 fcb $c2 ; c:1 v:2
 fcb $81 ; d:1
 fcb $c0 ; c:1 v:0
 fcb $81 ; d:1
* Row_60_36
 fcb $a0,$d4 ; c:1 f:212
 fcb $cf ; c:1 v:15
 fcb $92 ; s:2
 fcb $8b ; d:11
* Row_62_36
 fcb $90,$10 ; s:16
 fcb $86 ; d:6
* Row_63_36
 fcb $a0,$80 ; c:1 f:128
 fcb $9e ; s:14
 fcb $85 ; d:5
 fcb $00

On retrouve le "aaab" attendu. Par contre au niveau du "b", ligne 56 il aurait du jouer l'instru 14 avect un offset de 1, cad l'intru remappé en 39. Et on ne trouve rien. Il reste sur l'instru 14. Il ya un soucis là, mais pas celui que tu as décrit.

Ok trouvé! :) (pour ce bug de note manquante). La spec dit
spec a écrit:
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.

Donc si pas de note, on ne fait rien! Et c'est ce que fait le player.
Code:
         if note.effect==0x09 then -- sample offset
            effectNotSupported = false
            if note.sample~=0 then
               thomson.smpOffset(chan, note.sample, note.effectParameter)
            end
         end
Et en fait non! J'ai traduit "no note" par no-sample. D'où l'erreur.

J'ai corrigé cela. Oulà.. A présent le morceau a 60 intruments. La plupart de ce notes avec offset étaient donc manquantes ou jouée avec l'intrument sans offet. Peux tu écouter cette version corrigée et me dire si c'est mieux ? Elle ne corrige pas directement le abab que tu entend, mais l'absence d'une note peut avoir tranformé le 2e a de aaab en abab.

(cette apprem' je regarde si la fin et jouée trop rapidement ou pas au niveau de la "trille", mais si ca se trouve c'est le même problème d'offset pas pris en compte qui change tout)


Fichiers joints:
sota.zip [142.93 Kio]
Téléchargé 464 fois

_________________
Good morning, that's a nice Tnetennba
Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: MOD ?
MessagePosté: 14 Fév 2017, 14:20 
Hors ligne

Inscription: 06 Juin 2004, 08:23
Messages: 464
Je suis pas convaincu sur l'équivalence en qualité entre 4 et 6 bits, mais je te fais confiance. Donc pour faire mieux, il faudrait trouver un moyen d'augmenter la fréquence, c'est-a-dire d'économiser des cycles ... ca va etre dur. Je suis pas un fan du LEAY -1,Y / LBNE mais je vois pas mieux pour le moment et ca ne gagnerait que 2-3 centaines de Hz a tout casser.


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

Inscription: 21 Aoû 2006, 09:06
Messages: 1802
Localisation: Brest
Non 4bits ne sont pas équivalent à 6bits, mais disons que c'est suffisant. La différence entre sommer 6 bits puis diviser par 4 à la fin ou diviser par 4 en 1er (i.e. travailler sur 4bits) puis sommer introduit une erreur d'arrondi de 1/2 * 4 sur 64 = 1/32 (1/2 bit pour chacune des divisions avec un réultat sur 64 valeurs), soit même pas 3%. Typiquement, au lieu de sortir le niveau 63, on sort le niveau 60. Ca ne change pas grand chose à l'oreille pour les niveaux elevés. Par contre pour les niveaux faibles ce bruit de quantisation peut être entendu.

Pour gagner en fréquence, on peut ajouter des restrictions pour éliminer du code:
  • 1 seul sample par canal => 4x "andb" de gagnés (8 cycles)
  • le volume est constant sur toutes le voix => 4x"orb #vol, lda b,u" de gagnés (28 cycles)
donc 36 cycles de gagnés. La boucle tombe à 164us ==> 6.1khz. Les notes très aigües passeraient mieux (mais elles sont rares).
Mais ce sont de sacrés restrictions, surtout la 2e car les MODs jouent bcp sur les volumes, mais on peut contourer en préparant des instruments supplémentaires correspondant aux divers volumes.

_________________
Good morning, that's a nice Tnetennba


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: MOD ?
MessagePosté: 14 Fév 2017, 16:41 
Hors ligne

Inscription: 21 Aoû 2006, 09:06
Messages: 1802
Localisation: Brest
Prehisto a écrit:
La trille à 3:18 est aussi trop rapide.

3:18 correspond pile à la fin du morceau quand ca accèlère de plus en plus, c'est ca ?

Dans cette partie là c'est de la folie. Le BPM amiga est à 145µs / frame. Or sur thomson on est à 200µs. C'est trop! Ce qu'il se passe c'est que le player joue une frame thomson pour une frame amiga et cumule le retard. Quand le retard dépasse une frame amiga, il drop la frame thomson correspondante:
Code:
* Row_52_32
* frame=0
* frame=1
* frame=3 <= on a droppé la frame 2
* frame=4 <= on a droppé la frame 5
* Row_53_32
* frame=0
* frame=1
* frame=2
* frame=4 <= perdu frame 3
* frame=5
* Row_54_32
* frame=0
* frame=2 <= perdu la 1
* frame=3
* frame=5 <= perdu la 4
* Row_55_32
* frame=0
* frame=1
* frame=3 <= perdu la 2
* frame=4
* frame=5
* frame=1 <== perdu la 0,
* frame=2
* frame=4 <== perdu la 3
* frame=5
* frame=1 <== perdu la 0
* frame=2
* frame=3
* frame=5 <== perdu la 4
*  Row_58_32
* frame=0
* frame=2 <= perdu la 1
On perd en moyenne une frame sur 3. Ce qui veut dire que le truc qui prend 6 frames amiga (6*145=870µs) se fait en 4 frames thomson=800µs. Le thomson va 10% plus vite! C'est ce que tu entends. Normalement ca se régularise sur la longueur, mais ici comme ca accélère de plus en plus on arrive pas à régulariser et sur cette partie, pendant 1 à 2sec on joue 10% trop vite.

Je ne pense pas qu'il y ait quelque chose à faire pour ce cas précis. :( ca fait partie des limites du player quand la durée d'une frame amiga est moindre que celle du player.

[EDIT] Il ne faut pas desespérer. Maintenant que j'ai ajouté le suppport pour un tempo autre que 100 (cad frame=20ms), on peut réduire le tempo pour que la frame thomson fasse par exemple 5ms, et là on colle bien plus à la vitesse de l'amiga sans ecart prire que 4ms, autant ire insignfiant.

_________________
Good morning, that's a nice Tnetennba


Dernière édition par Samuel Devulder le 15 Fév 2017, 10:35, édité 1 fois.

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

Inscription: 21 Aoû 2006, 09:06
Messages: 1802
Localisation: Brest
PulkoMandy a écrit:
Pour la commande EF, ça semble prévu pour l'exploiter sur des samples très courts et très simples.

Mince, ce sample vraiment super http://janeway.exotica.org.uk/release.php?id=72762 l'utilise :(
Bon je tente une traduction en ignorant cette commande...
Code:
$ nice -19 tools/lua52.exe mod2mp.lua depeche_mod/MOD.behind\ the\ wheel > zz.txt ; make
* Unsupported effect 0x0E(F1) for Channel 2, Row 15, Pattern 0
* Unsupported effect 0x0E(F1) for Channel 4, Row 15, Pattern 0
* Unsupported effect 0x0E(F1) for Channel 2, Row 15, Pattern 0
* Unsupported effect 0x0E(F1) for Channel 4, Row 15, Pattern 0
* Unsupported effect 0x0E(F1) for Channel 2, Row 15, Pattern 0
* Unsupported effect 0x0E(F1) for Channel 4, Row 15, Pattern 0
Et bien ca rend pas mal du tout quand même :) très bien même :bien: A tel point que c'est pratiquement mon préféré à présent (long, et de la musique qui me rapelle ma jeunesse). J'en ai créé une belle image Thomson du coup
Fichier(s) joint(s):
behind-the-wheel.gif
behind-the-wheel.gif [ 12.74 Kio | Vu 11327 fois ]

Fichier(s) joint(s):
Commentaire: Mon MOD préféré :)
shake-the-disease.zip [90.69 Kio]
Téléchargé 519 fois


[EDIT] Arf, je me suis trompé dans le nom du zip et dans le fichier TST.ASS. :oops: J'ai mis "shake the disease", alors que je voulais dire "behind the wheel" (lapsus digitae?). Bon c'est pas grave, le fichier SAP est le bon de toute façon.

Autre bonne nouvelle, le programme de conversion génère à présent un binaire thomson sans le player, ce qui veut dire que je n'ai plus besoin d'un assembler pour recompiler le morceau de musique. Je peux à présent facilement mettre plein de fichiers M0D sur une diskette :D Un music-disk n'est donc plus totalement à exclure.

Dernier point, ces fichiers binaires thomson ont l'extension 'M0D' (M zéro D), parce que ca ne sont pas des vrais MOD, mais pas loin. Du coup je propose qu'on dise que ce format est le format M0D par extension ;)

_________________
Good morning, that's a nice Tnetennba


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: MOD ?
MessagePosté: 15 Fév 2017, 19:51 
Hors ligne

Inscription: 21 Aoû 2006, 09:06
Messages: 1802
Localisation: Brest
Oulà.. j'ai eu une idée rigolote! :sol:

A votre avis qu'est ce qu'il se passe avec le player si on ne garde plus que le bit #3 de la table des volumes et qu'au lieu d'écrire en $E7CD (CNA) on écrit en $E7C1 (CP2 du 6821 système) ? :voyons:
Et bien, c'est carément fou ce qu'il se passe à ce moment là :bouffon: Je n'en dis pas plus :nanana:, mais testez par vous même sur vraie machine idéalement sur K7, mais j'ai fait des D7 bootables pour accélérer la vitesse de chargement. (Tout TO équipé de RAM en $A000 devrait convenir.)
Fichier(s) joint(s):
Commentaire: La réponse à écouter sur vrai ordi pour éviter le repliement désagréable de la porteuse à 20khz que font les émulateurs. Idéalement si vous avez un ampli, diminuez au max les fréquences au dessus de 8-10khz. C'est beaucoup mieux.

Pour rappel les touches clavier font:
0=>coupe ou active tous les canaux.
1-4=>coupe ou active le canal correspondant.
STOP=>pause la lecture.
SPACE=>sortie (si le sifflement de la porteuse à 10khz vous est insupportable, bande de jeunes :) )

behind-the-wheel.zip [146.23 Kio]
Téléchargé 466 fois
Et bien on joue des MODs naturellement sur le buzzer en simulant exactement un PWM tournant à 20khz.

:coolfuck:

_________________
Good morning, that's a nice Tnetennba


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: MOD ?
MessagePosté: 16 Fév 2017, 09:44 
Hors ligne

Inscription: 06 Juin 2004, 08:23
Messages: 464
:bien: Je souhaite bon courage à celui qui veut émuler ça fidèlement :ptdr:


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: MOD ?
MessagePosté: 16 Fév 2017, 10:06 
Hors ligne

Inscription: 24 Juil 2010, 16:08
Messages: 454
Localisation: France
émuler ce genre de choses est un problème qui est déjà résolu. La bibliothèque blip_buffer (http://www.slack.net/~ant/libs/audio.html#Blip_Buffer) fait presque tout le travail.
On lui fournit les "instants" ou l'amplitude du signal de sortie doit changer, et elle s'occupe du reste. N'importe quel émulateur qui sait compter le nombre de cycles de chaque instruction CPU peut donc y arriver.


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: MOD ?
MessagePosté: 16 Fév 2017, 11:11 
Hors ligne

Inscription: 21 Aoû 2006, 09:06
Messages: 1802
Localisation: Brest
Au départ je trouvais que c'était une belle curiosité, mais je me dis que des MODs sur 1 bit c'est un truc vraiment original à présenter à la ForeverParty. :voyons: Mais il faut encore que la qualité soit bonne. Or il y a un sifflement gênant qui m'ennuie.

Je pense que c'est lié à l'asymétrie de la table des volumes entre les instruments dans la partie basse des octets et ceux dans la partie haute. Ainsi certains instruments ont un volume de fin à 0+ et d'autres à 0-. Le 1er force le buzzer à 1, le 2e à 0. Et quand les deux instruments se terminent (chacun sur son canal), on se retrouve à avoir une succession de 1/0 sur le buzzer. C'est la fameuse porteuse qu'on entend. Je pensais qu'elle était à 10khz, mais non: si on ajoute les 2 autres voix pour l'instant muette à 0, on a le motif 1/0/0/0 qui est joué à 10khz/2 = 5khz. Cela veut dure que le sifflement est alors à 5khz. Beurk c'est horriblement trop bas et est désagréable aux oreilles "normales" :L

Je vais voir si en traitant le volume en unsigned (-> symétrisation de la table des volumes) et en alignant les niveaux des différents instruments (0+ et 0- donneront 0 tout court) ca n'irait pas mieux. Je pense que oui si j'ai bien analysé le problème...

[EDIT] Alors oui c'est mieux, mais en fait en traitant les échantillons en unsigned, on entend plus les petit volumes (<8/15), et les volume moyens sont trop fort(8/15 est joué comme un 15/15). Donc ok, ca siffle moins, mais c'est pas assez "subtil". Il manque une notion de "dither" pour simuler les petits volumes. Et cela mange tellement de cycles, que je me dit que c'est cuit (sans compter que ca fera siffler encore plus!).

Bref, le MOD sur 1 bit restera un truc anecdotique je crois bien.

_________________
Good morning, that's a nice Tnetennba


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: MOD ?
MessagePosté: 17 Fév 2017, 09:37 
Hors ligne

Inscription: 06 Juin 2004, 08:23
Messages: 464
Just my two cents, mais la technique classique pour jouer du son "numérisé" sur 1-bit consiste à moduler en PWM la sortie en fonction du sample à jouer, c'est ce qui se faisait typiquement sur PC en programmant le 8253.

Ce n'est pas possible avec la sortie son sur Thomson sans bouffer un max de cycles, par contre, y'a une autre sortie sur TO qui fonctionne exactement comme ça, c'est l'écriture du LEP. Ne serait-il pas possible, moyennant un filtre CNA minimaliste sur la prise LEP, de générer ce son 1-bit en programmant le timer du 6846 ? Ce sera sans doute un peu plus couteux qu'un simple STA sur le CNA 6-bits, mais certainement moins qu'une boucle de PWM en assembleur. Y'a un réglage du duty cycle sur le 6846 ? Au niveau hardware ca prendrait la forme d'un adaptateur DIN 5broches vers jack sur lequel ou pourrait tout simplement connecter une paire d'enceintes actives de PC.

Bon dans tous les cas, pas faisable sur MO (pas de 6846).


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: MOD ?
MessagePosté: 17 Fév 2017, 10:25 
Hors ligne

Inscription: 21 Aoû 2006, 09:06
Messages: 1802
Localisation: Brest
Utiliser le timer pour faire du son est une idée qui me tarabuste depuis un certain temps (http://www.logicielsmoto.com/phpBB/viewtopic.php?p=2547#p2547, http://www.logicielsmoto.com/phpBB/viewtopic.php?p=4637#p4637, mais bizarement je ne retrouve plus le message où j'évoquais cette possibilité). Mon 1er player monophonique (HNY2013) pourrait être parfaitement adapté pour ne plus alterner le buzzer logiciellement (et couteusement à cause de l'IRQ). Ca donnerait une démo très intéréssante sur du matériel réel et hélas inopérante sur émulateur. On lancerait le programme sur une K7 vierge avec le LEP en mode écriture, puis à la fin pour entendre le résultat, il faudrait sortir la K7 et l'écouter sur sa chaine hi-fi. Une démo en 2 temps en quelque sorte.

Sinon je garde quand même dans un coin l'idée du MOD 1 bit. En effet théoriquement, sur 1 octet on peut mettre 8 instruments. Le dither pour les différents volumes peut être pré-calculé par le traducteur de MOD. On aurait ainsi pas de commande de volumes, mais 4x plus d'instruments (en supposant 4+1 niveau de volume. Le volume 0 peut être commun à tous les instruments). La boucle centrale serait légèrement changée (4 cycle de plus) mais comme on économise le STA $E7C, au final la boucle tournerait 212µs.
Code:
        LDB     ,X          ; 4
        ANDB    #$0F        ; 2 haut/bas de l'octet?
        ORB     #$A0        ; 2 volume
        ADDA    b,u         ; 5 (13 cycles)
deviendrait
Code:
LDB ,X ; (4)
ANDB #%00010000 ; (2) le bit correspondant à l'instru
BEQ l1 ; (3)
STU ,s ; (5) S=$E7C0, U=valeur pour $E7C1 avec buzzer à 1
BRA l2 ; (3)
l1:
STX ,s ; (5) S=$E7C0, X=valeur pour $E7C1 avec buzzer à 0
bra l2 ; (3)
l2: ; (17 cycles)

Et si ca se trouve on peut être encore plus malin pour sortir le bit en $E7C1 car ici ca consome 1 cycles (2 bra + un STX/STU) en abusant de deux regs 16 bits qui est la méthode que j'avais trouvé l'an dernier pour "so we just buzz".

_________________
Good morning, that's a nice Tnetennba


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: MOD ?
MessagePosté: 17 Fév 2017, 11:41 
Hors ligne

Inscription: 21 Aoû 2006, 09:06
Messages: 1802
Localisation: Brest
Samuel Devulder a écrit:
Et si ca se trouve on peut être encore plus malin pour sortir le bit en $E7C1 car ici ca consome 1 cycles (2 bra + un STX/STU) en abusant de deux regs 16 bits qui est la méthode que j'avais trouvé l'an dernier pour "so we just buzz".
Plus malin , mais finalement pas plus rapide :( (LBxx coute autant que les deux Bxx):
Code:
ldb ,x ; (4)
andb #instru ; (2)
lbeq l1 ; taken= 6+5; not taken = 5+6, total=11 constant!
fcb $10
l1: stu ,y => 17 cycles
Par contre comme sur MO5 le bit du buzzer est en position 0, on peut faire
Code:
ldd #(peek($A7C0) or 1)*256 + mask-intru ; (3) precalc
andb ,x ; (4)
subd #1 ; (4) <=== peut on faire mieux ?
sta ,u  ; (4) => 15 cycles :)

Une voix sur TO prendrait 50cycles et sur MO 48. La boucle interne prendrait 4x50+3(deca)+6(lbne)=209 cycles, et 4x48+5(leay)+6(lbne)=203 cycles. Hum....

_________________
Good morning, that's a nice Tnetennba


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: MOD ?
MessagePosté: 17 Fév 2017, 12:08 
Hors ligne

Inscription: 21 Aoû 2006, 09:06
Messages: 1802
Localisation: Brest
Ah! peut-être mieux: Mettons que U pointe sur une table précalculée telle que à l'entrée 0 on ait ($E7C1 avec b3=0) et ailleurs ($E7C1 avec b3=1).
Code:
ldb ,x  ; (4)
andb #mask-instru ; (2)
ldb b,u ; (5)
stb ,s  ; (4) => 15 cycles :)
Et comme A est libre pour la boucle, on peut avoir 4x(33+15)+2(deca)+6(lbne)=200 cycles tout ronds. yeah :coolfuck:

oh punaise.... ca mériterait d'être testé :D

_________________
Good morning, that's a nice Tnetennba


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: MOD ?
MessagePosté: 17 Fév 2017, 14:05 
Hors ligne

Inscription: 21 Avr 2010, 10:59
Messages: 253
Citation:
hélas inopérante sur émulateur

tout se simule...

il suffit d'être un peu plus fin dans ce code là (par exemple avec un oversampling très large et un calcul de moyenne)
Code:
static void put_sound_byte(unsigned long long int clock, unsigned char data)
{
    register int i;
    register char char_data;
    int index= period_size*(clock%TEO_CYCLES_PER_FRAME)/TEO_CYCLES_PER_FRAME;

    /* Dans le cas où le nombre de cycles éxécutés pendant une frame dépasse la valeur
       théorique, on bloque l'index à sa valeur maximale */
    if (index < last_index)
        index=period_size;

    if (sound_buffer != NULL)
    {
        /* fill buffer with sound data */
        switch (data_type)
        {
            case SND_PCM_FORMAT_U8 :
                if ((index-last_index) != 0)
                    memset (sound_buffer+last_index, last_data, index-last_index);
                break;
               
            case SND_PCM_FORMAT_S16 :
                char_data = last_data-128;
                for (i=last_index; i<index; i++)
                    sound_buffer[(i<<1)+1]=char_data;
                break;
        }
    }
    last_index=index;
    last_data=data;

_________________
http://www.alternative-system.com


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

Inscription: 21 Aoû 2006, 09:06
Messages: 1802
Localisation: Brest
En fait c'est pas pour ca que je disais inopérante avec émulateur :). C'etait parce que aucun émulateur ne se branche sur le lecteur K7 du TO7 puisque l'idée était que le programme écrive sur une K7 de sorte qu'en écoutant la K7 on entende le son de la démo. Ah si un émul fait cela en partie en générant un fichier WAV: MESS, mais je ne sais pas si c'est un mapping 1 pour 1 entre le bit de timeout du 6848 et les échantillons PCM générés où s'il patche la routine K7 pour écrire des bouts de WAV correspondant à l'octet devant être écrit.

_________________
Good morning, that's a nice Tnetennba


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 ... 5, 6, 7, 8, 9, 10, 11 ... 19  Suivante

Heures au format UTC + 1 heure


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 36 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 à:  
Développé par phpBB® Forum Software © phpBB Group
Traduction par phpBB-fr.com