| |||||||
Du magst keine Werbung? Wir auch nicht!
Einfach registrieren und die Werbung ist weg. Diese Nachricht sehen nur nicht registrierte Nutzer.
![]() |
| | LinkBack | Themen-Optionen | Ansicht |
| | #1 (permalink) |
| Neuer User Registriert seit: Aug 2010
Beiträge: 5
|
Hallo, seit kurzem wage ich mich an Flash bzw Air ran und versuche zum einstieg einen kleinen Mp3-Player zu basteln. Habe bisher eigentlich keine Schwierigkeiten, doch bin ich nun auf ein Problem gestoßen, welches ich nicht lösen kann. Ich benutze einen Button um durch die Ordnerauswahl Lieder zur Playlist hinzuzufügen. Da ich nicht ganz so neu im Gebiet der Programmierung bin, habe ich es auch geschafft, dass die Unterordner mit einbezogen werden. Nachdem ich aber z.B. "eigene Musik" ausgewählt habe und der ganze Ordner durchsucht worden ist, so wurdr nur ein Bruchteil der Musik geladen (so ca 330 Titel - manchmal ein bis zwei mehr oder weniger). Jetzt stellt sich für mich die Frage, wieso das so ist. Die Funktionen funktionieren ja eigentlich - durchlaufen nur nicht vollständig die Ordner?! Hier mal ein bischen code: Code: private function addFolder():void
{
dir.browseForDirectory("");
dir.addEventListener(Event.SELECT,search);
}
private function search(event:Event):void
{
dir=event.target as File;
getFiles(dir);
}
private function getFiles(dir:File):void
{
var files:Array=dir.getDirectoryListing();
for(var i:uint=0;i<files.length;i++)
{
var file:File=files[i];
if (file.isDirectory) getFiles(file);
else if (file.extension=="mp3"||file.extension=="wma"||file.extension=="MP3")
{
var song:Sound=new Sound();
song.load(new URLRequest(file.url));
song.addEventListener(Event.ID3,onID3);
}
}
}
private function onID3(event:Event):void
{
var id3:ID3Info=new ID3Info;
id3=event.target.id3;
playlist.addItem({col1:id3.artist,col2:id3.songName,col3:playlist.length,col4:event.target.url});
event.target.removeEventListener(Event.ID3,onID3);
event.target.close()
label1.text=playlist.length.toString();
} mfG Daniel |
| | |
| | #2 (permalink) |
| Neuer User Registriert seit: Sep 2007
Beiträge: 9
|
Habe das ganze nur überflogen und da nicht alle Funktionen vorhanden sind und ich mit air keine erfahrung habe rate ich mal: Grundsätzlich gefällt mir nicht wie die function getFiles sich immer wieder selber aufruft. Schöner würde ich es finden wenn du zuerst alle Verzeichnisse in ein Array abspeicherst und danach in jedem Verzeichnis nach den Musikdateien suchst. muss hier nicht zusätzlich wie in php abgefragt werden ob es sich wirklich um ein Unterverzeichnis handelt: Statt: if (file.isDirectory) getFiles(file); php: if (file.isDirectory && file!="." && file!="..") getFiles(file); wird hier jeder Song geladen bevor er in die Playliste kommt? song.load(new URLRequest(file.url)); auch wenn die var song nur lokale Gültigkeit besitzt wird sie womöglich mehrmals neu instanziert bevor sie den Event abfeuern kann. Werden in die Playlist auch Dateien abgelegt die keinen ID3 Eintrag haben? Liebe Grüsse Dregi |
| | |
| | #3 (permalink) | |
| Neuer User Registriert seit: Oct 2007
Beiträge: 434
| Zitat:
![]() Erst in nem Array speichern und dann auslesen ist in jedem Fall die weniger elegante Lösung. Allerdings würde ich mir tatsächlich überlegen, ob du nicht zunächst die Dateinamen ausließt und in einem Array speicherst, und dann erst die Dateien nacheinander lädst. Momentan sieht es so aus, als ob du sämtliche mp3s des gewählten Ordners in den Arbeitsspeicher holst, da kann schonmal bei 330 Titeln (ca. 1-2GB ) Schluß sein. | |
| | |
| | #4 (permalink) |
| Neuer User Registriert seit: Aug 2010
Beiträge: 5
|
Ich versuche nun ersteinmal die erste Lösung. Hatte es auch erst mit einem Timer "gelöst", aber gefiel mir nicht, da die Titel dann alle nacheinander erst ins Datagrid "rein rutschten". Erst hängte sich auch alles auf, aber nachdem in dann den eventListener entferne und die soundDatei wieder schließe funktioniert es ja halbwegs.. Anders bekomm ich halt nicht direkt die ID3-Tags, was ich aber schon gerne so hätte. Mit 'nem Filestream die Daten einzulesen habe ich bereits auch getestet, aber war auch nicht die beste Lösung. Ich versuch es nun erstmal so oder benutz noch mal den Timer. Danke schonmal für eure Antworten. |
| | |
| | #5 (permalink) |
| Neuer User Registriert seit: Oct 2007
Beiträge: 434
|
Von nem Timer redet ja keiner Du erstellst halt immer neue Soundobjekte und das werden irgendwann zu viele, müsstest du eigentlich ganz gut im Profiler nachvollziehen können. Daher wenn du von einer Datei die ID3 Daten hast, im gleichen Soundobjekt die nächste Datei laden. Vorher siehst du dann auch schon in dem gespeicherten Array, ob du alle Dateinamen hast. |
| | |
| | #6 (permalink) |
| Neuer User Registriert seit: Aug 2010
Beiträge: 5
|
Habs verstanden. Aber nun hab ich hier den Wurm drin. Ich hoffe ihr verzeiht (bin wie gesagt blutiger Anfänger). Habe also nun ein Array mit allen Dateien drin. Ein Soundobjekt wird vorher schon erstellt und die erste Datei wird geladen. onID3 hab ich etwas geändert: Code: private function onID3(event:Event):void
{
var id3:ID3Info=new ID3Info;
id3=event.target.id3;
playlist.addItem({col1:id3.artist,col2:id3.songName,col3:playlist.length,col4:event.target.url});
label1.text=playlist.length.toString();
if (count<temp.length)
{
count++;
song.load(new URLRequest(temp[count].url));
}
} |
| | |
| | #8 (permalink) |
| Neuer User Registriert seit: Aug 2010
Beiträge: 5
|
Das hab ich noch beim schreiben rausgelöscht. Liegt auf jeden Fall nicht daran. Kommt der gleiche Fehler ![]() edit: aus einem anderen Forum:"I'm not entirely sure, but I don't think you can load a new sound into a Sound instance once it has already loaded a sound. I'm pretty sure you must create a new Sound instance." Wenn ich das so machen klappt wieder alles, aber obiges Problem. Es wird nicht alles geladen. Es muss noch irgendeine Möglichkeit geben... Geändert von mrgrimmig (27-08-2010 um 12:55 Uhr) |
| | |
| | #10 (permalink) |
| Neuer User Registriert seit: Aug 2010
Beiträge: 5
|
Ja alles drin. Hab das nun doch nochmal mit nem Timer statt ner For-Schleife probiert (deswegen vorhin auch die Anmerkung). "delete song" funktioniert nicht - somit alle Soundobjekte in ein anderes, neuangelegtes Objekt rein und dann mit delete sofort wieder entfernt. Eine total hässliche Lösung, aber immerhin funktioniert es so mehr oder weniger, wie es soll.. Sind nun nur noch 20 Dateien die nicht geladen werden, aber da hab ich bestimmt einfach irgendwo einen Fehler reingehauen, den ich wohl noch finden werde. Ich hoffe dennoch, dass noch iwer ne gescheite Lösung hat an sonstens lass ich es erstmal so. Kann später den Code reineditieren, damit die "Lösung" für alle zugänglich ist. edit: Code: private function getFiles(dir:File):void
{
var files:Array=dir.getDirectoryListing();
for(var i:int=0;i<files.length;i++)
{
var file:File=files[i];
if (file.isDirectory) getFiles(file);
else if (file.extension=="mp3"||file.extension=="wma"||file.extension=="MP3")
{
temp.addItem(file);
}
}
}
private function onTick(event:Event):void
{
delete obj.song;
obj.song=new Sound();
obj.song.load(new URLRequest(temp[timer.currentCount-1].url));
obj.song.addEventListener(Event.ID3,onID3);
}
private function onClick():void
{
timer.delay=.5;
timer.repeatCount=temp.length;
timer.addEventListener(TimerEvent.TIMER,onTick);
timer.start();
}
private function onID3(event:Event):void
{
var id3:ID3Info=new ID3Info;
id3=event.target.id3;
playlist.addItem({col1:id3.artist,col2:id3.songName,col3:playlist.length,col4:event.target.url});
label1.text=playlist.length.toString();
event.target.close();
} Geändert von mrgrimmig (27-08-2010 um 15:49 Uhr) |
| | |
![]() |
| Lesezeichen |
| Themen-Optionen | |
| Ansicht | |
| |
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| Ordner durchsuchen mit AS3 | hoppe_burkhard | ActionScript 3 | 3 | 09-11-2009 14:19 |
| ordner durchsuchen und xml erstellen | Quentin-B | Flash mit XML und Webservices | 5 | 28-01-2007 06:00 |
| Ordner nach bestimmter Datei durchsuchen... | inkvc17 | PHP und MySQL | 5 | 06-09-2006 18:33 |
| textdatei in selben Ordner geht aber in anderem Ordner nicht.. | illon | PHP und MySQL | 8 | 05-02-2004 17:23 |
| Ordner auf fremdem Server durchsuchen? | moneyman | Flash und Datenbanken | 3 | 15-05-2002 21:36 |