Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
SoundBlaster version of my "Guitar Simulator"
#1
Code:
DECLARE SUB FMGuitar (StrTun AS STRING, Fret AS INTEGER, Channel AS INTEGER)
DECLARE SUB FMStop (Channel%)
DECLARE SUB FMPlay (Freq%, Octave%, Channel%)
DECLARE SUB FMSetInst (Inst AS ANY, Channel AS INTEGER)
DECLARE SUB FMWrite (Reg%, Value%)
DECLARE SUB FMReset ()
DECLARE SUB Delay (Time AS SINGLE)
DEFINT A-Z

TYPE Instrument
' Modulator
MVibrato  AS INTEGER
MTremelo  AS INTEGER
MEGType   AS INTEGER
MWaveForm AS INTEGER
MMultiple AS INTEGER
MLevel    AS INTEGER
MAttack   AS INTEGER
MDecay    AS INTEGER
MSustain  AS INTEGER
MRelease  AS INTEGER
' Carrier
CVibrato  AS INTEGER
CTremelo  AS INTEGER
CEGType   AS INTEGER
CWaveForm AS INTEGER
CMultiple AS INTEGER
CLevel    AS INTEGER
CAttack   AS INTEGER
CDecay    AS INTEGER
CSustain  AS INTEGER
CRelease  AS INTEGER
END TYPE

CONST OctShift = 1
DIM Bps AS SINGLE
DIM Tun(1 TO 6) AS STRING
DIM tI(1 TO 3) AS Instrument

tI(1).MMultiple = 3
tI(1).MLevel = 16
tI(1).MAttack = 15: tI(1).MDecay = 5
tI(1).MSustain = 8: tI(1).MRelease = 8
tI(1).MVibrato = 1
tI(1).CMultiple = 1
tI(1).CLevel = 16
tI(1).CAttack = 15: tI(1).CDecay = 3
tI(1).CSustain = 8: tI(1).CRelease = 8
tI(1).CVibrato = 1

tI(2).MMultiple = 1
tI(2).MLevel = 16
tI(2).MAttack = 15: tI(2).MDecay = 3
tI(2).MSustain = 7: tI(2).MRelease = 3
tI(2).MWaveForm = 2
tI(2).CMultiple = 1
tI(2).CLevel = 16
tI(2).CAttack = 15: tI(2).CDecay = 3
tI(2).CSustain = 7: tI(2).CRelease = 3
tI(2).MWaveForm = 2

tI(3).MMultiple = 1
tI(3).MLevel = 16
tI(3).MAttack = 15: tI(3).MDecay = 4
tI(3).MSustain = 7: tI(3).MRelease = 3
tI(3).MWaveForm = 2
tI(3).CMultiple = 1
tI(3).CLevel = 16
tI(3).CAttack = 15: tI(3).CDecay = 4
tI(3).CSustain = 7: tI(3).CRelease = 3
tI(3).MWaveForm = 2

CLS
FMReset

DO
READ C$
IF C$ = "N" THEN EXIT DO
IF C$ = "I" THEN
  READ Inst
  FOR I = 1 TO 6
   FMSetInst tI(Inst), I
  NEXT
ELSEIF C$ = "T" THEN
  READ t$
  IF Y >= 2 * 7 THEN
   LOCATE 25, 1: PRINT "Press any key..";
   G$ = INPUT$(1)
   CLS
  END IF
  PRINT t$
  X = 4
  Y = CSRLIN
  FOR I = 1 TO 6
   READ Tun(I)
   LOCATE Y + I - 1, 1: PRINT MID$(Tun(I), 1, 2) + "|"
  NEXT
ELSEIF C$ = "S" THEN
  READ Bps
ELSEIF C$ = "P" THEN
  Delay 1 / Bps
