Help loop fix

Blitz3D Forums/Blitz3D Programming/Help loop fix

Hi guys. Can someone show me how to load this from a loop only ONCE?

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)


thanks!

~DS~

Global music

;...................


If music = 0 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


simple, isnt it ;)

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


Why a player should load music from Ram? As dreamplayer work with "playlists" you must add a new parameter (file or ram) and rewrite the function to "load" next from playlist.

The problem that nobody in the world can see if there is a track in your RAM (?) is another problem.

bye

well, b/c on some songs, i noticed the song became garagled (screwed up), so i thought the last time i loaded the music into ram in an older version of my project, and it worked perfectly. so i thought, why not load it from ram? :)

use the above code w/ this, it works, but keeps repeating itself. it needs to work only 1 time per song.

Global loaded
Function load()

If TrackList$(TrackPos) <> "" Then loaded = 1

If loaded

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)

BASS_ChannelPlay(sample, 1)

loaded = 0

EndIf

End Function