Almacenamiento de archivos de audio en una base de datos

Estoy desarrollando una aplicación. Necesito utilizar por lo menos 400 archivos de audio que se pueden reproducir para algunos textos respectivos. Mi pregunta es ¿cuál es la mejor y optimizada manera de hacer esto?

Una solución es poner todos los archivos de audio en la carpeta de recursos y hacer referencia desde allí. Esto nunca será una solución viable ya que el tamaño de la aplicación aumentará. ¿Hay alguna manera de convertir el archivo de audio en algún formato y volcado en la base de datos SQLite y recuperarlos de forma flexible? Si es así, ¿qué opciones tengo?

Almacenar los archivos como BLOB en un SQLite db no le ahorrará ningún espacio vs almacenarlos como archivos. Si estos archivos no están destinados a ser asociados a cualquier dato dinámico, simplemente lo pondría en carpetas de activos, de esa manera se compilará en el APK y podría ser un poco más rápido para recuperar que si estaban en un db.

Pruebe el siguiente código … que almacenó para mí …..

@Override public void onClick(View arg0) { SQLiteDatabase myDb; String MySQL; byte[] byteImage1 = null; byte[] byteImage2 = null; MySQL="create table emp1(_id INTEGER primary key autoincrement, sample TEXT not null, picture BLOB);"; myDb = openOrCreateDatabase("Blob List", Context.MODE_PRIVATE, null); myDb.execSQL(MySQL); String s=myDb.getPath(); textView.append("\r\n" + s+"\r\n"); myDb.execSQL("delete from emp1"); ContentValues newValues = new ContentValues(); newValues.put("sample", "HI Hello"); try { FileInputStream instream = new FileInputStream("/sdcard/AudioRecorder/AudioRecorder.wav"); BufferedInputStream bif = new BufferedInputStream(instream); byteImage1 = new byte[bif.available()]; bif.read(byteImage1); textView.append("\r\n" + byteImage1.length+"\r\n"); newValues.put("picture", byteImage1); long ret = myDb.insert("emp1", null, newValues); if(ret<0) textView.append("\r\n!!! Error add blob filed!!!\r\n"); } catch (IOException e) { textView.append("\r\n!!! Error: " + e+"!!!\r\n"); } Cursor cur = myDb.query("emp1",null, null, null, null, null, null); cur.moveToFirst(); while (cur.isAfterLast() == false) { textView.append("\r\n" + cur.getString(1)+"\r\n"); cur.moveToNext(); } ///////Read data from blob field//////////////////// cur.moveToFirst(); byteImage2=cur.getBlob(cur.getColumnIndex("picture")); bmImage.setImageBitmap(BitmapFactory.decodeByteArray(byteImage2, 0, byteImage2.length)); textView.append("\r\n" + byteImage2.length+"\r\n"); cur.close(); myDb.close(); } }); 

Alguien me corrija si estoy equivocado, pero SQLite tiene una restricción de tamaño de fila total <1024kb. Si todos sus archivos de audio son lo suficientemente pequeños, podría almacenarlos como BLOBs.

La principal razón para almacenar archivos de sonido en la base de datos podría ser el enfoque de la línea de productos. Puede desarrollar muchas aplicaciones similares simplemente modificando su base de datos y sin tocar su código.

No hago comentarios sobre el tamaño de la aplicación porque hay comentarios sobre ella y no la miro.

Sí. Puede almacenar sus archivos de sonido de pequeño tamaño en la base de datos sqlite como blob campos. Funciona bien. Primero almacenar sus datos en la base de datos, luego recuperar y ponerlo en un archivo temporal. De esta manera puede almacenar sus archivos de sonido en la base de datos.

Mira esto:

 soundDataFile = File.createTempFile( "sound", "sound" ); FileOutputStream fos = new FileOutputStream( soundDataFile ); fos.write( soundData ); fos.close(); mediaPlayer.reset(); mediaPlayer.setDataSource( soundDataFile.getAbsolutePath() ); mediaPlayer.prepare(); mediaPlayer.start(); 

¿Cuál es la motivación detrás de almacenar los archivos en el sql lite db? No veo mucho beneficio de eso sobre almacenar la trayectoria del archivo en el db, y el archivo real en el sistema de archivos …

  • SQLiteStatement ejecuta un SELECT / INSERT / DELETE / UPDATE
  • SQLiteException: tabla ya existe
  • Error al insertar android.database.sqlite.sqliteconstraintexception error código 19 restricción fallida
  • Android - SQLite - SELECCIONAR ENTRE Fecha1 Y Fecha2
  • SQLite incapaz de abrir el archivo de base de datos (código 14) en la consulta "SELECT" frecuente
  • ¿Qué podría estar causando este SQLite CursorWindowAllocationException?
  • Cómo comparar representaciones de cadena de dobles si termina en .00
  • No puedo crear una base de datos SQLite en mi aplicación android
  • ¿Es necesario tener acceso a una base de datos SQLite en un AsyncTask?
  • Android SQLite COMO comodín de escape
  • Abra / cierre correctamente una base de datos con el patrón de diseño Singleton
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.