Playlist Problem :(

Übersicht BlitzBasic Allgemein

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen

Geohound

Betreff: Playlist Problem :(

BeitragSo, Dez 20, 2009 11:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Also, ich "arbeite" gerade an einem Mediaplayer, wie der von EAGames, der bei den Spielen kurz eingeblendet wird und Titel, Interpret und Album anzeigt.
Den Player mit fade-in-animation hab ich schon.
Also zur Playlist

Ich habe eine Datei, die Playlist die habe ich wie folgt aufgebaut

Dateiname vom ersten Lied
Interpret vom ersten Lied
Titel des ersten Liedes
Album des ersten Liedes

Dateiname vom nächsten Lied
Interpret vom nächsten Lied
Titel des nächsten Liedes
Album des nächsten Liedes
...


die playlist und die Lieder liegen im Ordner music


Die Hauptschleife ruft folgende Funktion auf:

Code: [AUSKLAPPEN]
Function PlayGTRAXMusic()
If ChannelPlaying(musicchannel) = 0 Then
Loadplaylist()
musicchannel = PlayMusic("music/ "+music_path$)
gtrax_player()
EndIf
End Function



Diese Funktion wiederum ruft diese fehlerhafte(?) Funktion auf:


Code: [AUSKLAPPEN]
Function Loadplaylist()
playlist_data=ReadFile("music/playlist2.geo")
music_path$=ReadLine$(playlist_data)
music_artist$=ReadLine$(playlist_data)
music_title$=ReadLine$(playlist_data)
music_album$=ReadLine$(playlist_data)
End Function



====
Ich weiß, ist nichts eingerückt. oO
Puh, also ich denke ist teilweise vllt etwas unlogisch Smile
Aber wenn ich in ner Datei mit Readline was auslese gehts doch in die nächste Zeile, es wird aber beim Player immer nur das erste Lied angezeigt. Wird also am Ende der Funktion wieder resetet Sad
Und warum wird die Musik nicht abgespielt?



~~~
~~~
PS: Wie immer gilt, wer Rechtschreibfehler entdeckt darf sie behalten und bei ebay verkaufen Smile
My Homepage: Geohound.TK

_°| <---This ist Schäuble copy him
[O] into your signature to help him on his way to a "Überwachungsstaat"
Datensammler sind VERBRECHER!

Midimaster

BeitragSo, Dez 20, 2009 11:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Die Sache mit der Playlist ist ganz logisch. Wenn Du sie mit ReadFile öffnest, wird sie jedesmal auf den Nullpunkt zurückgesetzt.

Die einfachste Lösung wäre, die gesamte Playlist auf einmal zu laden, und dann später auf immer andere Zeilen zuzugreifen:
Code: [AUSKLAPPEN]
Dim PfadZeile$(100)
Dim ArtistZeile$(100)
Dim TitelZeile$(100)
Dim AlbumZeile$(100)
Global LastEintrag%

Function LoadGesamtePlayList()
    playlist_data=ReadFile("music/playlist2.geo")
        Repeat
            LastEintrag=LastEintrag+1
            PfadZeile(LastEintrag)=ReadLine$(playlist_data)   
            ArtistZeile(LastEintrag)=ReadLine$(playlist_data)
            TitelZeile(LastEintrag)=ReadLine$(playlist_data)
            AlbumZeile(LastEintrag)=ReadLine$(playlist_data)
        Until EOF(PlayList_Data)
    CloseFile PlayList_Data   
End Function
Code: [AUSKLAPPEN]
Function LoadEinenEintrag(Nummer%)
    local i%, VoidZeile$
    music_path=PfadZeile(Nummer)   
    music_artist=ArtistZeil(Nummer)
    music_title=TitelZeile(Nummer)
    music_album=AlbumZeile(Nummer)
End Function



Eine zweite Lösung wäre einen Zählparameter mitlaufen zu lassen, der nach dem Öffnen der Datei x Zeilen überspringt:

Code: [AUSKLAPPEN]
Function Loadplaylist(AbEintrag%)
    local i%, VoidZeile$
    playlist_data=ReadFile("music/playlist2.geo")
   
    For i%=1 to AbEintrag*4
        VoidZeile=ReadLine$(playlist_data)
    Next

    music_path$=ReadLine$(playlist_data)   
    music_artist$=ReadLine$(playlist_data)
    music_title$=ReadLine$(playlist_data)
    music_album$=ReadLine$(playlist_data)

    CloseFile PlayList_Data
End Function

Die optimale Lösung wäre eine Art INI-File mit Überschriften und Einträgen


EDIT #1: Code eingefügt (siehe oben)
  • Zuletzt bearbeitet von Midimaster am So, Dez 20, 2009 12:05, insgesamt 5-mal bearbeitet

Geohound

BeitragSo, Dez 20, 2009 11:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Super ideen!
Programmieren finde ich, ist immer so ein "In die Trickkiste greiffen" Smile
My Homepage: Geohound.TK

_°| <---This ist Schäuble copy him
[O] into your signature to help him on his way to a "Überwachungsstaat"
Datensammler sind VERBRECHER!

Midimaster

BeitragSo, Dez 20, 2009 11:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich hab dir beide Lösung mit dem Gesamtladen und dem Zeilenüberspringen gesendet (siehe oben). Welche Lösung würdst Du gerne bevorzugen?

Übrigens: Vergiß das CloseFile nicht!!!


Zu dem Fehler "Warum spielt die Musik nicht?" glaube ich, dass Du den Pfad "music\" versehentlich 2x vor den Dateinamen stellst.

Geohound

BeitragSo, Dez 20, 2009 13:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich denk bei deiner ersten Lösung ist eine Zufallswiedergabe zu programmieren sehr einfach Smile
Vielen liebe dank Smile

Zitat:
Zu dem Fehler "Warum spielt die Musik nicht?" glaube ich, dass Du den Pfad "music\" versehentlich 2x vor den Dateinamen stellst.


Nope. Leider nicht
My Homepage: Geohound.TK

_°| <---This ist Schäuble copy him
[O] into your signature to help him on his way to a "Überwachungsstaat"
Datensammler sind VERBRECHER!

Midimaster

BeitragSo, Dez 20, 2009 15:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Dann schreib doch mal vor die Codestelle, wo PlayMusic steht ein...

DEBUGLOG "!" + "music/ "+ music_path$ + "!"

...hin. Stelle bitte außerdem den aktuellen Code der neuen PlayGTRAXMusic() hier rein.

Hast Du auch drangedacht, sie komplett neu zu strukturieren? So: Playlist laden jetzt 1x ganz an den Anfang des Programms. In die PlayGTRAXMusic() muss natürlich der Aufruf der LoadEinenEintrag() vor dem PlayMusic() rein.

Geohound

BeitragSo, Dez 20, 2009 16:17
Antworten mit Zitat
Benutzer-Profile anzeigen
BlitzBasic: [AUSKLAPPEN]
Function gtrax_player()

Local GTRAXfont=LoadFont("Arial",GTRAXheigh#,1)

SetFont GTRAXfont
If GTRAX_X_Koordinate<+70 Then GTRAX_X_Koordinate=GTRAX_X_Koordinate+2
If scale# < 0.5 Then scale# = scale#+0.0067
If GTRAXframe#< 10.8 Then GTRAXframe# = GTRAXframe#+0.3

If GTRAXheigh#<20 Then GTRAXheigh#=GTRAXheigh#+0.5


DrawImage gtrax_anim,GTRAX_X_Koordinate,+400,GTRAXframe#

;DrawImage gtrax_player_background,GTRAX_X_Koordinate,+250
Text 100,100,"Drücke F5 um die Animation neu zu starten"
Text GTRAX_X_Koordinate+75,+473,music_artist$
Text GTRAX_X_Koordinate+75,+496,music_title$
Text GTRAX_X_Koordinate+75,+518,music_album$
End Function








Function LoadGesamtePlayList()
playlist_data=ReadFile("music/playlist.geo")
Repeat
LastEintrag%=LastEintrag%+1
PfadZeile$(LastEintrag%)=ReadLine$(playlist_data)
ArtistZeile$(LastEintrag%)=ReadLine$(playlist_data)
TitelZeile$(LastEintrag%)=ReadLine$(playlist_data)
AlbumZeile$(LastEintrag%)=ReadLine$(playlist_data)
Until Eof(playlist_data)
CloseFile playlist_data
zufall%=Rnd(1,LastEintrag%)
End Function

Function LoadEinenEintrag(Nummer%)
Local i%, VoidZeile$
music_path$=PfadZeile$(Nummer)
music_artist$=ArtistZeile$(Nummer)
music_title$=TitelZeile$(Nummer)
music_album$=AlbumZeile$(Nummer)
End Function




Function PlayGTRAXMusic()
If geladen=0 Then
LoadGesamtePlayList()
Print "Playlist geladen"
geladen=1
EndIf

If ChannelPlaying(musicchannel) = 0 Then
zufall%=wiedergabe%
LoadEinenEintrag(1)
musicchannel = PlayMusic("music/"+music_path$)
gtrax_player()
;

EndIf
End Function



Ok, also folgendes zum code:

Arrow Pfadproblem gefixt, Musik kann abgespielt werden
Arrow Es wird immer der richtige Song+Richtige ID-Tags geladen(DANKE!)
Question Wenn ich das Prog starte, hört man nichts aber die Tags werden richtig angezeigt.
Question Wenn ich dann F5 drücke (der Programmcode wird neu ausgeführt) dann hör ich die Musik richtig, die ID-Tags werden aber nimmer angeziegt oO
Question Wie du siehst hab ich mal versucht ne Zufallswiedergabe einzufügen, funzt aber net Smile
Question Wenn ich das Prog starte, wird ja nur alles angezeigt, aber nichts abgespielt, wenn ich aber mit der Maus auf den Fensterrand klicke(gedrückt halte) also der Berreich, indem der Name angezeigt wird, wird die Musik abgespielt oO


EDIT#1 Korrogiert
EDIT#2 Problem geaddet
EDIT#3 Kuriosität geaddet
My Homepage: Geohound.TK

_°| <---This ist Schäuble copy him
[O] into your signature to help him on his way to a "Überwachungsstaat"
Datensammler sind VERBRECHER!
  • Zuletzt bearbeitet von Geohound am So, Dez 20, 2009 16:44, insgesamt einmal bearbeitet

Jamagin

Betreff: zufallswiedergabe

BeitragSo, Dez 20, 2009 16:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Eine Zufallswiedergabe ist gaaanz einfach, indem du wie midimaster schon sagte eine Zählvariable mitlaufen lässt. Dann hast du die Anzahl deiner Songs und kannst den Titel mit liednr = RAND(From, To) und dann eben
if not channelplaying (liednr) liednr = playmusic(... oder playsound(...) endif.

lg. Jamagin Cool
Bevor du etwas neues beginnst, erledige das alte

Starwar

BeitragSo, Dez 20, 2009 16:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Du kannst die Listen durchmischen...
Dann kommt jedes Lied immer nur einmal dran (Pseudocode):
Code: [AUSKLAPPEN]
for i=0 to 10000
z1=Rand(0,anz-1)
z2=Rand(0,anz-1)
tmp=feld(z1)
feld(z1)=feld(z2)
feld=(z2)=tmp
next

Ich würde dir empfehlen auf Type umzusteigen, da kannst du mehr als 100 Lieder laden.
MFG

Jamagin

Betreff: zufallswert

BeitragSo, Dez 20, 2009 16:53
Antworten mit Zitat
Benutzer-Profile anzeigen
@Starwar

hast schon recht mit Type aber das geht mit DIM(Wert) auch oder mit Banks...

lg. Jamagin Cool

NB: er hat einfach statt Rand eben Rnd geschrieben und Rnd erzeugt Kommazahlen und Rand erzeugt Ganzzahlen!
Bevor du etwas neues beginnst, erledige das alte

Starwar

BeitragSo, Dez 20, 2009 16:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Banks?!
Was willst du da um Himmels Willen mit Banks?
Dim ist nicht so gut, weil man die Größe eines Feldes nicht ändern kann ohne den Inhalt zu löschen...
MFG
  • Zuletzt bearbeitet von Starwar am So, Dez 20, 2009 16:56, insgesamt einmal bearbeitet

Starwar

BeitragSo, Dez 20, 2009 16:55
Antworten mit Zitat
Benutzer-Profile anzeigen
//Zu schnell geklickt...

Nicdel

BeitragSo, Dez 20, 2009 16:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Mit Types kann man beliebig viele Lieder laden, bei Dims muss die Anzahl vorher festgelegt werden.
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7

Midimaster

BeitragSo, Dez 20, 2009 17:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Oje, Types und Banks-Vorschläge: "Warum einfach, wenns auch kompliziert geht...." Wenn ihm Dim auf 100 nicht reicht, soll er halt Dim auf 10.000 Einträge erhöhen. Das wäre im Speicherbedarf immer noch nicht zu spüren, man könnte damit aber schon 30.000 Minuten Musik = 500 Stunden Musik = 20 Tage Musik in die Playlist laden. Selbst die DIM 100 reicht schon für 6 Stunden!!!! Leute!!!! Als Preis dafür würde er sein eigenes Programm nicht mehr kapieren. Geohound scheint mir schon bei "RAND() überfordert.

@geohound

Bleib bei den DIMs, das reicht für dieses Projekt echt aus!

Das RAND() gehört nicht in die Lade-Routine, sondern in die PlayGTRAXMusic(). z.B. beim Aufruf der...

LoadEinenEintrag( Rand( 1,LastEintrag ) )

...Schließlich willst Du ja nach jedem Lied ein anderes per Zufall auswählen.


Um das Problem mit der F5 zu verstehen, müsstest Du die Routine reinstellen, wo das ausgewertet wird.
  • Zuletzt bearbeitet von Midimaster am So, Dez 20, 2009 17:38, insgesamt 2-mal bearbeitet

Geohound

BeitragSo, Dez 20, 2009 17:25
Antworten mit Zitat
Benutzer-Profile anzeigen
@Jamagin:
Das hatte ich ja schon versucht -.- gut ich hatte fälschlicherweise rnd statt Rand verwendet, aber ansonsten hatte ichs ja so. Und mit dem channel, funzt das ja nicht ganz so, wie dus meintest. Oder ich hab dich falsch verstanden oO

@Starwar:
Ich will ja gar nicht, dass sie nur einmal gespielt werden. Soll ja, wenn die Lieder aus sind nicht stille herrschen, sondern einfach weiter per Zufall Lieder gespielt werden.

@Nicdel,Starwar:
Ja, Felder wären net schlecht, aber ich stell mir die Titelauswahl dann etwas schwieriger vor oO
Hab bis jetzt immer versucht Felder zu umgehn Embarassed

@all:
Danke für das Angagement
My Homepage: Geohound.TK

_°| <---This ist Schäuble copy him
[O] into your signature to help him on his way to a "Überwachungsstaat"
Datensammler sind VERBRECHER!

Starwar

BeitragSo, Dez 20, 2009 17:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Ist ja gut Midimaster.
Es war ja auch mehr als Anregung gedacht. Weil um Types kommt man später nicht herum.
Aber du hast recht, für den Anfang sollte er bei Dims bleiben.
@geohound:
Wenn du nicht weißt, wo was hin soll, zeichne dir ein Ablaufprotokoll.
Das hilft die Übersicht zu bewahren und den Platz für neues zu finden.
MFG

Midimaster

BeitragSo, Dez 20, 2009 17:36
Antworten mit Zitat
Benutzer-Profile anzeigen
@geohound

Du verwendest bereits "Felder". Deine Dim ArtistZeile$(100) ist nix anderes!

Du dimensionierst hier ein Feld mit 100 Einträgen, in jeden Eintrag kannst du einen Inhalt reinschreiben. Die Inhalte sind bei diesem Beispiel die bis zu 100 ArtistZeilen deiner Playlist. Mit ArtistZeile$(1) sprichts Du den ersten Eintrag, mit ArtistZeile$(2) den zweiten Eintrag an. Stell Dir das Ganze ruhig wie eine Tabelle mit 100 Zeilen vor. Der Spass beginnt mit ArtistZeile$(i), hier sprichst Du die "i".-te Zeile an, wobei I zwischen 1 und 100 frei gewählt werden kann.

mpmxyz

BeitragSo, Dez 20, 2009 17:41
Antworten mit Zitat
Benutzer-Profile anzeigen
@Midimaster
Die Dims fangen bei 0 an und gehen bis zur angegebenen Größe!
"Dim Feld(100)" erstellt 101 Einträge von 0 bis einschließlich 100.
mfG
mpmxyz
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer

Jamagin

Betreff: music

BeitragSo, Dez 20, 2009 17:51
Antworten mit Zitat
Benutzer-Profile anzeigen
@geohound

Code: [AUSKLAPPEN]

if not channelplaying(chn_mainmusic)
   if music_auswahl < songnr Then music_auswahl = Rand(0, songnr)
   chn_mainmusic = PlayMusic ("music\" + songname$(music_auswahl))
endif


Wenn das in deiner Hauptroutine drinsteht, wird nie stille herrschen!
Natürlich mußt du die music_auswahl voranstellen zB. music_auswahl = RAND(From, To). Mußt halt deine Variablen einsetzen.

lg. Jamagin Cool
Bevor du etwas neues beginnst, erledige das alte
  • Zuletzt bearbeitet von Jamagin am So, Dez 20, 2009 17:52, insgesamt einmal bearbeitet

Midimaster

BeitragSo, Dez 20, 2009 17:51
Antworten mit Zitat
Benutzer-Profile anzeigen
@mpmxyz
Mensch, danke, das war mir jetzt total neu! Rolling Eyes

....Jemandem, der gerade (wie Geohound) mit Felder anfängt, zu erzählen, es gäbe eine nulltes Element ist genau das, was er zum tiefen Verständnis der Felder wissen sollte....

@geohound
bleibt zunächst dabei die Felder ab dem 1.Element zu füllen. Es hat keinen Nachteil, wenn wir zunächst das nullte Element einfach nicht beachten.

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group