'=========================================================================== ' Subject: 8-BIT WAV PLAYER Date: 08-27-98 (22:51) ' Author: Darryl R. Waltz Code: QB, QBasic, PDS ' Origin: drw@telusplanet.net Packet: SOUND.ABC '=========================================================================== ' Program: NEWWAVE.BAS (QBasic) ' Author: Darryl R. Waltz ' Date: 27th August 1998 ' email: drw@telusplanet.net ' This program plays an 8-bit WAV file using SoundBlaster DSP. ' Load SMARTDRV.EXE when in raw DOS to load wave data into virtual memory. ' QBasic run in Windows 95/98 doesn't need SMARTDRV.EXE, ' Windows 95/98 already has a virtual memory system. ' Why use virtual memory?... ' because sound output will be jumpy if playing .wav file off hard drive. CLS LOCATE 1, 1 PRINT "Please wait...loading .wav file into virtual memory" filename$ = "c:\qb\almost.wav" ' Path to .wav file OPEN filename$ FOR BINARY AS #1 ' ********************************** bytesremaining& = LOF(1) ' load .wav file into virtual memory. FOR i& = 1 TO bytesremaining& ' SMARTDRV.EXE in DOS, or Win95/98 aa$ = INPUT$(1, #1) ' ********************************** NEXT i& ' CLOSE #1 ' PRINT "Playing .Wav file..." '************************* Delay% = 35 'SET DELAY FOR YOUR SYSTEM '************************* filename$ = "c:\qb\almost.wav" ' Path to .wav file OPEN filename$ FOR BINARY AS #1 dummy$ = INPUT$(100, #1) 'Discard first 100 bytes (to avoid header & static) bytesremaining& = LOF(1) - 100 buffermax% = 100 'can be as low as 10 on my system WAIT 556, 128, 255 OUT 556, &HD1 'turn speaker on DO IF buffermax% > bytesremaining& THEN ' buffermax% = bytesremaining& ' ****************** bytesremaining& = 0 ' Calculate buffer size ELSE ' ****************** bytesremaining& = bytesremaining& - buffermax% ' END IF ' buffer$ = INPUT$(buffermax%, #1) ' create buffer using INPUT$ Function FOR y% = 1 TO buffermax% ' WAIT 556, 128, 255 ' ****************** OUT &H22C, &H10 ' loop through buffermax% WAIT 556, 128, 255 ' and play each byte OUT &H22C, ASC(MID$(buffer$, y%, 1)) ' in buffer$ FOR s% = 1 TO Delay%: NEXT s% ' ****************** NEXT y% ' LOOP UNTIL bytesremaining& < 100 WAIT 556, 128, 255 OUT &H22C, &HD3 'Turn speaker off CLOSE #1 END