i shouldve put the whole code. so ill do that. cuz this wont work. what i want it to do, is simply load the music from ram.
;Dreamplayer 2.5
;19.12.2007
;Autor.hectic
;www.hectic.de
;Standardeinstellungen
Graphics3D 512,128,0,2
SetBuffer BackBuffer()
AppTitle "Dreamplayer 2.5"
;Vorbereitungen
If BASS_Init(-1,44100,0,0,BASS_NULL)<>1 Then RuntimeError "Sound not ready":End
Local Timer=CreateTimer(50)
Local Camera=CreateCamera()
;Vorbereitungen
Include "bass.bb"
Include "Draw3D.bb"
DrawInit3D(Camera)
SeedRnd MilliSecs()
Origin3D(512,128)
;Drag&Drop-Möglich-Machen
Local HWND=SystemProperty("AppHWND")
dp_Init(HWND)
dp_AcceptFiles(True)
Local DropPath$=""
Local DropFile$=""
Local DropCount%
Local DropQuant%
;Für-Unsichtbaren-Fensterrahmen
Local DesktopW=GetSystemMetrics(0)
Local DesktopH=GetSystemMetrics(1)
Local WindowW=GraphicsWidth()
Local WindowH=GraphicsHeight()
Local WindowX=(DesktopW-WindowW)/2
Local WindowY=(DesktopH-WindowH)/2
Global size
Global source
Global music
Global bank
Global sample
Global selected
Global SongDuration
Global SongStart
SongStart = MilliSecs()
;Grafiken-Globalisieren
Global MainImage
Global Background
Global Overground
Global PeakImage
Global FallImage
Global PosiImage
;Variablendeklarationen (aus Bild)
Global B0X, B0Y, Button0 ;Prev-Play
Global B1X, B1Y, Button1 ;Pause-Mode
Global B2X, B2Y, Button2 ;Next-Play
Global B3X, B3Y, Button3 ;Trackinfo
Global B4X, B4Y, Button4 ;Adding-Absolute
Global B5X, B5Y, Button5 ;Adding-Aditive
Global B6X, B6Y, Button6 ;Skinselector
Global B7X, B7Y, Button7 ;Play-Linear
Global B8X, B8Y, Button8 ;Play-Shuffle
Global B9X, B9Y, Button9 ;Open-Dialog
Global BAX, BAY, ButtonA ;Credits-List
Global BBX, BBY, ButtonB ;End-Player
Global T0Y, T1Y, T2Y, T3Y ;Text-Y-Pos
Global F1S#, F1H#, F1P#, F1I# ;SetFont3D
Global F2S#, F2H#, F2P#, F2I# ;SetFont3D
;Konstantendeklarationen
Const BASSMAXIMUM%=60 ;Spektrum-Balkenhöhe
Const BASSSMOOTH#=4 ;Horizontale-Weichzeichnerstärke
Const WHITEBASSAGRESSIVITY%=8 ;Weißagressivität
Const PEAKBASSAGRESSIVITY%=16 ;Peakagressivität
Const WINDOWCLIP%=20 ;Clipping-Grenzbereich
Const MAXTRACK%=1000 ;Maximale-Track-Anzahl
;Listendeklarationen
Dim TrackList$(MAXTRACK) ;Die-Track-Liste
;Variablendeklarationen
Global DreamDir$=CurrentDir() ;Arbeitsverzeichnis
Global TrackAnz%=0 ;Anzahl-Gefundener-Musikstücke
Global TrackPos%=0 ;Abspielposition-Aktuelles-Lied
Global Info1$="dreamplayer 2.5 by hectic" ;Infotext
Global Info2$="" ;Unterer-Infotext [Tracknummer]
Global TextAlpha#=4 ;Infotext-Alpha-Einblendung
Global ButtonAlpha#=4 ;Button-Alpha-Einbelndung
Global Settings%=0 ;Dateihandle Open/CloseFile
Global SkinPos%=0 ;Anzeigeposition-Aktueller-Skin
Global Pause%=1 ;Pausemodus [Ein=1/Aus=0]
Local MediaKey% ;Media-Keys-Abfangen
Local Credits#=0 ;Creditsmodus [Ein=1/Aus=0]
Local Q%=0,W%=0 ;Allgemeine-Schleifenvariablen
Local PeakLevel# ;PeakLevel-[Zwischenvariable]
Local APeak# ;Alter-(Peaklevel)-Zwischenvariable
Local NPeak# ;Neuer-(Peaklevel)-Zwischenvariable
Local LPeak# ;Fallende-Peak-Anzeige-Zwischenvariable
Local CLen#,CPos#,CAll% ;Channel-Length-Und-Zeit-Berechnen
Local DiffPeak# ;[Neu/Alt]-Differez-Peak-Zwischenvariable
Local BassVerstaerker#=8 ;Automatische-Lautstärkeanpassung
Local Shuffle%=0 ;Shufflemodus [Aus=0/Wert=Rnd]
Local DragDrop%=1 ;Drag&Drop-Modus [Add=0/Abs=1]
Local BassHandle% ;Handle-Für-Die-BASS.DLL
Local MouseKlick%=0 ;Maustasten-Zwischenspeicherung
Local Extension%=0 ;Für-Dateierweiterung-Zusammen-Suchen
Local MX%,MY%,MXA%,MYA% ;Direkte-Und-Alte-2D-Mauskoordinaten
Local VolumeUser% ;Bass-Volume-User-Setting [0-7]
Local RXPos%,Inhalt$ ;Sonstige Variablen
;Bankdeklarationen
Local Spectrum=CreateBank(1024) ;Direkte-Bass.Dll-Specturmausgabe
Local NPeakBank=CreateBank(1024) ;Umgerechneter-Spectrumanalyser
Local APeakBank=CreateBank(1024) ;Alter-[NPeakBank]-Für-Differenzberechnung
Local LPeakBank=CreateBank(1024) ;Background-Falling-Lines-Position
Local RXPosBank=CreateBank(256) ;Reale-Lese-Position-Einer-Bank*4
;FREQUENZSTAU
For Q=0 To 255
PokeByte(RXPosBank,Q,Floor(Q/8+(Q*Q*Q/106000)))
; PokeByte(RXPosBank,Q,Floor(Q/8+(Q*Q/420)))
Next
;Usersettings-Laden-Wenn-Vorhanden
If FileType(DreamDir+"\dreamplayer.dat")=1 Then
Settings=ReadFile(DreamDir+"\dreamplayer.dat")
WindowX=ReadShort(Settings)
WindowY=ReadShort(Settings)
TrackPos=ReadShort(Settings)-1
LoadSkin(ReadShort(Settings))
DragDrop=ReadByte(Settings)
Shuffle=ReadByte(Settings)
SeekFile(Settings,12)
;Tracklist-Laden
While Not Eof(Settings)
Inhalt$=ReadLine$(Settings)
If Inhalt$<>"" Then
TrackAnz=TrackAnz+1
TrackList(TrackAnz)=Inhalt
End If
Wend
CloseFile Settings
Else
LoadSkin(0)
End If
;Fenster-Unsichtbar/Positionieren
SetWindowLong(HWND,-16,$10020000)
MoveWindow(HWND,WindowX,WindowY,WindowW,WindowH,True)
;Volume-Steuerung
Dim VolumeCalc%(7)
VolumeCalc(7)=100
VolumeCalc(6)=50
VolumeCalc(5)=25
VolumeCalc(4)=12
VolumeCalc(3)=6
VolumeCalc(2)=3
VolumeCalc(1)=1
VolumeCalc(0)=0
Trash=MouseZSpeed()
;Volume-Anpassung
For Q=7 To 0 Step-1
If BASS_GetVolume()>=VolumeCalc(Q) Then VolumeUser=Q:Exit
Next
;HAUPTSCHLEIFE
Repeat
;If music = 0 Then
If TrackList$(TrackPos) <> "" Then
size = FileSize (TrackList$(TrackPos))
bank = CreateBank (size)
source = ReadFile (TrackList$(TrackPos))
ReadBytes bank, source, 0, size ;we load the sample in a bank
;And load it from there with _LoadMem
music = BASS_SampleLoadMem(1,bank,0,size,Hex$ (BASS_SAMPLE_OVER_VOL+20),0)
;the same way you can work with streams, music or flac & midi (plugins)
FreeBank bank ;now we can delete the bank
sample = BASS_SampleGetChannel(music,BASS_NULL)
EndIf
If BASS_ChannelIsActive(BassHandle) <> 0 And selected = 0 Then SongDuration = MilliSecs() - SongStart
If KeyHit(1) Then Exit
;>>>FENSTER>BEWEGEN>CODEBLOCK>>>
MXA=MX
MYA=MY
MX=MouseX()
MY=MouseY()
If MouseDown(2) Then
WindowX=WindowX+MX-MXA
MX=MX+MXA-MX
If WindowX>-WINDOWCLIP And WindowX<WINDOWCLIP Then WindowX=0
If WindowX+WindowW-WINDOWCLIP<DesktopW And WindowX+WindowW+WINDOWCLIP>DesktopW Then WindowX=DesktopW-WindowW
If WindowX+WindowW/2-WINDOWCLIP<DesktopW/2 And WindowX+WindowW/2+WINDOWCLIP>DesktopW/2 Then WindowX=DesktopW/2-WindowW/2
WindowY=WindowY+MY-MYA
MY=MY+MYA-MY
If WindowY>-WINDOWCLIP And WindowY<WINDOWCLIP Then WindowY=0
If WindowY+WindowH-WINDOWCLIP<DesktopH And WindowY+WindowH+WINDOWCLIP>DesktopH Then WindowY=DesktopH-WindowH
If WindowY+WindowH/2-WINDOWCLIP<DesktopH/2 And WindowY+WindowH/2+WINDOWCLIP>DesktopH/2 Then WindowY=DesktopH/2-WindowH/2
MoveWindow(HWND,WindowX,WindowY,WindowW,WindowH,1)
End If
;<<<FENSTER<BEWEGEN<CODEBLOCK<<<
;Hintergrund-Einzeichnen
ColorG3D(255,255,255,1)
DrawImage3D(Background,0,0)
;Abspiel-Positionen
CLen=BASS_ChannelGetLength(BassHandle)
CPos=BASS_ChannelGetPosition(BassHandle)
;PAUSE-Behandlung
If Pause=1 Then
ColorT3D(255,255,255,1)
If TrackAnz=0 Then Text3D(MainImage,0,T3Y,"waiting for input",1)
If TrackAnz>0 Then Text3D(MainImage,0,T3Y,"pause",1)
Else
;Aktuelle-Spektrumdaten-Der-Bass.Dll-In-Die-Bank-Einlesen
BASS_ChannelGetData(BassHandle,Spectrum,BASS_DATA_FFT512)
;Spektrum-Durchgehen
For Q=0 To 255 Step+1
PokeFloat(APeakBank,Q*4,PeekFloat(NPeakBank,Q*4))
RXPos=PeekByte(RXPosBank,Q)*4
PeakLevel=PeekFloat(Spectrum,RXPos)
PeakLevel=PeakLevel*(5+RXPos/2)
PeakLevel=1-(1.0/(1+PeakLevel/(BassVerstaerker/PEAKBASSAGRESSIVITY)))
PokeFloat(NPeakBank,Q*4,PeakLevel)
Next
;Glättstartposition-Festlegen
PeakLevel=PeekFloat(NPeakBank,0)/2
;Nach-Rechts-Gläten
For Q=0 To 255 Step+1
PeakLevel=PeakLevel-(PeakLevel-PeekFloat(NPeakBank,Q*4))/BASSSMOOTH
PokeFloat(NPeakBank,Q*4,PeakLevel)
Next
;Nach-Links-Gläten
For Q=255 To 0 Step-1
PeakLevel=PeakLevel-(PeakLevel-PeekFloat(NPeakBank,Q*4))/BASSSMOOTH
PokeFloat(NPeakBank,Q*4,2+PeakLevel*BASSMAXIMUM)
Next
;Spektrum-Durchgehen
For Q=0 To 255 Step+1
APeak=PeekFloat(APeakBank,Q*4)
NPeak=PeekFloat(NPeakBank,Q*4)
LPeak=PeekFloat(LPeakBank,Q*4)
DiffPeak=APeak-NPeak
;Ansprechverhalten
If APeak>NPeak Then
NPeak=APeak-DiffPeak/BASSSMOOTH*1
PokeFloat(NPeakBank,Q*4,NPeak)
End If
BassVerstaerker=BassVerstaerker-(BassVerstaerker-NPeak)/20000.0
DiffPeak=Abs(DiffPeak)*WHITEBASSAGRESSIVITY
If NPeak>LPeak Then LPeak=NPeak
LPeak=LPeak-.02-BassVerstaerker/100.0
PokeFloat(LPeakBank,Q*4,LPeak)
ColorG3D(255,255,255,1)
DrawImage3D(FallImage,Q*2-255,0,0,0,LPeak/32.0)
ColorG3D(255-Q+DiffPeak*(1+Q/40),NPeak*4+DiffPeak,Q+DiffPeak,1)
DrawImage3D(PeakImage,Q*2-255,0,0,0,NPeak/32.0)
Next
;Positionsbalken-Zeichnen
ColorG3D(255,255,255,1)
DrawImage3D(PosiImage,CPos/CLen*512-256,0)
;PAUSE
End If
;Vordergrund-Einzeichnen
ColorG3D(255,255,255,1)
DrawImage3D(Overground,0,0)
;Mausgeschichten
MouseKlick=MouseHit(1)
ButtonAlpha#=ButtonAlpha-.02+Abs(MouseXSpeed())+Abs(MouseYSpeed())
If ButtonAlpha>4 Then ButtonAlpha=4
If ButtonAlpha<0 Then ButtonAlpha=0
ColorG3D(255,255,255,ButtonAlpha)
;CREDITS-Behandlung
If Credits>0 Then
Credits=Credits+.2
;Credits-hectic
If Credits>0 And Credits<90 Then
ColorT3D(255,255,255,+Sin(Credits*2))
Text3D(MainImage,0,T1Y,"Programing in Blitz3D",1)
Text3D(MainImage,0,T2Y,"by hectic - www.hectic.de",1,1)
If MouseHit3D=1 Then ExecFile "http://www.hectic.de"
End If
;Credits-Ian-Luck
If Credits>90 And Credits<180 Then
ColorT3D(255,255,255,-Sin(Credits*2))
Text3D(MainImage,0,T1Y,"Audiostreaming with BASS.DLL",1)
Text3D(MainImage,0,T2Y,"Ian Luck - www.un4seen.com",1,1)
If MouseHit3D=1 Then ExecFile "http://www.un4seen.com"
End If
;Credits-Abrexxes
If Credits>180 And Credits<270 Then
ColorT3D(255,255,255,+Sin(Credits*2))
Text3D(MainImage,0,T1Y,"Additional bass support by Abrexxes",1)
Text3D(MainImage,0,T2Y,"www.blitzbasic.pytalhost.de",1,1)
If MouseHit3D=1 Then ExecFile "http://www.blitzbasic.pytalhost.de"
End If
;Credits-ChristianK
If Credits>270 And Credits<360 Then
ColorT3D(255,255,255,-Sin(Credits*2))
Text3D(MainImage,0,T1Y,"Additional functionaly DP25.DLL",1)
Text3D(MainImage,0,T2Y,"by ChristianK - www.christiank.net",1,1)
If MouseHit3D=1 Then ExecFile "http://www.christiank.net"
End If
;Credits-thanks
If Credits>360 And Credits<450 Then
ColorT3D(255,255,255,+Sin(Credits*2))
Text3D(MainImage,0,T2Y,"..thanks..",1)
End If
If Credits>450 Then Credits=0
TextAlpha=0
End If
;Nur-Wenn-Buttons-Sichtbar
If ButtonAlpha>0 Then
;If-Button-PREV-Pressed
DrawImage3D(Button0,B0X,B0Y,1)
If MouseKlick+MouseOver3D=2 Then
If Shuffle>0 Then Shuffle=Rand(1,TrackAnz-2):If Shuffle<1 Then Shuffle=1
If Pause=0 Then BassHandle=NextTrack(BassHandle,-1*(1+Shuffle))
ButtonAlpha=4
MouseKlick=0
End If
;If-Button-PAUSE-Pressed
DrawImage3D(Button1,B1X,B1Y,1)
If MouseKlick+MouseOver3D=2 Then
If Pause=1 Then BASS_ChannelPlay(sample,BASS_FALSE)
If Pause=0 Then BASS_ChannelPause%(BassHandle)
Pause=1-Pause
ButtonAlpha=4
MouseKlick=0
End If
;If-Button-NEXT-Pressed
DrawImage3D(Button2,B2X,B2Y,1)
If MouseKlick+MouseOver3D=2 Then
If Shuffle>0 Then Shuffle=Rand(1,TrackAnz-2):If Shuffle<1 Then Shuffle=1
If Pause=0 Then BassHandle=NextTrack(BassHandle,+1*(1+Shuffle))
ButtonAlpha=4
MouseKlick=0
End If
;If-Button-INFO-Pressed
DrawImage3D(Button3,B3X,B3Y,1)
If MouseKlick+MouseOver3D=2 Then
If Pause=0 Then
If TextAlpha>0 Then
TextAlpha=0
Else
TextAlpha=4
End If
End If
ButtonAlpha=4
MouseKlick=0
End If
;If-Button-ADDING-Pressed
If DragDrop=1 Then
DrawImage3D(Button4,B4X,B4Y,1)
Else
DrawImage3D(Button5,B5X,B5Y,1)
End If
If MouseKlick+MouseOver3D=2 Then
If Pause=0 Then
ButtonAlpha=4
DragDrop=1-DragDrop
End If
MouseKlick=0
End If
;If-Button-SKIN-Pressed
DrawImage3D(Button6,B6X,B6Y,1)
If MouseKlick+MouseOver3D=2 Then
LoadSkin(1)
ButtonAlpha=4
MouseKlick=0
End If
;If-Button-SHUFFLE-Pressed
If Shuffle=0 Then
DrawImage3D(Button7,B7X,B7Y,1)
Else
DrawImage3D(Button8,B8X,B8Y,1)
End If
If MouseKlick+MouseOver3D=2 Then
If Pause=0 Then
If Shuffle>0 Then
ButtonAlpha=4
Shuffle=0
Else
ButtonAlpha=4
Shuffle=1
End If
End If
MouseKlick=0
End If
;If-Button-DIALOG-Pressed
DrawImage3D(Button9,B9X,B9Y,1)
If MouseKlick+MouseOver3D=2 Then
selected = 1
Clear3D()
Flip 0
DrawImage3D(Background,0,0)
DrawImage3D(Overground,0,0)
Text3D(MainImage,0,T3Y,"waiting for input",1)
If selected Then BASS_ChannelPause(BassHandle)
selected = 0
WaitTimer(Timer)
RenderWorld
Clear3D()
Flip 0
dp_RequestFiles("Audio Files|*.mp3;*.ogg;*.wav|All Files|*.*")
DropPath=dp_RequestedPath()
DropQuant=dp_RequestedFileCount()
;Alten-Datensatz-Löschen
If DragDrop=1 Then
If DropQuant>0 Then
If BASS_ChannelIsActive(BassHandle) Then BASS_ChannelStop(BassHandle)
TrackPos=0
TrackAnz=0
BASS_ChannelStop(BassHandle)
End If
End If
For DropCount=0 To DropQuant-1
DropFile=dp_RequestedPath()+""+dp_RequestedFile(DropFile)
LoadAudio(DropFile)
Next
TextAlpha=4
MouseKlick=0
End If
;If-Button-CREDITS-Pressed
DrawImage3D(ButtonA,BAX,BAY,1)
If MouseKlick+MouseOver3D=2 Then
MouseKlick=0
Credits=1-Sgn(Credits)
End If
;If-Button-END-Pressed
DrawImage3D(ButtonB,BBX,BBY,1)
If MouseKlick+MouseOver3D=2 Then
MouseKlick=0
Goto Ende
End If
End If
;Media-Keys-Behandlung
MediaKey=dp_MediaKey()
If MediaKey>0 Then
;Next-Key-Pressed
If MediaKey=1 Then
If Shuffle>0 Then Shuffle=Rand(1,TrackAnz-2):If Shuffle<1 Then Shuffle=1
If Pause=0 Then BassHandle=NextTrack(BassHandle,+1*(1+Shuffle))
End If
;Prev-Key-Pressed
If MediaKey=2 Then
If Shuffle>0 Then Shuffle=Rand(1,TrackAnz-2):If Shuffle<1 Then Shuffle=1
If Pause=0 Then BassHandle=NextTrack(BassHandle,-1*(1+Shuffle))
End If
;Pause-Key-Pressed
If MediaKey=4 Then
If Pause=1 Then BASS_ChannelPlay%(BassHandle,0)
If Pause=0 Then BASS_ChannelPause%(BassHandle)
Pause=1-Pause
End If
End If
;Setzt-Abspielposition-Fest-Wenn-Nichts-Anderes-Ausgewählt-Wurde
If MouseKlick=1 Then If Pause=0 Then BASS_ChannelSetPosition%(BassHandle,(MouseX3D+256)/512.0*CLen)
;Automatisch-Zum-Nächsten-Track
If BASS_ChannelIsActive(BassHandle)=0 Then BassHandle=NextTrack(BassHandle,1+Shuffle)
;Drag&Drop-Eingang-Holen
DropQuant=dp_AcceptedFileCount()
;Drag&Drop-Vorhanden
If DropQuant>0 Then
;Alten-Datensatz-Löschen
If DragDrop=1 Then
TrackPos=0
TrackAnz=0
BASS_ChannelStop(BassHandle)
End If
;Alle-Drag%Drop-Files-Durchgehen
For DropCount=0 To DropQuant-1
DropFile=dp_AcceptedFile(DropFile)
If FileType(DropFile)=2 Then DirScaner(DropFile)
If FileType(DropFile)=1 Then LoadAudio(DropFile)
Next
End If
;Info-Anzeigen
If TextAlpha>0 Then
TextAlpha=TextAlpha-.01
ColorT3D(255,255,255,TextAlpha)
Text3D(MainImage,0,T1Y,Info1$,1)
Text3D(MainImage,0,T2Y,Info2$,1)
End If
;Timer-Anzeigen
;44100*0.08=3528
CAll=(CLen-CPos)/3528
ColorT3D(255,255,255,1)
SetFont3D(F1S,F1H,F1P,F1I)
; CAll=BASS_ChannelBytes2Seconds(BassHandle,CLen)-BASS_ChannelBytes2Seconds(BassHandle,CPos)
Text3D(MainImage,0,T0Y,Millisecs2Time(SongDuration)+"/"+Right("00"+Int(CAll/6000) Mod 60,2)+":"+Right("00"+Int(CAll/100) Mod 60,2)+":"+ Right("00"+Int(CAll) Mod 100,2),1)
SetFont3D(F2S,F2H,F2P,F2I)
;Volume-Steuerung
VolumeUser=VolumeUser+MouseZSpeed()
If VolumeUser<0 Then VolumeUser=0
If VolumeUser>7 Then VolumeUser=7
BASS_SetVolume(VolumeCalc(VolumeUser))
;Standardkramm
WaitTimer(Timer)
RenderWorld
Clear3D()
Flip 0
Forever
.Ende
;Alles-Wieder-Freigeben
BASS_ChannelStop(BassHandle)
FreeBank Spectrum
FreeBank NPeakBank
FreeBank APeakBank
FreeBank LPeakBank
FreeBank RXPosBank
;UserSettings-In-Datei-Speichern
Settings=WriteFile(DreamDir+"\dreamplayer.dat")
WriteShort Settings,WindowX
WriteShort Settings,WindowY
WriteShort Settings,TrackPos
WriteShort Settings,SkinPos
WriteByte Settings,DragDrop
WriteByte Settings,Shuffle
WriteByte Settings,$0D
WriteByte Settings,$0A
;Trackliste-Speichern
For Q=1 To TrackAnz
WriteLine Settings,Str$(TrackList$(Q))
Next
CloseFile Settings
Delay 250
BASS_Free()
End
Function Millisecs2Time$(m)
Local HourPart%, MinSecLeft%, MinPart%, SecLeft%, SecPart%
Local TimeStr$
HourPart = Int(m / 3600000)
MinSecLeft = m Mod 3600000
MinPart = Int(MinSecLeft / 60000)
SecLeft = m Mod 60000
SecPart = SecLeft / 1000
TimeStr=Str$(HourPart)+":"
If HourPart<10 Then TimeStr="0"+TimeStr
If MinPart<10 Then TimeStr=TimeStr+"0"
TimeStr=TimeStr+Str$(MinPart)+":"
If SecPart<10 Then TimeStr=TimeStr+"0"
TimeStr=TimeStr+Str$(SecPart)
Return TimeStr
End Function
;Play-Other-Track
Function NextTrack(FBassHandle%,FAdd%)
If TrackAnz>0 Then
BASS_ChannelStop(FBassHandle)
TrackPos=TrackPos+FAdd
If TrackPos<1 Then TrackPos=TrackPos+TrackAnz
If TrackPos>TrackAnz Then TrackPos=TrackPos-TrackAnz
If TrackPos>TrackAnz Or TrackPos<1 Then TrackPos=1
BASS_StreamCreateFile(0,TrackList$(TrackPos),0,0,BASS_MUSIC_FLOAT)
BASS_ChannelPlay(FBassHandle,BASS_TRUE)
AppTitle ClearName(TrackList$(TrackPos))
Info1$=ClearName(TrackList$(TrackPos))
Info2$=TrackPos+"/"+TrackAnz
TextAlpha=4
Pause=0
Return FBassHandle
Else
Delay 8
Pause=1
End If
End Function
;Nächsten-Skin-Wählen
Function LoadSkin(FSkin%)
Local FirstSkin$
Local Counter%
Local Verz%
Local File$
FreeImage3D(MainImage)
SkinPos=SkinPos+FSkin
;Nächsten-Skin-Suchen
Verz=ReadDir(DreamDir):Repeat
File$=NextFile$(Verz)
If File$="" Then Exit
If Lower$(Right$(File$,4))=".png" Then
If Counter=0 Then FirstSkin$=File$
If Counter=SkinPos Then
MainImage=LoadImage3D(DreamDir+""+File$,2,2)
End If
Counter=Counter+1
End If
Forever:CloseDir Verz
;Überlauf-Abfangen
If SkinPos=>Counter Then
MainImage=LoadImage3D(DreamDir+""+FirstSkin$,2,2)
SkinPos=0
End If
;Standardgrafiken-Ausschneiden
Background=GrabImage3D(MainImage,0,0,512,128)
Overground=GrabImage3D(MainImage,0,128,512,128)
PeakImage=GrabImage3D(MainImage,258,258,4,60,.5,1)
FallImage=GrabImage3D(MainImage,266,258,4,60,.5,1)
PosiImage=GrabImage3D(MainImage,482,384,30,128,1,1)
;Buttongrafiken-Ausschneiden
Button0=GrabImage3D(MainImage,RPM(258,320)+256,RPM(266,320)+256,RPM(258,321),RPM(266,321),1,1)
Button1=GrabImage3D(MainImage,RPM(258,323)+256,RPM(266,323)+256,RPM(258,324),RPM(266,324),1,1)
Button2=GrabImage3D(MainImage,RPM(258,326)+256,RPM(266,326)+256,RPM(258,327),RPM(266,327),1,1)
Button3=GrabImage3D(MainImage,RPM(258,329)+256,RPM(266,329)+256,RPM(258,330),RPM(266,330),1,1)
Button4=GrabImage3D(MainImage,RPM(258,332)+256,RPM(266,332)+256,RPM(258,333),RPM(266,333),1,1)
Button5=GrabImage3D(MainImage,RPM(258,335)+256,RPM(266,335)+256,RPM(258,336),RPM(266,336),1,1)
Button6=GrabImage3D(MainImage,RPM(258,338)+256,RPM(266,338)+256,RPM(258,339),RPM(266,339),1,1)
Button7=GrabImage3D(MainImage,RPM(258,341)+256,RPM(266,341)+256,RPM(258,342),RPM(266,342),1,1)
Button8=GrabImage3D(MainImage,RPM(258,344)+256,RPM(266,344)+256,RPM(258,345),RPM(266,345),1,1)
Button9=GrabImage3D(MainImage,RPM(258,347)+256,RPM(266,347)+256,RPM(258,348),RPM(266,348),1,1)
ButtonA=GrabImage3D(MainImage,RPM(258,350)+256,RPM(266,350)+256,RPM(258,351),RPM(266,351),1,1)
ButtonB=GrabImage3D(MainImage,RPM(258,353)+256,RPM(266,353)+256,RPM(258,354),RPM(266,354),1,1)
;Button-Positionen-Festlegen
B0X=RPM(258,322)-256:B0Y=RPM(266,322)-256
B1X=RPM(258,325)-256:B1Y=RPM(266,325)-256
B2X=RPM(258,328)-256:B2Y=RPM(266,328)-256
B3X=RPM(258,331)-256:B3Y=RPM(266,331)-256
B4X=RPM(258,334)-256:B4Y=RPM(266,334)-256
B5X=RPM(258,337)-256:B5Y=RPM(266,337)-256
B6X=RPM(258,340)-256:B6Y=RPM(266,340)-256
B7X=RPM(258,343)-256:B7Y=RPM(266,343)-256
B8X=RPM(258,346)-256:B8Y=RPM(266,346)-256
B9X=RPM(258,349)-256:B9Y=RPM(266,349)-256
BAX=RPM(258,352)-256:BAY=RPM(266,352)-256
BBX=RPM(258,355)-256:BBY=RPM(266,355)-256
;Text-Eigenschaften
T0Y=RPM(266,368)-256
T1Y=RPM(266,369)-256
T2Y=RPM(266,370)-256
T3Y=RPM(266,371)-256
F1S=RPM(258,372)/10.0
F1H=RPM(258,373)/10.0
F1P=RPM(258,374)-256
F1I=RPM(258,375)-256
F2S=RPM(266,372)/10.0
F2H=RPM(266,373)/10.0
F2P=RPM(266,374)-256
F2I=RPM(266,375)-256
;Text-Schon-Mal-Setzen
SetFont3D(F2S,F2H,F2P,F2I)
End Function
;Musik-Dateien-Suchen
Function DirScaner(FPfad$)
Local RDID,Datei$=""
RDID=ReadDir(FPfad$)
Repeat
Datei$=Lower(NextFile$(RDID))
If Datei$<>"." Then
If Datei$<>".." Then
If Datei$="" Then Exit
If FileType(FPfad$+""+Datei$)=2 Then DirScaner(FPfad$+""+Datei$)
If FileType(FPfad$+""+Datei$)=1 Then LoadAudio(FPfad$+""+Datei$)
End If
End If
Forever
CloseDir RDID
End Function
;Neue-Datei-Laden
Function LoadAudio(FFile$)
Local Extension=0
If TrackAnz<MAXTRACK Then
;MP3, MP2, MP1, OGG, WAV, AIFF
If Lower$(Right$(FFile$,4))=".mp3" Then Extension=1
If Lower$(Right$(FFile$,4))=".ogg" Then Extension=1
If Lower$(Right$(FFile$,4))=".wav" Then Extension=1
If Extension=1 Then
TrackAnz=TrackAnz+1
TextAlpha=2
Pause=0
Info1$=""
Info2$=TrackPos+"/"+TrackAnz
TrackList$(TrackAnz)=FFile$
End If
End If
End Function
;Reiner-Dateiname-Filter
Function ClearName$(FName$)
;MP3, MP2, MP1, OGG, WAV, AIFF
FName=Replace(Lower$(FName),".mp3","")
FName=Replace(Lower$(FName),".ogg","")
FName=Replace(Lower$(FName),".wav","")
For q=Len(FName) To 1 Step-1
If Mid(FName,q,1)="" Then FName=Mid(FName,q+1,40):Exit
Next
Return FName
End Function
;Read-Pixel-Mask
Function RPM(FXPos%,FYPos%)
Local FMask=$00F0F0F0;MOD
Local FTexture=PeekInt(DrawBank,MainImage+DRAWBANKTEXTURE);MOD
Local RPMARGB=ReadPixel(FXPos,FYPos,TextureBuffer(FTexture))
Local RPMXPos=0
Local RPMWert=0
Local RPMPlus=1
For RPMXPos=0 To 31
If FMask And 2^RPMXPos
If RPMARGB And 2^RPMXPos
RPMWert=RPMWert+RPMPlus
End If
RPMPlus=RPMPlus*2
End If
Next
Return RPMWert
End Function