[MZ-SD2CMT] Les fichiers WAV peuvent être lu maintenant quelque soit la taille du fichier.

C'est la catégorie reine de l'ordinophile, 8 bits et pas un de plus!
Single board ou bus S-100 acceptés.

Modérateurs : Carl, Papy.G, fneck

Répondre
hlide
Messages : 590
Enregistré le : 29 nov. 2017 10:23

[MZ-SD2CMT] Les fichiers WAV peuvent être lu maintenant quelque soit la taille du fichier.

Message par hlide » 16 sept. 2018 00:29

Initialement, ce projet était basé sur SDLEP-READER mais a très vite changé pour s'adapter aux particularité des MZs et s'affranchir des limitations inhérentes au SDLEP-READER.

- Lecture du SD même avec la fragmentation de la FAT.
- Parallélisation des tâche de lecture et des mises à jour IHM grâce à l'utilisation d'un PWM pour créer la pulsation par voie hardware.

Passer du LEP au WAV est finalement assez facile à faire : il suffit de lire les échantillons jusqu'à obtenir la durée de la pulsation après que la pulsation précédente ait été programmée et lancée. Il s'avère que le programe a suffisamment le temps de lire les échantillons de la pulsation suivante avant que la pulsation précédente se termine. Je triche en disant cela : disons que seule la période du signal haut est critique pour les MZs et donc il suffit de ne lancer la pulsation suivante qu'après avoir lu ses périodes même si la période de lecture dépasse la période totale (signal haut puis bas) de la pulsation précédente.

Résultat, avec un Arduino, on peut facilement lire du WAV à 44.5 KHz car il n'y a pas besoin de manipuler la valeur d'un sortie à cette fréquence.

Si l'Arduino peut s'adapter à la fréquence indiquée en entête du WAV, je me suis quand même limité à du 8-bit en mono.

Après, est-ce que c'est possible d'adapter la lecture de WAV sur SDLEP-READER, c'est difficile à dire. Peut-être que c'est possible en utilisant le PWM hardware de l'Arduino pour pouvoir absorber la lecture des échantillons pendant l'émission d'un signal haut ou bas via le PWM hardware. Mais il faudra peut être un double tampon avec une interruption sur le PWM pour relancer une impulsion et dans la boucle un remplissage des buffers en avance.

Répondre