Vous cherchez un moyen pour obtenir un fichier binaire de musique et bien voila c'est fait. Si dessous le logiciel executable qui converti un son au format WAV en serie de 1 et zeros au format .BIN.
OUPS !, Comme à mon habitue je n'ai pas changé, j'ai oublié de donner les sources et informations indispensables et des fichiers qui marche !
Attention 45ko requis ! Alors pour commencer on enregistre un son, une partie d'un son que l'on va augmenter la vitesse au maximum avec "audacity" au format wav avec une durée de 1 seconde. Ensuite on lance l'exécutable qui va convertir le fichier wav en une série de 1 et 0. Voila pour répondre à des questionnements en silence radio lol. Je vous propose en télécharement mon petit logiciel qui ne fait rien d'autre que séquencer un son et le convertir en binaire. On implante le fichier binaire " programme " à partir de l'adresse 5000 hex et " sample " binaire de 42ko en 5023 h. Ou tapez : CLOAD puis CALL 20480 c'est tout !
Si dessous les fichiers wav et k7 et les sources.
Si il y a encore un soucis dites le moi svp. allez je vais reprendre un verre ...
Et sur un vrai VG5000, comment fais-tu pour injecter le binaire à l'adresse souhaitée?
C'est le problème avec TOUS tes programmes. Il faut toujouts bidouiller pour espérer obtenir qualque chose. Je pense que c'est la raison pour laquelle personne ne teste tes programme. Tu DOIS partager un fichier prêt à l'emploi où pour utiliser ton programme, un CLOAD "VG5000 est suffissant.
Et ton programme doit fonctionner sur un vrai VG5000 (à la limite tu peux demander l'extension mêmoire, manettes ou carte SD...)
Re: fais parler ton VG5000µ
Publié : 02 déc. 2021 17:40
par Daniel
J'ai enfin fini par comprendre ce que rendomizer appelle un fichier binaire. C'est un fichier permettant de jouer un son avec un buzzer 1 bit.
Ce n'est pas le sens habituel utilisé par les informaticiens. Pour moi un fichier .wav stéréo 16 bits à 44100 échantillons/seconde est un fichier binaire.
Quand à la conversion, elle est trop simpliste pour produire un son correct. Pas de PWM, pas de diffusion d'erreur, un arrondi brutal en tout ou rien en fonction du niveau du signal. On ne peut rien espérer de bon.
For i=t+1 To 11000 Step 1
y=num(i)/(2048000*6)
If y>0 Then y=2048*6:b=1
If y<=0 Then y=0:b=0
WriteInt(herewego,b)
Next
Essai du programme dans dcvg5k 2021.11.02 (BASIC 1.1, extension mémoire 16K) :
- Chargement de l'exécutable en &"5000" (fichier "programme en 5000 h.bin")
- Chargement de l'échantillon en &"5023" (fichier "sample en 5023 h.Bin")
- Exécution par CALL &"5000"
Le VG5000 n'émet aucun son et reboote immédiatement. J'ai raté quelque chose ?
[EDIT] J'ai peut-être compris : Il y a un ret juste avant l'étiquette _sample. La boucle ne s'exécute pas. C'est ça ? Pourtant l'instruction précédente devrait brancher à _sample. Il y a peut-être autre chose qui m'échappe...
_init:
ld bc,20516
_debut:
inc bc
ld a,b
cp $ef
jp nz,_sample
ret;jp _init ; pour arreter ou boucler la sequence
_sample:
ld a,(bc)
out ($af),a
LD a,010
_temps1:
dec a
jp nz,_temps1
inc bc
ld a,(bc)
out ($af),a
LD a,002
_temps2:
dec a
jp nz,_temps2
jp _debut
Autre bizarreries :
- Les échantillons sont chargés en &"5023" et on commence à les lire en &"5025" (20516 + 1). Pourquoi ?
- Il y a deux temporisations, une avec a=010 et une avec a=002. Pourquoi pas une seule ?
Et comme joaopa je pense qu'une cassette (fichier .k7 pour dcvg5k et fichier .wav pour le vrai VG5000) faciliterait les tests.
Re: fais parler ton VG5000µ
Publié : 02 déc. 2021 18:26
par Daniel
J'ai fait un nouvel essai sans charger le fichier "sample en 5023 h.Bin". Le programme fonctionne, mais il joue bien évidemment n'importe quoi.
Si on charge le fichier en &"5023" le VG5000 reboote. C'est donc le fichier des échantillons qui écrase quelque chose.
[Edit] J'ai réussi ! Il faut une extension mémoire de 32K ! Je ne sais pas si tous les utilisateurs de VG5000 la possède.
Le résultat sonore est, comme je l'avais prévu, complètement nul. A oublier...
En regardant le fichier des échantillons, on s'aperçoit qu'il y a 31 bits inutilisés pour 1 bit utile. Ce n'est pas très économique, surtout quand il faut stocker tout ça en RAM. Je me demande quelle est la raison de ce gaspillage de mémoire.
La fréquence de base du PWM est 19608 Hz (1000000 / 51) et les échantillons sont codés sur 2 bits.
Avec le Z80 du VG5000 on doit pouvoir faire aussi bien, et peut-être mieux.
Re: fais parler ton VG5000µ
Publié : 04 déc. 2021 15:53
par rendomizer
et tu trouve que c'est mieux Daniel !. Peut être que tu utilise l'encien post ou j'ai merdé !
Re: fais parler ton VG5000µ
Publié : 04 déc. 2021 15:59
par Daniel
Je ne suis pas très familier avec la programmation du Z80.
Je laisse volontiers les spécialistes tenter le coup. Ce n'est pas difficile, d'autant plus que je peux expliquer en détail comment j'ai fait pour le MO5.
Sin on ne veut pas lire et qu'on préfère les vidéos du résultat:
Ca reste très synthétique quand même. Mais tout développement expérimental est le bienvenu et ne peut qu'aider à progresser et maitriser la technique.
Re: fais parler ton VG5000µ
Publié : 04 déc. 2021 16:38
par rendomizer
oui Daniel si tu peux m'expliquer ce qu'est le PWM ça serait interessent
Re: fais parler ton VG5000µ
Publié : 04 déc. 2021 17:05
par hlide
Ben là j'aurais moins entendu quelque chose comme "Wow fantastic!" sans effet de "priming" avec l'exemple de Daniel, donc félicitation si c'est bien ça. C'est un léger progrès je trouve.
"Priming" : terme anglais de psychologie. Ici je parle du fait que le mot entendu peut être reconnu grace à la lecture de ce même mot à l'écran, ce qui biaise la qualité réelle du son.
PWM (ou MLI en français) : Pulse Width Modulation (Modulation de Largeur d'Impulsion). C'est un signal carré avec un duty (rapport cyclique) que l'on varie. Si le signal commence avec un état haut, un 0% veut dire état bas durant toute la période du signal (énergie négative au maximum) et un 100% veut dire un état haut durant toute la période du signal (énergie positive au maximum) et un 50% veut dire que l'on alterne de l'état au haut à l'état bas à la moitié de la période du signal (énergie nulle).
Avec une très haute fréquence (inaudible), on a donc une période courte sur laquelle on fait varier le rapport cyclique d'un signal carré de façon à créer une variation d'énergie proche du signal sinusoïdale que l'on souhaite imiter.
Un exemple est le MLI « intersective » (MLI analogique) :
1280px-Pwm.svg.png (73.23 Kio) Consulté 3195 fois
Le signal PWM du bas (rose) tente de reproduire le signal sinusoïdal d'en haut (rouge) par un découpage avec un signal triangle (signal bleu). Plus la fréquence de la porteuse (les signaux bleu et rose ont la même fréquence) est grande, mieux c'est reproduit car la sortie sonore a plus de chance d'être lissée.
Dans mon exemple, j'utilise un signal rectangulaire à 19608 Hz. Le signal audio est à 19608 échantillons/seconde, avec chaque échantillon codé sur 2 bits.
Pour chaque échantillon, je modifie (en plus ou en moins) la largeur du créneau positif et je fais la modification inverse pour le créneau négatif, de façon à conserver la même période. C'est aussi simple que ça, et le résultat me semble plutôt bon. Notez que c'est la sortie de l'émulateur, le son est bien meilleur en sortie d'un vrai MO5. Je suis mauvais juge puisque c'est mon programme.
Si d'autres membres du forum veulent écouter le fichier mp3 et le comparer à ce qui se fait sur d'autres machines l'avis sera plus objectif.
Re: fais parler ton VG5000µ
Publié : 04 déc. 2021 17:14
par rendomizer
J'ai comparé le wow de Daniel et le mien mais je reste dubitatif car celui de Daniel coupe comme un dolby les haute frequences !