ELSEIF C$ = "M" THEN
  FOR I = 1 TO 6
   READ Fret$
   LOCATE Y + I - 1, X
   IF Fret$ <> "-" THEN
    F$ = Fret$
    PRINT F$;
    IF LEN(F$) = 1 THEN PRINT "-" ELSE PRINT
    FMStop I
    FMGuitar Tun(I), VAL(Fret$), I
   ELSE
    PRINT "--"
   END IF
  NEXT
  X = X + 2
  Delay 1 / Bps
ELSE
  READ Stp
  FOR I = 1 TO 6
   IF C$ = Tun(I) THEN St = I
  NEXT
  FOR I = 1 TO 6
   LOCATE Y + I - 1, X
   IF I = St THEN
    F$ = LTRIM$(RTRIM$(STR$(Stp)))
    PRINT F$;
    IF LEN(F$) = 1 THEN PRINT "-" ELSE PRINT
   ELSE
    PRINT "--"
   END IF
  NEXT
  X = X + 2
  FMStop St
  FMGuitar C$, Stp, St
  Delay 1 / Bps
END IF
LOOP UNTIL INKEY$ = CHR$(27)

DATA I, 3
DATA T, "Master Of Puppets", E-4, B-3, G-3, D-3, A-2, E-2
DATA S, 1
DATA M,-,-,-,2,2,0
DATA S, 3
DATA M,-,-,-,-,12,11, M,-,-,-,-,11,10, S, 1, M,-,-,-,-,10,9
DATA S, 7
DATA E-2, 0, E-2, 0, E-2, 7, E-2, 0, E-2, 0, E-2, 6
DATA E-2, 0, E-2, 0, E-2, 5, E-2, 0, E-2, 4, E-2, 0, E-2, 3, E-2, 0, S, 4, E-2, 2
DATA S, 7
DATA E-2, 0, E-2, 0, E-2, 12, E-2, 0, E-2, 0, E-2, 11, E-2, 0, E-2, 0
DATA S, 3
DATA M,-,-,-,-,12,11, M,-,-,-,-,11,10, S, 1, M,-,-,-,-,10,9
DATA S, 1, P

DATA I, 2
DATA T, "What's My Age Again", E-4, B-3, G-3, D-3, A-2, E-2
DATA S, 4
DATA D-3, 9, G-3, 11, B-3, 11, G-3, 11
DATA A-2, 9, G-3, 11, B-3, 11, G-3, 11
DATA E-2, 9, G-3, 11, B-3, 11, G-3, 11
DATA E-2, 11, G-3, 11, B-3, 11, G-3, 11
DATA S, 1, P

DATA T, "Polly", E-4, B-3, G-3, D-3, A-2, E-2
DATA S, 2
DATA M,-,-,-,2,2,0, M,-,-,-,2,2,0
DATA S, 4
DATA M,-,-,-,5,5,3, M,-,-,-,5,5,3, M, -,-,-,5,5,3, P
DATA M,-,-,7,7,5,-, M,-,-,7,7,5,-, P
DATA M,-,-,5,5,3,-, P, M,-,-,5,5,3,-, M, -,-,5,5,3,-
DATA S, 2, P
DATA S, 2, M,-,-,7,7,5,-, M,-,-,7,7,5,-
DATA S, 4, M,-,-,5,5,3,-, M,-,-,5,5,3,-, M,-,-,5,5,3,-, M,-,-,5,5,3,-
DATA S, 2, M,-,-,-,5,5,3, M,-,-,-,5,5,3
DATA S, 4, M,-,-,3,3,1,-, M,-,-,3,3,1,-, M,-,-,3,3,1,-, M,-,-,3,3,1,-
DATA S, 1, P

