Gmu 0.2.0 veröffentlicht!


eworm said:
Ja, genau das ist der Grund. Meine Playlisten erstelle ich immer mit find, ist klar, dass es dabei dann keine Titelinformationen gibt...

Ok, gut zu wissen. Ich hatte das halt bisher so gehandhabt, wie es im Moment ist, weil es bei längeren Playlisten sonst mit unter sehr viele Dateien nacheinander geöffnet werden müssen um die Tags auszulesen, was unter Umständen etwas Zeit benötigen könnte. Ich werde es aber einfach mal ausprobieren. Vielleicht ist es ja doch garnicht so schlimm.
 
Mir ist da gerade mal noch was aufgefallen als ich immer mit der selben Playlist rumhantiert habe... Im Random-Mode bekommt man immer wieder die selben Titel. :| Könntest du da eventuell noch was dran machen? Ich weiß nicht wie du das gelöst hast, aber vielleicht initialisierst du das mal irgendwie mit einem anderen Random-Seed?
 
eworm said:
Also von mir aus kann es dann auch so bleiben. Ich habe mir jetzt fapg (Fast Audio Playlist Generator) installiert. Damit lassen sich die Playlisten einfach generieren und der GP2X hat nicht so viel zu rödeln.

Das ist ja mal ein praktisches Programm zum Playlisten erstellen. :)
Mir ist da gerade mal noch was aufgefallen als ich immer mit der selben Playlist rumhantiert habe... Im Random-Mode bekommt man immer wieder die selben Titel. Könntest du da eventuell noch was dran machen? Ich weiß nicht wie du das gelöst hast, aber vielleicht initialisierst du das mal irgendwie mit einem anderen Random-Seed?

Oh das stimmt. Ich hatte bisher den random-Generator einfach nicht initialisiert, aber das ist schon ein Argument und ist auch keine große Sache das zu ändern. Ich behebe das mit der nächsten Version.
 
Erstmal natürlich ein fettes dankeschön!
Werde dir natürlich auch was zukommen lassen, sobald ich wieder Geld bekomme :)

Hab da noch einer Frage:
Ist es möglich, wenn man einen Titel in die Playlist hinzufügt, dass er dann gleich zu nächsten Titel springt?

Das würde dann das Playlisten erstellen viel schneller machen :D


Vielleicht wäre es auch möglich, noch eine speicherungs funktion einzubauen.(für die Playlist)
 
D.D.S said:
Erstmal natürlich ein fettes dankeschön!
Werde dir natürlich auch was zukommen lassen, sobald ich wieder Geld bekomme :)
:)
Hab da noch einer Frage:
Ist es möglich, wenn man einen Titel in die Playlist hinzufügt, dass er dann gleich zu nächsten Titel springt?

Das würde dann das Playlisten erstellen viel schneller machen :D

Du meinst, wenn man einen Titel in die Playliste einfügt, dass dann die Markierung entsprechend weiterwandern soll, damit der nächste Titel darunter eingefügt werden kann, ohne dass man die Ansicht umstellen muss und die Markierung manuell umsetzen muss? Oder habe ich das jetzt irgendwie falsch verstanden?
Vielleicht wäre es auch möglich, noch eine speicherungs funktion einzubauen.(für die Playlist)

Bisher ist es ja so, dass die Playliste beim Beenden gespeichert werden kann, wobei der Name der Datei immer playlist.m3u ist. An eine allgemeine Speichern-Funktion hatte ich auch schon gedacht. Das was mich davon bisher hauptsächlich abgehalten hat, war die Frage, wie man die Dateinameneingabe realisiert. Das kam mir alles immer so umständlich vor. Vielleicht hat ja jemand eine Idee dazu.
 
Das was mich davon bisher hauptsächlich abgehalten hat, war die Frage, wie man die Dateinameneingabe realisiert. Das kam mir alles immer so umständlich vor. Vielleicht hat ja jemand eine Idee dazu.

Wie wäre es wenn man sich aus den id3 tag den Playlist namen zusammensetzt? also so:

[x]Artist [ ]Track [x]Album

Artist - Album

oder eben vorgefertigte Presents wie: Fun, Metal, Pop etc ?
 
wejp said:
Du meinst, wenn man einen Titel in die Playliste einfügt, dass dann die Markierung entsprechend weiterwandern soll, damit der nächste Titel darunter eingefügt werden kann, ohne dass man die Ansicht umstellen muss und die Markierung manuell umsetzen muss? Oder habe ich das jetzt irgendwie falsch verstanden?

