MPF-I création d'un fichier WAV au format sauvegarde

Cette catégorie traite de développements récents pour nos vieilles machines, applications, jeux ou démos... Amis programmeurs, c'est ici que vous pourrez enfin devenir célèbres!

Modérateurs : Papy.G, fneck, Carl

Répondre
Zebulon
Messages : 2767
Inscription : 02 nov. 2020 14:03

MPF-I création d'un fichier WAV au format sauvegarde

Message par Zebulon »

Hello. Alors voilà mon titre est pourri et je le changerai si je trouve quelque chose de plus approprié.

Pour entrer dans le vif du sujet, maintenant que mon clone de MPF-I (MPF-1B) fonctionne je réfléchis à optimiser son utilisation. Tapoter des séries de nombres hexadécimaux pour charger des programmes c'est sympa le temps de tester et faire joujou avec les exemples du manuel mais rapidement une certaine lassitude s'installe.

Mon idée serait de pouvoir créer et assembler des fichiers Z80 sur mon PC puis de les charger sur le MPF-I via le port entrée K7 et la procédure standard de chargement Tape Read en les lisant soit depuis mon PC soit depuis mon smartphone.

Le manuel contient une superbe page qui décrit le format d'une sauvegarde sur K7 :
MPF-1_tape_file_format.png
MPF-1_tape_file_format.png (147.16 Kio) Consulté 2599 fois

Le principe serait d'écrire un programme qui à partir d'un fichier binaire contenant le bloc de code Z80, encoderait ce fichier au format sauvegarde avec les synchros, le header et les données, dans un fichier WAV/PCM.

J'ai déjà lu dans plusieurs sujets que plusieurs d'entre-vous maitrisent bien le domaine des ondes sonores, du PCM, etc donc je viens chercher quelques conseils et poser quelques questions (peut-être idiotes) pour me lancer.

J'ai commencé à regarder le format WAV et son header. Je pense que j'ai saisi la chose mais j'ai une question sur un champ du header :
Frequence (4 octets) : Fréquence d'échantillonnage (en hertz) [Valeurs standardisées : 11 025, 22 050, 44 100 et éventuellement 48 000 et 96 000]
La fréquence maximale à reproduire contenue dans mon fichier WAV sera de 2 KHz. De ce que j'ai lu il faudrait au minimum une fréquence d'échantillonnage du double soit au moins 4 KHz pour une bonne reproduction du son. Est-il possible dans ce champ "frequence" de mettre une valeur hors valeurs standardisées ? Telle que 4 KHz ou 16 KHz. Mon souci vient surtout de ces pouièmes induits par le 100 de 44100, le 50 de 22050, etc. Je ne tomberai pas sur des comptes ronds et je devrai de temps en temps rajouter un échantillon en plus pour que la fréquence soit respectée.

Ma seconde question concerne le nombre de bits des échantillons. Sur le papier 1-bit doit suffire (0 ou 1) mais pour simplifier je pense que 8-bits est l'idéal (0 ou 255) c'est juste ?

Merci beaucoup pour votre aide et déminage du terrain.
Dernière modification par Zebulon le 22 août 2022 13:34, modifié 1 fois.
Avatar de l’utilisateur
Silou78
Messages : 382
Inscription : 11 févr. 2017 14:54
Localisation : Yvelines (78)

Re: MPF-I création d'un fichier WAV au format sauvegarde

Message par Silou78 »

Bonjour,

Pour mettre une valeur de fréquence différente des valeurs standard, il faudrait savoir :
1) si le lecteur qui va rejouer le .wav accepte cette valeur,
2) la restitution se fera sans doute sur une fréquence standard plus grande, il faudrait savoir si l'interpolation ne va pas déformer le signal souhaité.
En effet s'il y a par exemple une interpolation linéaire, cela risque de ne pas fonctionner (signal en forme de triangle au lieu d'un signal en créneau).

Pour reproduire un créneau à 2kHz (1 échantillon '1' + 1 échantillon '0'), tu as raison il faut donc au minimum une fréquence d'échantillonnage de 4KHz.

Il faut choisir idéalement un multiple, ou en tout cas une valeur suffisamment grande et adaptée pour rendre le plus pratique possible (le moins complexe) la correspondance du nombre d'échantillons à reproduire pour 1 échantillon du signal K7.

Donc personnellement, je partirai sur une fréquence de 22050Hz en 8bit (mono) pour reproduire le signal K7 souhaité.

