mirror of
https://github.com/elliotnunn/supermario.git
synced 2025-02-27 23:29:06 +00:00
407 lines
12 KiB
Plaintext
407 lines
12 KiB
Plaintext
; Version: 3.24
|
|
; Created: Friday, October 20, 1989 at 9:54:13 PM
|
|
;
|
|
; File: Sound.a
|
|
;
|
|
; Assembler Interface to the Macintosh Libraries
|
|
; Copyright Apple Computer, Inc. 1986-1990
|
|
; All Rights Reserved
|
|
;
|
|
;--------------------------------------------------------------------
|
|
|
|
IF &TYPE('__IncludingSound__') = 'UNDEFINED' THEN
|
|
__IncludingSound__ SET 1
|
|
|
|
|
|
; _______________________________________________________________________
|
|
;
|
|
; Sound Driver
|
|
;
|
|
; _______________________________________________________________________
|
|
|
|
swMode EQU -1
|
|
ftMode EQU 1
|
|
ffMode EQU 0
|
|
|
|
FFSynthRec RECORD 0
|
|
mode DS.W 1
|
|
count DS.L 1
|
|
waveBytes DS.B 30001
|
|
ENDR
|
|
|
|
Tone RECORD 0
|
|
count DS.W 1
|
|
amplitude DS.W 1
|
|
duration DS.W 1
|
|
toneRecSize EQU *
|
|
ENDR
|
|
|
|
SWSynthRec RECORD 0
|
|
mode DS.W 1
|
|
triplets DS.B 5001*Tone.toneRecSize
|
|
ENDR
|
|
|
|
FTSoundRec RECORD 0
|
|
duration DS.W 1
|
|
sound1Rate DS.L 1
|
|
sound1Phase DS.L 1
|
|
sound2Rate DS.L 1
|
|
sound2Phase DS.L 1
|
|
sound3Rate DS.L 1
|
|
sound3Phase DS.L 1
|
|
sound4Rate DS.L 1
|
|
sound4Phase DS.L 1
|
|
sound1Wave DS.L 1
|
|
sound2Wave DS.L 1
|
|
sound3Wave DS.L 1
|
|
sound4Wave DS.L 1
|
|
ENDR
|
|
|
|
FTSynthRec RECORD 0
|
|
mode DS.W 1
|
|
sndRec DS.L 1
|
|
ENDR
|
|
; _______________________________________________________________________
|
|
;
|
|
; Sound Manager constants
|
|
;
|
|
; _______________________________________________________________________
|
|
|
|
synthCodeRsrc EQU 'snth'
|
|
soundListRsrc EQU 'snd '
|
|
|
|
rate22khz EQU $56EE8BA3 ; 22254.54545
|
|
rate11khz EQU $2B7745D1 ; 11127.27273
|
|
|
|
; synthesizer numbers for SndNewChannel
|
|
|
|
squareWaveSynth EQU 1 ; square wave synthesizer
|
|
waveTableSynth EQU 3 ; wave table synthesizer
|
|
sampledSynth EQU 5 ; sampled sound synthesizer
|
|
|
|
; Command Numbers
|
|
|
|
nullCmd EQU 0
|
|
initCmd EQU 1
|
|
freeCmd EQU 2
|
|
quietCmd EQU 3
|
|
flushCmd EQU 4
|
|
reInitCmd EQU 5
|
|
|
|
waitCmd EQU 10
|
|
pauseCmd EQU 11
|
|
resumeCmd EQU 12
|
|
callBackCmd EQU 13
|
|
syncCmd EQU 14
|
|
emptyCmd EQU 15
|
|
|
|
tickleCmd EQU 20
|
|
requestNextCmd EQU 21
|
|
howOftenCmd EQU 22
|
|
wakeUpCmd EQU 23
|
|
availableCmd EQU 24
|
|
versionCmd EQU 25
|
|
totalLoadCmd EQU 26
|
|
loadCmd EQU 27
|
|
|
|
scaleCmd EQU 30
|
|
tempoCmd EQU 31
|
|
|
|
freqDurationCmd EQU 40
|
|
restCmd EQU 41
|
|
freqCmd EQU 42
|
|
ampCmd EQU 43
|
|
timbreCmd EQU 44
|
|
getAmpCmd EQU 45
|
|
waveTableCmd EQU 60
|
|
phaseCmd EQU 61
|
|
|
|
soundCmd EQU 80
|
|
bufferCmd EQU 81
|
|
rateCmd EQU 82
|
|
continueCmd EQU 83
|
|
doubleBufferCmd EQU 84
|
|
getRateCmd EQU 85
|
|
|
|
sizeCmd EQU 90
|
|
convertCmd EQU 91
|
|
|
|
stdQLength EQU 128
|
|
dataOffsetFlag EQU $8000
|
|
|
|
waveInitChannelMask EQU $07
|
|
waveInitChannel0 EQU $04
|
|
waveInitChannel1 EQU $05
|
|
waveInitChannel2 EQU $06
|
|
waveInitChannel3 EQU $07
|
|
|
|
; channel initialization parameters
|
|
|
|
initPanMask EQU $0003 ; mask for right/left pan values
|
|
initSRateMask EQU $0030 ; mask for sample rate values
|
|
initStereoMask EQU $00C0 ; mask for mono/stereo values
|
|
initCompMask EQU $FF00 ; mask for compression IDs
|
|
|
|
initChanLeft EQU $0002 ; left stereo channel
|
|
initChanRight EQU $0003 ; right stereo channel
|
|
initSRate22k EQU $0020 ; 22k sampling rate
|
|
initMono EQU $0080 ; monophonic channel
|
|
initStereo EQU $00C0 ; stereo channel
|
|
initNoInterp EQU $0004 ; no linear interpolation
|
|
initNoDrop EQU $0008 ; no drop-sample conversion
|
|
initMACE3 EQU $0300 ; MACE 3:1
|
|
initMACE6 EQU $0400 ; MACE 6:1
|
|
|
|
initChan0 EQU $0004 ; channel 0 - wave table only
|
|
initChan1 EQU $0005 ; channel 1 - wave table only
|
|
initChan2 EQU $0006 ; channel 2 - wave table only
|
|
initChan3 EQU $0007 ; channel 3 - wave table only
|
|
|
|
stdSH EQU $0
|
|
extSH EQU $FF
|
|
cmpSH EQU $FE
|
|
|
|
notCompressed EQU 0
|
|
twoToOne EQU 1
|
|
eightToThree EQU 2
|
|
threeToOne EQU 3
|
|
sixToOne EQU 4
|
|
|
|
outsideCmpSH EQU 0
|
|
insideCmpSH EQU 1
|
|
aceSuccess EQU 0
|
|
aceMemFull EQU 1
|
|
aceNilBlock EQU 2
|
|
aceBadComp EQU 3
|
|
aceBadEncode EQU 4
|
|
aceBadDest EQU 5
|
|
aceBadCmd EQU 6
|
|
sixToOnePacketSize EQU 8
|
|
threeToOnePacketSize EQU 16
|
|
stateBlockSize EQU 64
|
|
leftOverBlockSize EQU 32
|
|
|
|
firstSoundFormat EQU 1
|
|
secondSoundFormat EQU 2
|
|
|
|
dbBufferReady EQU $00000001
|
|
dbLastBuffer EQU $00000004
|
|
|
|
sysBeepDisable EQU $0000
|
|
sysBeepEnable EQU $0001
|
|
|
|
unitTypeNoSelection EQU $FFFF
|
|
unitTypeSeconds EQU $0000
|
|
|
|
|
|
noneCompType EQU 'NONE' ; use no compression on samples
|
|
MACE3CompType EQU 'MAC3' ; use MACE 3:1 compression on samples
|
|
MACE6CompType EQU 'MAC6' ; use MACE 6:1 compression on samples
|
|
|
|
|
|
; _______________________________________________________________________
|
|
;
|
|
; Sound Manager structures
|
|
;
|
|
; _______________________________________________________________________
|
|
|
|
SndCommand RECORD 0
|
|
cmd DS.W 1 ; INTEGER
|
|
param1 DS.W 1 ; INTEGER
|
|
param2 DS.L 1 ; LONGINT
|
|
sndCSize EQU * ; size of SndCommand
|
|
ENDR
|
|
|
|
SndChannel RECORD 0
|
|
nextChan DS.L 1 ; ^SndChannel
|
|
firstMod DS.L 1 ; Ptr
|
|
callBack DS.L 1 ; ProcPtr
|
|
userInfo DS.L 1
|
|
|
|
; The following is for internal Sound Manager use only.
|
|
|
|
wait DS.L 1 ; Time [LONGINT]
|
|
cmdInProgress DS SndCommand
|
|
flags DS.W 1 ; INTEGER
|
|
qLength DS.W 1 ; INTEGER
|
|
qHead DS.W 1 ; INTEGER
|
|
qTail DS.W 1 ; INTEGER
|
|
queue DS stdQLength*SndCommand.sndCSize
|
|
sndChSize EQU * ; size of SndChannel
|
|
ENDR
|
|
|
|
SoundHeader RECORD 0
|
|
samplePtr DS.L 1 ; Ptr - if NIL then samples are in sampleArea
|
|
length DS.L 1 ; LONGINT
|
|
sampleRate DS.L 1 ; Fixed
|
|
loopStart DS.L 1 ; LONGINT
|
|
loopEnd DS.L 1 ; LONGINT
|
|
baseFrequency DS.W 1 ; INTEGER
|
|
;sampleArea DS.B 0 ; PACKED ARRAY [0..0] OF Byte
|
|
ENDR
|
|
|
|
SMStatus RECORD 0
|
|
smMaxCPULoad DS.W 1
|
|
smNumChannels DS.W 1
|
|
smCurCPULoad DS.W 1
|
|
ENDR
|
|
|
|
SCStatus RECORD 0
|
|
scStartTime DS.L 1
|
|
scEndTime DS.L 1
|
|
scCurrentTime DS.L 1
|
|
scChannelBusy DS.B 1
|
|
scChannelDisposed DS.B 1
|
|
scChannelPaused DS.B 1
|
|
scUnused DS.B 1
|
|
scChannelAttributes DS.L 1
|
|
scCPULoad DS.L 1
|
|
ENDR
|
|
|
|
AudioSelection RECORD 0
|
|
unitType DS.L 1
|
|
selStart DS.L 1 ; Fixed;
|
|
selEnd DS.L 1 ; Fixed;
|
|
ENDR
|
|
|
|
SndDoubleBuffer RECORD 0
|
|
dbNumFrames DS.L 1
|
|
dbFlags DS.L 1
|
|
dbUserInfo DS.L 2
|
|
dbSoundData EQU *
|
|
ENDR
|
|
|
|
SndDoubleBufferHeader RECORD 0
|
|
dbhNumChannels DS.W 1
|
|
dbhSampleSize DS.W 1
|
|
dbhCompressionID DS.W 1
|
|
dbhPacketSize DS.W 1
|
|
dbhSampleRate DS.L 1
|
|
dbhBufferPtr DS.L 2
|
|
dbhDoubleBack DS.L 1
|
|
SndDoubleBufferHeaderSz EQU *
|
|
ENDR
|
|
|
|
; _______________________________________________________________________
|
|
;
|
|
; MACE structures
|
|
;
|
|
; _______________________________________________________________________
|
|
|
|
|
|
LeftOverBlock RECORD 0
|
|
count DS.W 1
|
|
sampleArea DS.W leftOverBlockSize
|
|
ENDR
|
|
|
|
CmpSoundHeader RECORD 0
|
|
samplePtr DS.L 1 ; if NIL then samples are in sampleArea
|
|
numChannels DS.L 1 ; number of channels mono = 1
|
|
sampleRate DS.L 1 ; sample rate in Apples Fixed point representation
|
|
loopStart DS.L 1 ; loopStart of sound before compression
|
|
loopEnd DS.L 1 ; loopEnd of sound before compression
|
|
encode DS.B 1 ; data structure used , stdSH, extSH, or cmpSH
|
|
baseFrequency DS.B 1 ; same meaning as regular SoundHeader
|
|
numFrames DS.L 1 ; length in frames ( packetFrames or sampleFrames
|
|
AIFFSampleRate DS.X 1 ; IEEE sample rate EXTENDED number
|
|
markerChunk DS.L 1 ; sync track
|
|
futureUse1 DS.L 1 ; reserved by Apple
|
|
futureUse2 DS.L 1 ; reserved by Apple
|
|
stateVars DS.L 1 ; pointer to State Block
|
|
leftOverSamples DS.L 1 ; used to save truncated samples between compression calls
|
|
compressionID DS.W 1 ; 0 means no compression, non zero means compressionID
|
|
packetSize DS.W 1 ; number of bits in compressed sample packet
|
|
snthID DS.W 1 ; Resource ID of Sound Manager snth that contains NRT C/E
|
|
sampleSize DS.W 1 ; number of bits in non-compressed sample
|
|
;sampleArea DS.B 0 ; space for when samples follow directly
|
|
ENDR
|
|
|
|
ExtSoundHeader RECORD 0
|
|
samplePtr DS.L 1 ; if NIL then samples are in sampleArea
|
|
numChannels DS.L 1 ; number of channels mono = 1
|
|
sampleRate DS.L 1 ; sample rate in Apples Fixed point representation
|
|
loopStart DS.L 1 ; loopStart of sound before compression
|
|
loopEnd DS.L 1 ; loopEnd of sound before compression
|
|
encode DS.B 1 ; data structure used , stdSH, extSH, or cmpSH
|
|
baseFrequency DS.B 1 ; same meaning as regular SoundHeader
|
|
numFrames DS.L 1 ; length in total number of frames
|
|
AIFFSampleRate DS.X 1 ; IEEE sample rate
|
|
markerChunk DS.L 1 ; sync track
|
|
instrumentChunks DS.L 1
|
|
AESRecording DS.L 1
|
|
sampleSize DS.W 1 ; number of bits in sample
|
|
futureUse1 DS.W 1 ; reserved by Apple
|
|
futureUse2 DS.L 1 ; reserved by Apple
|
|
futureUse3 DS.L 1 ; reserved by Apple
|
|
futureUse4 DS.L 1 ; reserved by Apple
|
|
;sampleArea DS.B 0 ; space for when samples follow directly
|
|
ENDR
|
|
|
|
; _______________________________________________________________________
|
|
;
|
|
; Sound Input
|
|
;
|
|
; _______________________________________________________________________
|
|
|
|
siDeviceIsConnected EQU 1 ; input device is connected and ready for input
|
|
siDeviceNotConnected EQU 0 ; input device is not connected
|
|
siDontKnowIfConnected EQU -1 ; can't tell if input device is connected
|
|
|
|
|
|
; Info Selectors for the SPBGetDeviceInfo and SPBSetDeviceInfo calls
|
|
|
|
siDeviceConnected EQU 'dcon' ; input device connection status
|
|
siAGCOnOff EQU 'agc ' ; automatic gain control state
|
|
siPlayThruOnOff EQU 'plth' ; playthrough state
|
|
siTwosComplementOnOff EQU 'twos' ; two's complement state
|
|
siLevelMeterOnOff EQU 'lmet' ; level meter state
|
|
siRecordingQuality EQU 'qual' ; recording quality
|
|
siVoxRecordInfo EQU 'voxr' ; VOX record parameters
|
|
siVoxStopInfo EQU 'voxs' ; VOX stop parameters
|
|
siNumberChannels EQU 'chan' ; current number of channels
|
|
siSampleSize EQU 'ssiz' ; current sample size
|
|
siSampleRate EQU 'srat' ; current sample rate
|
|
siCompressionType EQU 'comp' ; current compression type
|
|
siCompressionFactor EQU 'cmfa' ; current compression factor
|
|
siCompressionHeader EQU 'cmhd' ; return compression header
|
|
siDeviceName EQU 'name' ; input device name
|
|
siDeviceIcon EQU 'icon' ; input device icon
|
|
siDeviceBufferInfo EQU 'dbin' ; size of interrupt buffer
|
|
siSampleSizeAvailable EQU 'ssav' ; sample sizes available
|
|
siSampleRateAvailable EQU 'srav' ; sample rates available
|
|
siCompressionAvailable EQU 'cmav' ; compression types available
|
|
siChannelAvailable EQU 'chav' ; number of channels available
|
|
siAsync EQU 'asyn' ; asynchronous capability
|
|
siOptionsDialog EQU 'optd' ; display options dialog
|
|
siContinuous EQU 'cont' ; continous recording
|
|
siActiveChannels EQU 'chac' ; active channels
|
|
siActiveLevels EQU 'lmac' ; active meter levels
|
|
siInitializeDriver EQU 'init' ; reserved for internal use only
|
|
siCloseDriver EQU 'clos' ; reserved for internal use only
|
|
siPauseRecording EQU 'paus' ; reserved for internal use only
|
|
siUserInterruptProc EQU 'user' ; reserved for internal use only
|
|
|
|
; Quality Selectors for the SndRecord and SndRecordToFile calls
|
|
|
|
siBestQuality EQU 'best'
|
|
siBetterQuality EQU 'betr'
|
|
siGoodQuality EQU 'good'
|
|
|
|
; Sound Input Parameter Block (SPB)
|
|
|
|
SInParam RECORD 0
|
|
inRefNum DS.L 1 ; pointer to Application Reference Block
|
|
count DS.L 1 ; the # of bytes to read
|
|
milliseconds DS.L 1 ; the # of ms of sound to read
|
|
bufferLength DS.L 1 ; length of input buffer
|
|
inputBuffer DS.L 1 ; pointer to input buffer
|
|
completionRoutine DS.L 1 ; procPtr to the user completion routine
|
|
interruptRoutine DS.L 1 ; procPtr to the user interrupt routine
|
|
userLong DS.L 1 ; reserved for user data
|
|
error DS.W 1 ; OSErr will be returned to asynch routines
|
|
unused1 DS.L 1 ; reserved for future expansion - must be zero
|
|
SInPARAMSize EQU * ; size of SInParam
|
|
ENDR
|
|
|
|
|
|
ENDIF ; ...already included |