home *** CD-ROM | disk | FTP | other *** search
/ DP Tool Club 15 / CD_ASCQ_15_070894.iso / news / 569 / sbal_kit / sbenreg / sb_enreg.txt < prev    next >
Text File  |  1994-05-25  |  11KB  |  205 lines

  1.  
  2.  TITRE: ENREGISTREMENT DE SONS ANALOGIQUES AVEC CARTES DE TYPE SB/SB PRO 
  3.  
  4.  Résumé.............: programme permettant d'enregistrer des sons analogiques 
  5.                       à  partir  d' un   micro  sur  toute  carte  compatible 
  6.                       SoundBlaster  ou  SoundBlaster Pro et avec oscilloscope 
  7.                       temps-réel à l'écran.
  8.  Mots-clé...........: Echantillon - Interruption - Timer - DSP - ADC - Mixer
  9.  Matériel utilisé...: PC 486DX33 + SB Pro II + micro + TP7
  10.  Champ d'apllication: Tout PC (avec carte compatible SB + micro) et langage
  11.  
  12.  
  13.  I) INTRODUCTION
  14.  
  15.         Dans   un  précédent article   nous  avions  vu   comment  jouer  des 
  16.  échantillons  digitaux  sur toute carte  compatible SoundBlaster ou bien sur
  17.  le Speaker interne.  Cette fois-ci  on étudie l'étape précédent cette phase, 
  18.  et qui consiste donc  à pouvoir  enregistrer  des sons analogiques (à partir
  19.  d'un micro) et  de  les  sauvegarder (en tant  qu'échantillons digitaux),  à 
  20.  condition  toutefois  de  posséder  une  carte  compatible  SoundBlaster  ou
  21.  SoundBlaster  Pro;  de  plus,  l'écran  graphique gèrera  en  temps-réel  un
  22.  oscilloscope  qui pourra être étudié  à titre indicatif ou pédagogique. 
  23.  
  24.  
  25.  II) PRINCIPES
  26.  
  27.  a) Généralités
  28.  
  29.         En reprenant  le principe  utilisé  pour  le  programme  SBDigit d'un
  30.  précédent article,  les données seront  cette fois lues sur  l'ADC (Analogic 
  31.  to Digital Converter,  et donc  à partir  du micro)  à fréquence constante à
  32.  l'aide  de la  puce Timer 8253.  La  mini  interface  graphique  en mode 13h
  33.  (320x200  en 256 couleurs)  contient  juste  les  quelques routines (écrites
  34.  entièrement en Pascal)  de base  utiles  au programme;  comme  le but de cet
  35.  article  est  avant tout  l'aspect sonore,  l'environnement et la résolution
  36.  graphique   ont  été  volontairement  simplifiés.   Il  est   à  noter   que 
  37.  l' oscilloscope  temps-réel   n'est  pas  actualisé  dans  la  routine  sous
  38.  interruption,  mais  plutôt  par  polling  à  l'intérieur  du bloc de saisie
  39.  du clavier.  En effet,  la première méthode aurait créé une petite surcharge 
  40.  à  la routine  sous interruption (car  l'actualisation  de l'écran  prend du
  41.  temps  machine  et  chaque  IT  non  prise  en compte  par  la routine  sous
  42.  interruption  dégrade alors  la fréquence  d'enregistrement)  ne  permettant 
  43.  pas alors un enregistrement convenable à des fréquences élevées; la deuxième 
  44.  méthode (celle  retenue)  par  contre  ne  ralentit pas  l'enregistrement et 
  45.  actualise  l'oscilloscope  à  l'écran  en  avant-plan  par saisie à la volée 
  46.  d'informations (les octets lus  de l'ADC) à  sa propre  cadence (des données 
  47.  peuvent alors être ratées  mais ce n'est pas grave).  On constatera donc que 
  48.  si la fréquence d'enregistrement est très élevée, c'est alors l'oscilloscope 
  49.  qui sera ralentit, ce qui est d'ailleurs toujours souhaitable!
  50.  
  51.  
  52.  b) l'ADC
  53.  
  54.         Au niveau  des caractéristiques  techniques,  on  constate qu'en mode
  55.  direct (sans DMA) l'ADC permet d'enregistrer des sons de:
  56.  
  57.  - 4KHz à 13KHz sur SB/SB2/SBMCV (la SBMCV est conçue pour les bus MCA)
  58.  - 4KHz à 23KHz sur SB Pro/SB Pro II
  59.  
  60.         La façon  de programmer  l'ADC  est  aussi  simple  que celle du DAC.
  61.  Le port  de commande  de la SoundBlaster  étant en 2xCh (2x0h est le port de
  62.  base  où  se trouve  configurée  la carte),  il suffit  de lui  préciser  la 
  63.  commande 20h (accès à l'ADC en mode direct)  avant chaque lecture de donnée.
  64.  Dès lors,  il est possible de lire la donnée sur le port de données situé en 
  65.  2xAh; attention!  avant chaque lecture de donnée,  la réaction de la carte à  
  66.  la commande 20h implique de tester si le bit 7 du registre d'état (2xEh) est 
  67.  à 1 (pour ne pas lire  une valeur qui  n'est pas encore arrivée...).  Voilà,
  68.  c'est tout!  Le principe  est le  même  que  dans  le programme SBDigit d'un
  69.  précédent article où il était question du DAC.
  70.                                                     
  71.  
  72.  c) la puce Mixer
  73.  
  74.         Comme  dans  l'article  sur   NonaLiza  (et   plus   particulièrement 
  75.  NonaPlay),  rappelons  que  la  puce  Mixer  est propre aux SoundBlaster Pro 
  76.  (et SoundBlaster 16).  Le port de commande  est situé en 2x4h, et le port de
  77.  données/lecture en 2x5h.  On peut  tester  la  présente  d'une telle puce en
  78.  lisant  une valeur  précédemment écrite  à un registre donné (par exemple le 
  79.  registre 22h  qui définit le Master Volume).  Attention!  ceci ne marche pas
  80.  avec une SoundBlaster 16 (elle n'est pas compatible avec la SoundBlaster Pro 
  81.  au niveau des registres des volumes);  le Master Volume  des SoundBlaster 16
  82.  est situé aux registres 30h ET 31h. En effet,  sur les  SoundBlaster Pro les 
  83.  valeurs des volumes gauche et droit allaient de 0 à 15 (2 x 4 bits=1 octet),
  84.  mais sur les  SoundBlaster 16  les valeurs  vont de  0 à 31 (ce qui implique 
  85.  l'utilisation de  2 registres (2 x 1 octet).  Le programme de cet article ne 
  86.  se  contente   que   de   tester   la  présence  d'une SoundBlaster ou d'une 
  87.  SoundBlaster Pro;  les  lecteurs  désirant  tester  la  présence d'une SB 16 
  88.  doivent  alors  d'abord  tester  la  présence  d'une  SB,  PUIS  d'une SB 16 
  89.  (registres  30h  et  31h  de  la  puce Mixer),  et finalement  d'une  SB Pro 
  90.  (registre 22h). 
  91.  
  92.         La puce Mixer possède  deux registres qui vont  particulièrement nous
  93.  être utiles: 
  94.  
  95.  - le registre 0Ah (volume micro)
  96.  - le registre 0Ch (type d'entrée pour l'ADC et choix du filtre).
  97.  
  98.         Les bits  0 à 2  du  registre  0Ah  définissent  la valeur  du volume
  99.  d'entrée du micro (rien=0 et maximum=7). 
  100.  
  101.         Les bits  1 et 2 du registre 0Ch précisent le type d'entrée (Line-In,
  102.  CD Audio, Micro)  pour  l'ADC,  en  sachant  que  Micro (défaut)=00b ou 10b, 
  103.  CD Audio=01b,  et Line-In=11b.  Les bits  3 à 5  servent à définir un filtre 
  104.  en    sachant    que    Filtre Haut (défaut)=0x0b,    Filtre Bas=0x1b,    et 
  105.  Sans Filtre=1xxb. 
  106.  
  107.         Si par exemple on choisit d'enregistrer  à partir du CD Audio avec un
  108.  Filtre Bas,  il faudra  préciser  au registre 0Ch  la valeur XX0x101X (c-à-d 
  109.  0Ah,  les X  représentent  les  bits  non  utilisés  et  les x  les bits non 
  110.  significatifs).  Dans  ce cas,  le réglage du volume du micro (registre 0Ah) 
  111.  n'a aucun intérêt.  Dans le cas qui nous préoccupe, il faut choisir le Micro
  112.  comme type d'entrée,  sans filtre,  et  régler  son volume au maximum.  Ceci
  113.  s'effectue  en précisant donc la valeur  XX1xx00X (c-à-d 20h) en 0Ch et  07h 
  114.  en 0Ah.
  115.  
  116.         Que gagne t-on de plus  avec une puce Mixer?  Et bien,  maintenant le
  117.  son du micro est mélangé en circuit direct à l'amplificateur (sans forçément
  118.  enregistrer!).  Ceci  n'est pas possible  sur une  SoundBlaster normale,  et
  119.  il n'est donc  pas possible d'avoir  un retour direct de ce qui passe par le
  120.  Micro (car  il n'y a pas de puce Mixer...);  seule  l'animation  de  l'écran 
  121.  permet alors de  se rendre compte  que l'ADC fait bien  son travail.  Que ce
  122.  soit  dans  un  cas  comme  dans l'autre,  les données  ne peuvent  pas être 
  123.  transmises en sortie  à l'amplificateur  de la carte par  la voie normale du
  124.  DSP sinon rien ne fonctionnerait (c'est normal puisqu'on traite un signal en 
  125.  entrée et non pas en sortie!);  pour cela  il faut donc désactiver la sortie
  126.  vers l'amplificateur  via le DSP  en précisant la commande D3h au port 2xCh.
  127.  J'avais quand même essayé  d'obtenir le retour du son du micro en direct sur
  128.  une SB normale en désactivant l'amplificateur pour lire la donnée et tout de
  129.  suite  après  en  activant  l'amplificateur  pour émettre la donnée, et ce à 
  130.  chaque appel de la routine sous interruption; en fait, le rendu est décevant
  131.  (on  ne  discerne  pratiquement pas  le son  car la désactivation/activation 
  132.  intempestive  de  l'amplificateur  génère  un parasite  non négligeable (par 
  133.  exemple à 13KHz,  avec 13000 désactivations/activations par seconde,  il est 
  134.  difficile de reconnaître les données réelles dans le brouhaha constant causé 
  135.  par tous ces parasites!).
  136.               
  137.  
  138.  III) LE PROGRAMME: SB_Enreg
  139.  
  140.         Voici finalement le descriptif  du programme d'enregistrement.  Il se
  141.  présente principalement  sous la forme  d'un oscilloscope graphique avec une
  142.  ligne contenant les commandes disponibles.
  143.  
  144.         La  grande  ligne  centrale  indique  un silence  continu;  dès qu'un
  145.  événement sonore est  suffisament audible,  cette ligne se transforme en une
  146.  succession  de courbes  diverses modélisant le son ainsi capté. 
  147.  
  148.         Les données sonores sont lues  en permanence  à partir  du micro à la
  149.  fréquence  précisée  dans le programme (11KHz pour une SB  et 16KHz pour une
  150.  SB Pro).   Les  différentes   touches   opérationnelles (en   majuscules  ou
  151.  minuscules) sont:
  152.  
  153.  - M pour <M>arche: l'enregistrement  démarre alors réellement jusqu'à ce que
  154.                     le tampon  soit  effectivement plein (64999 octets, c-à-d 
  155.                     environ   1  segment   à   0.5Ko  près,  et  pour  rester 
  156.                     compatible avec le programme SBDigit)  ou que l'Arrêt ait 
  157.                     été demandé.
  158.  
  159.  - A pour <A>rrêt.: l'enregistrement   est  arrêté.   Il  est  alors possible 
  160.                     de sauvegarder ou de démarrer un autre enregistrement.
  161.  
  162.  - S pour <S>auver: le tampon  de la séquence  enregistrée est sauvegardé sur
  163.                     disque  sous  l'appellation  SB_ENREG.xxx  ou  xxx est un
  164.                     nombre de 000 à 999 qui est incrémenté  à chaque nouvelle
  165.                     sauvegarde lors  d'une même session (attention! en cas de 
  166.                     nouvelle  session  du  programme,  le compteur recommence
  167.                     à partir  de  000  et efface  les éventuelles sauvegardes
  168.                     précédentes de même nom).  Pendant la phase de sauvegarde
  169.                     l'oscilloscope est momentanément désactivé.
  170.  
  171.         A  tout  moment,  l'appui  de  la  touche  ESC  permet de terminer la
  172.  session courante en quittant le programme. 
  173.  
  174.  Voici le texte du programme:
  175.  
  176.  SE REPORTER ICI AU SOURCE DU PROGRAMME SB_ENREG.PAS
  177.  
  178.  
  179.  IV) AMELIORATIONS
  180.  
  181.         Toujours  le même souçi...  il est effectivement possible d'optimiser
  182.  le code (en assembleur  par exemple?), d'activer  tel ou tel  filtre en mode
  183.  interactif, etc...  Il  serait  également intéressant de pouvoir enregistrer  
  184.  des sons  sans  limitation de taille (via l'XMS ou en accès disque continu),  
  185.  et  pourquoi pas  en choisissant  un format connu  de sauvegarde (VOC,  WAV, 
  186.  etc...)?  Et bien sûr,  de  remanier  complètement la structure du programme 
  187.  pour  permettre  le traitement  de  l'ADC  en  mode DMA (certes, un peu plus
  188.  compliqué...)!
  189.  
  190.  
  191.  V) CONCLUSION
  192.  
  193.         On a montré dans cet article comment  il était possible d'enregistrer
  194.  des  sons  analogiques  à partir  d'un micro  situé  sur  des cartes de type
  195.  SoundBlaster et SoundBlaster Pro.  De ce fait,  on a  brièvement expliqué le
  196.  fonctionnement  de  l'ADC  et décrit  certaines  fonctionnalités  de la puce 
  197.  Mixer.
  198.  
  199.                                                                   le 25/05/94
  200.  
  201.                                  Patrick RUELLE
  202.                                  43, av. de Grande Bretagne
  203.                                  98000 Monaco
  204.                                  Principauté de Monaco
  205.