Bei jedem Lied Bild 5sec anzeigen

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

N0X

Betreff: Bei jedem Lied Bild 5sec anzeigen

BeitragSo, Jan 10, 2010 14:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi!
Wie oben schon beschrieben möchte ich bei jedem Lied wieder ein Bild (und Text) 5sec anzeigen lassen.
Mein Ansatz:
Code: [AUSKLAPPEN]
   If Not ChannelPlaying(channel) Then
      channel=PlayMusic("sfx\songs\"+s\name$)
      son$ = s\name$
      s = After s
      If s=Null Then s=First song
   EndIf
   
   For s.song = Each song
      If song_ima > MilliSecs()Then
         DrawImage(title,GraphicsWidth()-300,0)
         Text GraphicsWidth()-210,43,son$
      EndIf
   Next


Funktioniert nicht, was mache ich falsch? Was sollte ich anders machen?

Mfg,
N0X
Projekte: |Tibario| http://www.blitzforum.de/worklogs/325/ | 5%

Midimaster

BeitragSo, Jan 10, 2010 14:37
Antworten mit Zitat
Benutzer-Profile anzeigen
naja, du solltest vielleicht erst mal unter der Zeile mit PlayMusic().... die Variable song_ima auf einen Wert setzen, oder?

BlitzBasic: [AUSKLAPPEN]
song_ima = MilliSecs() +5000

N0X

BeitragSo, Jan 10, 2010 14:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja, das habe ich alles schon davor gemacht. Das ist ja nur ein Codeausschnitt.

Wenn benötigt:
Code: [AUSKLAPPEN]
Graphics 1024,768,32,1
SetBuffer BackBuffer()
SeedRnd MilliSecs()

timer = CreateTimer(60)

Type song
   Field name$
End Type

;Songs auslesen und verarbeiten
Global musicV = ReadDir("sfx\songs")
Repeat
   Local SourceFile$ = NextFile(musicV)
   If SourceFile$ = "" Then Exit

   If Lower(Right(SourceFile$, 4)) = ".wav" Then
      s.song  = New song
      s\name$ = SourceFile$
   EndIf
Forever
CloseDir(musicV)

Local song_ima = MilliSecs()+5000

s = First song
While Not KeyDown(1)
   WaitTimer(timer)

   If Not ChannelPlaying(channel) Then
      channel=PlayMusic("sfx\songs\"+s\name$)
      son$ = s\name$
      s = After s
      If s=Null Then s=First song
   EndIf
   
   For s.song = Each song
      If song_ima > MilliSecs()Then
         DrawImage(title,GraphicsWidth()-300,0)
         Text GraphicsWidth()-210,43,son$
      EndIf
   Next
   
   Flip 0
Wend
End
Projekte: |Tibario| http://www.blitzforum.de/worklogs/325/ | 5%

Midimaster

BeitragSo, Jan 10, 2010 15:01
Antworten mit Zitat
Benutzer-Profile anzeigen
naja, und jetzt machste diese song_ima-Zeile unter die Zeile mit PlayMusic()....

BlitzBasic: [AUSKLAPPEN]
....
If Not ChannelPlaying(channel) Then
channel=PlayMusic("sfx\songs\"+s\name$)
song_ima = MilliSecs() +5000
.....

N0X

BeitragSo, Jan 10, 2010 15:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Dann kommt ab dem 2.Titel die Fehlermeldung "Object Does Not Exist", bei der Zeile,
Code: [AUSKLAPPEN]
channel=PlayMusic("sfx\songs\"+s\name$)
Projekte: |Tibario| http://www.blitzforum.de/worklogs/325/ | 5%

Midimaster

BeitragSo, Jan 10, 2010 15:12
Antworten mit Zitat
Benutzer-Profile anzeigen
das liegt aber 100% nicht an der Timer-Zeile!

Hast Du denn auch schon die Variable S GLOBAL definiert?


Außerdem ist die For/Each/Next Unsinn und auch unnötig, oder? Du steppst ja schon mit dem AFTER S immer eins weiter.

N0X

BeitragSo, Jan 10, 2010 15:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Also ohne die "For s.song = Each song" Zeile, klappts ja auch, aber dann wird nicht bei jedem Song das Bild (und der Text) angezeigt, sondern nur beim Ersten.
Projekte: |Tibario| http://www.blitzforum.de/worklogs/325/ | 5%

Midimaster

BeitragSo, Jan 10, 2010 15:30
Antworten mit Zitat
Benutzer-Profile anzeigen
es hat aber der eine Fehler nix mit dem andern zu tun.
Wo änderst Du denn Title? Wie erfährst du den?
Das muss doch auch nach der PlayMusic()-Zeile sein!

N0X

BeitragSo, Jan 10, 2010 15:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Hm, so klappt es nicht:
Code: [AUSKLAPPEN]
Graphics 1024,768,32,1
SetBuffer BackBuffer()
SeedRnd MilliSecs()

Global title = LoadImage("gfx\song.png")

timer = CreateTimer(60)

Type song
   Field name$
End Type

;Songs auslesen und verarbeiten
Global musicV = ReadDir("sfx\songs")
Repeat
   Local SourceFile$ = NextFile(musicV)
   If SourceFile$ = "" Then Exit

   If Lower(Right(SourceFile$, 4)) = ".wav" Then
      s.song  = New song
      s\name$ = SourceFile$
   EndIf
Forever
CloseDir(musicV)

;Local song_ima = MilliSecs()+5000

s = First song
While Not KeyDown(1)
   WaitTimer(timer)

   If Not ChannelPlaying(channel) Then
      channel=PlayMusic("sfx\songs\"+s\name$)
      song_ima = MilliSecs()+5000
      son$ = s\name$
      s = After s
      If s=Null Then s=First song
   EndIf
   
   For s.song = Each song
      If song_ima > MilliSecs()Then
         DrawImage(title,GraphicsWidth()-300,0)
         Text GraphicsWidth()-210,43,son$
      EndIf
   Next
   
   Flip 0
Wend
End


Und so schon, bloß halt das nur beim ersten Titel das Bild(+Text) kommt:
Code: [AUSKLAPPEN]
Graphics 1024,768,32,1
SetBuffer BackBuffer()
SeedRnd MilliSecs()

Global title = LoadImage("gfx\song.png")

timer = CreateTimer(60)

Type song
   Field name$
End Type

;Songs auslesen und verarbeiten
Global musicV = ReadDir("sfx\songs")
Repeat
   Local SourceFile$ = NextFile(musicV)
   If SourceFile$ = "" Then Exit

   If Lower(Right(SourceFile$, 4)) = ".wav" Then
      s.song  = New song
      s\name$ = SourceFile$
   EndIf
Forever
CloseDir(musicV)

;Local song_ima = MilliSecs()+5000

s = First song
While Not KeyDown(1)
   WaitTimer(timer)

   If Not ChannelPlaying(channel) Then
      channel=PlayMusic("sfx\songs\"+s\name$)
      song_ima = MilliSecs()+5000
      son$ = s\name$
      s = After s
      If s=Null Then s=First song
   EndIf
   
   ;For s.song = Each song
      If song_ima > MilliSecs()Then
         DrawImage(title,GraphicsWidth()-300,0)
         Text GraphicsWidth()-210,43,son$
      EndIf
   ;Next
   
   Flip 0
Wend
End


Was meintest du, dass das dadrunter muss? (Achja, ich verändere garnichts mehr, das ist der Komplette Code.)
Projekte: |Tibario| http://www.blitzforum.de/worklogs/325/ | 5%

Midimaster

BeitragSo, Jan 10, 2010 15:53
Antworten mit Zitat
Benutzer-Profile anzeigen
wieviele songs befinden sich denn gerade in dem Verzeichnis?

Teste mal direkt nach dem Laden:

BlitzBasic: [AUSKLAPPEN]
...
Forever
CloseDir(musicV)
For s.song = Each song
Print s\name
Next
WaitKey()


und sag mir was du siehst bis dahin


Du willst schon, dass immer nur der Song angezeigt wird, der aktuelle spielt, oder?

N0X

BeitragSo, Jan 10, 2010 16:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Also im Moment sind 6 Songs im Verzeichnis, die er mir auch alle mit Print anzeigt.
Und ja, ich möchte das er imemr den aktuellen anzeigt.

//EDIT:
Selbst SO zickt er rum:
Code: [AUSKLAPPEN]
Graphics 1024,768,32,1
SetBuffer BackBuffer()
SeedRnd MilliSecs()

Global title = LoadImage("gfx\song.png")

timer = CreateTimer(60)

Type song
   Field name$
End Type

;Songs auslesen und verarbeiten
Global musicV = ReadDir("sfx\songs")
Repeat
   Local SourceFile$ = NextFile(musicV)
   If SourceFile$ = "" Then Exit

   If Lower(Right(SourceFile$, 4)) = ".wav" Then
      s.song  = New song
      s\name$ = SourceFile$
   EndIf
Forever
CloseDir(musicV)
   ;For s.song = Each song
   ;      Print s\name$
   ;Next
;WaitKey()

Local song_ima = MilliSecs()+5000

s = First song
While Not KeyDown(1)
   WaitTimer(timer)

   If Not ChannelPlaying(channel) Then
      channel=PlayMusic("sfx\songs\"+s\name$)
      song_ima = MilliSecs()+5000
      ;son$ = s\name$
      s = After s
      If s=Null Then s=First song
   EndIf
   
   For s.song = Each song
      ;If song_ima > MilliSecs()Then
         ;DrawImage(title,GraphicsWidth()-300,0)
         ;Text GraphicsWidth()-210,43,s\name$
      ;EndIf
   Next
   
   Flip 0
Wend
End
Projekte: |Tibario| http://www.blitzforum.de/worklogs/325/ | 5%

Midimaster

BeitragSo, Jan 10, 2010 16:11
Antworten mit Zitat
Benutzer-Profile anzeigen
hau den Waitkey() wieder raus, ersetze mal die zeile

BlitzBasic: [AUSKLAPPEN]
   If Not ChannelPlaying(channel) Then
channel=PlayMusic("sfx\songs\"+s\name$)

....


zu testzwecken durch

BlitzBasic: [AUSKLAPPEN]
   ;If Not ChannelPlaying(channel) Then
If KeyHit(28) Then
Print "Es folgt jetzt Lied" + s\name"
channel=PlayMusic("sfx\songs\"+s\name$)
....



dann kannste die Lieder "von Hand" weiterschalten

berichte, was passiert

N0X

BeitragSo, Jan 10, 2010 16:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Das klappt wunderbar, WENN die "For s.song = Each song" Zeile raus ist, wenn nicht kommt der übliche Fehler. Sad
Projekte: |Tibario| http://www.blitzforum.de/worklogs/325/ | 5%

Midimaster

BeitragSo, Jan 10, 2010 16:25
Antworten mit Zitat
Benutzer-Profile anzeigen
naja, das hab ich schon gesagt....

das FOR/EACH/NEXT ist Quatsch. Also, wenn Du mit Hand schaltest ist alles OK. Aber wenn du die ChannelPlaying() wieder einschaltest, ist es nicht OK?


so:
BlitzBasic: [AUSKLAPPEN]
If Not ChannelPlaying(channel) Then
;If KeyHit(28) Then
Print "Es folgt jetzt Lied" + s\name"
channel=PlayMusic("sfx\songs\"+s\name$)
....

Xeres

Moderator

BeitragSo, Jan 10, 2010 16:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn man den Channel als Field im Type definiert, kann man problemlos überprüfen welches Lied gerade gespielt wird...
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

N0X

BeitragSo, Jan 10, 2010 16:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Oh, da haben wir wohl aneinander vorbei geredet.
Ich dachte das "For..." ist wichtig, damit bei jedem Song 5sec lang das Bild und der Text angezeigt wird?

(Achja, sobald ich For... weglasse funktionierts immer wunderbar, bloß dann habe ich nur beim 1. Song das Bild(+Text) angezeigt! Ich brauche das aber bei jedem Song am Anfang 5sec lang!)
Projekte: |Tibario| http://www.blitzforum.de/worklogs/325/ | 5%

Midimaster

BeitragSo, Jan 10, 2010 16:44
Antworten mit Zitat
Benutzer-Profile anzeigen
also noch mal von vorne, nox!!! Du bist ja richtig beratungsresistent!

das FOR/EACH ist Quatsch
das S%, Song_Ima%, Son$ ist alles GLOBAL am Anfang des Codes

das Laden testest Du mit dem KeyHit()

läuft es so:?

BlitzBasic: [AUSKLAPPEN]
...
s = First song
While Not KeyDown(1)
WaitTimer(timer)

;If Not ChannelPlaying(channel) Then
If KeyHit(28)
Print "Es folgt jetzt Lied :" + s\name"
channel=PlayMusic("sfx\songs\"+s\name$)
song_ima = MilliSecs()+5000
son$ = s\name$
s = After s
If s=Null Then s=First song
EndIf

If song_ima > MilliSecs() Then
DrawImage Title, GraphicsWidth()-300, 0
Text GraphicsWidth()-210, 43, Son
EndIf

Flip
Wend
End

N0X

BeitragSo, Jan 10, 2010 16:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Rolling Eyes Anscheinend bin ich das wirklich!
Denn mein Code funktioniert schon lange! Very Happy
Danke Midimaster, für deine ausführliche Hilfe und deine Geduld!

Mfg,
N0X
Projekte: |Tibario| http://www.blitzforum.de/worklogs/325/ | 5%

Midimaster

BeitragSo, Jan 10, 2010 16:55
Antworten mit Zitat
Benutzer-Profile anzeigen
was willst Du damit sagen:

Zitat:
Denn mein Code funktioniert schon lange! Evil or Very Mad


Heißt das, du hast mich die ganze Zeit verarscht?

N0X

BeitragSo, Jan 10, 2010 17:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Nein! Auf keinen Fall!
Ich habe bloß eine Zeile im Code vergessen!
Projekte: |Tibario| http://www.blitzforum.de/worklogs/325/ | 5%

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group