DATA T, "One Tin Soldier", E-4, B-3, G-3, D-3, A-2, E-2
DATA S, 2, M,0,1,0,2,3,0, S, 4, M,0,1,0,2,3,0, M,0,1,0,2,3,0
DATA S, 2, M,3,0,0,0,2,3, S, 4, M,3,0,0,0,2,3, M,3,0,0,0,2,3
DATA S, 2, M,0,1,2,2,0,0, S, 4, M,0,1,2,2,0,0, M,0,1,2,2,0,0
DATA S, 2, M,0,0,0,2,2,0, S, 4, M,0,0,0,2,2,0, M,0,0,0,2,2,0
DATA S, 2, M,1,1,2,3,0,0, S, 4, M,1,1,2,3,0,0, M,1,1,2,3,0,0
DATA S, 2, M,0,1,0,2,3,0, S, 4, M,0,1,0,2,3,0, M,0,1,0,2,3,0
DATA S, 2, M,1,1,2,3,0,0, S, 4, M,1,1,2,3,0,0, M,1,1,2,3,0,0
DATA S, 2, M,3,0,0,0,2,3
DATA S, 1, P

DATA I, 2
DATA T, "All Appologies", Eb4, Bb3, Gb3, Db3, Ab2, Db2
DATA S, 3
DATA Db2, 0, Ab2, 9, Ab2, 10, Ab2, 9, Ab2, 12, Ab2, 12, Ab2, 9, Ab2, 10
DATA Db2, 0, Ab2, 9, Ab2, 10, Ab2, 9, Db3, 12, Db3, 12, Db3, 9, Db3, 10
DATA Db2, 0, Ab2, 9, Ab2, 10, Ab2, 9, Ab2, 12, Ab2, 12, Ab2, 9, Ab2, 10
DATA Db2, 0, Ab2, 9, Ab2, 10, Ab2, 9, Gb3, 11, Gb3, 11, Gb3, 9, Db3, 12
DATA S, 1, P

DATA T, "Stairway To Heaven", E-4, B-3, G-3, D-3, A-2, E-2
DATA S, 2
DATA D-3, 7, G-3, 5, B-3, 5, E-4, 5
DATA M,7,-,-,5,-,-, B-3, 5, G-3, 5
DATA E-4, 7, M,8,-,-,5,-,-, B-3, 5, G-3, 5
DATA E-4, 8, M,2,-,-,4,-,-, B-3, 3, G-3, 2
DATA E-4, 2, M,0,-,-,3,-,-
DATA B-3, 1, G-3, 2, B-3, 1, E-4, 0, P, B-3, 1, G-3, 2, P
DATA M,-,0,0,-,2,-, S, 22, P, S, 2, M,-,1,2,-,0,-, M,-,1,2,-,0,-
DATA S, 1, P

DATA I, 1
DATA T, "Come As You Are", E-4, B-3, G-3, D-3, A-2, E-2
DATA S, 5
DATA E-2, 0, E-2, 0, E-2, 1, E-2, 2, P
DATA A-2, 0, E-2, 2, A-2, 0, E-2, 2
DATA E-2, 2, E-2, 1, E-2, 0
DATA A-2, 2, E-2, 0, E-2, 0, P
DATA E-2, 0, E-2, 0, E-2, 1, E-2, 2, P
DATA A-2, 0, E-2, 2, A-2, 0, E-2, 2
DATA E-2, 2, E-2, 1, E-2, 0
DATA A-2, 2, E-2, 0, E-2, 0
DATA S, 1, P
DATA I, 2

DATA I, 3
DATA T, "Crazy Train", E-4, B-3, G-3, D-3, A-2, E-2
DATA S, 5
DATA E-2, 2, E-2, 2, A-2, 4, E-2, 2, A-2, 5, E-2, 2, A-2, 4, E-2, 2
DATA A-2, 2, E-2, 5, E-2, 4, E-2, 5
DATA A-2, 2, E-2, 5, E-2, 4, E-2, 0
DATA S, 1, P
DATA I, 2

DATA T, "The Return To The Beautifull", E-4, B-3, G-3, D-3, A-2, E-2
DATA S, 1.8
DATA A-2, 5, D-3, 8, D-3, 7, D-3, 5
DATA A-2, 7, D-3, 8, D-3, 7, D-3, 10
DATA S, 1, P

