home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
World of Shareware - Software Farm 2
/
wosw_2.zip
/
wosw_2
/
QBAS
/
RUKQ10.ZIP
/
RUCKMIDI.BI
< prev
next >
Wrap
Text File
|
1993-02-15
|
7KB
|
180 lines
'RUCKMIDI.BI 31-Jan-93 BETA 0.51 ------------------
'BETA NOT FOR PUBLIC RELEASE
'Do not distribute this release
'Do not create programs for distribution with this release
DECLARE FUNCTION RUCKMIDI% (SEG packinfo AS ANY)
CONST SysInfoMidi = 0, InitMidi = 1, ExitMidi = 2, AtExitMidi = 3
CONST LoadMidi = 4, PlayMidi = 5
CONST EndMidi = 8, PauseMidi = 9
CONST DeallocMidi = 10, FastFwdMidi = 11, OutMsgMidi = 12
CONST SetAllMidi = 20, SetVolumeMidi = 21, SetToneMidi = 22
CONST SetPatchMidi = 23, SetChMaskMidi = 24
CONST SetAllFMSBP = 30
TYPE DeallocMidiPackTYPE 'DMP
Func AS INTEGER
stat AS INTEGER
HandSeg AS INTEGER 'RUCKUS allocates DOS segment (para)
TypeFlag AS INTEGER '0=DOS para (must=0)
END TYPE '8
TYPE FastFwdMidiPackTYPE 'FFMP
Func AS INTEGER
stat AS INTEGER
TickCount AS LONG 'tick count to fast forward to
end type '8
TYPE GetMidiDataPackTYPE 'GDP
Func AS INTEGER
stat AS INTEGER
BytePos AS LONG 'current byte relative base ptr (27)
END TYPE '8
TYPE mInitMidiPackTYPE 'MIMP (can't use IMP with BASIC)
Func AS INTEGER
stat AS INTEGER
DeviceID AS INTEGER '0=AdLib melodic, 1=AdLib percussive
IOport AS INTEGER
PercCh AS INTEGER
ChMask AS INTEGER
Flags AS INTEGER '(see source)
InfoPtrOff AS INTEGER 'ret:far ptr to Midi info
InfoPtrSeg AS INTEGER
MidiExitPtrOff AS INTEGER 'ret:far ptr to Midi's ExitXB routine
MidiExitPtrSeg AS INTEGER
END TYPE '22
TYPE LoadMidiPackTYPE 'LMP
Func AS INTEGER
stat AS INTEGER
FilenamePtrOff AS INTEGER 'far ptr to filenameZ to load
FilenamePtrSeg AS INTEGER
StartPos AS LONG 'offset into file to start load at
LoadSize AS LONG 'number of bytes to load (or 0 for autosize)
LoadPtrOff AS INTEGER 'ret:DOS seg:offset (offset always 0)
LoadPtrSeg AS INTEGER
END TYPE '20
TYPE OutMsgMidiPackTYPE 'OMMP
Func AS INTEGER
stat AS INTEGER
Mstatus AS INTEGER 'status byte (8n, 9n...)
Mdata AS INTEGER 'data
END TYPE '8
TYPE PlaybackMidiPackTYPE 'PMBP
Func AS INTEGER
stat AS INTEGER
Mode AS INTEGER 'playback mode (0=interrupt FG,1=BG)
LoadPtrOff AS INTEGER 'seg:off to start of data to play
LoadPtrSeg AS INTEGER
END TYPE '10
TYPE PauseMidiPackTYPE 'PMP
Func AS INTEGER
stat AS INTEGER
Pause AS INTEGER '0=unpause else pause
END TYPE '6
TYPE SetFMProPackTYPE 'SFMPP (FM mixer control for SB PRO-compatibles)
Func AS INTEGER
stat AS INTEGER
IOport AS INTEGER 'base I/O port (&H220, &H240)
MasterVol AS INTEGER '0F0F (low=right ch, high=left,-1 no change)
Steer AS INTEGER '0=none,1=left,2=right,3=mute,-1 no change)
FMVol AS INTEGER '0F0F (low=right,high=left,cannot skip)
END TYPE '12
TYPE SetMidiPackTYPE 'SMP
Func AS INTEGER
stat AS INTEGER
Channel AS INTEGER 'channel to set (bit mask of channels 0-15)
Volume AS INTEGER 'volume adjust
Tone AS INTEGER 'tone adjust
ChMask AS INTEGER 'if bit=0 then that channel is ignored
PatchMapID AS INTEGER 'patch map ID
PatchMapPtrOff AS INTEGER 'far ptr to alternate patch map or
PatchMapPtrSeg AS INTEGER 'address of patch map ID selected
END TYPE '18
TYPE SysInfoMidiPackTYPE 'SIMP
Func AS INTEGER 'this (or any) TYPE will be expanded as needed
stat AS INTEGER 'to accomodate additional MIDI devices
Device0 AS INTEGER '=1 AdLib melodic mode available
D0port AS INTEGER '388h
D0mask AS INTEGER '
Device1 AS INTEGER '=1 AdLib percussive mode available
D1port AS INTEGER '388h
D1mask AS INTEGER
END TYPE '16
TYPE XitMidiPackTYPE 'XMP
Func AS INTEGER
stat AS INTEGER
END TYPE '4
'mid@deviceID dw 0 ;0 ;0=AdLib melodic, 1=AdLib percussive...
'mid@flags dw 0 ;2 ;bit0=1 use background processing
' ;bit1=1 disable program change event
' ;bit2-7 reserved (low byte used to send
' ;while high byte used to return info)
' ;bit8-13 reserved
' ;bit14=1 then CTMF file playing
' ;bit15=1 then AdLib ROL-convert
'mid@percChannel dw 0 ;4 ;<> 0 percussion channel mapped
'mid@end dw 0 ;6 ;=1 end of MIDI (not playing)
' ;BPTR used for possible mid@pauseMIDI merge
'mid@memDOS dw 0 ;8 ;DOS RAM available
'
' ;following data should be zeroed before each load
'
'mid@memUsed dw 0 ;10 ;K used by last load
'
' ;following data should be zeroed before each initial play
' ;from typeMIDI to chNotes
'
'typeMIDI dw 0 ;12 ;MIDI type (0 or 1)
'noTracks dw 0 ;14 ;number of tracks
'ticksQnote dw 0 ;16 ;ticks/quarter-note
'
'uSecsQnote dd 0 ;18 ;micro-secs/quarter-note
'tickCount dd 0 ;22 ;current tick count
'
'musicPtr dd 0 ;26 ;seg:off->current MIDI data byte
'currTrk dw 0 ;30 ;current MIDI track
'timeSig DB 0,0,0,0 ;32 ;nm,dn,MIDI clocks/beat,32nd notes/beat
'chPrograms DB 16 DUP (0) ;36 ;channel programs
'chVolumes DB 16 DUP (0) ;52 ;channel volume level (0-127)
'chNotes DB 16 DUP (0) ;68 ;channel note values (0-127)
'
'PlayClearSize = $-typeMIDI
' ;do not clear following
'chRelVolumes dw 16 DUP (0) ;84 ;-128 to +127 range (0=no change)
'chRelNotes dw 16 DUP (0) ;116 ;-128 to +127 range (0=no change)
' ;148 total
'MidiInfoSize = $-mid@deviceID
'
'EVEN ;local info
'mid@ChMask dw 0
'mid@init dw 0 ;=1 then initialized
'FastFwdTo dd 0 ;fast forward to this tick count
'FastFwdOn DB 0 ;fast forward on flag (0=off)
'mid@pause DB 0 ;=1 then MIDI play is paused
'enterMIDI DB 0 ;=1 then MIDI event called externally
'
'EVEN ;following needs to be clear before each play
'trkStats DB 64 DUP (0) ;current tracks' status
'trkPtrs dw 64 DUP (0) ;current offsets to MIDI tracks
'absTimes dd 64 DUP (0) ;current absolute time of MIDI tracks
'
'PlayClearSize2 = $-trkStats
'
'mid@CTMFInsPtr dw 0 ;instruments ptr relative music data segment
'mid@CTMFInsCnt dw 0 ;number of patches in file
'
'END RUCKMidi.BI -----------------------