Playlist Problem :(
Übersicht BlitzBasic Allgemein
GeohoundBetreff: Playlist Problem :( |
So, Dez 20, 2009 11:17 Antworten mit Zitat |
|
---|---|---|
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 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 Und warum wird die Musik nicht abgespielt? ~~~ ~~~ PS: Wie immer gilt, wer Rechtschreibfehler entdeckt darf sie behalten und bei ebay verkaufen |
||
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 |
So, Dez 20, 2009 11:23 Antworten mit Zitat |
|
---|---|---|
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)
Code: [AUSKLAPPEN] 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 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 |
So, Dez 20, 2009 11:32 Antworten mit Zitat |
|
---|---|---|
Super ideen!
Programmieren finde ich, ist immer so ein "In die Trickkiste greiffen" |
||
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 |
So, Dez 20, 2009 11:46 Antworten mit Zitat |
|
---|---|---|
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 |
So, Dez 20, 2009 13:52 Antworten mit Zitat |
|
---|---|---|
Ich denk bei deiner ersten Lösung ist eine Zufallswiedergabe zu programmieren sehr einfach
Vielen liebe dank 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 |
So, Dez 20, 2009 15:50 Antworten mit Zitat |
|
---|---|---|
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 |
So, Dez 20, 2009 16:17 Antworten mit Zitat |
|
---|---|---|
BlitzBasic: [AUSKLAPPEN] Function gtrax_player() Ok, also folgendes zum code: Pfadproblem gefixt, Musik kann abgespielt werden Es wird immer der richtige Song+Richtige ID-Tags geladen(DANKE!) Wenn ich das Prog starte, hört man nichts aber die Tags werden richtig angezeigt. 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 Wie du siehst hab ich mal versucht ne Zufallswiedergabe einzufügen, funzt aber net 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
JamaginBetreff: zufallswiedergabe |
So, Dez 20, 2009 16:39 Antworten mit Zitat |
|
---|---|---|
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 |
||
Bevor du etwas neues beginnst, erledige das alte |
Starwar |
So, Dez 20, 2009 16:47 Antworten mit Zitat |
|
---|---|---|
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 |
||
JamaginBetreff: zufallswert |
So, Dez 20, 2009 16:53 Antworten mit Zitat |
|
---|---|---|
@Starwar
hast schon recht mit Type aber das geht mit DIM(Wert) auch oder mit Banks... lg. Jamagin 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 |
So, Dez 20, 2009 16:54 Antworten mit Zitat |
|
---|---|---|
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 |
So, Dez 20, 2009 16:55 Antworten mit Zitat |
|
---|---|---|
//Zu schnell geklickt... | ||
Nicdel |
So, Dez 20, 2009 16:56 Antworten mit Zitat |
|
---|---|---|
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 |
So, Dez 20, 2009 17:21 Antworten mit Zitat |
|
---|---|---|
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 |
So, Dez 20, 2009 17:25 Antworten mit Zitat |
|
---|---|---|
@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 @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 |
So, Dez 20, 2009 17:26 Antworten mit Zitat |
|
---|---|---|
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 |
So, Dez 20, 2009 17:36 Antworten mit Zitat |
|
---|---|---|
@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 |
So, Dez 20, 2009 17:41 Antworten mit Zitat |
|
---|---|---|
@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 |
JamaginBetreff: music |
So, Dez 20, 2009 17:51 Antworten mit Zitat |
|
---|---|---|
@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 |
||
Bevor du etwas neues beginnst, erledige das alte |
- Zuletzt bearbeitet von Jamagin am So, Dez 20, 2009 17:52, insgesamt einmal bearbeitet
Midimaster |
So, Dez 20, 2009 17:51 Antworten mit Zitat |
|
---|---|---|
@mpmxyz
Mensch, danke, das war mir jetzt total neu! ....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. |
||
Übersicht BlitzBasic Allgemein
Powered by phpBB © 2001 - 2006, phpBB Group