DATA T, "Nothing Else Matters", E-4, B-3, G-3, D-3, A-2, E-2
DATA S, 2
DATA E-2, 0, G-3, 0, B-3, 0, E-4, 0, B-3, 0, G-3, 0
DATA E-2, 0, G-3, 0, B-3, 0, E-4, 0, B-3, 0, G-3, 0
DATA S, 1, P

DATA T, "In Bloom", E-4, B-3, G-3, D-3, A-2, E-2
DATA S, 8
DATA M,-,-,-,8,8,6
DATA M,-,-,-,8,8,6
DATA M,-,-,-,8,8,6
DATA M,-,-,-,8,8,6
DATA M,-,-,-,8,8,6
DATA P, P, P
DATA M,-,-,-,4,4,2
DATA M,-,-,-,4,4,2
DATA M,-,-,-,4,4,2
DATA M,-,-,-,4,4,2
DATA M,-,-,-,4,4,2
DATA P, P, P
DATA M,-,-,8,8,6,-
DATA M,-,-,8,8,6,-
DATA M,-,-,8,8,6,-
DATA M,-,-,8,8,6,-
DATA M,-,-,8,8,6,-
DATA P, P, P
DATA M,-,-,-,9,9,7
DATA M,-,-,-,9,9,7
DATA M,-,-,-,9,9,7
DATA P
DATA M,-,-,-,7,7,5
DATA M,-,-,-,7,7,5
DATA M,-,-,-,7,7,5

DATA N

SUB Delay (Time AS SINGLE)
t! = TIMER + Time
WHILE t! > TIMER: WEND
END SUB

SUB FMGuitar (StrTun AS STRING, Fret AS INTEGER, Channel AS INTEGER)

n$ = MID$(StrTun, 1, 2)
o$ = MID$(StrTun, 3, 1)
SELECT CASE UCASE$(n$)
  CASE "C-":       n = 1
  CASE "C#", "DB": n = 2
  CASE "D-":       n = 3
  CASE "D#", "EB": n = 4
  CASE "E-":       n = 5
  CASE "F-":       n = 6
  CASE "F#", "GB": n = 7
  CASE "G-":       n = 8
  CASE "G#", "AB": n = 9
  CASE "A-":       n = 10
  CASE "A#", "BB": n = 11
  CASE "B-":       n = 12
END SELECT

o = VAL(o$)
FOR I = 1 TO Fret
  n = n + 1
  IF n > 12 THEN n = 1: o = o + 1
NEXT

SELECT CASE n
CASE 1:  F! = 261.63
CASE 2:  F! = 277.18
CASE 3:  F! = 293.66
CASE 4:  F! = 311.13
CASE 5:  F! = 329.63
CASE 6:  F! = 349.23
CASE 7:  F! = 369.99
CASE 8:  F! = 392!
CASE 9:  F! = 415.3
CASE 10: F! = 440!
CASE 11: F! = 466.16
CASE 12: F! = 493.88
END SELECT

FMPlay (F!), o, Channel

END SUB

SUB FMPlay (Freq, Octave, Channel)

NFreq = Freq * 1.311
RegA0 = NFreq AND 255
FMWrite &HA0 + Channel - 1, RegA0
RegB0 = (NFreq AND 768) / 256
RegB0 = RegB0 OR Octave * 4
RegB0 = RegB0 OR 32
FMWrite &HB0 + Channel - 1, RegB0

END SUB

SUB FMReset
FOR I = &H1 TO &HF5
  FMWrite I, 0
NEXT
END SUB

SUB FMSetInst (Inst AS Instrument, Channel AS INTEGER)
' Calculate channel offset
SELECT CASE Channel
  CASE 1: Ofs = &H0
  CASE 2: Ofs = &H1
  CASE 3: Ofs = &H2
  CASE 4: Ofs = &H8
  CASE 5: Ofs = &H9
  CASE 6: Ofs = &HA
  CASE 7: Ofs = &H10
  CASE 8: Ofs = &H11
  CASE 9: Ofs = &H12
