ASM sur Thomson
Modérateurs : Papy.G, fneck, Carl
-
- Messages : 312
- Inscription : 01 févr. 2020 20:31
- Localisation : Rome - Italy
Re: ASM sur Thomson
J'ai essayé de convertir un fichier audio 8 bits en 6 bits, je l'ai chargé en mémoire, puis en asm je l'ai copié à l'emplacement a7cd. Ça marche mais c'est très fort. Avez-vous des suggestions?
Re: ASM sur Thomson
Baisser le niveau de sortie du son.
Avec l'émulateur dcmoto, il y a un réglage possible dans les options, et un réglage possible dans Windows.
Avec le vrai PC128 il suffit de changer le réglage de volume du moniteur.
Par contre je déconseille de réduire la valeur des échantillons (sauf s'il y a trop de saturation).
En effet, avec un échantillon sur 6 bits seulement, si on réduit l'amplitude le bruit de fond devient très vite perceptible et gênant. L'idéal est d'être toujours en limite de saturation pour avoir le meilleur rapport signal/bruit.
Avec l'émulateur dcmoto, il y a un réglage possible dans les options, et un réglage possible dans Windows.
Avec le vrai PC128 il suffit de changer le réglage de volume du moniteur.
Par contre je déconseille de réduire la valeur des échantillons (sauf s'il y a trop de saturation).
En effet, avec un échantillon sur 6 bits seulement, si on réduit l'amplitude le bruit de fond devient très vite perceptible et gênant. L'idéal est d'être toujours en limite de saturation pour avoir le meilleur rapport signal/bruit.
Daniel
L'obstacle augmente mon ardeur.
L'obstacle augmente mon ardeur.
-
- Messages : 312
- Inscription : 01 févr. 2020 20:31
- Localisation : Rome - Italy
Re: ASM sur Thomson
proposez-vous donc de jouer des échantillons 8 bits au lieu de 6?
Re: ASM sur Thomson
Je ne comprends pas la question.
Le CNA des ordinateurs Thomson est limité à 6 bits. Un échantillon ne peut pas être sur 8 bits. Il n'y a pas de choix possible.
Le CNA des ordinateurs Thomson est limité à 6 bits. Un échantillon ne peut pas être sur 8 bits. Il n'y a pas de choix possible.
Daniel
L'obstacle augmente mon ardeur.
L'obstacle augmente mon ardeur.
-
- Messages : 312
- Inscription : 01 févr. 2020 20:31
- Localisation : Rome - Italy
Re: ASM sur Thomson
ok .... récapitulons .... J'ai normalisé un échantillon de 8 bits à 6 bits. Mais quand je joue c'est très déformé.
-
- Messages : 312
- Inscription : 01 févr. 2020 20:31
- Localisation : Rome - Italy
Re: ASM sur Thomson
pour normaliser d'abord le calcul, la valeur minimale, la valeur maximale et l'amplitude maximale, puis utiliser cette formule:
b=((float)(b-min)/ampl*63);
b=((float)(b-min)/ampl*63);
Re: ASM sur Thomson
Pour convertir un échantillon 8 bits en 6 bits, il ne faut surtout pas tronquer les deux bits de poids fort, ce sont les plus importants. Si on les enlève la musique ne ressemble plus à rien.
L'échantillon 8 bits a une valeur de 0 à 255. Il faut le ramener à une valeur sur 6 bits (de 0 à 63) en le divisant par 4. Théoriquement, il vaut mieux arrondir le résultat de la division à l'entier le plus proche, mais pour simplifier on peut se contenter de décaler chaque octet vers la droite de deux bits. Les deux bits de poids faible sont perdus.
Cette division avec arrondi provoque naturellement une légère distorsion. Pour améliorer le résultat il existe des techniques de diffusion d'erreur (dithering). Elles seraient trop longues à exposer ici mais on trouve leur description dans la littérature. La plupart des logiciels de traitement audio proposent de telles méthodes pour atténuer les effets de la réduction du nombre de bits. Aucune n'est parfaite, on ne peut pas masquer totalement la perte de qualité.
L'échantillon 8 bits a une valeur de 0 à 255. Il faut le ramener à une valeur sur 6 bits (de 0 à 63) en le divisant par 4. Théoriquement, il vaut mieux arrondir le résultat de la division à l'entier le plus proche, mais pour simplifier on peut se contenter de décaler chaque octet vers la droite de deux bits. Les deux bits de poids faible sont perdus.
Cette division avec arrondi provoque naturellement une légère distorsion. Pour améliorer le résultat il existe des techniques de diffusion d'erreur (dithering). Elles seraient trop longues à exposer ici mais on trouve leur description dans la littérature. La plupart des logiciels de traitement audio proposent de telles méthodes pour atténuer les effets de la réduction du nombre de bits. Aucune n'est parfaite, on ne peut pas masquer totalement la perte de qualité.
Daniel
L'obstacle augmente mon ardeur.
L'obstacle augmente mon ardeur.
Re: ASM sur Thomson
Bonjour,
J'aimerais m'essayer à la reproduction de musique sur TO8. D'après ce que je comprends, il faut modifier les 6 bits de poids faible de $E7CD (qui envoie une impulsion de 0 à 63).
Je pourrais charger en mémoire une liste d'octets que je recopierais successivement dans $E7CD (disons en assembleur).
À partir d'une source "réelle", par exemple une piste d'un CD, comment créer une suite d'octets qui sera ensuite audible sur le thomson ? J'aimerais surtout comprendre le principe de la conversion : je me ferai un programme python pour tester ma compréhension. Faut-il (et comment ?) jouer sur la durée quelque part dans le code ?
Autre question : comment créer une suite d'octets qui me donneront un "LA" ?
Je précise que je ne m'intéresse ici ni à des questions de compression ou de qualité, ni à la lecture à la volée (streaming) sur carte SD. Quelques secondes de musique suffiront à mon bonheur.
Merci d'avance votre aide, de vos partage de liens/codes ou de vos conseils de lecture !
J'aimerais m'essayer à la reproduction de musique sur TO8. D'après ce que je comprends, il faut modifier les 6 bits de poids faible de $E7CD (qui envoie une impulsion de 0 à 63).
Je pourrais charger en mémoire une liste d'octets que je recopierais successivement dans $E7CD (disons en assembleur).
À partir d'une source "réelle", par exemple une piste d'un CD, comment créer une suite d'octets qui sera ensuite audible sur le thomson ? J'aimerais surtout comprendre le principe de la conversion : je me ferai un programme python pour tester ma compréhension. Faut-il (et comment ?) jouer sur la durée quelque part dans le code ?
Autre question : comment créer une suite d'octets qui me donneront un "LA" ?
Je précise que je ne m'intéresse ici ni à des questions de compression ou de qualité, ni à la lecture à la volée (streaming) sur carte SD. Quelques secondes de musique suffiront à mon bonheur.
Merci d'avance votre aide, de vos partage de liens/codes ou de vos conseils de lecture !
Asic512
Re: ASM sur Thomson
Pour faire au plus simple, il faut utiliser un logiciel d'édition audio sur PC. On transforme le morceau à jouer pour avoir des échantillons monophoniques sur 8 bits non signés à la fréquence choisie pour la restitution, disons entre 10000 et 40000 échantillons par seconde. On sauve ce morceau au format "PCM raw data". Dans le fichier obtenu, on décale chaque octet de deux bits vers la droite (division par 4) pour avoir des échantillons sur 6 bits (entre 0 et 63).
Daniel
L'obstacle augmente mon ardeur.
L'obstacle augmente mon ardeur.
-
- Messages : 7988
- Inscription : 18 sept. 2010 12:08
- Localisation : Brest et parfois les Flandres
Re: ASM sur Thomson
Asic ce que tu cherches à savoir c'est la "théorie" du son échantillonné. L'idée est d'envoyer un échantillon (et pas un pulse) à espace régulier au convertisseur numérique/analogique. Pour un son donné, disons un La 440Hz, la théorie (Shannon) nous dit que pour bien reproduire ce son il faut l'échantillonner à 2 fois sa fréquence, donc 880Hz. En pratique avec seulement 2 échantillons pour reproduire un signal il y a beaucoup de distorsion. Il vaut mieux entre 8 ou 10. Cela signifie qu'il te faut envoyer autour de 4400 octets par seconde pour faire on LA bien joli.
Si tu veux t'amuser, le mieux est de faire comme on l'a tous fait à l'époque avec le programme basic/asm fourni dans le numéro 165 d'hébdogiciel:
![Image](http://download.abandonware.org/magazines/Hebdogiciel/hebdogiciel_numero146/Hebdogiciel%20146%20a%20149%20%281er%20Aout%201986%29%20-%20Page%2059.jpg)
Si tu veux t'amuser, le mieux est de faire comme on l'a tous fait à l'époque avec le programme basic/asm fourni dans le numéro 165 d'hébdogiciel:
![Image](http://download.abandonware.org/magazines/Hebdogiciel/hebdogiciel_numero146/Hebdogiciel%20146%20a%20149%20%281er%20Aout%201986%29%20-%20Page%2059.jpg)
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: ASM sur Thomson
Bonsoir,
Merci de vos réponses ! J'ai donc fait un échantillonnage de deux secondes de musique à 8kHz et 6 bits ce qui m'a donné un fichier de 16 ko que j'ai chargé en mémoire. J'ai écrit une petite routine en assembleur pour produire chaque échantillon en environ 125 cycles (quelques cycles de copie + plein de cycles de temporisation) et ça marche ! Le son n'est pas très très bon mais je n'ai pour l'instant testé que sur émulateur (+PlayOnMac). J'essaierai sur un vrai TO8. J'essaierai aussi d'affiner mon calcul de cycles ou d'augmenter l'échantillonnage.
Merci de vos réponses ! J'ai donc fait un échantillonnage de deux secondes de musique à 8kHz et 6 bits ce qui m'a donné un fichier de 16 ko que j'ai chargé en mémoire. J'ai écrit une petite routine en assembleur pour produire chaque échantillon en environ 125 cycles (quelques cycles de copie + plein de cycles de temporisation) et ça marche ! Le son n'est pas très très bon mais je n'ai pour l'instant testé que sur émulateur (+PlayOnMac). J'essaierai sur un vrai TO8. J'essaierai aussi d'affiner mon calcul de cycles ou d'augmenter l'échantillonnage.
Asic512
-
- Messages : 7988
- Inscription : 18 sept. 2010 12:08
- Localisation : Brest et parfois les Flandres
Re: ASM sur Thomson
8khz, c'est pas mal. Le son devrait être plutôt propre. Si tu le trouves mauvais, c'est que quelque chose cloche. Qu'est ce que tu trouves pas bon dans ce son? Il est distordu ? Tu n'entends rien ? Tu entends pas mal de souffle et de bruit sous-jacent ? Dis nous en plus.
Au fait, as-tu bien fait du 6 bits non-signé ?? Parce que passer un truc signé sur une truc non signé va introduire un max de parasites.
Ou alors peut-être que l'amplitude audio est trop basse et que le rapport signal/bruit est en défaveur du signal. Essaye de faire en sorte que le signal a le max d'amplitude dans l'intervalle 0->63.
A l'inverse si tu boost trop le son, la conversion vers 6 bits va introduire des saturations, et le son sera déformé. Tout est affaire de compromis. Si besoin est j'ai une routine d'ajustement de gain automatique qui marche bien pour produire un son thomson très propre même à 5khz (voir les vidéos SDDrive, mais je ne suis pas sur que ce soit mon dernier algo la dedans... Néanmoins le son est bon.)
Au fait, as-tu bien fait du 6 bits non-signé ?? Parce que passer un truc signé sur une truc non signé va introduire un max de parasites.
Ou alors peut-être que l'amplitude audio est trop basse et que le rapport signal/bruit est en défaveur du signal. Essaye de faire en sorte que le signal a le max d'amplitude dans l'intervalle 0->63.
A l'inverse si tu boost trop le son, la conversion vers 6 bits va introduire des saturations, et le son sera déformé. Tout est affaire de compromis. Si besoin est j'ai une routine d'ajustement de gain automatique qui marche bien pour produire un son thomson très propre même à 5khz (voir les vidéos SDDrive, mais je ne suis pas sur que ce soit mon dernier algo la dedans... Néanmoins le son est bon.)
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: ASM sur Thomson
Merci de ton intérêt !
J'ai affiné mon calcul de cycles et j'ai essayé sur un vrai TO8 : le son n'est pas "clair" (il y a beaucoup de souffle ou de grésillement) même si on reconnait le morceau. Rien de comparable à ce que je peux entendre par exemple dans "Bad Apple" sur le même TO8.
Il faut que je vérifie à nouveau mais il me semble que le même échantillon passait bien sur mon Mac.
Je ne peux pas exclure que mon code soit quelque peu erroné. En voici un extrait : je veux copier 16000 octets stockés à partir de $A000 successivement dans $E7CD. L'échantillonnage est de 8192hz soit 122 cycles par échantillon. Pour obtenir des cycles supplémentaires, j'ai copié quelques lignes dans les codes de Daniel ("SDDRIVE_MUSIC")
Y avait-il d'autres choses à faire que j'ai oubliées ? Une initialisation au départ ? Une erreur de calcul ?
J'ai affiné mon calcul de cycles et j'ai essayé sur un vrai TO8 : le son n'est pas "clair" (il y a beaucoup de souffle ou de grésillement) même si on reconnait le morceau. Rien de comparable à ce que je peux entendre par exemple dans "Bad Apple" sur le même TO8.
Il faut que je vérifie à nouveau mais il me semble que le même échantillon passait bien sur mon Mac.
Je ne peux pas exclure que mon code soit quelque peu erroné. En voici un extrait : je veux copier 16000 octets stockés à partir de $A000 successivement dans $E7CD. L'échantillonnage est de 8192hz soit 122 cycles par échantillon. Pour obtenir des cycles supplémentaires, j'ai copié quelques lignes dans les codes de Daniel ("SDDRIVE_MUSIC")
Code : Tout sélectionner
LDY #16000 ;nb octets restant à copier
LDX #$A000 ;adresse départ
LOOP
LDA ,X+ ; (4+2)
STA $E7CD ; (5)
LEAY -1,Y ; (4+1) decrementation du compteur Y
LBSR TEMP14 ; temporisation 14 cycles
LBSR TEMP14 ; temporisation 14 cycles
LBSR TEMP14 ; temporisation 14 cycles
LBSR TEMP14 ; temporisation 14 cycles
LBSR TEMP14 ; temporisation 14 cycles
LBSR TEMP14 ; temporisation 14 cycles
LBSR TEMP14 ; temporisation 14 cycles
LBRN $FFFF ;temporisation 5 cycles (5)
BNE LOOP ; ( 3) TOTAL: 6+5+5+7*14+5+3= 122 cycles pour un echantillon
*------------------------------------------------------
* Temporisation de 14 cycles
* LBSR(9)+RTS(5)
*------------------------------------------------------
TEMP14
RTS retour (5)
Asic512
-
- Messages : 7988
- Inscription : 18 sept. 2010 12:08
- Localisation : Brest et parfois les Flandres
Re: ASM sur Thomson
Comment initialises-tu le registre CNA ? Moi en version "simple" (je me préoccupe pas de restaurer l'état à la sortie), je fais (DP=$E7 pour TO et $A7 pour MO):
Autre chose: as tu bien bloqué les interruptions au début de ton programme (ORCC #$50), sinon elles vont te perturber le timing et brouiller l'écoute ![Laughing :lol:](./images/smilies/icon_lol.gif)
Code : Tout sélectionner
LDA <$C0 ; PIA systeme
ANDA #$FB ; clear mute bit
STA <$C0 ; modification PIA
LDA <$CF ; lecture registre de ctrl B
ANDA #$FB ; raz bit 2
STA <$CF ; selection DDRB
LDB #$3F ; set bits 0-5
STB <$CD ; bits CNA en sortie
ORA #$04 ; set b2
STA <$CF ; selection PB
![Laughing :lol:](./images/smilies/icon_lol.gif)
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: ASM sur Thomson
Ça marche enfin ! Le son est clair et j'ai eu l'écho de la flûte
!
En fait, je n'avais pas compris l'initialisation qu'il fallait faire au début (malgré le parcours de différents guides
).
Merci encore !
![Laughing :lol:](./images/smilies/icon_lol.gif)
En fait, je n'avais pas compris l'initialisation qu'il fallait faire au début (malgré le parcours de différents guides
![Embarassed :oops:](./images/smilies/icon_redface.gif)
Merci encore !
Asic512