home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 2 / Apprentice-Release2.iso / Source Code / Pascal / Games / Glypha 3.02 / source / Code ƒ / C-Sound.p < prev    next >
Encoding:
Text File  |  1990-03-31  |  3.2 KB  |  152 lines  |  [TEXT/PJMM]

  1. {}
  2. {  File: Sound.p}
  3. {}
  4. { Copyright Symantec Corporation 1988    }
  5. { Copyright Apple Computer, Inc. 1986}
  6. { All Rights Reserved}
  7. {}
  8.  
  9. unit Sound;
  10.  
  11. interface
  12.  
  13.     const
  14.  
  15.         {Command Numbers}
  16.         nullCmd = 0;
  17.         initCmd = 1;
  18.         freeCmd = 2;
  19.         quietCmd = 3;
  20.         flushCmd = 4;
  21.         waitCmd = 10;
  22.         pauseCmd = 11;
  23.         resumeCmd = 12;
  24.         callBackCmd = 13;
  25.         syncCmd = 14;
  26.         emptyCmd = 15;
  27.         tickleCmd = 20;
  28.         requestNextCmd = 21;
  29.         howOftenCmd = 22;
  30.         wakeUpCmd = 23;
  31.         availableCmd = 24;
  32.         noteCmd = 40;
  33.         restCmd = 41;
  34.         freqCmd = 42;
  35.         ampCmd = 43;
  36.         timbreCmd = 44;
  37.         waveTableCmd = 60;
  38.         phaseCmd = 61;
  39.         soundCmd = 80;
  40.         bufferCmd = 81;
  41.         rateCmd = 82;
  42.         midiDataCmd = 100;
  43.  
  44.         { Constant for setting pointer bit of command number }
  45.         setPtrBit = $8000;
  46.  
  47.         stdQLength = 128;
  48.         stdQLengthMin1 = stdQLength - 1;
  49.  
  50.         {Error Returns}
  51.         noHardware = -200;
  52.         notEnoughHardware = -201;
  53.         queueFull = -203;
  54.         resProblem = -204;
  55.         badChannel = -205;
  56.         badFormat = -206;
  57.  
  58.         { Wave Table Synthesizer }
  59.         initChanLeft = $02;    {left stereo channel}
  60.         initChanRight = $03;    {right stereo channel}
  61.         initChan0 = $04;    {channel 0 - wave table only}
  62.         initChan1 = $05;    {channel 1 - wave table only}
  63.         initChan2 = $06;    {channel 2 - wave table only}
  64.         initChan3 = $07;    {channel 3 - wave table only}
  65.         initSRate22k = $20;    {22k sampling rate}
  66.         initSRate44k = $30;    {44k sampling rate}
  67.         initMono = $80;    {monophonic channel}
  68.         initStereo = $C0;    {stereo channel}
  69.  
  70.     type
  71.         Time = LONGINT;
  72.  
  73.         SndCommand = packed record
  74.                 cmd: INTEGER;
  75.                 param1: INTEGER;
  76.                 param2: LONGINT;
  77.             end;
  78.  
  79.         ModifierStub = packed record
  80.                 nextStub: ^ModifierStub;
  81.                 code: ProcPtr;
  82.                 userInfo: LONGINT;
  83.                 count: Time;
  84.                 every: Time;
  85.                 flags: SignedByte;
  86.                 hState: SignedByte;
  87.             end;
  88.         ModifierStubPtr = ^ModifierStub;
  89.  
  90.         SndChannel = packed record
  91.                 nextChan: ^SndChannel;
  92.                 firstMod: ^ModifierStub;
  93.                 callBack: ProcPtr;
  94.                 userInfo: Ptr;
  95.  
  96.                             {The following is for internal Sound Manager use only.}
  97.                 wait: Time;
  98.                 cmdInProgress: SndCommand;
  99.                 flags: INTEGER;
  100.                 qLength, qHead, qTail: INTEGER;
  101.                 queue: array[0..StdQLengthMin1] of SndCommand;
  102.             end;
  103.         SndChannelPtr = ^SndChannel;
  104.  
  105.  
  106.         SoundHeader = record
  107.                 samplePtr: Ptr;    {if NIL then samples are in sampleArea}
  108.                 length: LONGINT;
  109.                 sampleRate: Fixed;
  110.                 loopStart, loopEnd: LONGINT;
  111.                 baseNote: INTEGER;
  112.                             {sampleArea    : PACKED ARRAY [0..0] OF Byte; -- not included, but logically here}
  113.             end;
  114.         SoundHeaderPtr = ^SoundHeader;
  115.  
  116.  
  117.  
  118.     {Manager Routines}
  119.  
  120.     function SndDoCommand (chan: SndChannelPtr; cmd: SndCommand; noWait: BOOLEAN): OSErr;
  121.     inline
  122.         $A803;
  123.  
  124.     function SndDoImmediate (chan: SndChannelPtr; cmd: SndCommand): OSErr;
  125.     inline
  126.         $A804;
  127.  
  128.     function SndAddModifier (chan: SndChannelPtr; modifier: ProcPtr; id: INTEGER; init: LONGINT): OSErr;
  129.     inline
  130.         $A802;
  131.  
  132.     function SndNewChannel (var chan: SndChannelPtr; synth: INTEGER; init: LONGINT; userRoutine: ProcPtr): OSErr;
  133.     inline
  134.         $A807;
  135.  
  136.     function SndDisposeChannel (chan: SndChannelPtr; quietNow: BOOLEAN): OSErr;
  137.     inline
  138.         $A801;
  139.  
  140.     function SndPlay (chan: SndChannelPtr; sndHdl: Handle; async: BOOLEAN): OSErr;
  141.     inline
  142.         $A805;
  143.  
  144.     function SndControl (id: INTEGER; var cmd: SndCommand): OSErr;
  145.     inline
  146.         $A806;
  147.  
  148. implementation
  149. end.
  150.  
  151.  
  152.