Ca fait 132,3 échantillons pour une période de 6ms du signal K7.
1 cycle 2KHz : 6 échantillons '255' + 5 échantillons '0' (légère déformation du rapport cyclique qui n'est pas de 0,5 mais cela ne devrait pas poser de pb).
1 cycle 1KHz : 11 échantillons '255' + 11 échantillons '0'.

Les pouillèmes pouvant être facilement compensés en dupliquant 1 échantillon tous les 440 (pour s'accorder précisément avec la période de 6ms du signal K7).
Sylvain
Daniel
Messages : 17288
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: MPF-I création d'un fichier WAV au format sauvegarde

Message par Daniel »

Mon avis en bref :

- 1 bit suffit pour les échantillons, mais au format .wav il faut un multiple de 8 bits, donc il faut prendre 8.

- 4000 échantillons/seconde suffisent pour une fréquence de 2 kHz, mais ils donneront un signal triangulaire, alors qu'il est théoriquement rectangulaire. C'est peut-être acceptable, mais si on veut des fronts montants et descendants rapides il faut une fréquence plus élevée. La valeur standard des CD (44100 échantillons/seconde) ou 22050 (la moitié) sont des choix possibles. Les professionnels utilisent aussi 48000 et 96000, c'est peut-être plus intéressant pour éviter les arrondis.

- On peut aussi envoyer le signal avec un simulateur de magnétophone comme SDLEP-TFT, dans ce cas on utilise des fichiers .lep sur carte SD, ils ont l'avantage d'être beaucoup moins gros que des fichiers .wav : http://dcmoto.free.fr/bricolage/sdlep-tft/index.html

sdlep-tft_07.jpg
sdlep-tft_07.jpg (70.1 Kio) Consulté 2559 fois
Daniel
L'obstacle augmente mon ardeur.
Zebulon
Messages : 2767
Inscription : 02 nov. 2020 14:03

Re: MPF-I création d'un fichier WAV au format sauvegarde

Message par Zebulon »

Mille mercis à vous Sylvain et Daniel pour vos réponses détaillés. Je vais regarder tout ça.
Zebulon
Messages : 2767
Inscription : 02 nov. 2020 14:03

Re: MPF-I création d'un fichier WAV au format sauvegarde

Message par Zebulon »

Bonjour à tous. J'ai fait une petite percée hier soir. J'avais commencé à expérimenter avec ce code C permettant d'écrire un fichier WAV avec son header à partir d'un buffer pré-rempli. Le code contient quelques coquilles mais vu que mon C est très rouillé ça m'a permis d'éviter le syndrome de la page blanche. J'édite le code avec notepad++ et je compile avec Tiny C Compiler.

Du coup j'ai décomposé le problème et écrit la cascade de fonctions qui permettent de remplir le buffer avec un cycle de tone1k et tone2k, puis d'écrire un bit 0 et 1 à l'aide de ces cycles unitaires, puis enfin d'écrire un octet à base de ces bits.

Pour l'instant je génère un fichier arbitraire qui sonne bien à l'oreille par rapport à ce que j'ai entendu lors de l'activation de la fonction sauvegarde.

Je génère le fichier à 16000 KHz mais c'est paramétrable tant que je reste sur des multiples donc 48000 KHz pourrait être testé rapidement en cas d'échec. Pour les fréquences nécessitant l'apport d'un sample supplémentaire tous les x samples je ferai comme tu proposes Sylvain, j'ajouterai un compteur qui doublera l'écriture du sample tous les x samples.

La lecture du manuel MPF-1 contenant le code source du moniteur est une aide précieuse pour comprendre les mécanismes internes et les rouages du format, notamment le calcul de l'octet de checksum.

Quand tout sera opérationnel je publierai le code source et l'exécutable bien sûr mais soyez indulgent, mon code est moche et pas optimisé avec profusion de boucles et d'appels superflux. On n'est pas sur du MPO du fofo vert... mon PC est surpuissant par rapport à la tâche et j'en profite pleinement, la priorité c'est d'atteindre l'objectif au plus vite.

Donc normalement je commence les tests de lecture ce soir. 8)
Avatar de l’utilisateur
Leraptor06
Messages : 658
Inscription : 15 févr. 2022 10:34
Localisation : Mandelieu

Re: MPF-I création d'un fichier WAV au format sauvegarde

Message par Leraptor06 »

J'adore !!!!!!
J ai hâte de recevoir moi aussi les pcb d Emilio.
Merci Zebulon
Jp
Zebulon
Messages : 2767
Inscription : 02 nov. 2020 14:03

Re: MPF-I création d'un fichier WAV au format sauvegarde

Message par Zebulon »

Ce soir je suis donc passé de la théorie à la pratique et j'avoue que l'ascenseur émotionnel ça fait un peu transpirer. :shock:

En version courte au départ rien ne fonctionne... et à l'arrivée tout marche impeccable. :D

J'ai d'abord copié mon fichier WAV encodé en 16 KHz sur mon smartphone pour le lire sur le MPF-1. Rien... bon je me dis ok le câble est stéréo, il vaudrait mieux un câble mono que j'exhume de mon fatras. Rien... bon je me dis c'est un problème de volume ou le téléphone ne bascule pas bien sur la sortie casque. Essais, manips, essais... rien. :?

Là je me dis si ça se trouve la carte a un défaut. Il faut tester avec un vrai magnétophone. Je met en place tout le bazar, je lance une sauvegarde et résultat un bruit de fond immonde sur la K7... Il y a bien un défaut. Je débranche tout je sors le multimètre et je ne comprend pas les liaisons entre les pattes des embases jack et les contacts sur le jack lui-même. :? :?

Ces embases m'interrogent depuis le début et la réponse finalement est ici. Le montage n'est pas bon ou le modèle d'embase n'est pas bon mais ça ne va pas. :? :? :?

Au final je fini par mettre une patte coupée récupérée lors de l'assemblage pour faire ressort entre un via à la masse et ces deux fameuses pattes en l'air et là bingo le son revient ! :roll:

Je fais donc un test avec mon magnétophone, sauvegarde OK et lecture OK. Ouf. Mais toujours rien avec ce fichu smartphone...

Bon je décide d'aller brancher le MPF-1 directement sur le PC et là il faut pousser le son du lecteur à 100% et le son de Windows à 100% et ça marche enfin ! Re ouf. 8)

Donc il va falloir bricoler un peu le hardware mais côté software c'est plutôt sympathique. Le fichier se charge bien... Bingo. :P

Alors j'ai fait plusieurs essais. Juste à 4 KHz c'est KO total mais dès 8 KHz ça fonctionne, 12, 16 et 48 KHz aussi. Je suis très content car déjà je sais encoder le fichier et le calcul du checksum est bon. 8)

