home *** CD-ROM | disk | FTP | other *** search
/ Mac Magazin/MacEasy 43 / Mac Magazin and MacEasy Magazine CD - Issue 43.iso / Software / Multimedia / Sound / PlayerPRO 4.6 Dev.Kit / MADH Library 4.6 / MADLibrary Source / SoundManager.c < prev    next >
Encoding:
Text File  |  1998-01-23  |  3.4 KB  |  129 lines  |  [TEXT/CWIE]

  1. /********************                        ***********************/
  2. //
  3. //    Player PRO 4.6 - DRIVER SOURCE CODE -
  4. //
  5. //    Library Version 4.6
  6. //
  7. //    To use with MAD Library for Mac: Symantec, CodeWarrior and MPW
  8. //
  9. //    Antoine ROSSET
  10. //    16 Tranchees
  11. //    1206 GENEVA
  12. //    SWITZERLAND
  13. //
  14. //    COPYRIGHT ANTOINE ROSSET 1996, 1997, 1998
  15. //
  16. //    Thank you for your interest in PlayerPRO !
  17. //
  18. //    FAX:            (+41 22) 346 11 97
  19. //    PHONE:             (+41 79) 203 74 62
  20. //    Internet:         rosset@dial.eunet.ch or RossetAntoine@bluewin.ch
  21. //
  22. /********************                        ***********************/
  23.  
  24. #include "RDriver.h"
  25. #include "RDriverInt.h"
  26.  
  27. /*************************/
  28.  
  29. SndChannelPtr CreateSndChannel( long init)
  30. {
  31.     SndChannelPtr     mySndChan;    // pointer to a sound channel
  32.     OSErr             myErr;
  33.  
  34.     mySndChan = 0L;
  35.     myErr = SndNewChannel( &mySndChan, sampledSynth, init, nil);
  36.     
  37.     return mySndChan;            // return SndChannelPtr
  38. }
  39.  
  40. OSErr    DBSndClose( MADDriverRec *inMADDriver)
  41. {
  42. OSErr        err;
  43. short            i;
  44.  
  45.     err = SndDisposeChannel( inMADDriver->MusicChannelPP, true);
  46.     inMADDriver->MusicChannelPP = 0L;
  47.  
  48.     DisposeRoutineDescriptor( (UniversalProcPtr) inMADDriver->TheHeader.dbhDoubleBack);
  49.  
  50.     inMADDriver->TheHeader.dbhDoubleBack = 0L;
  51.  
  52.     for ( i = 0;   i <= 1; i++) { DisposePtr( (Ptr) inMADDriver->TheHeader.dbhBufferPtr[i]); inMADDriver->TheHeader.dbhBufferPtr[i] = 0L;}
  53.  
  54.     return noErr;
  55. }
  56.  
  57. OSErr    InitDBSoundManager( MADDriverRec *inMADDriver, long init)
  58. {
  59.     OSErr            err = noErr;
  60.  
  61.     inMADDriver->MusicChannelPP = 0L;
  62.     inMADDriver->MusicChannelPP = CreateSndChannel( init);
  63.     if( inMADDriver->MusicChannelPP == 0L) return MADSoundManagerErr;
  64.     
  65.     err = DBSndPlay( inMADDriver, inMADDriver->MusicChannelPP);
  66.     return err;
  67. }
  68.  
  69. OSErr DBSndPlay ( MADDriverRec *inMADDriver, SndChannelPtr chan)
  70. {
  71.     SndDoubleBufferPtr             doubleBuffer;
  72.     short                         i;
  73.     OSErr                         err = noErr;
  74.     
  75.     inMADDriver->TheHeader.dbhCompressionID         = 0;
  76.     inMADDriver->TheHeader.dbhPacketSize             = 0;
  77.     
  78.     inMADDriver->TheHeader.dbhDoubleBack             = NewSndDoubleBackProc( &MyDoubleBackProc);
  79.     
  80.     inMADDriver->TheHeader.dbhSampleRate = inMADDriver->DriverSettings.outPutRate;
  81.     inMADDriver->TheHeader.dbhSampleSize = inMADDriver->DriverSettings.outPutBits;
  82.     
  83.     if( inMADDriver->DriverSettings.outPutMode == MonoOutPut) inMADDriver->TheHeader.dbhNumChannels = 1;
  84.     else inMADDriver->TheHeader.dbhNumChannels = 2;
  85.     
  86.     for (i = 0; i <= 1; i++)
  87.     {
  88.         doubleBuffer = (SndDoubleBufferPtr) MADNewPtrClear( sizeof (SndDoubleBuffer) + inMADDriver->BufSize + 20L, inMADDriver->lib);
  89.         if( doubleBuffer == 0L) return MADNeedMemory;
  90.  
  91.         doubleBuffer->dbNumFrames         = 0;
  92.         doubleBuffer->dbFlags             = 0;
  93.         doubleBuffer->dbUserInfo[ 0]    = (long) inMADDriver;
  94.  
  95.         MyDoubleBackProc( chan, doubleBuffer);
  96.         
  97.         inMADDriver->TheHeader.dbhBufferPtr[i] = doubleBuffer;
  98.     }
  99.     
  100.     err = SndPlayDoubleBuffer( chan, &inMADDriver->TheHeader);
  101.     if( err != noErr) return MADSoundManagerErr;
  102.     
  103.     return err;
  104. }
  105.  
  106. void StopChannel( MADDriverRec *inMADDriver)
  107. {
  108. SndCommand            cmd;
  109.  
  110.     cmd.cmd = quietCmd;
  111.     cmd.param1 = 0;
  112.     cmd.param2 = 0;
  113.     SndDoImmediate(    inMADDriver->MusicChannelPP,    &cmd);
  114.     
  115.     cmd.cmd = flushCmd;
  116.     cmd.param1 = 0;
  117.     cmd.param2 = 0;
  118.     SndDoImmediate(    inMADDriver->MusicChannelPP,    &cmd);
  119. }
  120.  
  121. void PlayChannel( MADDriverRec *inMADDriver)
  122. {
  123.     OSErr                    iErr;
  124.  
  125.     MyDoubleBackProc( inMADDriver->MusicChannelPP, inMADDriver->TheHeader.dbhBufferPtr[ 0]);
  126.     MyDoubleBackProc( inMADDriver->MusicChannelPP, inMADDriver->TheHeader.dbhBufferPtr[ 1]);
  127.  
  128.     iErr = SndPlayDoubleBuffer( inMADDriver->MusicChannelPP, &inMADDriver->TheHeader);
  129. }