|
||
|
|
|
|||||||
| Avisos |
| Programación y Desarrollo para Android Subforo exclusivo para temas de programación de software para PDAs y desarrollo de aplicaciones, interfaces, etc bajo Android |
![]() |
|
|
Herramientas |
|
#1
|
||||
|
||||
Como transformo byte en audio
Hola buenas!!
Hace unos días hice una pregunta y me la respondieron, pero me queda el último paso para conseguirlo... He recibido en un json una imagen de un servidor, sé como convertir de nuevo ese archivo en una imagen. Pero cómo hago eso mismo si lo que recibo del json es un archivo de sonido?? Es decir, como lo convierto a audio?? (Yo creo que consiste en cambiar la linea en negrita noo??) for (int i = 0; i < definiciones.length(); i++) { JSONObject defini = definiciones.getJSONObject(i); String data = defini.getString("Imagen"); try { byte[] byteData = Base64.decode(data, Base64.DEFAULT); im[i] = BitmapFactory.decodeByteArray(byteData, 0, byteData.length); } catch (Exception e) { e.printStackTrace(); } } Gracias por vuestro tiempo!
|
|
|
|
#2
|
||||
|
||||
|
Buena pregunta, como el tema del audio suelen ser flujos de datos (streams), no existe algo equivalente a Bitmap pero en audio. Normalmente el audio lo tienes guardado en ficheros o lo cargas de una URL.
Lo que tienes que hacer es guardar el array de byte[] simplemente, y pasárselo al reproductor cuando tengas que reproducirlo. Para reproducir el byte[], en stackoverflow dan una buena idea, que es creando un FileInputStream a partir del byte[] y pasarle su descriptor al MediaPlayer mediante el método setDataSource. EDIT: Y si usas un SoundPool lo mismo, con el FileInputStream creado a partir del byte[] también te vale.
__________________
El mejor Cuatro en Raya de Android (Hilo en HTCMania, Play Store) ¡Un millón de descargas!
Última edición por mocelet Día 22/08/13 a las 17:59:25. |
|
#3
|
||||
|
||||
|
Muchas gracias!! Voy a ver si me sale, sino os vuelvo a preguntar
|
|
#4
|
||||
|
||||
|
A partir de lo que has comentado he encontrado éste código, pero no lo entiendo bien y no me funciona...
1-Qué es el método "getCacheDir()"? 2- Tiene que ser un archivo mp3? Espero vuestra ayuda!! private void playMp3(byte[] mp3SoundByteArray) { try { // create temp file that will hold byte array File tempMp3 = File.createTempFile("kurchina", "mp3", getCacheDir()); tempMp3.deleteOnExit(); FileOutputStream fos = new FileOutputStream(tempMp3); fos.write(mp3SoundByteArray); fos.close(); MediaPlayer mediaPlayer = new MediaPlayer(); FileInputStream fis = new FileInputStream(tempMp3); mediaPlayer.setDataSource(fis.getFD()); mediaPlayer.prepare(); mediaPlayer.start(); } catch (IOException ex) { String s = ex.toString(); ex.printStackTrace(); } } Última edición por jonathanval Día 22/08/13 a las 20:22:52. |
|
#5
|
||||
|
||||
|
1. Es un directorio donde la app almacena datos, pero no te garantiza que sean permanentes. Además creo que tiene un límite de 50 MB.
Es decir, el fichero se crea (siempre y cuando pese menos de 50 MB, o del límite que tenga el directorio que ahora mismo no lo recuerdo exactamente), pero si en ese directorio hay ficheros que hacen que tu nuevo fichero vaya a ocupar más del límite, se borran. Por ejemplo, tienes ahora mismo 10 ficheros de 5 MB cada uno, y vas a crear otro fichero de 5 MB, el sistema eliminará automáticamente uno de los ficheros que ya existían (o en este caso muy probablemente 2). También se borra si la SD necesita escribir en un directorio que no es de cache y no tiene espacio. Ya sea de tu aplicación o de otra aplicación. Así que tenlo en cuenta, es para datos muy temporales, si quieres bajarte el fichero de audio, reproducirlo, y fuera, es el directorio ideal. Yo lo uso para almacenar thumbnails de las imágenes que tengo en un servidor y que muestro en la aplicación. 2. Los formatos soportados por MediaPlayer los tienes aquí: http://developer.android.com/guide/a...a-formats.html |
|
#6
|
||||
|
||||
|
Aaaaa, pues para mi app me viene de perlas el getCacheDir(), pero mi problema es como usarlo, porque eclipse me lo marca como si fuese un error, la única opción que me da es crear un método en blanco con él...
Gracias y siento ser tan brasas... |
|
#7
|
||||
|
||||
|
A getCacherDir() tienes que llamarlo desde un Context, así que si no la estás llamando desde un Activity tendrás que pasar el Context como parámetro. En el caso de estar haciéndolo desde un Fragment puedes obtener el Context con getActivity().
|
|
#8
|
||||
|
||||
|
Muchas graciaaaas!!! Me ha funcionado!! Lo que yo hacía mal era crear File (y con ello lo de guardar en caché) desde una clase, no desde la Activity.
Muy agradecido, de verdad!!
|
![]() |
Estás aquí
|
||||||
|
||||||