raphnet.net banner
This page is also available in English
Électronique > Module de son SNES sur PC
Résumé | Shéma | Photos | Logiciel | Ensuite | Gallerie | Musique | Avertissement
Résumé [cacher]
A l'intérieur d'un Snes, il y a un module dédié à la production du son. Le module de son est composé d'un processeur (le SPC700), de mémoire (64Kb), d'un dsp et d'un convertisseur digital/analogue. Le cpu principal du Snes communique avec le module de son via 4 ports.

Voici une page(anglaise) avec photos parlant du module: How sound on the SNES works

Les fichiers de musique de Snes en format .spc sont en fait des sauvegarde d'état des composantes du module de son, comme on peut le faire avec le Snes au complet dans zsnes avec F2, mais dans ce cas ci, seulement la memoire du module, les registre du spc700 et du dsp sont sauvegardés. Cela fonctionne car en general, les jeux chargent un programme dans le module de son qui une fois démarré, s'occupe de faire jouer la musique, et de changer de pièce lorsqu'il en recoit l'ordre.

On peux faire jouer des .spc avec un spc player(programme ou plugin). Un spc player n'est qu'un émulateur de Snes simplifié (son seulement). Depuis longtemps j'espérais un jour trouver un moyen de pouvoir faire jouer la musique en utilisant un module de son directement, pour que les pièces soient reproduites de manière parfaitement fidèle à aux originaux. (Bien sur les émulateurs peuvent faire mieux en utilisant de plus hautes fréquences et meilleurs algorithmes de rééchantillonnage et de mixage, mais ici il est question d'authenticité, et il ne faut pas oublier le "Cool factor")

J'ai trouvé la solution sur le site de caitsith2. Il a trouvé le moyen brancher un module de son sur un port parallel, et a fait un petit programme pour uploader des .spc vers le module et les faire jouer.


goto top Retour en haut



Shéma [cacher]
Voici le plan:
schematic
Et voici un fichier contenant le "pinout" du module de son: APU_pinout.txt

Tout ces fichiers proviennent du fichier APU Interface.zip que vous pouvez télécharger du site de caitsith2.

Si vous construisez ce circuit, contactez moi, j'aimerais avoir des photos à rajouter dans la gallerie d'images.

Pour l'alimentation, vous pouvez utiliser un régulateur lm7805 pour obtenir du 5 volts à partir d'une tension plus élevée. L'alimentation 'Digital VCC' du module de son consomme 62mA en temps normal, et 36mA lorsque le signal reset est bas. L'alimentaion 'Audio VCC' consomme 1.3mA en tout temps.

Un utilisateur m'a rapporté qu'il avait de la misère à faire fonctionner le montage jusqu'a ce qu'il branche le chassis de l'APU au ground. C'est une excellente idée.

goto top Retour en haut



Photos [cacher]
inside J'ai assemblé ce projet dans une boite de plastique. Dans la partie de gauche, on peux voire le petit circuit sur lequel est installé le 74ls32 et le db25. Pour la partie de droite, voir l'image suivante.

