I made my Chip Sound System play Mario

Miscellaneous Forums/Blitz Showcase/I made my Chip Sound System play Mario

What it says on the tin: (Sorry, I got distracted from what I was supposed to be doing!)

This code works as is, just paste it into a new file :)

; Super Mario NES sound demo using :-
;
; Cygnus Software's "chip" simulator...
;
; Programmed Oct-Nov 2004
;
; Feel free to use this code anywhere,
; give credits where credits are due? I would do the same.
; <a href="http://danjeruz.servegame.com" target="_blank">http://danjeruz.servegame.com</a>
; Have fun!!!!


Global ss_channelcount%
Global ss_bpsample%=16

Global ss_maxchans=50
Global ss_buffersize=1024*8
Global ss_maxenvs=30
Global ss_sndtype=8
Global ss_lfocount=2

Dim ss_sounds(ss_maxchans)
Dim ss_volume#(ss_maxchans)
Dim ss_schan(ss_maxchans)
Dim ss_sLength#(ss_maxchans)
Dim ss_started(ss_maxchans)
Dim ss_actualvol#(ss_maxchans)
Dim ss_attackdone(ss_maxchans)
Dim ss_decaydone(ss_maxchans)

Dim ss_attack#(ss_maxchans)
Dim ss_decay#(ss_maxchans)
Dim ss_sustain#(ss_maxchans)
Dim ss_release#(ss_maxchans)
Dim ss_currentpitch#(ss_maxchans)
Dim ss_envelope(ss_maxchans)

Dim ss_defattack#(ss_maxenvs)
Dim ss_defdecay#(ss_maxenvs)
Dim ss_defsustain#(ss_maxenvs)
Dim ss_defrelease#(ss_maxenvs)
Dim ss_attackchange#(ss_maxenvs)
Dim ss_decaychange#(ss_maxenvs)
Dim ss_sustainchange#(ss_maxenvs)
Dim ss_releasechange#(ss_maxenvs)

Dim ss_lfoattack#(ss_lfocount,ss_maxenvs)
Dim ss_lfodecay#(ss_lfocount,ss_maxenvs)
Dim ss_lfosustain#(ss_lfocount,ss_maxenvs)
Dim ss_lforelease#(ss_lfocount,ss_maxenvs)

Dim ss_lfo#(ss_lfocount,ss_maxchans)
Dim ss_lfofreq#(ss_lfocount,ss_maxenvs)
Dim ss_lfocounter#(ss_maxchans)
Dim ss_bufferchan(ss_maxchans,ss_buffersize)
Dim ss_buffervol#(ss_maxchans,ss_buffersize)
Dim ss_bufferenv#(ss_maxchans,ss_buffersize)
Dim ss_bufferpitch(ss_maxchans,ss_buffersize)
Dim ss_bufferlength(ss_maxchans,ss_buffersize)
Dim ss_bufferpointer(ss_maxchans)
Dim ss_buffercount(ss_maxchans)
Dim ss_chancheck(ss_maxchans)
Dim ss_channelloop(ss_maxchans)
Dim ss_samplecnt(ss_maxchans)
Dim ss_soundbank(ss_sndtype),ss_samplecntbank(ss_sndtype)
Global forcesoundupdate=0
Global ss_stimer#=100
Global audiotimer=MilliSecs(),updateperiod#=1
Dim wavdata(0,0)
initsoundsystem()


Function initsoundsystem();channels,envelopes)
Local samples,o,nm,snd
Dim wavdata(1,4096)

samples=1
ss_channelcount=1

For o=0 To 10
wavdata(0,o)=-65525/2.1
Next
wavdata(0,1)=-65525/3
wavdata(0,2)=65525/3


samplerate=1
bpsample=16

wavdata(0,1)=-65525/3
wavdata(0,2)=-65525/3
wavdata(0,3)=65525/3
wavdata(0,4)=65525/3


For snd=1 To ss_sndtype
If SND=3 Then
For o=0 To 10
WAVDATA(0,O)=Sin(O*57)*65525/3.0
Next
EndIf
If SND=4 Then
For o=0 To SND*2
WAVDATA(0,O)=Sin((Float(O)/Float(SND*2))*360)*65525/3.0
Next
EndIf



samples=snd*4
Writewav(samples,"S"+Str$(snd)+".wav")
Next

For o=0 To 4096
wavdata(0,o)=Rnd(-65525/2,65525/2)
wavdata(1,o)=Rnd(-65525/2,65525/2)
Next
samples=4096
Writewav(samples,"S0.wav")

For o=0 To ss_sndtype
ss_soundbank(o)=LoadSound("s"+Str$(o)+".wav")
o2=o:If o=0 Then o2=5
ss_samplecntbank(o)=o2
DeleteFile "s"+Str$(o)+".wav"
LoopSound ss_soundbank(o)
Next

For o=0 To ss_maxchans
O2=ss_maxchans-O
nm=(((o2-1)/3) Mod ss_sndtype)+1
If o=0 Then nm=0
ss_sounds(o)=ss_soundbank(nm)
ss_samplecnt(o)=ss_samplecntbank(nm)
Next

For o=0 To ss_maxenvs
ss_defattack(o)=.1
ss_defdecay(o)=-.5
ss_defsustain(o)=0
ss_defrelease(o)=-.1
Next