Genau das meine ich :D
wejp said:
Bisher ist es ja so, dass die Playliste beim Beenden gespeichert werden kann, wobei der Name der Datei immer playlist.m3u ist. An eine allgemeine Speichern-Funktion hatte ich auch schon gedacht. Das was mich davon bisher hauptsächlich abgehalten hat, war die Frage, wie man die Dateinameneingabe realisiert. Das kam mir alles immer so umständlich vor. Vielleicht hat ja jemand eine Idee dazu.

Ich dachte da an so eine eingabe wie beim Gmenu2x, wenn man den Namen vom Icon editiert.
Damit wäre man halt unabhäniger vom PC und ich hab auf meiner 4GB SD, ziemlich viel Musik :)
Da hab ich je nach Lust und Laune, auch mal andere Musikwünsche und könnte die so ganz leicht realisieren. :)

Vorallen hab ich ja gelesen, dass wenn ich mit Winamp eine Playlist erstelle, erst alle / in \ oder umgekehrt wandeln muss.
Was mir ehrlich gesagt ein bissel zu doof ist.
 
D.D.S said:
wejp said:
Du meinst, wenn man einen Titel in die Playliste einfügt, dass dann die Markierung entsprechend weiterwandern soll, damit der nächste Titel darunter eingefügt werden kann, ohne dass man die Ansicht umstellen muss und die Markierung manuell umsetzen muss? Oder habe ich das jetzt irgendwie falsch verstanden?

Genau das meine ich :D

Sehr gut, das wird dann in der nächsten Version so gehandhabt. :)
wejp said:
Bisher ist es ja so, dass die Playliste beim Beenden gespeichert werden kann, wobei der Name der Datei immer playlist.m3u ist. An eine allgemeine Speichern-Funktion hatte ich auch schon gedacht. Das was mich davon bisher hauptsächlich abgehalten hat, war die Frage, wie man die Dateinameneingabe realisiert. Das kam mir alles immer so umständlich vor. Vielleicht hat ja jemand eine Idee dazu.

Ich dachte da an so eine eingabe wie beim Gmenu2x, wenn man den Namen vom Icon editiert.
Damit wäre man halt unabhäniger vom PC und ich hab auf meiner 4GB SD, ziemlich viel Musik :)
Da hab ich je nach Lust und Laune, auch mal andere Musikwünsche und könnte die so ganz leicht realisieren. :)

Vorallen hab ich ja gelesen, dass wenn ich mit Winamp eine Playlist erstelle, erst alle / in \ oder umgekehrt wandeln muss.
Was mir ehrlich gesagt ein bissel zu doof ist.

Ich werde mir da was einfallen lassen. Es wird auf jeden Fall früher oder später die Möglichkeit geben Playlisten manuell zu speichern. Auch HauJobbs Idee finde ich garnicht verkehrt.
 
Hallo wejp,

besten Dank erstmal für die rasche Umsetzung einiger meiner Vorschläge. :)
Es wäre auch noch 'ne prima Sache, wenn Du außer dem PSID- und dem Fasttracker-Format auch noch das Sound- ( bzw. Pro-) Tracker-Format (.mod) unterstützen könntest. Der GMu wäre dann ein echter Multi-Media-Player.
Und zwecks stromsparen wäre es vielleicht gut, den Player während er gerade nichts abfidelt, man also so vor sich hin browsert, auf einige wenige MHz laufen zu lassen, falls das nicht sowieso schon der Fall sein sollte.
 
Camiga64 said:
Hallo wejp,

besten Dank erstmal für die rasche Umsetzung einiger meiner Vorschläge. :)
Es wäre auch noch 'ne prima Sache, wenn Du außer dem PSID- und dem Fasttracker-Format auch noch das Sound- ( bzw. Pro-) Tracker-Format (.mod) unterstützen könntest. Der GMu wäre dann ein echter Multi-Media-Player.

Ich hatte das an anderer Stelle schonmal erwähnt, der Support für die Trackerformate (das schließt sowohl XM als auch MOD mit ein) ist im Moment nur teilweise funktionsfähig. Insbesondere XM und seltsamerweise auch normale Protracker-Module machen Probleme. Ich werde versuchen, dafür eine Lösung zu finden, allerdings hat das im Augenblick nicht allerhöchste Priorität. Ich habe es aber nicht vergessen.
Und zwecks stromsparen wäre es vielleicht gut, den Player während er gerade nichts abfidelt, man also so vor sich hin browsert, auf einige wenige MHz laufen zu lassen, falls das nicht sowieso schon der Fall sein sollte.

