PDA

View Full Version : [Java2 ME] scansionare una cartella con file audio


DesmoColo
28-08-2007, 17:10
Dopo aver capito come scansioanare i file all'interno di una cartella, avrei bisogno di effettuatre la seguente operazione:
Prendere tutti i file .wav all'interno della dir che scansiono oppure da un indirizzo web;
Salvarli e Inserirli a runtime nel file JAD per fali riprodurre

^TiGeRShArK^
28-08-2007, 18:50
Dopo aver capito come scansioanare i file all'interno di una cartella, avrei bisogno di effettuatre la seguente operazione:
Prendere tutti i file .wav all'interno della dir che scansiono oppure da un indirizzo web;
Salvarli e Inserirli a runtime nel file JAD per fali riprodurre

:mbe:
Xkè li devi inserire nel .jad? :stordita:
Per salvare dei dati da usare nelle applicazioni di solito si usa il RecordStore....
quardati la documentazione di tutto il package javax.microedition.rms....
Per prendere tutti i file di un certo tipo invece basta usare la FileConnection API e in particolare il metodo list(java.lang.String filter, boolean includeHidden)
che restituisce una Enumeration.

DesmoColo
28-08-2007, 19:20
Dai tutorial che ho trovato ho vsto che tutti inserisco a manina i file nella dir res e nel JAD. Poi usano un player che scansiona il file Jad contente i percorsi dei file per riprodurli. Io invece non lo posso fare a priori, perché la mia applicazione si connette via http a un server, scarica il file salvato sul telefonino e poi lo riproduce in locale.
Non so quindi se devo per forza salvare i file dentro res e poi dire al Jad in qualche modo che è stato aggiunto un file nuovo...
Quindi a quato ho capito che posso riprodurre i file salvati allinterno dei un recordStore? Come avviene ciò? Cmq controllo la documentazione... finora ho usato i recordstore per memorizzare primitive (stringhe, interi ecc...). vale dunque lo stesso metodo per i wav?

^TiGeRShArK^
29-08-2007, 08:09
Dai tutorial che ho trovato ho vsto che tutti inserisco a manina i file nella dir res e nel JAD. Poi usano un player che scansiona il file Jad contente i percorsi dei file per riprodurli. Io invece non lo posso fare a priori, perché la mia applicazione si connette via http a un server, scarica il file salvato sul telefonino e poi lo riproduce in locale.
Non so quindi se devo per forza salvare i file dentro res e poi dire al Jad in qualche modo che è stato aggiunto un file nuovo...
Quindi a quato ho capito che posso riprodurre i file salvati allinterno dei un recordStore? Come avviene ciò? Cmq controllo la documentazione... finora ho usato i recordstore per memorizzare primitive (stringhe, interi ecc...). vale dunque lo stesso metodo per i wav?
Intendevo che nel recordstore dovresti memorizzare la playlist...
I file vanno ovviamente sotto la cartella sounds (con certi cellulari se non sbaglio hai limitazioni di scrittura e ti potrebbe dare problemi a scrivere file audio in una cartella diverssa).
Una volta che hai salvato i file audio nel posto giusto salvi nel recordstore le informazioni della playlist....

DesmoColo
29-08-2007, 10:31
Ho scritto un metodo con il seguente codice, ripreso da PDAPdemo del toolkit della sun:
Intanto, ecco come sono inizializzate le variabili:
private static final String MEGA_ROOT = "/";
private static final String UP_DIRECTORY = "..";
private static final char SEP = '/';
Ecco poi il corpo del mio metodo:
Enumeration e;
FileConnection currDir = null;
List browser;
try{
System.out.println("Dentro il try");
if(MEGA_ROOT.equals(currDirName)){
e = FileSystemRegistry.listRoots();
// browser = new List(MEGA_ROOT, List.IMPLICIT);
theList = new List(MEGA_ROOT, List.IMPLICIT);
}else{
currDir = (FileConnection)Connector.open("file://localhost/" + currDirName);
e = currDir.list();
theList = new List(currDirName, List.IMPLICIT);
// not root - draw UP_DIRECTORY
theList.append(UP_DIRECTORY, dirIcon);
}
while(e.hasMoreElements()){
String fileName = (String)e.nextElement();
if(fileName.charAt(fileName.length()-1) == SEP){
theList.append(fileName,dirIcon);
}else{
theList.append(fileName,fileIcon);
}
}
theList.setSelectCommand(view);
// if (!MEGA_ROOT.equals(currDirName)) {
// theList.addCommand(prop);
//theList.addCommand(creat);
//theList.addCommand(delete);
// }

// theList.addCommand(exitCommand);

//theList.setCommandListener(this);

if (currDir != null) {
currDir.close();
}

Display.getDisplay(this).setCurrent(theList);
}catch(IOException ioe){
ioe.printStackTrace();
}
Quando vado a eseguire, l'emulatore mi dice che non è stata specificata la root ("root is not specified"). Come mai? Eppure nella demo il codice gira...
Ho visto che si pianta all'inizio del try, precisamente all'istruzione
e = FileSystemRegistry.listRoots();
Istruzione che potrei anche modificare, visto che tanto dovrei entrare solo nel dir res/sound. Ho provato a cambiare il path della MEGA_ROOT mettendo ../res/sound ma non funziona ugualmente e ottengo lo stesso errore...

DesmoColo
29-08-2007, 11:01
Ho risolto: lanciavo il metodo prima di inizializzare la variabile :doh:

DesmoColo
29-08-2007, 11:23
OK, ci siamo quasi...
Adesso con e = FileSystemRegistry.listRoots(); accedo al fileSystem root1... però a me serve di accedere a res/sounds contenuta nella cartella "nome_della_mia_applicazione" Ho provato a cambiare il path con res/sounds ma pare non sia possibile accederci...

^TiGeRShArK^
29-08-2007, 17:28
OK, ci siamo quasi...
Adesso con e = FileSystemRegistry.listRoots(); accedo al fileSystem root1... però a me serve di accedere a res/sounds contenuta nella cartella "nome_della_mia_applicazione" Ho provato a cambiare il path con res/sounds ma pare non sia possibile accederci...
prova ad accedere alla directory dove sono memorizzati i suoni del tuo telefonino..
Lì non dovresti avere problemi ad accedere.

DesmoColo
30-08-2007, 10:10
prova ad accedere alla directory dove sono memorizzati i suoni del tuo telefonino..
Lì non dovresti avere problemi ad accedere.
OK... ma quale sarebbe?:confused:
Dai tutorial che ho trovato in rete vedo che tutti file video e audio vengono messi nella cartella nomeapplicazione/res
Esiste per caso una cartella specifica per i suoni?

DesmoColo
30-08-2007, 10:25
Da questo tutorial http://developers.sun.com/mobility/apis/articles/fileconnection/ pare che possa accedere soltanto alla cartella root1...