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 / BeOS Examples / DriverClass.cpp next >
Encoding:
Text File  |  1998-02-11  |  2.5 KB  |  109 lines  |  [????/????]

  1. /********************                        ***********************/
  2. //
  3. //    Player PRO 4.6 -- MAD Class for BeOS -
  4. //
  5. //    Library Version 4.6
  6. //
  7. //    To use with MAD Library for BeOS: CodeWarrior
  8. //
  9. //    Antoine ROSSET
  10. //    16 Tranchees
  11. //    1206 GENEVA
  12. //    SWITZERLAND
  13. //
  14. //    Thank you for your interest in PlayerPRO !
  15. //
  16. //    FAX:            (+41 22) 346 11 97
  17. //    PHONE:             (+41 79) 203 74 62
  18. //    Internet:         rosset@dial.eunet.ch
  19. //
  20. /********************                        ***********************/
  21.  
  22. #include "AudioStream.h"
  23. #include "RDriver.h"
  24. #include "DriverClass.h"
  25.  
  26. static MADDriverRec                *MADDriver;
  27.  
  28. static bool trackerStreamPlay(void *user, char *buffer, unsigned long count, void* header);
  29.  
  30. MADDriverClass::MADDriverClass( MADDriverSettings *init)
  31. {
  32.     if( MADInitLibrary( "Plugs", init->sysMemory) != noErr) debugger("Small Problem I...");
  33. //    curDriverRec = MADDriver = MADGetMADDriverPtr();
  34.     
  35.     if( MADCreateDriver( init, &MADDriver) != noErr) debugger("Small Problem II...");
  36.     curDriverRec = MADDriver;
  37.     
  38.     /////////////
  39.     
  40.     dacStream = new BDACStream();
  41.     
  42.     mPlayer = new BSubscriber("PlayerPRO");
  43.     if (mPlayer)
  44.     {
  45.         long    error, chan;
  46.         
  47.         error = mPlayer->Subscribe( dacStream);
  48.         
  49.         if( init->outPutMode == MonoOutPut) chan = 1;
  50.         else chan = 2;
  51.         
  52.         error = dacStream->SetSamplingRate( init->outPutRate>>16L );
  53.         
  54.     //    error = dacStream->SetStreamBuffers( 1, 4096);
  55.         
  56.         error = mPlayer->EnterStream(NULL, FALSE, this ,trackerStreamPlay, NULL, TRUE);
  57.     }
  58. }
  59.  
  60. MADDriverClass::~MADDriverClass()
  61. {
  62.     delete mPlayer;
  63.     
  64.     MADDisposeDriver( curDriverRec);
  65.     MADDisposeLibrary();
  66. }
  67.  
  68. extern "C" {
  69. Boolean DirectSave( Ptr myPtr, MADDriverSettings *driverType, MADDriverRec *intDriver);
  70. }
  71.  
  72. static bool trackerStreamPlay(void *user, char *buffer, unsigned long count, void* header)
  73. {
  74.     if( count != 2048) debugger("count error");
  75.     
  76.     DirectSave( (Ptr) buffer, &MADDriver->DriverSettings, MADDriver);
  77.     
  78.     if( MADDriver->DriverSettings.outPutBits == 8)
  79.     {
  80.         for( long i = 0; i < count; i++) buffer[i] -= 0x80;
  81.     }
  82.     
  83.     return true;
  84. }
  85.  
  86. void MADDriverClass::LoadMusic( BFile & file)
  87. {
  88. //    file.Open(O_RDWR);
  89.     
  90.     long len = file.Seek(0, 2);
  91.     char * ptr = new char[len];
  92.     file.Seek(0, 0);
  93.     file.Read(ptr, len);
  94.     
  95.     ///////////
  96.     
  97.     if( MADLoadMusicPtr( &curMusic, (Ptr) ptr)) debugger( "error LoadPtr");
  98.     
  99.     MADAttachDriverToMusic( curDriverRec, curMusic);
  100.     
  101.     if( MADStartDriver( curDriverRec)) debugger( "error MADPlay");                        // Turn interrupt driver function ON
  102.     MADPlayMusic( curDriverRec);                                                            // Read the current partition in memory
  103.     
  104.     //////////
  105.     
  106. //    file.close();
  107.     
  108.     delete[] ptr;
  109. }