home *** CD-ROM | disk | FTP | other *** search
- /********************************************************/
- /*
- Player PRO 4.4 -- Music Driver EXAMPLE
-
- Library Version 3.0
-
- To use with MusicLibrary 3.0 for Think C & CodeWarrior
-
- Antoine ROSSET
- 16 Tranchees
- 1206 GENEVA
- SWITZERLAND
-
- FAX: (41 22) 346 11 97
- Compuserve: 100277,164
- Internet: rosset@dial.eunet.ch
- */
- /********************************************************/
-
- #include "MAD.h"
- #include "RDriver.h"
- #include "gestaltequ.h"
- #include "sound.h"
-
- static Boolean Stereo, StereoMixing, NewSoundManager, hasASC;
-
- main()
- {
- long gestaltAnswer, sndSize, tL;
- short myBit, iFileRefI, x, i;
- NumVersion nVers;
- Point where = { -1, -1};
- SFReply reply;
- SFTypeList aType;
- OSErr iErr = noErr;
- Ptr tempPtr;
- MADPartition aPartition;
- Boolean End;
-
- /*************** ****************/
- /****** Toolbox Initialization **********/
- /*************** ****************/
-
-
- InitGraf( &qd.thePort);
- InitFonts();
- FlushEvents(everyEvent,0);
- InitWindows();
- TEInit();
- InitMenus();
- InitCursor();
- MaxApplZone();
-
- /*************** ****************/
- /****** HARDWARE IDENTIFICATION AND CHECK **********/
- /*************** ****************/
-
- /****************/
- /** ASC CHIP ? **/
- /****************/
-
- Gestalt( gestaltHardwareAttr, &gestaltAnswer);
- myBit = gestaltHasASC;
- if( BitTst( &gestaltAnswer, 31-myBit) == false) hasASC = false;
- else hasASC = true;
-
- /**************/
- /** STEREO ? **/
- /**************/
-
- Gestalt( gestaltSoundAttr, &gestaltAnswer);
- myBit = gestaltStereoCapability;
- Stereo = BitTst( &gestaltAnswer, 31-myBit);
-
- /*********************/
- /** STEREO MIXING ? **/
- /*********************/
-
- myBit = gestaltStereoMixing;
- StereoMixing = BitTst( &gestaltAnswer, 31-myBit);
-
- /****************************/
- /** SOUND MANAGER >= 3.0 ? **/
- /****************************/
-
- nVers = SndSoundManagerVersion();
- if( nVers.majorRev >= 3) NewSoundManager = true;
- else NewSoundManager = false;
-
- /****************************************************/
- /****************************************************/
-
- /*******************************************************************************************/
- /****** MAD Library Initialisation : choose the best driver for the current hardware ******/
- /****** ******/
- /****** Standard initialization with 4 tracks... ******/
- /*******************************************************************************************/
- PtrSystem = false;
- if( Stereo == true && StereoMixing == true)
- {
- if( NewSoundManager == true)
- {
- if( RInitMusic( SMStereo, 4, false) != noErr) ExitToShell();
- }
- else if( hasASC == true)
- {
- if( RInitMusic( ASCStereo, 4, false) != noErr) ExitToShell();
- }
- else if( RInitMusic( SMDSP, 4, false) != noErr) ExitToShell();
- }
- else
- {
- if( NewSoundManager == true)
- {
- if( RInitMusic( SMMono, 4, false) != noErr) ExitToShell();
- }
- else if( hasASC == true)
- {
- if( RInitMusic( ASCMono, 4, false) != noErr) ExitToShell();
- }
- else DebugStr("\pNo Driver for your Mac!");
- }
-
- /*********************************/
- /*********************************/
- /*********************************/
-
- /****** Choose a MAD ('MADF') or a MODs ('STrk') File ********/
- End = false;
-
- while( End == false)
- {
- FlushEvents( everyEvent, 0);
- aType[ 0] = 'MADF';
- aType[ 1] = 'STrk';
- SFGetFile( where, "\p", 0L, 2, aType, 0L, &reply);
-
- if( !reply.good) End = true;
- else
- {
- SetVol( 0L, reply.vRefNum);
-
- if( reply.fType == 'STrk') // **** MOD File ****
- {
- iErr = FSOpen( reply.fName, 0, &iFileRefI);
- if( iErr) DebugStr( "\pProblemo ??");
-
- GetEOF( iFileRefI, &sndSize);
-
- tempPtr = NewPtr( sndSize);
- FSRead( iFileRefI, &sndSize, tempPtr);
- FSClose( iFileRefI);
-
- ConvertMod2Mad( tempPtr, sndSize, &aPartition);
- RInstallMADF( aPartition);
-
- DisposPtr( tempPtr); tempPtr = 0L;
- }
- else if( reply.fType == 'MADF') // **** MAD File ****
- {
- /*** To load a MAD File *********/
- if( RLoadMusic( reply.fName) != noErr) Debugger();
-
- /*
- *** TO OPEN A MAD RESOURCE ***
-
- To create a MAD Resource, use Auto-Exec export from Player PRO !!!!
- And load the resource with: by example...
-
- RLoadMusicRsrc( 'MADF', 3124); for example...
- */
- }
- else DebugStr("\pUh Uh...");
-
-
- /****************************************/
- /**** Update the tracks number !! *******/
- /****************************************/
- if( theFileInt->Tracks != DriveTrackNo)
- {
- DriveTrackNo = theFileInt->Tracks;
- ChangeTrackNo( DriveTrackNo);
- }
- /****************************************/
-
- /****/
- // Set all track volumes to 0
-
- for( i = 0; i < MAXTRACK; i++)VolExt[ i] = 0;
-
- RPlayMusic();
- Reading = true;
-
- /****/
- // Increase slowly the volume
-
- for( x = 0; x <= 64; x++)
- {
- for( i = 0; i < MAXTRACK; i++) VolExt[ i] = x;
- Delay( 1, &tL);
- }
-
- while( !Button())
- {
- /** Do what you want here.... **/
- /** Bla bla... **/
- }
-
- /****/
- // Decrease slowly the volume
-
- for( x = 64; x >= 0; x--)
- {
- for( i = 0; i < MAXTRACK; i++) VolExt[ i] = x;
- Delay( 1, &tL);
- }
-
-
- Reading = false;
- RStopMusic(); // Stop music
-
- CleanDriver();
-
- RClearMusic(); // Dispose the current music
- }
- }
- RQuitMusic(); // Dispose music driver
-
- FlushEvents( everyEvent, 0);
- ExitToShell();
- }