Code: Select all
// piskuinen roxor intro
// koodannut cce, Valtzulle kiitos SinWave funktiosta
Gosub InitAudio
font=LoadFont("fixedsys",12)
SetFont font
Dim img(17) as String
Gosub CreateKuva
Dim kuva(24,16)
For y=0 To 16
For x=0 To 24
kuva(x,17-y) = max(0, Asc( Mid( img(y), x+1, 1 ) )-35)
Next x
Next y
Randomize 5
bg=MakeImage(420,320)
DrawToImage bg
Color 32,32,32
Box 0,0,420,320
Color 1,1,1
For i=0 To 2000
kulma=Rnd(360)
matka=Rand(0,240)
koko= matka*0.1
Box 200+Cos(kulma)*matka, 150+Sin(kulma)*matka, koko, koko, 1
Next i
DrawToScreen
Color 255,255,255
start=Timer()
skrol$ = " Hieno musa eikö totta? Biisi on generoitu lennossa ilman ulkopuolisia tiedostoja. CB:en rajoittuneisuudesta johtuen musiikin rytmi saattaa heitellä vähän miten sattuu. Valtzulle kiitos alkuperäisestä siniaaltofunktiostaan. -cce "
Repeat
aika = Timer()-start
Gosub UpdateAudio
shake# = shake# * 0.92
DrawImage bg, -10+shake*7, -10+shake*7
For y=0 To 16
For x=0 To 24
If kuva(x,y) Then
xx#= Cos( (aika Shr 3)) * x - Cos(aika Shr 4)*16 + Rnd(-shake,shake)
yy#=y-5.1 + Sin( aika Shr 6 )*6 + Rnd(-shake,shake)
zz#=Sin( (aika Shr 3)) * x - 50 + Rnd(-shake,shake)
'Box x*8+100,y*8+110,4,4,1
Box 200+(xx# * 300) / zz#, 150+(yy# * 300) / zz#, 4,4 , 1
EndIf
Next x
Next y
x=( aika Shr 5 ) Mod (Len(skrol$)*8)
Text 10-x ,260+Sin(aika / 12 )*10+rnd(-shake*3.5,shake*3.5) , skrol$
DrawScreen
' Wait 2
Forever
InitAudio:
// pohjana käytetty valtzun funktioita
lead = SinWave(262, 0.08,50, 1.0, 3.0)
laulu= SinWave(523, 0.16,50, 1.0, 2.1)
bass= SinWave(131, 0.31,50, 1.0, 2.8)
runpu= SinWave(262, 0.21,50, 1.0, 3.0, 0.9998)
snare=SinWave(262, 0.21,50, 1.0, 3.0, 0.8521,1)
bpm = 180
HitInterval = 60000 / (bpm*4)
LeadLine$ = "E2 a2 h2 E2 a2 h2 E2 a2 h2 E2 a2 h2 E2 a2 h2 D3 E2 a2 h2 E2 a2 h2 E2 a2 h2 D2 G2 A2 D2 G2 A2 F#2"
BassLine$ = "E1 E1 E1 D1"
LauluLine$ = "z z E2 D2 D2 z z E2 D2 D2 z E2 D2 D2 H1 D2 z z E2 D2 D2 z z E2 D2 D2 z E2 D2 D2 H1 D2 z z E2 D2 D2 z z E2 D2 D2 z E2 D2 D2 H1 D2 z z H2 D2 D2 z z E2 D2 H1 H1 A1 G1 A1 E1 E1 "
LeadPItuus=CountWords(LeadLine$)
BassPituus=CountWords(BassLine$)
LauluPituus=CountWords(LauluLine$)
Dim LeadNotes(LeadPituus) As String
Dim BassNotes(LeadPituus) As String
Dim LauluNotes(LauluPituus) As String
For i=0 To LeadPituus
LeadNotes(i) = GetWord(LeadLine$, i+1)
Next i
For i=0 To BassPituus
BassNotes(i) = GetWord(BassLine$, i+1)
Next i
For i=0 To LauluPituus
LauluNotes(i) = GetWord(LauluLine$, i+1)
Next i
Return
UpdateAudio:
Gosub UpdatePos
If OldPos <> Pos Then
If Pos Mod 2 = 0 Then
PlaySound lead, 70,35, nuotti( LeadNotes(LeadMatka Mod LeadPituus) )
LeadMatka = LeadMatka + 1
PlaySound lead, 40,-35, nuotti( LeadNotes(3 Mod LeadPituus) )
If lower(LauluNotes(LauluMatka Mod LauluPituus)) <> "z" And matka > 128 Then
PlaySound laulu, 60, 10, nuotti( LauluNotes(LauluMatka Mod LauluPituus))
PlaySound lead, 30, 10, nuotti( LauluNotes(LauluMatka Mod LauluPituus))
EndIf
LauluMatka = LauluMatka + 1
EndIf
If pos = 2 Then
PlaySound snare,70,0
EndIf
If pos16 =8 Then
PlaySound runpu, 70,0, 44100
' PlaySound bass, 40,0, nuotti( BassNotes( BassMatka Mod BassPituus ) )
PlaySound bass, 70,0, nuotti( "E1" )
shake#=0.6
EndIf
If pos32 =30 And pos64 < 60 Then
PlaySound runpu, 70,0, 44100
' PlaySound bass, 40,0, nuotti( BassNotes( BassMatka Mod BassPituus ) )
PlaySound bass, 70,0, nuotti( "D1" )
shake#=0.6
EndIf
If pos64 = 62 Then
PlaySound runpu, 70,0, 44100
PlaySound bass, 70,0, nuotti( "G1" )
shake#=0.6
EndIf
If matka > 512 Then
MatkaMinus = 512
EndIf
EndIf
Return
UpdatePos:
OldPos = pos
Matka = aika / HitInterval -MatkaMinus
pos = matka Mod 8
pos16 = matka Mod 16
pos32 = matka Mod 32
pos64 = matka Mod 64
Return
Function SinWave(taajuus#, pituus#, voimakkuus#=100, kerroin#=1.0, gain#=1.0, slide#=1.0, noise=0)
fq=44100
length=pituus*fq
f=OpenToWrite("tmpwav.tmp")
WriteInt f,$52494646 // RIFF
WriteInt f,0 // koko, tähän palataan myöhemmin
WriteInt f,$57415645 // "WAVE" (ASCII Characters)
WriteInt f,$666d7420 // "fmt_" (ASCII Characters)
WriteInt f,16 // always 0x10 = 16
WriteShort f,1 // always 0x01
WriteShort f,1 // Channel Numbers(0x01=mono, 0x02=stereo )
WriteInt f,fq // Samplerate (Binary, in Hz)
WriteInt f,fq*2 // Bytes Per Second
WriteShort f,2 // Bytes per sample, 2=8bit stereo, or 16bit mono
WriteShort f,16 // bits per sample
WriteInt f,$64617461 // "data" (ASCII Characters)
WriteInt f,length*2 // length of Data To follow
vokke# = voimakkuus/100*32767
For i = 0 To length-1
taajuus = taajuus * slide#
vokke# = vokke# * kerroin#
kohta#=Sin(360.0*taajuus/fq*(i Mod fq))*vokke
Select noise
Case 0
WriteShort f, Min(32600, kohta#*gain)
Case 1
WriteShort f,Rand(255)*vokke
Default
WriteShort f, Min(32600, kohta#*gain)
EndSelect
'WriteShort f,Rand(255)*vokke
Next i
fs=FileOffset(f)-8 // palataan kokoon
SeekFile f,4
WriteInt f,fs // ja sinne siististi tiedoston koko
CloseFile f
tmpsnd=LoadSound("tmpwav.tmp")
DeleteFile "tmpwav.tmp"
Return tmpsnd
End Function
Function nuotti(in$)
oct = Int(Right(in$,1))
Select Lower(Left( in$ ,Len(in$)-1))
Case "c"
note=0
Case "c#"
note=1
Case "d"
note = 2
Case "d#"
note=3
Case "e"
note=4
Case "e#"
note=5
Case "f"
note=5
Case "f#"
note=6
Case "g"
note=7
Case "g#"
note=8
Case "a"
note=9
Case "a#"
note=10
Case "b"
note = 10
Case "bb"
note = 10
Case "h"
note=11
Case "h#"
note=12
EndSelect
freq=44100*(1.05946)^(note+12*(oct-2))
Return freq
EndFunction
CreateKuva:
img(0)="#########################"
img(1)="#########################"
img(2)="#########################"
img(3)="#$$$$$$$$$$$$$$$$$$$$$$$#"
img(4)="#########################"
img(5)="#$$$$#$$$$#$#$#$$$$#$$$$#"
img(6)="#$##$#$##$#$#$#$##$#$##$#"
img(7)="#$##$#$##$#$#$#$##$#$##$#"
img(8)="#$$$##$##$##$##$##$#$$$##"
img(9)="#$##$#$##$#$#$#$##$#$##$#"
img(10)="#$##$#$$$$#$#$#$$$$#$##$#"
img(11)="#########################"
img(12)="#$$$$$$$$$$$$$$$$$$$$$$$#"
img(13)="#########################"
img(14)="#########################"
img(15)="#########################"
img(16)="#########################"
Return