DEFINITION MODULE Narrator; (*$ Implementation:=FALSE *)
(* 05-May-92/cn *)

FROM SYSTEM IMPORT ADDRESS,BYTE,LONGSET;

FROM ExecD
 IMPORT IOStdReq;

CONST
 narratorName="narrator.device";

 noMem=-2;
 noAudLib=-3;
 makeBad=-4;
 unitErr=-5;
 cantAlloc=-6;
 unimpl=-7;
 noWrite=-8;
 expunged=-9;
 phonErr=-20;
 rateErr=-21;
 pitchErr=-22;
 sexErr=-23;
 modeErr=-24;
 freqErr=-25;
 volErr=-26;
 dCentErr=-27;
 centPhonErr=-28;

 defPitch=110;
 defRate=150;
 defVol=64;
 defFreq=22200;
 male=0;
 female=1;
 natural=0;
 robotic=1;
 manual=2;
 defSex=male;
 defMode=natural;
 defArtic=100;
 defCentral=0;
 defF0Pert=0;
 defF0Enthus=32;
 defPriority=100;

 minRate=40;
 maxRate=400;
 minPitch=65;
 maxPitch=320;
 minFreq=5000;
 maxFreq=28000;
 minVol=0;
 maxVol=64;
 minCent=0;
 maxCent=100;

TYPE
 NarratorFlags=(newIORB,wordSync,sylSync,nf3,nf4,nf5,nf6,nf7);
 NarratorFlagSet=SET OF NarratorFlags;

(*
 Eine 1:1 Umsetzung der C-Schnittstelle wäre zwar möglich,
 führte jedoch dazu, daß Programme, die dies Modul importieren,
 unter Kickstart 1.3 nicht mehr laufen!

 Das Device ab Version 36/37 sieht in der Mouth-Message die
 eingetragene Länge an und füllt entsprechend die Felder
 width, height, shape und pad aus.

 Für die vom Device angenommene Größe des Mouth-RECORDs
 ist allein der in voice.message.message.length eingetragene
 Wert (wird durch CreateExtIO() eingetragen!) maßgebend,
 die voice.flags haben hier keinen Einfluß"
*)

 Narrator=RECORD
  message:IOStdReq;
  rate:CARDINAL;
  pitch:CARDINAL;
  mode:CARDINAL;
  sex:CARDINAL;
  chMasks:ADDRESS;
  nmMasks:CARDINAL;
  volume:CARDINAL;
  sampFreq:CARDINAL;
  mouths:SHORTCARD;
  chanMask:SHORTCARD;
  numChan:SHORTCARD;
  (*37*)flags:NarratorFlagSet;
 END;
 NarratorPtr=POINTER TO Narrator;

 NewNarrator=RECORD
  message:IOStdReq;
  rate:CARDINAL;
  pitch:CARDINAL;
  mode:CARDINAL;
  sex:CARDINAL;
  chMasks:ADDRESS;
  nmMasks:CARDINAL;
  volume:CARDINAL;
  sampFreq:CARDINAL;
  mouths:SHORTCARD;
  chanMask:SHORTCARD;
  numChan:SHORTCARD;
  (*37*)flags:NarratorFlagSet;
  (*36*)f0Enthusiasm:SHORTCARD;
  (*36*)f0Perturb:SHORTCARD;
  (*36*)f1Adj:SHORTINT;
  (*36*)f2Adj:SHORTINT;
  (*36*)f3Adj:SHORTINT;
  (*36*)a1Adj:SHORTINT;
  (*36*)a2Adj:SHORTINT;
  (*36*)a3Adj:SHORTINT;
  (*36*)articulate:SHORTCARD;
  (*36*)centralize:SHORTCARD;
  (*36*)centphon:ADDRESS;
  (*36*)avBias:SHORTINT;
  (*36*)afBias:SHORTINT;
  (*36*)priority:SHORTINT;
  (*36*)pad1:SHORTINT;
 END;
 NewNarratorPtr=POINTER TO NewNarrator;

 Mouth=RECORD
  voice:Narrator;
  width:SHORTCARD;
  height:SHORTCARD;
  shape:BYTE;
  pad:BYTE;
 END;
 MouthPtr=POINTER TO Mouth;

 NewMouth=RECORD
  voice:NewNarrator;
  width:SHORTCARD;
  height:SHORTCARD;
  shape:BYTE;
  (*37*)sync:NarratorFlagSet;
 END;
 NewMouthPtr=POINTER TO NewMouth;

(*
 Synonyme mit einheitlicher Namensgebung
*)
 IONarrator=Narrator;
 IONarratorPtr=NarratorPtr;
 IONewNarrator=NewNarrator;
 IONewNarratorPtr=NewNarratorPtr;

END Narrator.noimp