END SELECT

' Set Modulator
  Reg20 = (Inst.MMultiple AND 15) OR (Inst.MEGType * 32) OR (Inst.MVibrato * 64) OR (Inst.MTremelo * 128)
  FMWrite &H20 + Ofs, Reg20
  Reg40 = Inst.MLevel AND 63
  FMWrite &H40 + Ofs, Reg40
  Reg60 = (Inst.MAttack * 16) + Inst.MDecay
  FMWrite &H60 + Ofs, Reg60
  Reg80 = (Inst.MSustain * 16) + Inst.MRelease
  FMWrite &H80 + Ofs, Reg80
  RegE0 = Inst.MWaveForm
  FMWrite &HE0 + Ofs, RegE0
' Set Carrier
  Reg20 = (Inst.CMultiple AND 15) OR (Inst.CEGType * 32) OR (Inst.CVibrato * 64) OR (Inst.CTremelo * 128)
  FMWrite &H20 + Ofs + 3, Reg20
  Reg40 = Inst.CLevel AND 63
  FMWrite &H40 + Ofs + 3, Reg40
  Reg60 = (Inst.CAttack * 16) + Inst.CDecay
  FMWrite &H60 + Ofs + 3, Reg60
  Reg80 = (Inst.CSustain * 16) + Inst.CRelease
  FMWrite &H80 + Ofs + 3, Reg80
  RegE0 = Inst.CWaveForm
  FMWrite &HE0 + Ofs + 3, RegE0

END SUB

SUB FMStop (Channel)
RegB0 = 0
FMWrite &HB0 + Channel - 1, RegB0
END SUB

SUB FMWrite (Reg, Value)
OUT &H388, Reg: FOR I = 1 TO 6: Dummy = INP(&H388): NEXT
OUT &H389, Value: FOR I = 1 TO 35: Dummy = INP(&H388): NEXT
END SUB
COUNT HACKED BY RAZVEEE

RAZVEE IS A SCRIPT KIDDIE- hacker9
Reply
#2
Ooooh! I'm gonna run this when I'm in windows for sure!

Make a GUI so it's easy for people to make songs, and lets all here the best songs made by QBers Wink
Reply
#3
Quote:Make a GUI so it's easy for people to make songs, and lets all here the best songs made by QBers Wink

Why not a wawetable version using Pasco's mod player routines? :rotfl:
Antoni
Reply
#4
Pasco's MOD player routines???

gimme,gimme!!!!

Lith: Neato stuff!!!
y smiley is 24 bit.
[Image: anya2.jpg]

Genso's Junkyard:
http://rel.betterwebber.com/
Reply
#5
Rel: Pasco's pure QB mod player was at subshock site. It's no longer up....But i have a copy:
http://www.geocities.com/antonigual/qbsource/qmod.zip
With the example supplied it works good (well, it eats all QB resources) but with other mods the result is not so good...
Antoni
Reply
#6
It's nice i guess, but not much practical use. Everything is loaded in to conventional memory. And most better mods are atleast 300 kb or so.
oship me and i will give you lots of guurrls and beeea
Reply
#7
Well, it is the only thing we have while waiting for UGL mod... Big Grin
Antoni
Reply
#8
UGL mod player has been done in quite a while, i made a post a while ago here asking if anyone was still interested and noone answerd. So i took that as a no Smile
oship me and i will give you lots of guurrls and beeea
Reply
#9
How do I get this to work in XP?
am an asshole. Get used to it.
Reply
#10
Get VDMSound. It will emulate a SB thru' your card under Windoze 2000 or XP.
SCUMM (the band) on Myspace!
ComputerEmuzone Games Studio
underBASIC, homegrown musicians
[img]http://www.ojodepez-fanzine.net/almacen/yoghourtslover.png[/i
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)