Das passiert zur Zeit noch nicht, ich werde etwas derartiges in Zukunft aber integrieren.
 
Ich hatte das an anderer Stelle schonmal erwähnt, der Support für die Trackerformate (das schließt sowohl XM als auch MOD mit ein) ist im Moment nur teilweise funktionsfähig. Insbesondere XM und seltsamerweise auch normale Protracker-Module machen Probleme. Ich werde versuchen, dafür eine Lösung zu finden, allerdings hat das im Augenblick nicht allerhöchste Priorität. Ich habe es aber nicht vergessen.

Blöde Frage, aber wieso verwendest du nicht einfach mikmod, um Tracker-Formate abzuspielen? Wenn man ein paar Sachen beachtet, klingt das fast so gut wie ModPlug.
Keine Ahnung, was du zur Zeit verwendest, aber mit ModPlug hast du auf dem GP2X wenig Erfolgsaussichten, denn das verwendet ständig die (nicht vorhandene) FPU.

Eine sehr gute Alternative wäre auch noch DUMB (http://dumb.sourceforge.net), das ist mindestens genauso gut wie ModPlug, aber ich habe das noch nie für den GP2X portiert und es gibt auch noch keine GP2X-Version davon. Weiß nicht, wie viel Aufwand das wäre.
 
Oncer said:
Ich hatte das an anderer Stelle schonmal erwähnt, der Support für die Trackerformate (das schließt sowohl XM als auch MOD mit ein) ist im Moment nur teilweise funktionsfähig. Insbesondere XM und seltsamerweise auch normale Protracker-Module machen Probleme. Ich werde versuchen, dafür eine Lösung zu finden, allerdings hat das im Augenblick nicht allerhöchste Priorität. Ich habe es aber nicht vergessen.

Blöde Frage, aber wieso verwendest du nicht einfach mikmod, um Tracker-Formate abzuspielen? Wenn man ein paar Sachen beachtet, klingt das fast so gut wie ModPlug.
Keine Ahnung, was du zur Zeit verwendest, aber mit ModPlug hast du auf dem GP2X wenig Erfolgsaussichten, denn das verwendet ständig die (nicht vorhandene) FPU.

In der Tat verwende ich zur Zeit ModPlug und der Hauptgrund dafür war die schöne API von ModPlug, bzw. die überhaupt nicht schöne API von MikMod. MikMod ist dafür ausgelegt, selbst die Audioausgabe zu erledigen, was in meinem Fall völlig unerwünscht ist. Ich möchte bloß Audiodaten bekommen, die ich dann selbst über das Audio-Device ausgeben kann. Natürlich ließe sich das mit größeren Änderungen am MikMod-Code erreichen, aber dazu fehlte mir bisher die Motivation. Da ich letztendlich schon gerne eine funktionierende Module-Wiedergabe hätte, werde ich das aber als letzte Möglichkeit in Betracht ziehen.
Eine sehr gute Alternative wäre auch noch DUMB (http://dumb.sourceforge.net), das ist mindestens genauso gut wie ModPlug, aber ich habe das noch nie für den GP2X portiert und es gibt auch noch keine GP2X-Version davon. Weiß nicht, wie viel Aufwand das wäre.

Danke für den Hinweis, DUMB war mir bisher nicht bekannt und ich werde es mir mal genauer ansehen. Vielleicht ist das ja tatsächlich eine Alternative.

EDIT: DUMB scheint leider doch keine Alternative zu sein. Es lässt sich zwar für den GP2X übersetzen, verwendet aber leider auch Fließkomma-Arithmetik und hat insbesondere auch dort wo modplug Probleme hat auch welche.
 
In der Tat verwende ich zur Zeit ModPlug und der Hauptgrund dafür war die schöne API von ModPlug, bzw. die überhaupt nicht schöne API von MikMod. MikMod ist dafür ausgelegt, selbst die Audioausgabe zu erledigen, was in meinem Fall völlig unerwünscht ist. Ich möchte bloß Audiodaten bekommen, die ich dann selbst über das Audio-Device ausgeben kann. Natürlich ließe sich das mit größeren Änderungen am MikMod-Code erreichen, aber dazu fehlte mir bisher die Motivation. Da ich letztendlich schon gerne eine funktionierende Module-Wiedergabe hätte, werde ich das aber als letzte Möglichkeit in Betracht ziehen.

Ähm. Das ist so nicht ganz richtig. Es gibt zwar keine eigene API um in einen Buffer zu schreiben und standardmäßig macht MikMod das selber, aber es gibt sehr wohl eine einfache Möglichkeit, dasselbe Verhalten wie bei ModPlug zu erzeugen. Soll ich den Code hierhin posten oder gibst du mir eine E-Mail?

EDIT: Ach was solls...

Im Initialisierungscode das hier
Code:
  MikMod_RegisterDriver(&drv_nos);
um die Soundausgabe von MikMod zu unterbinden.

Und dann regelmäßig (wie bei ModPlug halt) die INTERNE Funktion (die ist nirgends dokumentiert) von MikMod aufrufen um in einen Buffer zu schreiben.
Code:
VC_WriteBytes((SBYTE*)read_buffer, read_wanted);
Im Gegensatz dazu, bei ModPlug würde die selbe Zeile ungefähr so aussehen:
Code:
ModPlug_Read(modul, read_buffer, read_wanted);
Hinweis: Bei MikMod hat man keine Variable für den aktuellen Stream, man startet die Wiedergabe einfach mit
Code:
Player_Start(geladenes_modul);
und VC_WriteBytes sucht sich den Stream automatisch. Wie gesagt, es ist eine interne Funktion.

Und jetzt noch etwas, was mir speziell bei der GP2X-Version von Mikmod aufgefallen ist.. du darfst nicht ALLE Loader registrieren, denn dabei gibt es einen Absturz. Ich weiß nicht genau, welcher Loader das Problem macht, aber die Wichtigsten (it,xm,s3m,mod,m15,mtm) funktionieren.

Hier noch mein Initialisierungscode mit den ganzen Flags von wegen Soundausgabe:
Code:
<i>
</i>md_mixfreq = audio.output_frequency;
md_mode = DMODE_16BITS;
md_mode |= DMODE_STEREO;
md_device = 0;
md_volume = 96;
md_musicvolume = 128;
md_sndfxvolume = 128;
md_pansep = 128;
md_reverb = 0;
md_mode |= DMODE_HQMIXER|DMODE_SOFT_MUSIC|DMODE_SURROUND;

 CHAR *list;
list = MikMod_InfoDriver();
if ( list )
  free(list);
else
  MikMod_RegisterDriver(&drv_nos);
list = MikMod_InfoLoader();
if (list)
  free(list);
else
{
  MikMod_RegisterLoader(&load_it);
  MikMod_RegisterLoader(&load_xm);
  MikMod_RegisterLoader(&load_s3m);
  MikMod_RegisterLoader(&load_mod);
  MikMod_RegisterLoader(&load_m15);
}

int result = MikMod_Init(NULL);
if (result)
{
  fprintf(stderr,"MikMod Init failed: %s",MikMod_strerror(MikMod_errno));
}

Und hier noch eine Methode wie du eine Datei aus einem Buffer anstatt aus dem Dateisystem laden kannst (falls du deine eigenen Ladefunktionen verwenden willst), ich verwende hier SDL_RWops, aber ich schätze mal du verwendest ohnehin schon SDL wo das mit dabei ist.
Code:
<i>
</i>typedef struct
{
	MREADER mr;
	int offset;
	int eof;
	SDL_RWops *rw;
} LMM_MREADER;
BOOL LMM_Seek(struct MREADER *mr,long to,int dir)
{
	int at;
	LMM_MREADER* lmmmr=(LMM_MREADER*)mr;
	if(dir==SEEK_SET)
		to+=lmmmr->offset;
	at=SDL_RWseek(lmmmr->rw, to, dir);
	return at<lmmmr>offset;
}
long LMM_Tell(struct MREADER *mr)
{
	int at;
	LMM_MREADER* lmmmr=(LMM_MREADER*)mr;
	at=SDL_RWtell(lmmmr->rw)-lmmmr->offset;
	return at;
}
BOOL LMM_Read(struct MREADER *mr,void *buf,size_t sz)
{
	int got;
	LMM_MREADER* lmmmr=(LMM_MREADER*)mr;
	got=SDL_RWread(lmmmr->rw, buf, sz, 1);
	return got;
}
int LMM_Get(struct MREADER *mr)
{
	unsigned char c;
	int i=EOF;
	LMM_MREADER* lmmmr=(LMM_MREADER*)mr;
	if(SDL_RWread(lmmmr->rw,&c,1,1))
		i=c;
	return i;
}
BOOL LMM_Eof(struct MREADER *mr)
{
	int offset;
	LMM_MREADER* lmmmr=(LMM_MREADER*)mr;
	offset=LMM_Tell(mr);
	return offset>=lmmmr->eof;
}
MODULE *MikMod_LoadSongRW(SDL_RWops *rw, int maxchan)
{
	LMM_MREADER lmmmr={{
		LMM_Seek,
		LMM_Tell,
		LMM_Read,
		LMM_Get,
		LMM_Eof},
		0,
		0,
		rw
	};
	MODULE *m;
	lmmmr.offset=SDL_RWtell(rw);
	SDL_RWseek(rw,0,SEEK_END);
	lmmmr.eof=SDL_RWtell(rw);
	SDL_RWseek(rw,lmmmr.offset,SEEK_SET);
	m=Player_LoadGeneric((MREADER*)&lmmmr,maxchan,0);
	return m;
}
Den Code habe ich übrigens von SDL_Mixer "geklaut", dort wird das auch so gemacht. ;)
 
Dankeschön. Ich hatte mir von MikMod nur die Dokumentation angesehen. Daher war ich nur davon ausgegangen. Gute Idee zu gucken, wie SDL_Mixer das macht.
 
Ich hab da noch 2 Probleme.

Und zwar geht bei mir folgende befehle nicht:
AllowVolumeControlInHoldState=yes
SecondsUntilBacklightPowerOff=10

Wenn ich den Hold Modus anmache kann ich auf meine Lautstärketasten drauf rumhauen wie ich will, aber nix passiert.
Was mache ich Falsch?

Bei dem 2ten Befehl ist es das selbe, ich warte 10sec und garnix passiert.
Das kann ja garnicht sein.

Woran kann das liegen?

Greetz D.D.S
 
D.D.S said:
Ich hab da noch 2 Probleme.

Und zwar geht bei mir folgende befehle nicht:
AllowVolumeControlInHoldState=yes
SecondsUntilBacklightPowerOff=10

Wenn ich den Hold Modus anmache kann ich auf meine Lautstärketasten drauf rumhauen wie ich will, aber nix passiert.
Was mache ich Falsch?

Bei dem 2ten Befehl ist es das selbe, ich warte 10sec und garnix passiert.
Das kann ja garnicht sein.

Woran kann das liegen?

Greetz D.D.S

Ich tippe fast darauf dass die config nicht linux konform gespeichert wurde.
(notepad++ etc hilft)
 
HauJobb said:
D.D.S said:
Ich hab da noch 2 Probleme.

Und zwar geht bei mir folgende befehle nicht:
AllowVolumeControlInHoldState=yes
SecondsUntilBacklightPowerOff=10

Wenn ich den Hold Modus anmache kann ich auf meine Lautstärketasten drauf rumhauen wie ich will, aber nix passiert.
Was mache ich Falsch?

Bei dem 2ten Befehl ist es das selbe, ich warte 10sec und garnix passiert.
Das kann ja garnicht sein.

Woran kann das liegen?

Greetz D.D.S

Ich tippe fast darauf dass die config nicht linux conform gespeichert wurde.
(notepad++ etc hilft)

Eigentlich sollte mein Configfile-Parser mit allen Arten von Zeilenumbrüchen zurechtkommen. Allerdings sind Unix-konforme Dateien prinzipiell eine gute Idee, weswegen der Hinweis auf einen geeigneten Editor nicht grundsätzlich verkehrt ist.
Es müsste aber an etwas anderem liegen.
Kannst du überhaupt irgendwelche Einstellungen in der Konfigurationsdatei ändern, so dass das auch tatsächlich eine Auswirkung hat?
 
D.D.S said:
Danke HauJobb!!

Habs mit notepad++ abgespeichert und nun gehts!

Hab nochmal den Test mit Wordpad gemacht und dann gings nimmer.

Nun bin ich glücklich!

Nichts zu danken,
Die hälfe meiner Posts besteht aus dem Satz :wink:
 
Back
Top