cover On peux voir ici le connecteur du module de son (dessoudé d'un Snes), les sorties audio RCA et écouteur 1/4, le led indiquant que le circuit est sous tension, et 2 leds et transistors reflétant l'état des signal read et write du module de son.

Sur les connecteurs rca, j'ai mis de condensateurs de 1uf pour éliminer l'offset DC (environ 1.2 volts si je me rappel correctement) du module de son. La prise d'écouteurs utilise les resistances de 50 ohms du plan d'origine, mais cela ne fonctionne pas bien avec tout les écouteurs. C'est à cause de l'offset DC, mais les petit condensateurs empirentla situation :( Il faudrait rajouter un mini amplificateur...

outside Une fois le couvercle refermé voici à quoi cette jolie boite à musique ressemble.

goto top Retour en haut



Logiciel [cacher]
J'ai tout d'abord tenté d'utiliser le logiciel de Caitsith2, mais cela n'a pas fonctionné. Après avoir regardé à quoi ressemblait les signaux avec un oscilloscope, j'ai déduit que l'ordinateur ne laissait pas asser de temps passer pour permettre aux transistions logique de se faire(cela doit dépendre de la conception du port parallel). Heureusement, le code source était disponible, et en rajoutant des delais au bons endroits, tout a bien fonctionné.

L'interface graphique est écrite en VB, le bas niveau en C/C++ dans une dll. J'ai du modifier et recompiler la dll. Si vous avec des erreurs tel que "Error Loading SPC", essayez ma version modifiée après vous être assuré que tout est bien assemblé.

Voici la dll: APU_DLL.dll et voici le fichier source que j'ai modifié: apuplay.c.

Je ne voulais pas être contraint d'utiliser windows pour me servir du module de son, alors après m'être assuré que tout fonctionnait bien, j'ai adapté le code de la dll pour linux (simplement un appel a iopl pour pouvoir faire des in/out sur des ports, et ajout d'un macro pour les in/out), et j'ai réécrit le code VB en C.(ouch..)

Le code source de mon programme est disponible ici:
DateFichierCommentaires
30 Mars 2005 apu_linux-1.03.tar.gz
  • Ajout du support ppdev (accès au port parallel depuis user-space de maniere portable. Pas nécéssaire d'être root)
  • Plugin xmms (avec ppdev seulement)
  • Version en ligne de commande maintenant avec couleur
  • Option -d pour afficher de l'information de deboggage
  • Le 'status line' est maintenant actif par défaut. Désactivable avec l'option -s
  • Le code est maintenant sous license GPL
6 Mars 2005 apu_linux-1.02.tar.gz Cette versoin peut etre compilée avec DJGPP pour faire un exécutable utilisable sous DOS/win9x (ne fonctionne pas avec 2000/NT/XP car ce programme accède directement à des ports d'E/S. Ceci pourra peut-être vous aider: PortTalk - A Windows NT I/O Port Device Driver ).

Voici une version précompilée pour DOS: apuplay.zip (59k)
5 Mars 2005 apu_linux-1.01.tar.gz Cette version n'a aucune différence de fonctionalités avec la précédente. J'ai seulement clarifié le code servant a charger et adapter le .spc (la partie traduite de VB) en utilsant des #define au lieu de valeurs hexadecimales dans le code, et j'ai rajouté des commentaires expliquant les démarches nécéssaires.
Novembre 2004 apu_linux.tar.gz Un simple outil en ligne de commande qui prends un .spc donné en paramètre et l'upload dans le module de son en utilisant l'adapteur démontré plus haut. Il supporte partiellement les tag ID666, arrete la musique apres le bon temps (le temps du tag ou spécifié), affiche le titre et le temps restant.

goto top Retour en haut



Ensuite [cacher]
Je n'ai pas encore fini de travailler sur ce projet. Voici quelques idées futures:
  • Plugin xmms pour faire jouer des .spc avec le module de son
  • Rendre le module plus indépendant du PC. Présentement, si on l'alimente avec une pile, un coup la musique démarrée on peux le débrancher du PC et l'apporter ailleurs. J'aimerais faire quelque chose de mieux, dans le genre de ce SID player, mais plus portable.
  • Étudier la possibilité de modifier snes9x ou Zsnes pour qu'ils se servent du module plutot que d'émuler le son.

goto top Retour en haut



Gallerie [cacher]
Je destine cette section à contenir des photos de ce projet réalisé par d'autres personnes.

Mai 2005: Christopher Cox m'a fait parvenir 2 images. Il a réalisé ce projet à l'intérieur d'une joyeuse boîte à lunch!


Mars 2006: Jon Batt m'a fait parvenir 4 images:


Janvier 2008: Matthew m'a fait parvenir ces 5 photos:

Il a aussi mis un vidéo sur youtube!

goto top Retour en haut



Musique [cacher]
Voici l'enregistrement d'une pièce jouée par ce projet: aquatic_ambiance.ogg

Les meilleurs endroits ou l'on peux télécharger des trames sonores de jeux au complet en format .spc sont:
snesmusic.org
L'archive de spc chez zophar.

goto top Retour en haut



Avertissement [cacher]
Je ne saurais être tenu responsable pour les dommages que la mise en oeuvre des instructions présentées sur cette page pourraient causer à votre équipement ou à vous-même. Aussi, je ne donne aucune garantie quant à l'exactitude des informations et à leur fonctionnement. Notez toutefois que les procédures ci-haut ont fonctionnées sans aucun problème pour moi.



goto top Retour en haut



Visitez d'autres section du site:

Page principale (frames) | Section Électronique | Manette SNES sur un PC | Ampli 100 Watts | Lecteur de carte mémoire PSX | Haut voltage et arcs électriques | Transformateur d'isolation, Variac, etc.. | Utilisation de Tubes Nixie | VGA pour Dreamcast | Show de laser | Oscilloscope à lampes | Controleur de Stepper | Reset à distance pour NES | PCB chauffant | Photos de mes projets | Interface audio téléphonique | Décodeur de tonalités DTMF | Afficheur téléphonique pour PC | Cable VGA "Sync-On-Green" | Manette de style arcade pour Snes/PC | Module de son SNES sur PC
Les marques de commerce utilisées dans cette page appartiennent à leurs propriétaires respectifs.
Si vous avez des questions ou de commentaires, contactez moi.
Codé manuellement avec edited with VIM