2011-01-12 14 views
32

Voglio riprodurre un file audio basato sul clic di un pulsante. Ho definito il metodo onClickListener() e il file di layout. Quando aggiungo i file wav nella directory res/, ottengo il seguente errore di generazione:Directory per la memorizzazione di file audio in Android

invalid resource directory name temp.wav /hello/res line 1 Android AAPT Problem

La mia domanda è la seguente:
1. Quali directory mi serve per memorizzare i file audio in? Attualmente sono nella cartella/res.
2. Inoltre, mp.setDataSource("/res/temp.wav") il modo corretto per richiamare il lettore multimediale?

risposta

-19

Non mettere i file multimediali all'interno res/

Metti i tuoi file (temp.wav) in una cartella denominata/sdcard/audio (se si utilizza un emulatore).

e fare questo:

mp.setDataSource("/sdcard/audio/temp.wav"); 
+0

così come cambia quando cerco di installare l'applicazione su un telefono reale? Voglio dire, la correzione sopra è valida solo per un emulatore? – Sriram

+0

no .. anche se hai intenzione di metterlo su un telefono reale, assicurati che il file sia nel rispettivo percorso (quel percorso può essere quello che vuoi, ma non metterlo in res /). – Sen

+3

Stavo per aggiungere alcuni effetti sonori alla mia app per Android e stavo cercando aiuto su dove metterli quando mi sono imbattuto in questa domanda. Io davvero non capisco come questa risposta possa essere accettata. Non è meno utile. Per quanto ne so, res/raw è un posto perfetto per mettere gli effetti sonori e simili. Poiché esiste una limitazione per le dimensioni dei file inseriti in res/raw, suppongo che gli MP3 e altri file di grandi dimensioni debbano essere inseriti nella cartella/assets? – britzl

12

speranza che questo vi aiuterà:

raw/

Arbitrary files to save in their raw form. To open these resources with a raw InputStream, call Resources.openRawResource() with the resource ID, which is R.raw.filename.

However, if you need access to original file names and file hierarchy, you might consider saving some resources in the assets/ directory (instead of res/raw/). Files in assets/ are not given a resource ID, so you can read them only using AssetManager.

è dal dev guide.

: -

+0

I miei file audio sono nel formato wav, non sono così sicuri se si qualificano come file raw. Per quanto riguarda lo scopo, volevo solo vedere se potevo riprodurre musica basandomi su pochi clic del mouse. Sono nuovo di Android che vedi, e sto solo immaginando la mia strada! grazie per la pronta risposta! – Sriram

76

I file audio possono [Edit, ma non credo che sia una buona idea mettere i file musicali nella directory res affatto dipende da quello che è lo scopo di questi file?] essere spostati in una cartella denominata raw che dovrebbe essere creata nella cartella res.

Vi si può accedere dal seguente codice:

MediaPlayer mPlayer = MediaPlayer.create(context, R.raw.soundclip); 
mPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); 
mPlayer.start(); 

Questo è il modo più semplice. Puoi provarlo ..

+0

Invece di una variabile "contesto" personalizzata, si può usare direttamente this.getApplicationContext(). – Kozuch

+0

Ho controllato i documenti per MadiaPlayer.create e ho trovato: _ "Nota che dal momento che prepare() viene chiamato automaticamente in questo metodo, ** non puoi cambiare il tipo di flusso audio (vedi setAudioStreamType (int)) **, ID sessione audio (vedi setAudioSessionId (int)) o attributi audio (vedi setAudioAttributes (AudioAttributes) del nuovo MediaPlayer. "_ così sembra che tu non abbia bisogno della linea:' mPlayer.setAudioStreamType (AudioManager.STREAM_MUSIC); ' – Semanticer

+0

puoi accedere a cartella all'interno raw invece dei file audio stessi? – Zypps987

2

Nota che preparare può richiedere del tempo, quindi potrebbe rallentare le interazioni degli utenti con la tua app. Vedere le note di sviluppo here, in particolare la sezione Preparazione asincrona!

È anche possibile utilizzare il SoundPool se i file hanno dimensioni inferiori a 1 MB. Questo gestisce la sincronizzazione con il thread dell'interfaccia utente. Questo è un very useful article sull'uso di esso (Lars ha un numero di articoli fantastici!).

Problemi correlati