TITRE: ENREGISTREMENT DE SONS ANALOGIQUES AVEC CARTES DE TYPE SB/SB PRO R‚sum‚.............: programme permettant d'enregistrer des sons analogiques … partir d' un micro sur toute carte compatible SoundBlaster ou SoundBlaster Pro et avec oscilloscope temps-r‚el … l'‚cran. Mots-cl‚...........: Echantillon - Interruption - Timer - DSP - ADC - Mixer Mat‚riel utilis‚...: PC 486DX33 + SB Pro II + micro + TP7 Champ d'apllication: Tout PC (avec carte compatible SB + micro) et langage I) INTRODUCTION Dans un pr‚c‚dent article nous avions vu comment jouer des ‚chantillons digitaux sur toute carte compatible SoundBlaster ou bien sur le Speaker interne. Cette fois-ci on ‚tudie l'‚tape pr‚c‚dent cette phase, et qui consiste donc … pouvoir enregistrer des sons analogiques (… partir d'un micro) et de les sauvegarder (en tant qu'‚chantillons digitaux), … condition toutefois de poss‚der une carte compatible SoundBlaster ou SoundBlaster Pro; de plus, l'‚cran graphique gŠrera en temps-r‚el un oscilloscope qui pourra ˆtre ‚tudi‚ … titre indicatif ou p‚dagogique. II) PRINCIPES a) G‚n‚ralit‚s En reprenant le principe utilis‚ pour le programme SBDigit d'un pr‚c‚dent article, les donn‚es seront cette fois lues sur l'ADC (Analogic to Digital Converter, et donc … partir du micro) … fr‚quence constante … l'aide de la puce Timer 8253. La mini interface graphique en mode 13h (320x200 en 256 couleurs) contient juste les quelques routines (‚crites entiŠrement en Pascal) de base utiles au programme; comme le but de cet article est avant tout l'aspect sonore, l'environnement et la r‚solution graphique ont ‚t‚ volontairement simplifi‚s. Il est … noter que l' oscilloscope temps-r‚el n'est pas actualis‚ dans la routine sous interruption, mais plut“t par polling … l'int‚rieur du bloc de saisie du clavier. En effet, la premiŠre m‚thode aurait cr‚‚ une petite surcharge … la routine sous interruption (car l'actualisation de l'‚cran prend du temps machine et chaque IT non prise en compte par la routine sous interruption d‚grade alors la fr‚quence d'enregistrement) ne permettant pas alors un enregistrement convenable … des fr‚quences ‚lev‚es; la deuxiŠme m‚thode (celle retenue) par contre ne ralentit pas l'enregistrement et actualise l'oscilloscope … l'‚cran en avant-plan par saisie … la vol‚e d'informations (les octets lus de l'ADC) … sa propre cadence (des donn‚es peuvent alors ˆtre rat‚es mais ce n'est pas grave). On constatera donc que si la fr‚quence d'enregistrement est trŠs ‚lev‚e, c'est alors l'oscilloscope qui sera ralentit, ce qui est d'ailleurs toujours souhaitable! b) l'ADC Au niveau des caract‚ristiques techniques, on constate qu'en mode direct (sans DMA) l'ADC permet d'enregistrer des sons de: - 4KHz … 13KHz sur SB/SB2/SBMCV (la SBMCV est con‡ue pour les bus MCA) - 4KHz … 23KHz sur SB Pro/SB Pro II La fa‡on de programmer l'ADC est aussi simple que celle du DAC. Le port de commande de la SoundBlaster ‚tant en 2xCh (2x0h est le port de base o— se trouve configur‚e la carte), il suffit de lui pr‚ciser la commande 20h (accŠs … l'ADC en mode direct) avant chaque lecture de donn‚e. DŠs lors, il est possible de lire la donn‚e sur le port de donn‚es situ‚ en 2xAh; attention! avant chaque lecture de donn‚e, la r‚action de la carte … la commande 20h implique de tester si le bit 7 du registre d'‚tat (2xEh) est … 1 (pour ne pas lire une valeur qui n'est pas encore arriv‚e...). Voil…, c'est tout! Le principe est le mˆme que dans le programme SBDigit d'un pr‚c‚dent article o— il ‚tait question du DAC. c) la puce Mixer Comme dans l'article sur NonaLiza (et plus particuliŠrement NonaPlay), rappelons que la puce Mixer est propre aux SoundBlaster Pro (et SoundBlaster 16). Le port de commande est situ‚ en 2x4h, et le port de donn‚es/lecture en 2x5h. On peut tester la pr‚sente d'une telle puce en lisant une valeur pr‚c‚demment ‚crite … un registre donn‚ (par exemple le registre 22h qui d‚finit le Master Volume). Attention! ceci ne marche pas avec une SoundBlaster 16 (elle n'est pas compatible avec la SoundBlaster Pro au niveau des registres des volumes); le Master Volume des SoundBlaster 16 est situ‚ aux registres 30h ET 31h. En effet, sur les SoundBlaster Pro les valeurs des volumes gauche et droit allaient de 0 … 15 (2 x 4 bits=1 octet), mais sur les SoundBlaster 16 les valeurs vont de 0 … 31 (ce qui implique l'utilisation de 2 registres (2 x 1 octet). Le programme de cet article ne se contente que de tester la pr‚sence d'une SoundBlaster ou d'une SoundBlaster Pro; les lecteurs d‚sirant tester la pr‚sence d'une SB 16 doivent alors d'abord tester la pr‚sence d'une SB, PUIS d'une SB 16 (registres 30h et 31h de la puce Mixer), et finalement d'une SB Pro (registre 22h). La puce Mixer possŠde deux registres qui vont particuliŠrement nous ˆtre utiles: - le registre 0Ah (volume micro) - le registre 0Ch (type d'entr‚e pour l'ADC et choix du filtre). Les bits 0 … 2 du registre 0Ah d‚finissent la valeur du volume d'entr‚e du micro (rien=0 et maximum=7). Les bits 1 et 2 du registre 0Ch pr‚cisent le type d'entr‚e (Line-In, CD Audio, Micro) pour l'ADC, en sachant que Micro (d‚faut)=00b ou 10b, CD Audio=01b, et Line-In=11b. Les bits 3 … 5 servent … d‚finir un filtre en sachant que Filtre Haut (d‚faut)=0x0b, Filtre Bas=0x1b, et Sans Filtre=1xxb. Si par exemple on choisit d'enregistrer … partir du CD Audio avec un Filtre Bas, il faudra pr‚ciser au registre 0Ch la valeur XX0x101X (c-…-d 0Ah, les X repr‚sentent les bits non utilis‚s et les x les bits non significatifs). Dans ce cas, le r‚glage du volume du micro (registre 0Ah) n'a aucun int‚rˆt. Dans le cas qui nous pr‚occupe, il faut choisir le Micro comme type d'entr‚e, sans filtre, et r‚gler son volume au maximum. Ceci s'effectue en pr‚cisant donc la valeur XX1xx00X (c-…-d 20h) en 0Ch et 07h en 0Ah. Que gagne t-on de plus avec une puce Mixer? Et bien, maintenant le son du micro est m‚lang‚ en circuit direct … l'amplificateur (sans for‡‚ment enregistrer!). Ceci n'est pas possible sur une SoundBlaster normale, et il n'est donc pas possible d'avoir un retour direct de ce qui passe par le Micro (car il n'y a pas de puce Mixer...); seule l'animation de l'‚cran permet alors de se rendre compte que l'ADC fait bien son travail. Que ce soit dans un cas comme dans l'autre, les donn‚es ne peuvent pas ˆtre transmises en sortie … l'amplificateur de la carte par la voie normale du DSP sinon rien ne fonctionnerait (c'est normal puisqu'on traite un signal en entr‚e et non pas en sortie!); pour cela il faut donc d‚sactiver la sortie vers l'amplificateur via le DSP en pr‚cisant la commande D3h au port 2xCh. J'avais quand mˆme essay‚ d'obtenir le retour du son du micro en direct sur une SB normale en d‚sactivant l'amplificateur pour lire la donn‚e et tout de suite aprŠs en activant l'amplificateur pour ‚mettre la donn‚e, et ce … chaque appel de la routine sous interruption; en fait, le rendu est d‚cevant (on ne discerne pratiquement pas le son car la d‚sactivation/activation intempestive de l'amplificateur g‚nŠre un parasite non n‚gligeable (par exemple … 13KHz, avec 13000 d‚sactivations/activations par seconde, il est difficile de reconnaŒtre les donn‚es r‚elles dans le brouhaha constant caus‚ par tous ces parasites!). III) LE PROGRAMME: SB_Enreg Voici finalement le descriptif du programme d'enregistrement. Il se pr‚sente principalement sous la forme d'un oscilloscope graphique avec une ligne contenant les commandes disponibles. La grande ligne centrale indique un silence continu; dŠs qu'un ‚v‚nement sonore est suffisament audible, cette ligne se transforme en une succession de courbes diverses mod‚lisant le son ainsi capt‚. Les donn‚es sonores sont lues en permanence … partir du micro … la fr‚quence pr‚cis‚e dans le programme (11KHz pour une SB et 16KHz pour une SB Pro). Les diff‚rentes touches op‚rationnelles (en majuscules ou minuscules) sont: - M pour arche: l'enregistrement d‚marre alors r‚ellement jusqu'… ce que le tampon soit effectivement plein (64999 octets, c-…-d environ 1 segment … 0.5Ko prŠs, et pour rester compatible avec le programme SBDigit) ou que l'Arrˆt ait ‚t‚ demand‚. - A pour rrˆt.: l'enregistrement est arrˆt‚. Il est alors possible de sauvegarder ou de d‚marrer un autre enregistrement. - S pour auver: le tampon de la s‚quence enregistr‚e est sauvegard‚ sur disque sous l'appellation SB_ENREG.xxx ou xxx est un nombre de 000 … 999 qui est incr‚ment‚ … chaque nouvelle sauvegarde lors d'une mˆme session (attention! en cas de nouvelle session du programme, le compteur recommence … partir de 000 et efface les ‚ventuelles sauvegardes pr‚c‚dentes de mˆme nom). Pendant la phase de sauvegarde l'oscilloscope est momentan‚ment d‚sactiv‚. A tout moment, l'appui de la touche ESC permet de terminer la session courante en quittant le programme. Voici le texte du programme: SE REPORTER ICI AU SOURCE DU PROGRAMME SB_ENREG.PAS IV) AMELIORATIONS Toujours le mˆme sou‡i... il est effectivement possible d'optimiser le code (en assembleur par exemple?), d'activer tel ou tel filtre en mode interactif, etc... Il serait ‚galement int‚ressant de pouvoir enregistrer des sons sans limitation de taille (via l'XMS ou en accŠs disque continu), et pourquoi pas en choisissant un format connu de sauvegarde (VOC, WAV, etc...)? Et bien s–r, de remanier complŠtement la structure du programme pour permettre le traitement de l'ADC en mode DMA (certes, un peu plus compliqu‚...)! V) CONCLUSION On a montr‚ dans cet article comment il ‚tait possible d'enregistrer des sons analogiques … partir d'un micro situ‚ sur des cartes de type SoundBlaster et SoundBlaster Pro. De ce fait, on a briŠvement expliqu‚ le fonctionnement de l'ADC et d‚crit certaines fonctionnalit‚s de la puce Mixer. le 25/05/94 Patrick RUELLE 43, av. de Grande Bretagne 98000 Monaco Principaut‚ de Monaco