<Desc/Clms Page number 1>
WANG LABORATORIES, INC. pour
EMI1.1
Edition de données vocales.
- -----Demande de brevet aux Etats-Unis d'Amérique n du 3 novembre 1982 en faveur de
G. N. STAPLEFORD et D. C. OSBORNE.
La présente invention concerne l'édition de données vocales.
Elle a trait à un système de traitement de l'information comportant un dispositif d'acquisition de signal continu destiné à saisir un signal électrique variant continuellement et correspondant à un message
<Desc/Clms Page number 2>
vocal, un dispositif de numérisation servant à numériser le signal électrique variant de manière continue en vue de produire des données vocales discrètes correspondant à la qualité audible du message vocal, un dispositif d'acquisition de données discrètes destiné à saisir des données discrètes correspondant à des caractères alphanumériques, un dispositif d'acquisition de signaux discrets destiné à saisir des signaux discrets, y compris des ordres d'édition et de commande, une mémoire pour stocker des données sous une forme discrète, un dispositif de visualisation pour créer un affichage et un processeur,
tous ces éléments étant activement interconnectés par des conducteurs de commande et des canaux de transfert de données, un programme d'exploitation pour le processeur étant stocké dans la mémoire de telle sorte que le processeur commande le fonctionnement du système de manière à : stocker les données vocales discrètes dans la mémoire tout en saisissant le message vocal, stocker les données de caractères dans la mémoire tout en assurant l'introduction des caractères, établir un enregistrement de séquence dans la mémoire indiquant un ordre unifié de message vocal et de données de caractères, afficher une séquence de marques de jetons vocaux et de marques de caractères, chaque marque de jeton représentant un incrément prédéterminé de message vocal saisi et chaque marque de caractère correspondant à un des caractères introduits,
la séquence affichée correspondant à la séquence contenue dans l'enregistrement, et réviser, en réaction aux ordres d'édition introduits, l'enregistrement de séquence pour refléter les variations d'édition dans l'ordre des données vocales et de caractères.
L'invention peut se rapporter, en outre, à un programme d'exploitation tel que le processeur commande
<Desc/Clms Page number 3>
également le fonctionnement du système de manière à : réagir à des signaux discrets prédéterminés saisis en même temps que le message vocal, indiquer dans l'enregistrement de séquence le point où chaque signal discret prédéterminé a été saisi, visualiser dans l'affichage une indication distinctive du moment où chaque signal saisi simultanément a été saisi par rapport aux autres éléments des données vocales, établir dans la mémoire un indicateur définissant une position d'indicateur dans la séquence de données, afficher une marque visible dans la visualisation correspondant à la position de l'indicateur, déplacer, en réaction aux signaux d'entrée saisis, la position définie de l'indicateur dans la séquence et,
de manière correspondante dans la visualisation, produire, en réaction aux signaux d'entrée saisis, un signal audio variant de manière continue et correspondant aux données vocales discrètes stockées dans la mémoire, cette production démarrant en un point de la séquence de données vocales correspondant à la position de l'indicateur telle que définie à ce moment et suivant l'ordre tel que défini dans l'enregistrement de séquence, et faire avancer l'indicateur à travers les données du message vocal d'une manière correspondant à la progression de la production du signal audio. L'invention peut aussi comprendre un circuit servant à détecter l'activité de saisie audio et, en l'absence d'une telle activité, à supprimer le stockage des données du message vocal dans la mémoire.
L'invention fournit à un auteur une image graphique visible de la structure de sa dictée avec des indications de paragraphes ou d'autres divisions fonctionnelles qu'il peut insérer. Elle permet à un auteur d'éditer sa dictée avec une grande souplesse : déplacer, supprimer, insérer, et lire tandis que la
<Desc/Clms Page number 4>
présentation sur écran l'aide à suivre l'édition et à localiser les endroits où effectuer des révisions d'édition. L'invention permet également à l'auteur d'introduire au moyen d'un clavier des notes intercalaires et des instructions dans son enregistrement dicté.
Le dessin illustre par un schéma synoptique un système conforme à l'invention.
Le système éditeur de données vocales 10 conforme à l'invention comprend des connexions 12 destinées à saisir et à fournir un signal électrique variant de manière continue et correspondant à un message vocal. Un message saisi peut être dérivé d'un microphone 50 ou d'une ligne téléphonique 52 opérant par l'intermédiaire d'un circuit d'interface 54 comme illustré au dessin, ou d'une autre manière. Le signal fourni peut être utilisé pour activer un haut-parleur 56, tel qu'illustré au dessin, ou d'autres manières.
Les connexions 12 sont connectées au convertisseur analogique-numérique 14 qui convertit dans les deux sens. Le convertisseur 14 est à son tour connecté au convertisseur série-parallèle 30 opérant dans les deux sens. Le détecteur audio 28 est connecté aux connexions 12 et intervient pour émettre un signal de commande signalant lorsque le canal de saisie vocale est actif. Le système 10 comprend également un dispositif d'affichage 31 qui peut avantageusement comprendre un écran de tube à rayons cathodiques et un dispositif à clavier 16 comportant une section 18 pour l'introduction de caractères alphanumériques et une section 20 pour l'introduction de signaux d'édition et de commande.
Le système 10 comprend aussi le processeur 26 qui peut être le modèle Z80 fabriqué par Zilog et la mémoire 22 pour stocker des données sous forme de bits et qui comporte une section 24 contenant un programme
<Desc/Clms Page number 5>
d'exploitation stocké. Tous les éléments du système décrit plus haut sont interconnectés par le bus de données 58, le bus d'adresses 60 et les conducteurs de commande 62, comme indiqué au dessin. Tous les éléments du système 10 décrit plus haut sont des composants classiques disponibles dans le commerce et la manière de les interconnecter est bien connue des spécialistes dans le domaine du traitement de texte.
Le programme d'exploitation d'éditeur vocal stocké dans la mémoire, conjointement avec le processeur 26, commande le fonctionnement du système lors de l'exécution de toutes les fonctions d'éditeur vocales.
Lorsqu'un auteur utilisant le système parle dans un microphone, le message vocal saisi par le système sous la forme d'un signal analogique est numérisé et introduit dans la mémoire sous une forme discrète. En même temps, une représentation du message vocal utilisant une série de jetons vocaux représentant une seconde de message vocal est produite et visualisée sur le tube à rayons cathodiques. Pendant les pauses vocales, l'entrée de données est supprimée pour éviter tout gaspillage de la capacité de la mémoire.
Tout en dictant, l'auteur peut introduire des signaux d'interruption au clavier qui produisent des indicateurs de mémoire indiquant lorsque l'introduction a été effectuée dans l'enregistrement de données et provoquant la visualisation de jetons vocaux successifs au départ de la ligne de visualisation suivante, ce qui simule une interruption de paragraphe. En même temps, un numéro marginal est produit afin de permettre une identification aisée de l'interruption. L'auteur peut aussi, au moyen d'un signal introduit par le clavier, interrompre la dictée et introduire du texte alphanumérique au moyen du clavier. Ce texte est introduit dans la mémoire et est visualisé sur l'écran du tube à rayons
<Desc/Clms Page number 6>
cathodiques.
Le système fonctionnant sous la commande du programme conserve un enregistrement indiquant une séquence unifiée de données vocales, de données de texte et d'indications d'interruption. Initialement, l'ordre de cette séquence est l'ordre chronologique dans lequel les données sont saisies par le système. Le système produit également un indicateur de mémoire indiquant une position d'indicateur dans la séquence de données. Une marque de curseur est visualisée dans le dispositif de visualisation à un endroit correspondant.
L'auteur peut manipuler cet indicateur et cette marque de curseur reliés pour désigner un point particulier quelconque dans la séquence de données unifiée. A l'aide des signaux d'édition de clavier et de curseur comprenant"introduction","suppression","remplace- ment","déplacement"et"copie", l'auteur peut remplir toutes ces fonctions d'édition, en les appliquant sans discrimination à des données vocales, des données de texte ou des marques. La présentation dans le dispositif de visualisation reflète toutes les modifications d'édition au fur et à mesure qu'elles sont effectuées. L'auteur peut aussi, à l'aide des signaux introduits au moyen du clavier et du curseur, provoquer la lecture du message vocal pour tout dispositif audio connecté.
Une description plus détaillée de l'exploitation du programme est donnée ci-dessous.
Un programme d'exploitation d'éditeur vocal est stocké dans la mémoire 22 et, conjointement avec le processeur 26, il commande le fonctionnement du système dans l'exécution de toutes les fonctions d'éditeur vocal. Le programme d'éditeur vocal utilise une file d'attente de sous-programmes et les sous-programmes demandés par l'éditeur vocal sont tout d'abord transmis à la file d'attente de sous-programmes et sont exécutés
<Desc/Clms Page number 7>
ultérieurement lorsque le processeur y parvient. Avec une telle file d'attente, un dispositif de traitement d'interruption met un sous-programme en file d'attente pour traiter l'interruption, puis revalide immédiatement les interruptions et les retours. Les sousprogrammes pénètrent dans la file d'attente et sont traités à loisir par le processeur.
Un module de file d'attente de sous-programmes contient des sousprogrammes destinés à manipuler la file d'attente de sous-programmes d'éditeur vocal. Il s'agit des sousprogrammes suivants : RTN$QUE$INIT : Initialise la file d'attente de sous- programmes.
RTN$QUE$PUSH : Pousse une adresse de procédure et un paramètre d'adresse dans la file d'attente de sous-programmes.
RTN$QUE$RUN : Vérifie si une procédure/paire de paramètres se trouve dans la file d'attente. Dans l'affirmative, il appelle la procédure et lui transmet le paramètre d'adresse simple.
Le programme d'éditeur vocal général est très simple à cause de la file d'attente de sous-programmes d'éditeur vocal. Le programme général d'éditeur vocal remplit deux fonctions : 1) il appelle un sousprogramme d'initialisation, voice$editor$init, en vue d'initialiser toutes les structures de données et les dispositifs d'entrée/sortie du matériel utilisé par l'éditeur vocal ; 2) il tourne ensuite sur une boucle, appelant RTN$QUE$RUN pour exécuter l'un quelconque des sous-programmes de la file d'attente. Si l'utilisateur indique qu'il souhaite sortir d'éditeur vocal, par exemple, il repousse la procédure EXIT$EDITOR sur la file d'attente de sous-programmes. Le processeur appelle ce sous-programme dès qu'il le peut, forçant l'éditeur vocal à revenir à l'application d'appel.
<Desc/Clms Page number 8>
Il ressort de la description qui précède que dès que l'éditeur vocal est introduit et qu'il initialise des variables et du matériel, il tourne en boucle dans l'attente que quelque chose apparaisse dans la file d'attente de sous-programmes. Des procédures d'interruption sont utilisées pour placer quelque chose dans cette file d'attente. Des procédures d'interruption sont mises en oeuvre lors d'une interruption matérielle. A ce moment, le processeur invalide les interruptions, repousse le compteur de programmes sur la pile et s'oriente sur une procédure de traitement de l'interruption.
L'éditeur vocal fonctionne dans le mode d'interruption 2 du Z80 et reçoit des interruptions des dispositifs suivants, énumérés dans l'ordre des priorités d'interruption : 1. CTC canal 0 : Blocage du comptage-ce canal produit une interruption lorsque le matériel audio a juste terminé l'enregistrement ou la lecture d'un tampon de signaux audio digitalisés.
2. CTC canal 1 : Sonnerie du téléphone-ce canal produit une interruption chaque fois que le téléphone sonne.
3. CTC canal 2 : Frappe-l'éditeur vocal programme ce canal sur interruption chaque fois qu'une frappe est reçue.
4. CTC canal 3 : Dispositif à temps-l'éditeur vocal programme ce canal sur interruption toutes les 10 ms (0, 010 seconde).
L'adresse des programmes de traitement d'interruptions pour les dispositifs précités est placée dans une table de vecteurs d'interruption dans la mémoire. Lorsque l'un quelconque des dispositifs précités produit une interruption, l'adresse correspondante de la table de vecteurs d'interruption est appelée.
Les programmes de traitement d'interruptions
<Desc/Clms Page number 9>
de l'éditeur vocal sont présents dans deux modules, le module d'interruption et le module de traitement es.
Le module d'interruption est simplement un ensemble de sous-programmes de niveau d'assemblage, un pour chaque dispositif d'interruption. Ils permettent tous d'économiser des registres de la pile, appellent
EMI9.1
une procédure PLM et ensuite les regis- édure e tres, valident des interruptions et reviennent à la séquence principale. Les programmes de traitement sont : Audio : Programme de traitement de canal
CTC 0, appelle la procédure PLM
AUDIO$INTERUPT-.
Sonnerie : Programme de traitement de canal
CTC 1, appelle une procédure PLM RING$INTERUPT.
KEYHNDLR : Programme de traitement de canal
CTC 2, effectue un IN (00) pour obtenir l'introduction de la frappe, le conserve dans RAWKEY variable, appelle la procédure PLM GOT$KEY.
Horloge : Programme de traitement de canal
CTC 3, appelle la procédure PLM
TEN$MS$TIMER.
Le module de traitement es contient des procédures PLM qui se chargent de la majeure partie du traitement des interruptions. Il contient aussi quelques autres sous-programmes différents. Les sousprogrammes d'interruption sont brièvement décrits cidessous : RING$INTERUPT : Pousse une procédure sur la file d'attente de sous-programmes qui affiche le message"Votre téléphone sonne, veuillez presser TAB".
GOT$KEY : Pousse simplement la procédure
KEY$DISPATCH sur la file d'attente de sous-programmes. KEY$DISPATCH traite en fait la frappe.
<Desc/Clms Page number 10>
TEN$MS$TIMER : Appelle d'autres procédures PLM, ce qui provoque des vérifications périodiques dans certaines condi- tions.
Presque toutes les fonctions d'éditeur vocal sont amorcées lorsque l'utilisateur presse une touche.
L'éditeur vocal utilise un mécanisme commandé par une table pour décider de la procédure à appeler en réaction à une frappe donnée.
Les touches du poste de travail sont divisées en 16 classes différentes. Chaque classe a reçu un numéro de 0 à 15. Aucune touche ne peut apparaître dans plusieurs classes. Les numéros de classes et les touches de chacune d'elles sont indiqués ci-dessous.
EMI10.1
<tb>
<tb>
Numéro <SEP> Description <SEP> Touches
<tb> de
<tb> classe
<tb> 1 <SEP> Classe <SEP> de <SEP> touche <SEP> d'enre-INSERT
<tb> gistrement
<tb> 2 <SEP> Classe <SEP> de <SEP> touche <SEP> d'arrêt <SEP> STOP
<tb> 3 <SEP> Classe <SEP> de <SEP> touche <SEP> de <SEP> lec-Barre <SEP> d'espa- <SEP>
<tb> ture/arrêt <SEP> cement <SEP> (HOME)
<tb> 4 <SEP> Classe <SEP> de <SEP> curseur <SEP> Curseur <SEP> nord,
<tb> curseur <SEP> est,
<tb> curseur <SEP> sud
<tb> curseur <SEP> ouest.
<tb>
5 <SEP> Aller <SEP> à <SEP> la <SEP> classe <SEP> GO <SEP> TO <SEP> PAGE
<tb> (aller <SEP> à <SEP> la <SEP> page)
<tb> 6 <SEP> Classe <SEP> de <SEP> chiffre <SEP> 0 <SEP> à <SEP> 9.
<tb>
7 <SEP> Classe <SEP> de <SEP> texte <SEP> A-Z, <SEP> a-z, <SEP>
<tb> virgule, <SEP> point,
<tb> zo <SEP> ()
<tb> -=+][ <SEP> ;:'"/?
<tb> 8 <SEP> Classe <SEP> de <SEP> retour <SEP> arrière <SEP> Touche <SEP> de <SEP> retour
<tb> arrière <SEP> (Backspace)
<tb> 9 <SEP> Classe <SEP> de <SEP> marque <SEP> RETURN, <SEP> NOTE
<tb> 10 <SEP> Classe <SEP> de <SEP> renumérotation
<tb> 11 <SEP> Classe <SEP> d'édition <SEP> DELETE, <SEP> REPLC,
<tb> MOVE, <SEP> COPY
<tb> 12 <SEP> Classe <SEP> d'exécution <SEP> EXECUTE
<tb> 13 <SEP> Classe <SEP> d'annulation <SEP> CANCEL
<tb> 14 <SEP> Classe <SEP> de <SEP> touche-aide <SEP> COMMANDE, <SEP> (HELP)
<tb>
<Desc/Clms Page number 11>
EMI11.1
<tb>
<tb> 15 <SEP> Classe <SEP> de <SEP> touche <SEP> TAB
<tb> de <SEP> téléphone
<tb> 0 <SEP> Classe <SEP> de <SEP> touche <SEP> invalide <SEP> Toutes <SEP> les <SEP> autres
<tb> touches.
<tb>
Une table de traductions est présente et convertit les codes de touches machine bruts en un numéro de classe correspondant (0 à 15). Cette table se trouve dans le secteur zéro du fichier"VOICE. CLASSTBL". Le secteur un de ce fichier contient la table de traductions de frappe pre-WISCII standard. Il est important de noter que la table de classes est indépendante d'un décalage. Les touches CANCEL et SHIFT CANCEL se trouvent, par exemple, dans la classe d'annulation (13). Ceci n'affecte pas les caractères de texte majuscules et minuscules, car ils sont tous deux dans la classe de texte (7).
L'éditeur est divisé en divers états d'exploitation. Les touches peuvent avoir des significations différentes suivant la valeur de l'état en cours de sorte que, pour chaque état, une table de procédures est définie. Ces tables de procédures sont qualifiées de tables d'états. Les tables d'états sont définies dans le module de tables d'états.
Les tables d'états de l'éditeur vocal contiennent des index se référant à une grande table de procédures. Cette table peut être trouvée dans le module de table de sous-programmes contenant 36 entrées.
Lors d'une première entrée dans l'éditeur, l'état principal est l'état d'exploitation en cours. A mesure que de nouveaux états d'exploitation entrent en jeu, les états anciens, en même temps qu'un index du message guide-opérateur en cours sur l'écran, sont poussés sur une pile d'états. Disons que, dans l'état principal, l'utilisateur presse la touche DELETE.
<Desc/Clms Page number 12>
L'état principal est poussé sur la pile d'états et l'état de définition de segment devient à présent l'état en cours. Le message guide-opérateur"Delete What ?" apparaît sur l'écran.
On suppose à présent que l'utilisateur presse la touche GO TO PAGE. L'état de définition de segment est poussé sur la pile et le message guide-opérateur est aussi poussé sur la pile d'états. Le nouvel état est l'état go to. Le message guide-opérateur"Go to Where"apparaît sur l'écran. L'utilisateur frappe un numéro et presse la touche EXECUTE. Une procédure consistant à aller au numéro est appelée.
En ce point, l'état de définition de segment et le message guide-opérateur sont enlevés de la pile.
Le message guide-opérateur"Delete What"est à nouveau affiché sur l'écran. L'utilisateur presse la touche EXECUTE et une procédure est appelée pour supprimer la partie mise en évidence du fichier vocal. L'état principal est alors enlevé de la pile et nous voici revenus à notre état d'exploitation initial.
En plus des tables d'états elles-mêmes, le module de tables d'états contient aussi des procédures de manipulation de la pile d'états. Ces procédures sont : INIT$STATE : Initialise la pile d'états.
NEW$STATE : Pousse l'ancien état sur la pile, transforme l'état spécifié en état en cours.
POP$STATE : Enlève un état de la pile, le trans- formant en état en cours.
Le module de tables d'états contient aussi un sousprogramme qui, un numéro de classe étant donné, renvoie l'adresse de la procédure qui correspond à cette classe pour l'état en cours :
<Desc/Clms Page number 13>
ROUTINE$ADDR : Une classe étant donnée, cette procé- dure recherche dans la table d'états en cours l'adresse de la procédure qui correspond à cette classe.
La décision d'appeler une procédure particu- lière peut donc être résumée de la façon suivante : 1) Interruption de frappe.
2) KEYHNDLR sauvegarde des registres, place le code de touche machine dans RAWKEY variable, appelle
GOT$KEY.
3) GOT$KEY exécute les opérations suivantes : a) dans le cas d'une erreur fatale, effectuer une sortie ; b) si SHIFT$PAGE a été frappé, effectuer un saut ; c) si la touche précédente n'a pas encore été traitée, il faut la rejeter ; d) pousser l'adresse de la procédure KEY$DISPATCH en même temps que le paramètre RAW$KEY sur la file d'attente de sous-programmes.
4) KEY$DISPATCH est enlevé de la file d'attente de sous-programmes et est exécuté de la manière suivante : a) traduire la frappe au moyen de la table de traductions ; b) à l'aide de la table de classes, obtenir le numéro de classe pour cette touche ; c) si le bit supérieur du numéro de classe est zéro, maintenir cette frappe ; d) effacer tout message d'erreur ; e) à l'exception de RETURN et de la classe lecture/arrêt, arrêter l'audio ; f) appeler ROUTINE$ADDR, le passer à la classe pour obtenir l'adresse de la procédure qu'il faut acheminer ; g) pousser cette adresse de procédure et la frappe traduite sur la file d'attente de sous- programmes.
5) Le sous-programme approprié ainsi que la frappe traduite sont enlevés de la file d'attente de sous- programmes et sont exécutés.
D'autres procédures peuvent être grossièrement divisées en deux parties. Des modules de bas niveau
<Desc/Clms Page number 14>
sont prévus pour chaque structure de données et exécutent des opérations sur cette structure. Des modules de niveau inférieur typiques sont l'index de fichier (index audio, table de marques, table de notes), les fonctions audio et l'écran.
La deuxième partie comprend les sousprogrammes de haut niveau. Ces procédures sont typiquement appelées par le mécanisme d'acheminement de frappe (les adresses se trouvent dans la table de sousprogrammes) et appellent elles-mêmes les sousprogrammes de niveau inférieur qui effectuent la majeure partie du travail. Par conséquent, on peut les considérer comme une interface entre les sousprogrammes de traitement de frappe et les procédures de travail de bas niveau.
Le module d'interface d'utilisateur (V : voice. rrr. plm. ve. userint) contient de l'audio de haut niveau, du marquage de sections et des procédures de renumérotation : PLAY$STOP : Appelé chaque fois qu'une touche dans la classe lecture/arrêt est introduite. Si l'audio est pour l'instant arrêté, il déplace le curseur vers le début du secteur audio suivant et fait débuter la lecture. Si l'audio est en cours de lecture ou d'enregistrement, il arrête l'audio.
INSERT$MARK : Appelé lorsqu'une touche dans la classe de marque est introduite. Si une marque de section est introduite, il établit sa position exacte sur l'écran et appelle le sous-programme de module de fenêtres approprié pour l'introduire. Si la touche de note est pressée, il vérifie si le curseur se trouve pour l'instant sur une note. Dans la négative, il en crée une. Dans les deux cas, le mode de texte est introduit.
<Desc/Clms Page number 15>
RENUMBER : Appelé lorsqu'une touche dans la classe de renumérotation est pressée. L'éditeur est placé dans l'état de renumérotation et les messages guide-opérateur"Renum- ber Marks ?" est affiché.
REN$EXECUTE : Appelé lorsque la touche EXECUTE est pressée dans l'état de renumérotation.
Appelle une procédure de table de marques pour renuméroter les marques, reconditionne la visualisation et enlève l'état précédent de la pile.
REN$CANCEL : Appelé lorsque la touche CANCEL est pressée dans l'état de renumérotation.
Enlève l'état précédent de la pile.
Le module de retours arrière exécute la fonction de retour arrière. Le fait de presser la touche de retour arrière force le curseur à reculer au maximum pendant 5 secondes et à lire pendant 5 secondes. Le fait d'enfoncer cette touche N fois force le curseur à reculer N * 5 secondes et à lire pendant la même période. Pendant la lecture, le fait d'enfoncer une touche quelconque autre que la touche de retour arrière arrête la lecture, annulant complètement la fonction de retour arrière. Lorsque la touche de retour arrière est pressée, 350 millisecondes s'écou- lent avant le début de la lecture. C'est ainsi que l'utilisateur a le temps de presser la touche de retour arrière de manière répétée avant que la lecture débute.
Le module de retours arrière utilise trois variables pour remplir ces fonctions : bs$mode TRUE (vrai) dans le cas d'un retour arrière, FALSE (faux) dans d'autres conditions. bs$time Le temps du curseur lorsque l'utili- sateur presse la touche BACKSPACE (retour arrière) pour la première fois.
Quel que soit le nombre de fois que cette touche est pressée, la lecture va jusqu'à cette position mais ne la
EMI15.1
ci 0 dépasse pas.
Bs$play$cnt Un compteur est décrémenté par le ten$ms$timer. Utilisé pour compter le
<Desc/Clms Page number 16>
temps d'attente de 350 ms.
La fonction de retour arrière exporte les procédures suivantes : BS : Appelé lorsque la touche de retour arrière est pressée. Si elle est pressée pour la première fois, le bs$mode est positionné sur TRUE et le bs$time est retenu. Le temps d'attente bs$wait$time est initia- lisé sur 350 ms.
BS$WAIT$COUNTER : Appelé toutes les 10 ms par le
TEN$MS$TIMER. Cette procédure décré- mente le temps d'attente bs$wait$time, et après 350 ms, elle pousse une procédure sur la file d'attente de sous-programmes qui lit à partir de la position du moment du curseur jusqu'au temps bs$time.
BS$KEY$CHECK : Appelé par KEY$DISPATCH, cette pro- cédure annule le mode de retour arrière si une touche autre qu'une touche de retour arrière est intro- duite.
EMI16.1
\ Le module de curseur présente toutes les fonctions du curseur de haut niveau. Ces procédures sont à nouveau simplement des interfaces entre les touches et les sous-programmes d'écran qui déplacent effectivement le curseur tout autour de l'écran.
CURSOR$RTN : Appelé dans la plupart des états lorsqu'une touche de la classe de curseur est pressée. Elle appelle simplement un des quatre sous-pro- grammes d'écran selon la touche de curseur qui a été pressée.
<Desc/Clms Page number 17>
GO$TO$RTN : Appelé lorsque la touche GO TO PAGE est pressée. Elle pousse l'ancien état sur la pile et transforme l'état présent en état"go to". Elle visualise le message guide-opérateur "Go to Where ?" et déplace le curseur vers un endroit situé juste derrière le message guide-opérateur. Il est à noter que pour le temps de traduc- tion du fichier de message, ce mes- sage guide-opérateur devrait être justifié à droite.
GO$TO$EXIT : Cette procédure est appelée lorsque la touche CANCEL est pressée tandis qu'on se trouve dans l'état
GO$TO$STATE. Elle repositionne le curseur dans la partie audio/marque de l'écran et enlève l'état précé- dent de la pile.
GO$TO$CURSOR : Appelé lorsqu'une des touches de curseur est pressée tandis qu'on se trouve dans l'état"go to". Elle appelle un des quatre sous-program- mes d'écran selon la touche de curseur qui a été choisie. Elle appelle ensuite GO$TO$EXIT pour revenir à l'état précédent.
GO$TO$ACCEPT$NUM : Appelé lorsqu'une touche de la classe de chiffre est pressée tandis qu'on se trouve dans l'état"go to".-
Cette procédure visualise le chiffre sur l'écran juste après le message guide-opérateur et met à jour la position du curseur.
GO$TO$EXECUTE : Appelé lorsque la touche EXECUTE est pressée tandis qu'on se trouve dans l'état GO$TO$STATE. S'il y a un chiffre sur l'écran, il est converti du code ASCII au code binaire et un sous-programme d'écran est appelé pour positionner le curseur en dessous de la marque appropriée.
Elle appelle ensuite GO$TO$EXIT pour revenir à l'état précédent.
Le module d'entrée de texte contient des sous- programmes destinés à introduire des notes de textes dans le mode texte. Les variables suivantes sont utilisées :
<Desc/Clms Page number 18>
text$buffer (60) Tampon destiné à contenir la note de texte pendant son introduction. tindex Position du moment (0 à 59) dans le tampon de texte. tcursor Position du moment du curseur sur l'écran. note$index Indexation dans la table de notes de la note de texte en cours de traitement. premier Un indicateur, TRUE, si la note en cours d'introduction a juste été créée. S'il en est ainsi, si la touche CANCEL est pressée, cette note est supprimée. S'il s'agit d'une ancienne note qui est modi- fiée, il suffit de presser la touche
CANCEL pour ramener la note dans sa forme initiale.
Les sous-programmes suivants sont exportés : TEXT$SET$FIRST : Appelé par INSERT$MARK pour avertir le module d'entrée de texte que cette note vient d'être introduite.
TEXT$MODE$ENTER : Appelé par INSERT$MARK lorsque la touche NOTE est pressée. Pousse l'état ancien, établit l'état de
EMI18.1
"texte"nouveau. Affiche le message guide-opérateur"Introduire le tex- te". Prend la note de la table de notes et la place dans le tampon de texte.
TXT$CANCEL : Appelé lorsque la touche CANCEL est pressée tandis qu'on se trouve dans l'état"texte". Si une nouvelle note a été introduite, cette note est supprimée. Sinon, le tampon de texte est rejeté et l'écran visualise l'ancienne note intacte. Rétablit l'état précédent.
TEXT$EXECUTE : Appelé lorsque la touche EXECUTE est pressée tandis qu'on se trouve dans l'état"texte". Remplace l'ancienne note par le contenu du tampon de texte. Rétablir l'état précédent.
<Desc/Clms Page number 19>
TEXT$CURSOR : Appelé lorsqu'une touche de curseur est pressée tandis qu'on se trouve dans l'état"texte". Déplace le curseur vers l'avant ou vers l'arrière. Affiche un message d'er- reur si le curseur nord ou le curseur sud est pressé.
TXT$BACK$SPACE : Appelé lorsque la touche de retour arrière est pressée tandis qu'on se trouve dans l'état"texte". Déplace le curseur vers l'arrière d'une po- sition, puis efface le caractère qui se trouve en dessous.
TXT$ENTRY : Appelé lorsqu'une touche de la classe texte, chiffre ou lecture/ar- rêt est pressée. Introduit le carac- tère dans le tampon de texte. et sur l'écran et avance le curseur d'une position.
TEXT : Appelé lorsqu'une touche de texte est pressée tandis qu'on se trouve dans l'état"principal". Si le cur- seur est sur une note, il entre dans le mode texte et introduit la touche pressée dans le tampon de texte et sur l'écran. Si le curseur ne se trouve pas sur une note, il affiche le message"Déplacer le curseur".
Le module d'édition fournit une interface entre le mécanisme d'acheminement à touche et l'écran de niveau inférieur dans les sous-programmes d'index de fichier qui exécutent en fait les manipulations sur le fichier.
Le module d'édition suit les parties du fichier qui sont éditées. Une structure de points est utilisée dans des positions localisées dans le fichier.
Cette structure est de la forme : structure de points ( temps adresse, index byte), où le temps est le temps écoulé dans le fichier et l'index est l'index de marque en cours ou, s'il n'y a pas de marque à cet endroit, la marque suivante dans le fichier.
<Desc/Clms Page number 20>
Les structures de points suivantes sont utilisées pour suivre des positions pendant l'édition : point initial le début d'un segment pour supprimer/déplacer/copier point final l'extrémité d'un segment pour supprimer/déplacer/copier point de destination le point de destination pour déplacer/copier.
Pour supprimer une partie du fichier, on enlève du fichier le segment compris entre le point initial et le point final (inclus).
Pour déplacer ou copier une partie du fichier, on déplace ou on copie le segment compris entre le point initial et le point final (inclus) jusqu'au point de destination : lors d'une introduction dans le fichier, le point de destination devient le point d'introduction.
L'extrémité en cours du fichier lors de l'enregistrement du point initial débute à l'extrémité du fichier : lorsque l'utilisateur presse la touche STOP, le programme effectue un déplacement comme décrit plus haut, déplaçant le segment délimité par (point initial, point final) jusqu'au point de destination.
Pour remplacer un segment du fichier, on utilise trois structures de points supplémentaires : point initial de remplacement contient le début du segment à supprimer ; point final de remplacement contient l'extrémité du segment à supprimer ; point initial de remplacement contient le début du segment à introduire.
La procédure de remplacement se déroule de la manière suivante : initialement, on définit le segment à remplacer entre le point initial et le point final.
<Desc/Clms Page number 21>
Après définition du segment, on copie du point initial au point de destination de remplacement, du point final au point final de remplacement, et on positionne le point initial de remplacement à la fin du fichier. On passe alors par la procédure d'introduction standard, enregistrant à l'extrémité du fichier. Comme dans le cas de l'introduction, lorsque la touche STOP est pressée, la nouvelle matière, le segment (point initial, point final) est déplacé vers le point d'introduction, le point de destination complétant l'introduction. Pendant le remplacement, l'utilisateur peut introduire, lire, déplacer les touches de curseur et introduire des marques de section et des notes de texte. Toutes les introductions s'effectuent de la manière normale au moyen d'un point initial, d'un point final et d'un point de destination.
Toutes les introductions sont évidemment limitées jusqu'au-delà du point initial de remplacement.
Si l'utilisateur presse la touche CANCEL, le remplacement est annulé par repositionnement de la fin du temps du fichier vocal au point initial de remplacement, ramenant ainsi le fichier à sa forme initiale.
Si l'utilisateur presse la touche EXECUTE, le remplacement est exécuté tout d'abord par suppression du segment (point de destination de remplacement, point d'extrémité de remplacement), puis par attribution du point de destination de remplacement au point de destination et de l'extrémité du fichier au point d'extrémité, puis par exécution de l'introduction au moyen d'un déplacement normal du segment (point initial, point final) vers le point de destination.
Le module à fonctions audio contient des sousprogrammes de lecture et d'enregistrement dans des fichiers vocaux. Il utilise un module associé, le module es qui contient des structures de données et des
<Desc/Clms Page number 22>
procédures pour manipuler les tampons et les requêtes de file d'attente vers le maître.
Lors de la lecture ou de l'enregistrement, des données audio doivent être tamponnées, de sorte que la lecture ou l'enregistrement n'est pas interrompu par l'attente de l'achèvement d'un enregistrement ou d'une lecture d'un tampon. Le logiciel du poste de travail audio est conçu pour utiliser au moins deux tampons, mais ce nombre peut être plus grand si l'espace le permet. Dans le cas présent, le poste de travail audio utilise six tampons audio.
L'éditeur vocal utilise des tampons qui ont une longueur comprise entre 1 et 16 secteurs. Ces tampons sont alignés par pages dans la mémoire. Chaque tampon correspond à un bloc audio dans le fichier vocal. Le module es contient des structures qualifiées de structures info qui gèrent les tampons audio. Le module es contient une file d'attente de requête es qui peut être utilisée pour mettre des RCB en file d'attente. Le dispositif à temps de 10 ms vérifie cette file d'attente toutes les 10 ms. Si cette file d'attente contient quelque chose, la procédure du dispositif à temps enlève elle-même la requête de la file d'attente et la présente au maître.
La file d'attente de requête es utilise les structures de données suivantes : file d'attente un alignement d'adresses, il s'agit de la file d'attente de requête es ; partie supérieure index de la partie supérieure de la file d'attente ; partie inférieure index de la partie inférieure de la file d'attente ; compte le nombre d'éléments dans la file d'attente.
Les sous-programmes suivants manipulent la file d'attente.
<Desc/Clms Page number 23>
IO$PUSH : Pousse l'adresse d'un RCB sur la file d'attente de requête es.
POP$AND$SEND : Si la file d'attente contient quelque chose et si le SCA est vide, enlever l'adresse RCB de la file d'attente et la placer dans le SCA.
Cette procédure est appelée chaque fois que l'on commence par pousser quelque chose sur la file d'attente (essayer de l'enlever immédia- tement). Elle est aussi appelée toutes les 10 ms par la procédure
TEN$MS$TIMER.
Etant donné que l'éditeur vocal n'introduit que des données enregistrées, il ne produit pas de superposition et l'enregistrement démarre toujours à la fin du fichier. Les données introduites sont enregistrées à l'extrémité du fichier et sont ensuite amenées au point d'introduction.
Pour enregistrer, les opérations suivantes sont exécutées : 1) Démarrer avec la sixième structure info : a) remplir la première adresse de tampon ; b) remplir la dimension de tampon ; c) si l'on enregistre dans le dernier bloc du fichier, positionner l'indicateur d'arrêt.
2) Donner au matériel l'adresse du premier tampon.
3) Avertir le matériel de faire démarrer l'enregistre- ment.
4) Effectuer cette procédure : a) indiquer au matériel la dimension du tampon dans lequel il enregistre actuellement ; b) mettre en file d'attente une requête d'enre- gistrement pour le tampon précédent s'il ne s'agit pas du premier tampon ; c) si l'indicateur d'arrêt est positionné pour ce tampon, arrêter ; d) vérifier si une requête d'enregistrement pas- sée quelconque pour ce tampon a été terminée et, dans la négative, arrêter l'audio jusqu'à ce que la requête soit terminée ; e) remplir le RCB pour ce tampon ;
<Desc/Clms Page number 24>
f) incrémenter des variables de telle sorte que l'on soit prêt à traiter le tampon suivant.
EMI24.1
1
Lorsque le matériel a terminé l'enregistrement dans le premier tampon, une interruption de compte de bloc est produite (canal CTC 0). A ce moment, la procédure AUDIO$INTERUPT est appelée.
Cette procédure vérifie si le mode de lecture ou d'enregistrement est actif et appelle une procédure d'interruption de lecture ou d'enregistrement. Le point 4) ci-dessus est la procédure d'interruption d'enregistrement, RECORD$INTERUPT. A mesure que l'enregistrement progresse, il appelle chaque fois un tampon complet.
La lecture est semblable à l'enregistrement.
L'opération débute par une certaine initialisation, suivie pour le matériel d'un ordre de début de lecture.
Le sous-programme PLAY$INTERUPT est immédiatement appelé. Lorsque la lecture de chaque tampon se termine, PLAY$INTERUPT est rappelé pour préparer le tampon suivant à la lecture et pour mettre en file d'attente une requête de lecture d'un autre tampon à partir du disque.
Lors de l'enregistrement, la fréquence d'échantillonnage est toujours réglée sur la fréquence SMP$RATE litérale, qui définit la fréquence d'échantillonnage. Pendant la lecture, la fréquence d'échantillonnage peut toutefois être modifiée. Toutes les 10 ms, la procédure SET$RATE est appelée par la procédure TEN$MS$TIMER. Cette procédure appelle un sous-programme pour convertir le réglage du moment de la régulation de vitesse en une fréquence d'échantillonnage appropriée. Le matériel reçoit alors la valeur de cette fréquence d'échantillonnage.
L'écran de l'éditeur vocal est divisé en deux sections, la partie état et la partie audio/marque. La partie état comprend les deux premières lignes et la
<Desc/Clms Page number 25>
dernière ligne de l'écran. Cette zone est utilisée pour afficher les messages guide-opérateur, le temps de curseur, la longueur, etc. La partie audio/marque, qui est formée des lignes 3 à 21, est utilisée pour afficher le contenu du fichier vocal, c'est-à-dire les blocs audio, les notes de texte et les marques de section.
Le module de visualisation commande la partie état de l'écran. De plus, toutes les procédures MENUPACK se retrouvent dans ce module. Le module contient des procédures visant à initialiser le menupack, à visualiser le temps de curseur, le mode audio, l'aide-mémoire, le mode téléphone, le titre, les messages guide-opérateur, la longueur et les messages d'erreurs.
Le module de fenêtres contient les sousprogrammes destinés à visualiser et à mettre à jour la partie audio/marque de l'écran. Ce module est assisté par les modules suivants : conversion (V : voice. rrr. plm. ve. convert) Sous-programmes de conversion de struc- tures de positions temps (V : voice. rrr. plm. ve. time) Sous-programmes de conversion de temps- position ligne (V : voice. rrr. plm. ve. line) Mise en oeuvre de la structure de ligne région (V : voice. rrr. plm. ve. region) Chercheur d'index d'édition déplacement (V : voice. rrr. plm. ve. scroll) Manipulations de fe- nêtre de bas niveau
Le fichier vocal comprend une en-tête, une . table de marques, une table de notes, un plan de secteurs et un plan de blocs.
Les modules suivants
<Desc/Clms Page number 26>
contiennent le sous-programme permettant d'accéder au fichier vocal. fileindx (V : voice. rrr. plm. ve. fileindx) Mise en oeuvre de l'index de fichier editindx (V : voice. rrr. plm. ve. editindx) Opérations d'édition de l'index du fichier marque (V : voice. rrr. plm. ve. mark) Mise en oeuvre de la table de marques note (V : voice. rrr. plm. ve. note) Mise en oeuvre de la table de notes voicegrm (V : voice. rrr. plm. ve. voicegrm) Sous-programmes de création, d'initiali- sation et d'élimina- tion des erreurs dans le fichier vocal extension (V :
voice. rrr. plm. ve. extend) Sous-programmes d'ex-
EMI26.1
tension et de tron- quage du fichier vo- cal fatale Erreur fatale, dispositif de traitement ABEND
Le module d'erreur contient les procédures pour les ABEND, les erreurs fatales et les erreurs non fatales. Un indicateur, DUMPFLAG, positionné dans la liaison, est utilisé pour déterminer si une erreur doit ou non provoquer un vidage. Si l'indicateur DUMPFLAG est OFFh, les vidages sont validés. S'il est égal à 0, les vidages sont invalidés.
Les procédures exportées sont :
<Desc/Clms Page number 27>
NON$FATAL$ERROR : Vidage si l'indicateur est posi- tionné, affichage de l'erreur
VE : XXX, où XXX est un nombre d'erreurs passées. Ces nombres d'erreurs sont définis dans (V : voi- ce. rrr. lit. ve. ERR). Visualisation aussi d'une partie de données de
16 bytes (typiquement un RCB) si elle est passée comme un paramètre.
INFORM$ERROR : Visualisation d'un message d'erreurs non-VE, après enfoncement d'une touche quelconque, retour à l'appli- cation d'appel. Les messages d'erreurs non-VE sont précisément les erreurs standards telles que "Déplacer curseur"qui sont affi- chées sur la partie inférieure de l'écran. Elles sont définies dans (V : voice. rrr. lit. ve. MERROR) FATAL$ERROR : Identique à NON$FATAL$ERROR, sauf qu'elle n'est pas récupérable. Lors- que l'utilisateur a pressé une tou- che quelconque, l'éditeur revient au programme d'appel.
Le mécanisme de récupération d'éditeur vocal effectue une récupération à partir de pannes de courant des postes de travail ou d'IPLs accidentels pendant le processus d'enregistrement. L'éditeur vocal utilise certaines structures de données courantes et trois modules contiennent des versions de ces structures et des sous-programmes pour les manipuler.
La file d'attente de sous-programmes utilise ces procédures : QUE$INIT : Cette procédure définit une file d'atten- te. L'utilisateur spécifie l'adresse de la file d'attente, la dimension de la file d'attente, la dimension de chaque élément dans la file d'attente et un indicateur pour une structure qui retient toutes les particularités saillantes de la file d'attente. Cette structure identifie la file d'attente. Elle doit être passée comme un paramètre aux sous-programmes de
EMI27.1
d'enlèvement e poussée et cidessous.
<Desc/Clms Page number 28>
QUE$PUSH : Cette procédure pousse un élément sur une file d'attente spécifiée.
QUE$POP : Cette procédure enlève un élément de la tête d'une file d'attente spécifiée.
Le module de pile (V : voice. rrr. plm. ve. stack) est une version d'une pile comportant des sous-programmes de poussée et d'enlèvement. La pile de module de tables d'états utilise des procédures provenant du module de pile pour mettre en oeuvre la pile d'états. Contrairement au module de file d'attente, les sousprogrammes de modules de piles ne peuvent agir que sur une seule pile définie dans le module de la manière suivante : stack (12) byte L'espace réservé pour la pile. sp L'indicateur de pile.
Deux sous-programmes manipulent la pile : PUSH : Pousser un élément sur la pile.
POP : Enlever un élément de la pile.
Le module de tableau de bits (V : voice. rrr. plm. ve. bit) permet de positionner, d'effacer et de vérifier des bits dans un tableau de bits spécifié par l'utilisateur. La grandeur du tableau ne peut pas dépasser 256 bytes. La table de marques utilise un tableau de bits pour déterminer le numéro de la marque de section suivante a créer. Le module d'édition d'index de fichier utilise un tableau de bits pour commander tous les blocs libres dans l'index de telle sorte que les extensions d'index soient exécutées de manière optimale. Le module de tableau de bits contient les procédures suivantes.
<Desc/Clms Page number 29>
BIT$SET : Positionne un bit dans un tableau de bits.
BIT$CLR : Efface un bit dans un tableau de bits.
BIT$TEST : Vérifie un bit pour déterminer s'il est positionné ou effacé.
Toutes les instructions PLM INPUT et OUTPOUT pour l'éditeur vocal sont contenues dans le module de commande machine audio (V : voice. rrr. plm. ve. audioctl).
Ce module contient de petites procédures qui servent d'interface entre le matériel et la masse du code PLM de l'éditeur vocal.
Le module de positionnement du mode d'interruption (V : voice. rrr. Z80. ve. setimode) contient deux procédures, une pour établir le poste de travail pour le mode d'interruption 2 et l'autre pour le ramener au mode d'interruption 0. Les sous-programmes PLM, UNIT$WORKSTATION et RESET$WORKSTATION, présents dans le module de commande machine audio, appellent les deux sous-programmes présents dans le module de positionnement du mode d'interruption. Les tous premiers bytes de ce module contiennent les tables de vecteurs d'interruption pour les CTC et PIO. Ces tables doivent résider sur une limite de facteur de 8 dans la mémoire, de sorte qu'il faut prendre soin dans le tableau de liaisons de vérifier si cela a été effectué.