2011-01-12 8 views
32

Quiero reproducir un archivo de audio basado en el clic de un botón. Definí el método onClickListener() y el archivo de diseño. Al agregar los archivos wav al directorio res/, me sale el siguiente error de compilación:Directorio para almacenar archivos de audio en Android

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

Mi pregunta es la siguiente: 1. ¿Qué
directorio necesito para almacenar archivos de audio en? Actualmente están en la carpeta res /.
2. ¿También, mp.setDataSource("/res/temp.wav") es la forma correcta de invocar al reproductor multimedia?

Respuesta

-19

No ponga los archivos de medios en el interior res/

Ponga sus archivos (temp.wav) en una carpeta llamada/sdcard/audio (si está utilizando un emulador).

y hacer esto:

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

Entonces, ¿cómo cambia esto cuando intento instalar la aplicación en un teléfono real? Quiero decir, ¿la corrección anterior es válida solo para un emulador? – Sriram

+0

no .. incluso si planea colocarlo en un teléfono real, asegúrese de que el archivo esté en esa ruta respectiva (esa ruta puede ser lo que quiera, pero no la ponga en res /). – Sen

+3

Estaba a punto de agregar algunos efectos de sonido a mi aplicación de Android y estaba buscando ayuda sobre dónde colocarlos cuando me encontré con esta pregunta. Realmente no entiendo cómo esta respuesta puede ser la aceptada. No es para nada útil. Por lo que puedo decir res/raw es un lugar perfecto para poner efectos de sonido y similares. Dado que hay una limitación de tamaño para los archivos puestos en res/raw, ¿supongo que los archivos MP3 y otros archivos de gran tamaño deberían colocarse en la carpeta/assets? – britzl

12

esperanza que esto ayudará a:

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.

es de la dev guide.

[Editar:? Pero no creo que es una buena idea poner sus archivos de música en el directorio res en absoluto - que depende de cuál es el propósito de estos archivos]

+0

Mis archivos de audio están en formato wav, no estoy seguro si califican como archivos sin formato. En cuanto al propósito, solo quería ver si podía reproducir música en función de unos pocos clics de botón. Soy nuevo en Android, ¡y estoy calculando el camino! ¡Gracias por la pronta respuesta! – Sriram

76

Los archivos de audio se ser movido a una carpeta llamada raw que se debe crear en la carpeta res.

Se puede acceder mediante el siguiente código:

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

Esta es la manera más fácil. Puedes probarlo ...

+0

En lugar de una variable de "contexto" personalizada, se puede usar directamente this.getApplicationContext(). – Kozuch

+0

Comprobé los documentos para MadiaPlayer.create y encontré: _ "Tenga en cuenta que desde que se llama a() automáticamente en este método, ** no puede cambiar el tipo de flujo de audio (vea setAudioStreamType (int)) **, ID de sesión de audio (vea setAudioSessionId (int)) o atributos de audio (vea setAudioAttributes (AudioAttributes) del nuevo MediaPlayer. "_ por lo que parece que no necesita la línea:' mPlayer.setAudioStreamType (AudioManager.STREAM_MUSIC); ' – Semanticer

+0

puede acceder a carpeta en bruto en lugar de los archivos de audio en sí? – Zypps987

2

Ten en cuenta que preparar puede llevar algo de tiempo, por lo que puede ralentizar las interacciones de los usuarios con tu aplicación. ¡Vea las notas dev here, en particular la sección Preparación asincrónica!

También podría utilizar SoundPool si los archivos tienen menos de 1 MB de tamaño. Esto maneja la sincronización con el hilo de UI por usted. Este es un very useful article sobre el uso del mismo (¡Lars tiene una cantidad de excelentes artículos!).

Cuestiones relacionadas