Pour l'instant j'encode un fichier arbitraire programmé en dur donc la prochaine étape va être de lire un fichier binaire en entrée, de calculer les adresses début/fin, le checksum et le pousser dans le buffer.

Vous êtes curieux et je le serais aussi alors je vous attache le fichier .c en cours. Je vous ai prévenu ce n'est pas du Mozart alors ceux qui font du C tous les jours ne l'ouvrez pas. :mrgreen:

Aaaaah je l'ai renommé en txt et c'est même pire que je ne pensais car le code de départ était tabulé à la barre d'espace, puis passage sous notepad++ avec des vraies tabulations... une vraie boucherie. :mrgreen:
Pièces jointes
mpf1waver.c.txt
(5.73 Kio) Téléchargé 57 fois
Avatar de l’utilisateur
Leraptor06
Messages : 658
Inscription : 15 févr. 2022 10:34
Localisation : Mandelieu

Re: MPF-I création d'un fichier WAV au format sauvegarde

Message par Leraptor06 »

Zebulon je t adore.
Tu a animé ma fin de soirée comme les ventes de Fred34 on animé cet été. Je vais y prendre goût c'est sur et suivre tes aventures. En attendant mon pcb qui se fabrique enfin.
A demain donc
Jp
Zebulon
Messages : 2767
Inscription : 02 nov. 2020 14:03

Re: MPF-I création d'un fichier WAV au format sauvegarde

Message par Zebulon »

Merci beaucoup c'est vrai que c'était un peu épique hier soir. J'espérais vraiment que ça fonctionne mais j'ai eu un peu peur d'avoir un gros problème sur la carte.

Finalement rien de très grave mais je vais approfondir le fonctionnement de ces embases jack. Je les ai choisies car elles sont les plus proches de celles d'origine mais il y avait peut être un modèle plus simple à faire fonctionner. Enfin rien de méchant.

Du coup tu as pu lancer le batch avec Emilio ?
Avatar de l’utilisateur
Leraptor06
Messages : 658
Inscription : 15 févr. 2022 10:34
Localisation : Mandelieu

Re: MPF-I création d'un fichier WAV au format sauvegarde

Message par Leraptor06 »

Salut,
Oui c'est payé et en fabrication.
Sur son blog il y des articles intéressants sur des récréations de clones de zx81 et spectrum qui se vendaient au Brésil dans les années 80.
Merci
Jp
Zebulon
Messages : 2767
Inscription : 02 nov. 2020 14:03

Re: MPF-I création d'un fichier WAV au format sauvegarde

Message par Zebulon »

Génial le MPF-1 arrive en force. :wink:

Oui j'ai vu ses autres re-créations, sacré travail. Oui d'ailleurs pour le MPF-1 du moins la ROM était légèrement différente car il s'agissait du CEDM-80.
Zebulon
Messages : 2767
Inscription : 02 nov. 2020 14:03

Re: MPF-I création d'un fichier WAV au format sauvegarde

Message par Zebulon »

Suite à l'échange d'hier sur le chargement de fichiers depuis le PC vers le MPF-1 j'ai bien progressé sur le programme hier soir. Désormais je lis le fichier binaire en entrée, j'en calcule la longueur et le checksum pour définir les champs de l'entête (pour l'instant je présuppose que le fichier débute en 1800h) puis je l'encode dans le buffer octet par octet avant d'écrire le tout dans le fichier wav.

J'essaie de peaufiner un semblant de décodage de la ligne de commande pour prendre au minimum le nom du fichier binaire à lire, le nom du fichier wav à écrire et le nom logique du fichier tel que demandé par le MPF-1, par défaut 1234h.

Encore une soirée de travail et je publierai le code source et l'exe. :wink:
Répondre