home *** CD-ROM | disk | FTP | other *** search
Text File | 1994-11-09 | 1.6 KB | 66 lines | [TEXT/R*ch] |
- void
- PlaySoundFile(FSSpec *fss)
- {
- OSErr err;
- short refNum;
- ulong srcSize;
- HParamBlockRec pb;
- Handle sndHandle;
- ulong maxblock = MaxBlock() - (32 * 1024);
- short id;
- long type;
- Str255 name;
- SCStatus status;
-
- if (SndNewChannel(&sndChannel, sampledSynth, 0, nil) != noErr) {
- SysBeep(1);
- return;
- }
-
- SetResLoad(false);
- if ((refNum = HOpenResFile(fss->vRefNum, fss->parID,
- fss->name, fsRdPerm)) == -1) {
- SysBeep(1);
- return;
- }
- sndHandle = Get1IndResource('snd ', 1);
- if (sndHandle == nil) {
- SysBeep(1);
- return;
- }
-
- GetResInfo(sndHandle, &id, &type, name);
- srcSize = MaxSizeRsrc(sndHandle);
- SetResLoad(true);
-
- if (srcSize < maxblock) {
- dataHandle = Get1Resource('snd ', id);
- DetachResource(dataHandle);
- HLock(dataHandle);
- } else {
- dataHandle = TempNewHandle(srcSize, &err);
- if (dataHandle == nil) {
- SysBeep(1);
- return;
- }
- HLock(dataHandle);
- ReadPartialResource(sndHandle, 0, *dataHandle, srcSize);
- if (ResError() != noErr)
- Debugger();
- }
-
- CloseResFile(refNum);
- SndPlay(sndChannel, dataHandle, true);
-
- do {
- WasteTime(15);
- SndChannelStatus(sndChannel, sizeof(SCStatus), &status);
- } while (status.scChannelBusy == true);
-
- SndDisposeChannel(sndChannel, true);
- sndChannel = nil;
- quitting = true;
- DisposeHandle(dataHandle);
- dataHandle = nil;
- }
-