For o=0 To ss_maxenvs
Next
End Function
Function sound(channel,vol#,Pitch,Length,envelope=-1)
;channel=ss_maxchans-channel
If envelope=-1 Then envelope=channel

Local count
;dim ss_bufferchan(ss_maxchans,ss_buffersize),buffervol(ss_maxchans,ss_buffersize)
;dim ss_bufferpitch(ss_maxchans,ss_buffersize)
;dim ss_bufferlength(ss_maxchans,ss_buffersize)
;dim ss_buffercount(ss_maxchans)
count=ss_buffercount(channel)
If count<0 Then count=0
ss_buffercount(channel)=count
ss_buffervol(channel,count)=vol
ss_bufferpitch(channel,count)=Pitch
ss_bufferlength(channel,count)=Length
ss_bufferenv(channel,count)=envelope

ss_buffercount(channel)=ss_buffercount(channel)+1
If ss_buffercount(channel)>ss_buffersize-1 Then Repeat:updatesound():Until ss_buffercount(channel)<ss_buffersize-1 Or ss_buffercount(channel)=0;:If buffercount(channel)<0 Then buffercount(channel)=0
End Function
Function updatesound()
Local n,ct,n2
If MilliSecs()-audiotimer>updateperiod Then
audiotimer=MilliSecs()
ct=Float(MilliSecs()-audiotimer)/Float(updateperiod)
If ct>2 Then ct=0
For n=0 To ct
For n2=1 To 1
doupdatesound
updatesoundtimer()
Next
Next

EndIf

End Function
Function doupdatesound()

;soundtimer()=soundtimer()+.01
Local o,count,o2,updvols=0,nx,env
Local divm#=1


For o=0 To ss_maxchans
ss_lfocounter(o)=ss_lfocounter(o)+1

env=ss_envelope(o)
;env=o
updvols=1

pastend=0
attacked=ss_attackdone(o)
If soundtimer()-ss_started(o)>=ss_slength(o)*1 Then pastend=1

count=ss_buffercount(o)

If ss_schan(o)<>0 Then
;ChannelVolume ss_schan(o),ss_volume(o)
If updvols=1 Then


;Dim ss_lfo#(ss_lfocount,ss_maxchans)
;Dim ss_lfofreq#(ss_lfocount,ss_maxchans)
;Dim ss_lfocounter(ss_maxchans)

;vlfo#=lfovalue(ss_lfocounter(o))*ss_lfofreq(2,o)*ss_lfo(2,o)
vlfo#=volumemultiplier(o)
plfo#=Pitchlfo(o)
;plfo#=lfovalue(ss_lfocounter(o))*ss_lfofreq(1,o)*ss_lfo(1,o)
;vlfo=1
;plfo=1
		;For n=1 To ss_lfocount
			;If ss_lfo(n,o)<ss_lfosustain(n,env) Then ss_lfo(n,o)=ss_lfo(n,o)+ss_lfoattack(n,env) Else ss_lfo(n,o)=ss_lfosustain(n,env)
		;Next
		
If pastend=0 And attacked=0 Then			;Attack section
	If ss_volume(o)<1 Then ss_volume(o)=ss_volume(o)+ss_attack(o)
	If ss_volume(o)>=1 Then ss_volume(o)=1

		For n=1 To ss_lfocount
			If ss_lfo(n,o)<1 Then ss_lfo(n,o)=ss_lfo(n,o)+ss_lfoattack(n,env) Else ss_lfo(n,o)=1;ss_lfosustain(n,env)
		Next

	
	av#=ss_volume#(o):ChannelVolume ss_schan(o),(av+vlfo)*ss_actualvol(o)
	ss_currentpitch(o)=ss_currentpitch(o)+ss_attackchange(env)
	nf=freq(ss_currentpitch(O),o)
	If nf>10 Then ChannelPitch ss_schan(o),nf
EndIf

If ss_volume(o)>=1 Then attacked=1:ss_attackdone(o)=1

If pastend=0 And attacked=1 Then			;Decay section
	ss_volume(o)=ss_volume(o)+ss_decay(o):If ss_volume(o)<ss_sustain(o) Then ss_volume(o)=ss_sustain(o):ss_decaydone(o)=1


		For n=1 To ss_lfocount
			ss_lfo(n,o)=ss_lfo(n,o)+ss_lfodecay(n,env)
			If ss_lfo(n,o)<ss_lfosustain(n,env) Then ss_lfo(n,o)=ss_lfosustain(n,env)
		Next

		av#=ss_volume#(o):ChannelVolume ss_schan(o),(av+vlfo)*ss_actualvol(o)
		ss_currentpitch(o)=ss_currentpitch(o)+ss_decaychange(env)
		nf=freq(ss_currentpitch(O),o)
	If nf>10 Then ChannelPitch ss_schan(o),nf
EndIf
If ss_decaydone(o)=1 And pastend=0 Then	;Sustain section
		ss_currentpitch(o)=ss_currentpitch(o)+ss_sustainchange(env)
		av#=ss_volume#(o):ChannelVolume ss_schan(o),(av+vlfo)*ss_actualvol(o)
		nf=freq(ss_currentpitch(O),o)
	If nf>10 Then ChannelPitch ss_schan(o),nf
EndIf

If pastend=1 Then
	ss_volume(o)=ss_volume(o)+ss_release(o):If ss_volume(o)<0 Then ss_volume(o)=0

		For n=1 To ss_lfocount
			ss_lfo(n,o)=ss_lfo(n,o)+ss_lforelease(n,env)
			If ss_lfo(n,o)<0 Then ss_lfo(n,o)=0
		Next

	av#=ss_volume#(o):ChannelVolume ss_schan(o),(av+vlfo)*ss_actualvol(o)
	ss_currentpitch(o)=ss_currentpitch(o)+ss_releasechange(env)
	nf=freq(ss_currentpitch(O),o)
	If nf>10 Then ChannelPitch ss_schan(o),nf
EndIf

EndIf




EndIf
If pastend=1 And forcesoundupdate=0 Then
count=ss_buffercount(o)
If count>0 And ss_buffercount(o)<ss_buffersize+1 Then
;For nx=1 To 10
;volume(o)=volume(o)*.9
;ChannelVolume schan(o),volume(o)
;Delay 1
;Next
	If ss_channelloop(o) Then
	
		addsound(o,ss_buffervol(o,ss_bufferpointer(o)),ss_bufferpitch(o,ss_bufferpointer(o)),ss_bufferlength(o,ss_bufferpointer(o)),ss_bufferenv(o,ss_bufferpointer(o))):ss_bufferpointer(o)=(ss_bufferpointer(o)+1) Mod count
		;For o2=1 To count:buffervol(o,o2-1)=buffervol(o,o2):bufferpitch(o,o2-1)=bufferpitch(o,o2):bufferlength(o,o2-1)=bufferlength(o,o2):Next:buffercount(o)=buffercount(o)-1
	EndIf
	If ss_channelloop(o)=0 Then
		addsound(o,ss_buffervol(o,ss_bufferpointer(o)),ss_bufferpitch(o,ss_bufferpointer(o)),ss_bufferlength(o,ss_bufferpointer(o)),ss_bufferenv(o,ss_bufferpointer(o)))
		For o2=1 To count
		ss_buffervol(o,o2-1)=ss_buffervol(o,o2)
		ss_bufferpitch(o,o2-1)=ss_bufferpitch(o,o2)
		ss_bufferlength(o,o2-1)=ss_bufferlength(o,o2)
		ss_bufferenv(o,o2-1)=ss_bufferenv(o,o2)

		Next:ss_buffercount(o)=ss_buffercount(o)-1:If ss_buffercount(o)<0 Then ss_buffercount(o)=0
	EndIf
		
EndIf

EndIf
Next
End Function

Function freq(Pitch,chan)
Local p2,f
If Pitch<-512 Then Pitch=Pitch+512*2
If Pitch>512 Then Pitch=Pitch-512*2
p2=(Pitch+200)+(Pitchlfo(chan));+Sin(ss_lfocounter(chan))
	f = 440 * 2^(((P2/4.0) - 58)/12)
	If f<10 Then f=10 Else If f>48000 Then f=48000
Return f*ss_samplecnt(chan)
End Function
Function lfovalue#(cnt)
;Return (Cos#(cnt)+1)/2.0
Return (Cos#(cnt))
End Function

Function volumemultiplier#(channel)
;env=ss_envelope(channel)
;If env<0 Or env>ss_maxenvs Then RuntimeError env
Return lfovalue(ss_lfocounter(channel)*ss_lfofreq(2,ss_envelope(channel)))*ss_lfo(2,channel)
;Return lfovalue(ss_lfocounter(channel))
End Function

Function Pitchlfo#(channel)
Return lfovalue(ss_lfocounter(channel)*ss_lfofreq(1,ss_envelope(channel)))*ss_lfo(1,channel)
End Function

Function addSound(channel,vol#,Pitch,Length#,envelope=-1)
Local p2#,o=ss_maxchans-channel,n
If envelope=-1 Then RuntimeError "sound not buffered correctly!"
ss_chancheck(channel)=0
;Goto Endbit
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
If ss_sounds(channel)<>0 Then
ss_lfocounter(channel)=0
;For n=0 To ss_lfocount
;Next
p2=freq(pitch,channel)

If p2>100 Then
SoundVolume ss_sounds(channel),0
If ChannelPlaying(ss_schan(channel))=0 Then ss_schan(channel)=0 Else StopChannel ss_schan(channel):ss_schan(channel)=0
If ss_schan(channel)=0 Then If ss_sounds(channel)<>0 Then ss_schan(channel)=PlaySound(ss_sounds(channel))

ChannelPitch ss_schan(channel),P2;+((P2+(P2*2.0))/12.0)*4.0
ChannelVolume ss_schan(channel),ss_defattack(envelope)*vol*volumemultiplier(channel);(vol)
SoundVolume ss_sounds(channel),1
For n=1 To ss_lfocount
	ss_lfo(n,channel)=ss_lfoattack(n,channel)
Next
ss_currentpitch(channel)=Pitch
ss_volume(channel)=ss_defattack(envelope);vol
ss_actualvol(channel)=vol
ss_sLength(channel)=Length
ss_started(channel)=soundtimer()
ss_attack(channel)=(ss_defattack(envelope)/15)*updateperiod#
ss_release(channel)=(ss_defrelease(envelope)/15)*updateperiod#;-.2
ss_sustain(channel)=ss_defsustain(envelope);.2
ss_decay(channel)=(ss_defdecay(envelope)/15)*updateperiod#;-.8
ss_attackdone(channel)=0
ss_decaydone(channel)=0
ss_chancheck(channel)=soundtimer()
ss_envelope(channel)=envelope
EndIf
EndIf
forcesoundupdate=1
updatesound()
forcesoundupdate=0
.endbit
End Function

Function updatesoundtimer()
;Return MilliSecs()
ss_stimer#=ss_stimer#+1
Return ss_stimer
End Function
Function soundtimer()
Return ss_stimer
End Function
Function loopchannel(channel,loop=1)
ss_channelloop(channel)=loop
End Function

Function LfoADSR(envelope,Lfo,cattack#,cdecay#,csustain#,crelease#)
;ss_lfo#(lfo,ss_maxchans)
;ss_lfo(lfo,
ss_lfoattack(lfo,envelope)=cattack
ss_lfodecay(lfo,envelope)=cdecay
ss_lfosustain(lfo,envelope)=csustain
ss_lforelease(lfo,envelope)=crelease

;Dim ss_lfoattack#(ss_lfocount,ss_maxenvs)
;Dim ss_lfodecay#(ss_lfocount,ss_maxenvs)
;Dim ss_lfosustain#(ss_lfocount,ss_maxenvs)
;Dim ss_lforelease#(ss_lfocount,ss_maxenvs)
;Dim ss_lfo#(ss_lfocount,ss_maxenvs)
;Dim ss_lfofreq#(ss_lfocount,ss_maxenvs)
End Function
Function Lfo(envelope,lfo,frequency)
ss_lfofreq#(lfo,envelope)=frequency
End Function

Function ADSR(envelope,cattack#,cdecay#,csustain#,crelease#)
ss_defattack(envelope)=cattack
ss_defdecay(envelope)=cdecay
ss_defsustain(envelope)=csustain
ss_defrelease(envelope)=crelease
End Function
Function PitchADSR(envelope,cattack#,cdecay#,csustain#,crelease#)
ss_attackchange(envelope)=cattack
ss_decaychange(envelope)=cdecay
ss_sustainchange(envelope)=csustain
ss_releasechange(envelope)=crelease
End Function
Function Soundshape(channel,sound)
If sound>-1 And sound<ss_sndtype+1 Then
ss_sounds(channel)=ss_soundbank(sound)
ss_samplecnt(channel)=ss_samplecntbank(sound)

EndIf
End Function
Function flushchannel(channel)
ss_bufferpointer(channel)=0
ss_buffercount(channel)=0
If ss_schan(channel)<>0 Then If ChannelPlaying(ss_schan(channel)) Then StopChannel ss_schan(channel):ss_schan(channel)=0
ss_started(channel)=-ss_slength(channel)
End Function
Function Stopsound()
Local n
For n=0 To ss_maxchans
flushchannel n
Next
End Function

Function Writewav(wavdatalen,filename$,ss_channelcount=1,samplerate=44100)
samples=wavdatalen
;Function Writewav(nosamples,filename$)
;wavdatalen=(ss_channelcount*nosamples*(bitspersample/8))/4
bitspersample=ss_bpsample
fs=WriteFile(filename$)
If fs=0 Then Return 0
WriteBinString fs,"RIFF"

wavlen=36+((wavdatalen*2)*ss_channelcount)
WriteInt fs,wavlen
Writebinstring fs,"WAVE"
Writebinstring fs,"fmt "
WriteInt fs,16

WriteShort fs,1

WriteShort fs,ss_channelcount
WriteInt fs,samplerate
bitspersample=16
byterate=SampleRate * ss_channelcount * bitspersample/8

WriteInt fs,byterate
WriteShort fs,ss_channelcount * bitspersample/8
WriteShort fs,bitspersample
Writebinstring fs,"data"
WriteInt fs,samples*ss_channelcount * BitsPerSample/8
;WriteInt fs,wavdatalen*4
For p=1 To wavdatalen
If ss_bpsample=8 Then Midr=128
If ss_bpsample=16 Then Midr=Midbit/2.0
If ss_bpsample=32 Then Midr=(Midbit*255)/2.0

For chan=0 To ss_channelcount-1
rval=wavdata(chan,p)
rval=rval-Midr
If rval<0 Then rval=rval+(Midr*2)
If rval<0 Then rval=0 Else If rval>(Midr*2)*2 Then rval=(Midr*2)
;If ss_bpsample>16 Then rval=rval/2.0;WriteShort fs,rval
WriteShort fs,wavdata(chan,p)*.5;rval

Next
Next
If ss_channelcount=1 Then ster$="Mono" Else ster$="Stereo"
ss_debugprint"Created "+filename$+" as "+ss_bpsample+" bit, "+samplerate+"hz, "+ster$+" wave file."

CloseFile fs
End Function

Function WriteBinString(filehandle,dat$)
For p=1 To Len(dat$)
WriteByte filehandle,Asc(Mid$(dat$,p,1))
Next
End Function

Function ss_debugprint(St$)
Print st$
End Function

For n=1 To ss_maxchans
soundshape n,5
Next

soundshape 4,2
soundshape 3,3
soundshape 2,2
soundshape 1,1

For n=1 To ss_maxenvs
adsr n,1,-.1,.1,-.1

Next

adsr 0,.6,-.2,.1,-.1 ;Noise

Repeat
Read chan
If chan<>-1 Then
Read vol#,Pitch,Length#
sound chan,vol#,Pitch,Float(Length)
loopchannel chan,1
EndIf
Until chan=-1
Repeat
updatesound()
Delay 1
Until KeyDown(1)
End


.music1



Data 0,1,10,40
Data 0,0,1,94
Data 0,1,90,20
Data 0,0,1,69
Data 0,1,90,20
Data 0,0,1,45
Data 0,1,160,40
Data 0,0,1,94
Data 0,1,90,20
Data 0,0,1,69
Data 0,1,90,20

Data 0,0,1,45
Data 2,1.0,136,66.0
Data 2,0.0,136,6.0
Data 2,1.0,136,66.0
Data 2,0.0,136,78.0
Data 2,1.0,136,66.0
Data 2,0.0,120,78.0
Data 2,1.0,120,66.0
Data 2,0.0,136,6.0
Data 2,1.0,136,66.0
Data 2,0.0,148,78.0
Data 2,1.0,148,66.0
Data 2,0.0,120,510.0
Data 2,1.0,120,66.0
Data 2,0.0,100,150.0
Data 2,1.0,100,66.0
Data 2,0.0,88,150.0
Data 2,1.0,88,66.0
Data 2,0.0,108,150.0
Data 2,1.0,108,66.0
Data 2,0.0,116,78.0
Data 2,1.0,116,66.0
Data 2,0.0,112,78.0
Data 2,1.0,112,66.0
Data 2,0.0,108,6.0
Data 2,1.0,108,66.0
Data 2,0.0,120,78.0
Data 2,1.0,120,66.0
Data 2,0.0,136,6.0
Data 2,1.0,136,66.0
Data 2,0.0,148,42.0
Data 2,1.0,148,66.0
Data 2,0.0,156,42.0
Data 2,1.0,156,66.0
Data 2,0.0,140,78.0
Data 2,1.0,140,66.0
Data 2,0.0,148,6.0
Data 2,1.0,148,66.0
Data 2,0.0,136,78.0
Data 2,1.0,136,66.0
Data 2,0.0,120,78.0
Data 2,1.0,120,66.0
Data 2,0.0,128,6.0
Data 2,1.0,128,66.0
Data 2,0.0,116,6.0
Data 2,1.0,116,66.0
Data 2,0.0,120,150.0
Data 2,1.0,120,66.0
Data 2,0.0,100,150.0
Data 2,1.0,100,66.0
Data 2,0.0,88,150.0
Data 2,1.0,88,66.0
Data 2,0.0,108,150.0
Data 2,1.0,108,66.0
Data 2,0.0,116,78.0
Data 2,1.0,116,66.0
Data 2,0.0,112,78.0
Data 2,1.0,112,66.0
Data 2,0.0,108,6.0
Data 2,1.0,108,66.0
Data 2,0.0,120,78.0
Data 2,1.0,120,66.0
Data 2,0.0,136,6.0
Data 2,1.0,136,66.0
Data 2,0.0,148,42.0
Data 2,1.0,148,66.0
Data 2,0.0,156,42.0
Data 2,1.0,156,66.0
Data 2,0.0,140,78.0
Data 2,1.0,140,66.0
Data 2,0.0,148,6.0
Data 2,1.0,148,66.0
Data 2,0.0,136,78.0
Data 2,1.0,136,66.0
Data 2,0.0,120,78.0
Data 2,1.0,120,66.0
Data 2,0.0,128,6.0
Data 2,1.0,128,66.0
Data 2,0.0,116,6.0
Data 2,1.0,116,66.0
Data 2,0.0,148,294.0
Data 2,1.0,148,66.0
Data 2,0.0,144,6.0
Data 2,1.0,144,66.0
Data 2,0.0,140,6.0
Data 2,1.0,140,66.0
Data 2,0.0,132,6.0
Data 2,1.0,132,66.0
Data 2,0.0,136,78.0
Data 2,1.0,136,66.0
Data 2,0.0,128,78.0
Data 2,1.0,128,66.0
Data 2,0.0,120,78.0
Data 2,1.0,120,66.0
Data 2,0.0,108,78.0
Data 2,1.0,108,66.0
Data 2,0.0,120,6.0
Data 2,1.0,120,66.0
Data 2,0.0,128,6.0
Data 2,1.0,128,66.0
Data 2,0.0,148,150.0
Data 2,1.0,148,66.0
Data 2,0.0,144,6.0
Data 2,1.0,144,66.0
Data 2,0.0,140,6.0
Data 2,1.0,140,66.0
Data 2,0.0,132,6.0
Data 2,1.0,132,66.0
Data 2,0.0,136,78.0
Data 2,1.0,136,66.0
Data 2,0.0,168,78.0
Data 2,1.0,168,66.0
Data 2,0.0,168,78.0
Data 2,1.0,168,66.0
Data 2,0.0,168,6.0
Data 2,1.0,168,66.0
Data 2,0.0,148,366.0
Data 2,1.0,148,66.0
Data 2,0.0,144,6.0
Data 2,1.0,144,66.0
Data 2,0.0,140,6.0
Data 2,1.0,140,66.0
Data 2,0.0,132,6.0
Data 2,1.0,132,66.0
Data 2,0.0,136,78.0
Data 2,1.0,136,66.0
Data 2,0.0,128,78.0
Data 2,1.0,128,66.0
Data 2,0.0,120,78.0
Data 2,1.0,120,66.0
Data 2,0.0,108,78.0
Data 2,1.0,108,66.0
Data 2,0.0,120,6.0
Data 2,1.0,120,66.0
Data 2,0.0,128,6.0
Data 2,1.0,128,66.0
Data 2,0.0,132,150.0
Data 2,1.0,132,66.0
Data 2,0.0,128,150.0
Data 2,1.0,128,66.0
Data 2,0.0,120,150.0
Data 2,1.0,120,66.0
Data 2,0.0,148,654.0
Data 2,1.0,148,66.0
Data 2,0.0,144,6.0
Data 2,1.0,144,66.0
Data 2,0.0,140,6.0
Data 2,1.0,140,66.0
Data 2,0.0,132,6.0
Data 2,1.0,132,66.0
Data 2,0.0,136,78.0
Data 2,1.0,136,66.0
Data 2,0.0,128,78.0
Data 2,1.0,128,66.0
Data 2,0.0,120,78.0
Data 2,1.0,120,66.0
Data 2,0.0,108,78.0
Data 2,1.0,108,66.0
Data 2,0.0,120,6.0
Data 2,1.0,120,66.0
Data 2,0.0,128,6.0
Data 2,1.0,128,66.0
Data 2,0.0,148,150.0
Data 2,1.0,148,66.0
Data 2,0.0,144,6.0
Data 2,1.0,144,66.0
Data 2,0.0,140,6.0
Data 2,1.0,140,66.0
Data 2,0.0,132,6.0
Data 2,1.0,132,66.0
Data 2,0.0,136,78.0
Data 2,1.0,136,66.0
Data 2,0.0,168,78.0
Data 2,1.0,168,66.0
Data 2,0.0,168,78.0
Data 2,1.0,168,66.0
Data 2,0.0,168,6.0
Data 2,1.0,168,66.0
Data 2,0.0,148,366.0
Data 2,1.0,148,66.0
Data 2,0.0,144,6.0
Data 2,1.0,144,66.0
Data 2,0.0,140,6.0
Data 2,1.0,140,66.0
Data 2,0.0,132,6.0
Data 2,1.0,132,66.0
Data 2,0.0,136,78.0
Data 2,1.0,136,66.0
Data 2,0.0,128,78.0
Data 2,1.0,128,66.0
Data 2,0.0,120,78.0
Data 2,1.0,120,66.0
Data 2,0.0,108,78.0
Data 2,1.0,108,66.0
Data 2,0.0,120,6.0
Data 2,1.0,120,66.0
Data 2,0.0,128,6.0
Data 2,1.0,128,66.0
Data 2,0.0,132,150.0
Data 2,1.0,132,66.0
Data 2,0.0,128,150.0
Data 2,1.0,128,66.0
Data 2,0.0,120,150.0
Data 2,1.0,120,66.0
Data 2,0.0,120,510.0
Data 2,1.0,120,66.0
Data 2,0.0,120,6.0
Data 2,1.0,120,66.0
Data 2,0.0,120,78.0
Data 2,1.0,120,66.0
Data 2,0.0,120,78.0
Data 2,1.0,120,66.0
Data 2,0.0,128,6.0
Data 2,1.0,128,66.0
Data 2,0.0,136,78.0
Data 2,1.0,136,66.0
Data 2,0.0,120,6.0
Data 2,1.0,120,66.0
Data 2,0.0,108,78.0
Data 2,1.0,108,66.0
Data 2,0.0,100,6.0
Data 2,1.0,100,66.0
Data 2,0.0,120,222.0
Data 2,1.0,120,66.0
Data 2,0.0,120,6.0
Data 2,1.0,120,66.0
Data 2,0.0,120,78.0
Data 2,1.0,120,66.0
Data 2,0.0,120,78.0
Data 2,1.0,120,66.0
Data 2,0.0,128,6.0
Data 2,1.0,128,66.0
Data 2,0.0,136,6.0
Data 2,1.0,136,66.0
Data 2,0.0,120,582.0
Data 2,1.0,120,66.0
Data 2,0.0,120,6.0
Data 2,1.0,120,66.0
Data 2,0.0,120,78.0
Data 2,1.0,120,66.0
Data 2,0.0,120,78.0
Data 2,1.0,120,66.0
Data 2,0.0,128,6.0
Data 2,1.0,128,66.0
Data 2,0.0,136,78.0
Data 2,1.0,136,66.0
Data 2,0.0,120,6.0
Data 2,1.0,120,66.0
Data 2,0.0,108,78.0
Data 2,1.0,108,66.0
Data 2,0.0,100,6.0
Data 2,1.0,100,66.0
Data 2,0.0,136,228.0
Data 3,1.0,96,66.0
Data 3,0.0,96,6.0
Data 3,1.0,96,66.0
Data 3,0.0,96,78.0
Data 3,1.0,96,66.0
Data 3,0.0,96,78.0
Data 3,1.0,96,66.0
Data 3,0.0,96,6.0
Data 3,1.0,96,66.0
Data 3,0.0,116,78.0
Data 3,1.0,116,66.0
Data 3,0.0,100,222.0
Data 3,1.0,100,66.0
Data 3,0.0,88,222.0
Data 3,1.0,88,66.0
Data 3,0.0,72,150.0
Data 3,1.0,72,66.0
Data 3,0.0,52,150.0
Data 3,1.0,52,66.0
Data 3,0.0,72,150.0
Data 3,1.0,72,66.0
Data 3,0.0,80,78.0
Data 3,1.0,80,66.0
Data 3,0.0,76,78.0
Data 3,1.0,76,66.0
Data 3,0.0,72,6.0
Data 3,1.0,72,66.0
Data 3,0.0,100,78.0
Data 3,1.0,100,66.0
Data 3,0.0,100,6.0
Data 3,1.0,100,66.0
Data 3,0.0,120,42.0
Data 3,1.0,120,66.0
Data 3,0.0,120,42.0
Data 3,1.0,120,66.0
Data 3,0.0,108,78.0
Data 3,1.0,108,66.0
Data 3,0.0,120,6.0
Data 3,1.0,120,66.0
Data 3,0.0,100,78.0
Data 3,1.0,100,66.0
Data 3,0.0,88,78.0
Data 3,1.0,88,66.0
Data 3,0.0,100,6.0
Data 3,1.0,100,66.0
Data 3,0.0,80,6.0
Data 3,1.0,80,66.0
Data 3,0.0,88,150.0
Data 3,1.0,88,66.0
Data 3,0.0,72,150.0
Data 3,1.0,72,66.0
Data 3,0.0,52,150.0
Data 3,1.0,52,66.0
Data 3,0.0,72,150.0
Data 3,1.0,72,66.0
Data 3,0.0,80,78.0
Data 3,1.0,80,66.0
Data 3,0.0,76,78.0
Data 3,1.0,76,66.0
Data 3,0.0,72,6.0
Data 3,1.0,72,66.0
Data 3,0.0,100,78.0
Data 3,1.0,100,66.0
Data 3,0.0,100,6.0
Data 3,1.0,100,66.0
Data 3,0.0,120,42.0
Data 3,1.0,120,66.0
Data 3,0.0,120,42.0
Data 3,1.0,120,66.0
Data 3,0.0,108,78.0
Data 3,1.0,108,66.0
Data 3,0.0,116,6.0
Data 3,1.0,116,66.0
Data 3,0.0,100,78.0
Data 3,1.0,100,66.0
Data 3,0.0,88,78.0
Data 3,1.0,88,66.0
Data 3,0.0,92,6.0
Data 3,1.0,92,66.0
Data 3,0.0,80,6.0
Data 3,1.0,80,66.0
Data 3,0.0,136,294.0
Data 3,1.0,136,66.0
Data 3,0.0,132,6.0
Data 3,1.0,132,66.0
Data 3,0.0,128,6.0
Data 3,1.0,128,66.0
Data 3,0.0,116,6.0
Data 3,1.0,116,66.0
Data 3,0.0,120,78.0
Data 3,1.0,120,66.0
Data 3,0.0,108,78.0
Data 3,1.0,108,66.0
Data 3,0.0,108,78.0
Data 3,1.0,108,66.0
Data 3,0.0,92,78.0
Data 3,1.0,92,66.0
Data 3,0.0,108,6.0
Data 3,1.0,108,66.0
Data 3,0.0,136,222.0
Data 3,1.0,136,66.0
Data 3,0.0,132,6.0
Data 3,1.0,132,66.0
Data 3,0.0,128,6.0
Data 3,1.0,128,66.0
Data 3,0.0,116,6.0
Data 3,1.0,116,66.0
Data 3,0.0,120,78.0
Data 3,1.0,120,66.0
Data 3,0.0,148,78.0
Data 3,1.0,148,66.0
Data 3,0.0,148,78.0
Data 3,1.0,148,66.0
Data 3,0.0,148,6.0
Data 3,1.0,140,66.0
Data 3,0.0,136,366.0
Data 3,1.0,136,66.0
Data 3,0.0,132,6.0
Data 3,1.0,132,66.0
Data 3,0.0,128,6.0
Data 3,1.0,128,66.0
Data 3,0.0,116,6.0
Data 3,1.0,116,66.0
Data 3,0.0,120,78.0
Data 3,1.0,120,66.0
Data 3,0.0,108,78.0
Data 3,1.0,108,66.0
Data 3,0.0,108,78.0
Data 3,1.0,108,66.0
Data 3,0.0,92,78.0
Data 3,1.0,92,66.0
Data 3,0.0,108,6.0
Data 3,1.0,108,66.0
Data 3,0.0,120,222.0
Data 3,1.0,120,66.0
Data 3,0.0,92,150.0
Data 3,1.0,92,66.0
Data 3,0.0,88,150.0
Data 3,1.0,88,66.0
Data 3,0.0,136,654.0
Data 3,1.0,136,66.0
Data 3,0.0,132,6.0
Data 3,1.0,132,66.0
Data 3,0.0,128,6.0
Data 3,1.0,128,66.0
Data 3,0.0,116,6.0
Data 3,1.0,116,66.0
Data 3,0.0,120,78.0
Data 3,1.0,120,66.0
Data 3,0.0,108,78.0
Data 3,1.0,108,66.0
Data 3,0.0,108,78.0
Data 3,1.0,108,66.0
Data 3,0.0,92,78.0
Data 3,1.0,92,66.0
Data 3,0.0,108,6.0
Data 3,1.0,108,66.0
Data 3,0.0,136,222.0
Data 3,1.0,136,66.0
Data 3,0.0,132,6.0
Data 3,1.0,132,66.0
Data 3,0.0,128,6.0
Data 3,1.0,128,66.0
Data 3,0.0,116,6.0
Data 3,1.0,116,66.0
Data 3,0.0,120,78.0
Data 3,1.0,120,66.0
Data 3,0.0,148,78.0
Data 3,1.0,148,66.0
Data 3,0.0,148,78.0
Data 3,1.0,148,66.0
Data 3,0.0,148,6.0
Data 3,1.0,140,66.0
Data 3,0.0,136,366.0
Data 3,1.0,136,66.0
Data 3,0.0,132,6.0
Data 3,1.0,132,66.0
Data 3,0.0,128,6.0
Data 3,1.0,128,66.0
Data 3,0.0,116,6.0
Data 3,1.0,116,66.0
Data 3,0.0,120,78.0
Data 3,1.0,120,66.0
Data 3,0.0,108,78.0
Data 3,1.0,108,66.0
Data 3,0.0,108,78.0
Data 3,1.0,108,66.0
Data 3,0.0,92,78.0
Data 3,1.0,92,66.0
Data 3,0.0,108,6.0
Data 3,1.0,108,66.0
Data 3,0.0,120,222.0
Data 3,1.0,120,66.0
Data 3,0.0,92,150.0
Data 3,1.0,92,66.0
Data 3,0.0,88,150.0
Data 3,1.0,88,66.0
Data 3,0.0,104,510.0
Data 3,1.0,104,66.0
Data 3,0.0,104,6.0
Data 3,1.0,104,66.0
Data 3,0.0,104,78.0
Data 3,1.0,104,66.0
Data 3,0.0,104,78.0
Data 3,1.0,104,66.0
Data 3,0.0,112,6.0
Data 3,1.0,112,66.0
Data 3,0.0,120,78.0
Data 3,1.0,120,66.0
Data 3,0.0,100,6.0
Data 3,1.0,100,66.0
Data 3,0.0,88,78.0
Data 3,1.0,88,66.0
Data 3,0.0,88,6.0
Data 3,1.0,88,66.0
Data 3,0.0,104,222.0
Data 3,1.0,104,66.0
Data 3,0.0,104,6.0
Data 3,1.0,104,66.0
Data 3,0.0,104,78.0
Data 3,1.0,104,66.0
Data 3,0.0,104,78.0
Data 3,1.0,104,66.0
Data 3,0.0,112,6.0
Data 3,1.0,112,66.0
Data 3,0.0,100,6.0
Data 3,1.0,100,66.0
Data 3,0.0,104,582.0
Data 3,1.0,104,66.0
Data 3,0.0,104,6.0
Data 3,1.0,104,66.0
Data 3,0.0,104,78.0
Data 3,1.0,104,66.0
Data 3,0.0,104,78.0
Data 3,1.0,104,66.0
Data 3,0.0,112,6.0
Data 3,1.0,112,66.0
Data 3,0.0,120,78.0
Data 3,1.0,120,66.0
Data 3,0.0,100,6.0
Data 3,1.0,100,66.0
Data 3,0.0,88,78.0
Data 3,1.0,88,66.0
Data 3,0.0,88,6.0
Data 3,1.0,88,66.0
Data 3,0.0,96,228.0
Data 4,1.0,32,66.0
Data 4,0.0,32,6.0
Data 4,1.0,32,66.0
Data 4,0.0,32,78.0
Data 4,1.0,32,66.0
Data 4,0.0,32,78.0
Data 4,1.0,32,66.0
Data 4,0.0,32,6.0
Data 4,1.0,32,66.0
Data 4,0.0,92,78.0
Data 4,1.0,92,66.0
Data 4,0.0,52,222.0
Data 4,1.0,52,66.0
Data 4,0.0,52,222.0
Data 4,1.0,52,66.0
Data 4,0.0,40,150.0
Data 4,1.0,40,66.0
Data 4,0.0,24,150.0
Data 4,1.0,24,66.0
Data 4,0.0,44,150.0
Data 4,1.0,44,66.0
Data 4,0.0,52,78.0
Data 4,1.0,52,66.0
Data 4,0.0,48,78.0
Data 4,1.0,48,66.0
Data 4,0.0,44,6.0
Data 4,1.0,44,66.0
Data 4,0.0,40,78.0
Data 4,1.0,40,66.0
Data 4,0.0,72,6.0
Data 4,1.0,72,66.0
Data 4,0.0,88,42.0
Data 4,1.0,88,66.0
Data 4,0.0,92,42.0
Data 4,1.0,92,66.0
Data 4,0.0,80,78.0
Data 4,1.0,80,66.0
Data 4,0.0,88,6.0
Data 4,1.0,88,66.0
Data 4,0.0,72,78.0
Data 4,1.0,72,66.0
Data 4,0.0,60,78.0
Data 4,1.0,60,66.0
Data 4,0.0,68,6.0
Data 4,1.0,68,66.0
Data 4,0.0,52,6.0
Data 4,1.0,52,66.0
Data 4,0.0,52,150.0
Data 4,1.0,52,66.0
Data 4,0.0,40,150.0
Data 4,1.0,40,66.0
Data 4,0.0,24,150.0
Data 4,1.0,24,66.0
Data 4,0.0,44,150.0
Data 4,1.0,44,66.0
Data 4,0.0,52,78.0
Data 4,1.0,52,66.0
Data 4,0.0,48,78.0
Data 4,1.0,48,66.0
Data 4,0.0,44,6.0
Data 4,1.0,44,66.0
Data 4,0.0,40,78.0
Data 4,1.0,40,66.0
Data 4,0.0,72,6.0
Data 4,1.0,72,66.0
Data 4,0.0,88,42.0
Data 4,1.0,88,66.0
Data 4,0.0,92,42.0
Data 4,1.0,92,66.0
Data 4,0.0,80,78.0
Data 4,1.0,80,66.0
Data 4,0.0,88,6.0
Data 4,1.0,88,66.0
Data 4,0.0,72,78.0
Data 4,1.0,72,66.0
Data 4,0.0,60,78.0
Data 4,1.0,60,66.0
Data 4,0.0,68,6.0
Data 4,1.0,68,66.0
Data 4,0.0,52,6.0
Data 4,1.0,52,66.0
Data 4,0.0,24,150.0
Data 4,1.0,24,66.0
Data 4,0.0,52,150.0
Data 4,1.0,52,66.0
Data 4,0.0,24,150.0
Data 4,1.0,24,66.0
Data 4,0.0,44,78.0
Data 4,1.0,44,66.0
Data 4,0.0,72,150.0
Data 4,1.0,72,66.0
Data 4,0.0,44,150.0
Data 4,1.0,44,66.0
Data 4,0.0,24,78.0
Data 4,1.0,24,66.0
Data 4,0.0,40,150.0
Data 4,1.0,40,66.0
Data 4,0.0,52,150.0
Data 4,1.0,52,66.0
Data 4,0.0,72,6.0
Data 4,1.0,72,66.0
Data 4,0.0,4,438.0
Data 4,1.0,4,66.0
Data 4,0.0,24,78.0
Data 4,1.0,24,66.0
Data 4,0.0,52,150.0
Data 4,1.0,52,66.0
Data 4,0.0,24,150.0
Data 4,1.0,24,66.0
Data 4,0.0,44,78.0
Data 4,1.0,44,66.0
Data 4,0.0,72,150.0
Data 4,1.0,72,66.0
Data 4,0.0,44,150.0
Data 4,1.0,44,66.0
Data 4,0.0,56,222.0
Data 4,1.0,56,66.0
Data 4,0.0,64,150.0
Data 4,1.0,64,66.0
Data 4,0.0,72,150.0
Data 4,1.0,72,66.0
Data 4,0.0,52,150.0
Data 4,1.0,52,66.0
Data 4,0.0,52,6.0
Data 4,1.0,52,66.0
Data 4,0.0,24,78.0
Data 4,1.0,24,66.0
Data 4,0.0,24,78.0
Data 4,1.0,24,66.0
Data 4,0.0,52,150.0
Data 4,1.0,52,66.0
Data 4,0.0,24,150.0
Data 4,1.0,24,66.0
Data 4,0.0,44,78.0
Data 4,1.0,44,66.0
Data 4,0.0,72,150.0
Data 4,1.0,72,66.0
Data 4,0.0,44,150.0
Data 4,1.0,44,66.0
Data 4,0.0,24,78.0
Data 4,1.0,24,66.0
Data 4,0.0,40,150.0
Data 4,1.0,40,66.0
Data 4,0.0,52,150.0
Data 4,1.0,52,66.0
Data 4,0.0,72,6.0
Data 4,1.0,72,66.0
Data 4,0.0,4,438.0
Data 4,1.0,4,66.0
Data 4,0.0,24,78.0
Data 4,1.0,24,66.0
Data 4,0.0,52,150.0
Data 4,1.0,52,66.0
Data 4,0.0,24,150.0
Data 4,1.0,24,66.0
Data 4,0.0,44,78.0
Data 4,1.0,44,66.0
Data 4,0.0,72,150.0
Data 4,1.0,72,66.0
Data 4,0.0,44,150.0
Data 4,1.0,44,66.0
Data 4,0.0,56,222.0
Data 4,1.0,56,66.0
Data 4,0.0,64,150.0
Data 4,1.0,64,66.0
Data 4,0.0,72,150.0
Data 4,1.0,72,66.0
Data 4,0.0,52,150.0
Data 4,1.0,52,66.0
Data 4,0.0,52,6.0
Data 4,1.0,52,66.0
Data 4,0.0,24,78.0
Data 4,1.0,24,66.0
Data 4,0.0,8,78.0
Data 4,1.0,8,66.0
Data 4,0.0,36,150.0
Data 4,1.0,36,66.0
Data 4,0.0,56,150.0
Data 4,1.0,56,66.0
Data 4,0.0,52,78.0
Data 4,1.0,52,66.0
Data 4,0.0,24,150.0
Data 4,1.0,24,66.0
Data 4,0.0,4,150.0
Data 4,1.0,4,66.0
Data 4,0.0,8,78.0
Data 4,1.0,8,66.0
Data 4,0.0,36,150.0
Data 4,1.0,36,66.0
Data 4,0.0,56,150.0
Data 4,1.0,56,66.0
Data 4,0.0,52,78.0
Data 4,1.0,52,66.0
Data 4,0.0,24,150.0
Data 4,1.0,24,66.0
Data 4,0.0,4,150.0
Data 4,1.0,4,66.0
Data 4,0.0,8,78.0
Data 4,1.0,8,66.0
Data 4,0.0,36,150.0
Data 4,1.0,36,66.0
Data 4,0.0,56,150.0
Data 4,1.0,56,66.0
Data 4,0.0,52,78.0
Data 4,1.0,52,66.0
Data 4,0.0,24,150.0
Data 4,1.0,24,66.0
Data 4,0.0,4,150.0
Data 4,1.0,4,66.0
Data 4,0.0,32,84.0

Data -1


I am very impressed with both the sound system and the music.
[edit]After seeing you site, I am now also impressed by your games[/edit]

Heh thanks, It means alot :) The work behind the Mario music was actually in writing the Midi Import though, and I added the "drums" in manually after. Theyre a little out of sync :)

Lol, this was just me getting a bit distracted from my main project.

Wow, that's an excellent piece of work!

Heh that was cool =)

You're my hero.

This is ACE! Drums are cool. Chip sounds great!

Cheers guys!


You're my hero.



Um... Thanks? :-)



This is ACE! Drums are cool. Chip sounds great!



Glad you like.

Again, the sound system is in a more usable form in the Code Archives. (well, length doesn't require such large values. :P)

I have no idea how this works but it's cool. :)

for r= 1 to 999
print "GREAT STUFF !!!"
next

Hehehehe, nice one man :) Hahaha, makes me laugh alot!

Haha, I'm glad it's popular. Thanks guys :)

#include <stdio.h>
#include <conio.h>

void main()
{
printf ("Great Job v1.0\n");
printf ("(c)2006, RAM Digital Media\n");
printf ("--------------------------\n");
printf ("\n\n");
printf ("Press <ENTER> to terminate...\n");
getch();
}

I think we'll just stick with:
10 Print "Cygnus is ACE!"
20 Goto 10
RUN


/me falls over laughing.

Cheers guys :P
*Head Grows*

How long did you spend doing this? :)

Not long.

I created the sound system + game that uses it in 7 days (During a week I had no job ;) ). Grab that from the code archives (Mushroom collector in my sig.)

I spent about an hour the other day converting the midi over. I was bored, what can I say. I should have been making click-drag code for a project for that hour!

Really Great!

Congratulations Cygnus!

Thankyou very much Kurix. :-)