home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Monster Media 1994 #1
/
monster.zip
/
monster
/
PROG_BAS
/
QBSAMPLE.ZIP
/
QBSAMPLE.BAS
< prev
next >
Wrap
BASIC Source File
|
1994-01-18
|
2KB
|
101 lines
DECLARE FUNCTION samplebyte% (bp%)
DECLARE SUB writedsp (byte%, bp%)
DECLARE SUB sbreset (bp%)
'QB4.5 code to record a sample from the
'Soundblaster's Mic/Line Input and then
'play it back. It does not detect for a
'Soundblaster, it's assumed that one is
'available.
'This will be too slow in the IDE - run
'as a standalone .EXE file.
'(C) Copyright 1994 by Tim Gerchmez
'This code may be freely shared and
'distributed by any means desired.
bp% = &H220 'Soundblaster Base Port, change to &h240 or whatever
'for different hardware configuration
CALL sbreset(bp%) 'Reset the Soundblaster card
CLS : PRINT
PRINT "Soundblaster Sample/Playback (direct, non-DMA)"
PRINT
INPUT "Length of Sample (1-32766)"; ls%
IF ls% < 1 OR ls% > 32766 THEN END
PRINT
PRINT "Speak into the Microphone or start input to"
PRINT "Line In jack. Press a key to begin sampling."
SLEEP
PRINT : PRINT "Now Sampling..."
REDIM smp%(1 TO ls%)
FOR t% = 1 TO ls%
smp%(t%) = samplebyte(bp%)
FOR u% = 1 TO 25: NEXT u% 'Delay a little
NEXT t%
'Now play the sample back
CALL writedsp(&HD1, bp%) 'Turn speaker on
FOR t% = 1 TO ls%
CALL writedsp(&H10, bp%)
CALL writedsp(smp%(t%), bp%)
NEXT t%
CALL writedsp(&HD3, bp%) 'Turn speaker off
FUNCTION samplebyte% (bp%)
'Samples a byte from the SB's ADC, and returns
'the resultant byte. Call with BP% = SB base port
'(normally &h220)
CALL writedsp(&H20, bp%) 'Command to sample one byte
datavail% = bp% + 14
dly:
IF INP(datavail%) AND &H80 = 0 THEN GOTO dly
datread% = bp% + 10
bt% = INP(datread%)
samplebyte% = bt%
END FUNCTION
SUB sbreset (bp%)
'Resets the Soundblaster chip -
'call with bp% = Base Port (normally &h220)
dspreset% = bp% + 6
OUT dspreset%, 1
FOR t% = 1 TO 10
a% = INP(dspreset%) 'Delay loop, give SB time to reset
NEXT t%
OUT dspreset%, 0
dspread% = bp% + 10
FOR t% = 1 TO 10
a% = INP(dspread%)
NEXT t%
END SUB
SUB writedsp (byte%, bp%)
'Writes to the Soundblaster's DSP Command Channel -
'call with bp% = SB base port (normally &h220)
'byte% = byte to write to DSP
dspcmd% = bp% + 12
FOR t% = 1 TO 8
q% = INP(dspcmd%) 'Delay to give SB time to process code
NEXT t%
OUT dspcmd%, byte%
END SUB