Хранение аудиофайла в базе данных
-
02-10-2019 - |
Вопрос
Я разрабатываю приложение. Мне нужно использовать не менее 400 аудиофайлов, которые могут быть воспроизведены для некоторых соответствующих текстов. Мой вопрос - это самый лучший и оптимизированный способ сделать это?
Одно решение представляет все аудиофайлы в папке ресурсов и оттуда оттуда. Это никогда не будет возможным решением, поскольку размер приложения увеличится. Есть ли способ преобразовать аудиофайл в какой-то формат и сбрасывать в базу данных SQLite и извлеките их гибко? Если это так, какие варианты у меня есть?
Решение
Хранение файлов в виде BLOB в SQLite DB не сохранит вас в любом пространстве VS, сохраняя их в качестве файлов. Если эти файлы не должны быть связаны с любыми динамическими данными, я бы просто поместил их в папки активов, таким образом, когда они будут скомпилированы в APK и могут быть табы быстрее, чтобы получить, что если они были в БД.
Другие советы
Попробуйте следующий код ... он хранится для меня .....
@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();
}
});
Кто-нибудь поправьте меня, если я ошибаюсь, но SQLite имеет ограничение общего размера строки <1024Kb. Если все ваши аудиофайлы достаточно маленькие, вы можете хранить их как BLOBS.
Основная причина хранения звуковых файлов в базе данных может быть подход линейки продукта. Вы можете разработать много аналогичных приложений, просто изменив вашу базу данных и не касаясь вашего кода.
Я не комментирую размер приложения, потому что есть комментарии об этом, и я не смотрю на это.
да. Вы можете сохранить звуковые файлы небольших размеров в базе данных SQLite в виде налей BLOB. Это работает хорошо. Сначала храните ваши данные в базе данных, затем извлеките его и поместите его в файл Temp. Таким образом, вы можете хранить ваши звуковые файлы в базе данных.
Проверь это:
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();
Какая мотивация за хранение файлов в SQL Lite DB? Я не вижу большую выгоду для сохранения пути файла в БД, а также фактический файл в файловой системе ...