我正在开发一个应用程序。我需要使用至少 400 个音频文件,这些文件可以播放一些相应的文本。我的问题是哪种方法是最好的和优化的方法?
一种解决方案是将所有音频文件放在资源文件夹中并从那里引用。随着应用程序大小的增加,这永远不会是一个可行的解决方案。有没有什么办法可以将音频文件转换成某种格式转储到SQLite数据库中灵活检索?如果是这样,我有什么选择?
我正在开发一个应用程序。我需要使用至少 400 个音频文件,这些文件可以播放一些相应的文本。我的问题是哪种方法是最好的和优化的方法?
一种解决方案是将所有音频文件放在资源文件夹中并从那里引用。随着应用程序大小的增加,这永远不会是一个可行的解决方案。有没有什么办法可以将音频文件转换成某种格式转储到SQLite数据库中灵活检索?如果是这样,我有什么选择?
将文件作为 BLOB 存储在 SQLite 数据库中与将它们存储为文件相比,不会为您节省任何空间。如果这些文件不打算与任何动态数据相关联,我只需将它们放在资产文件夹中,这样它们就会被编译到 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。如果您的所有音频文件都足够小,您可以将它们存储为 BLOB。
将声音文件存储在数据库中的主要原因可能是产品线方法。您可以通过修改数据库而不接触代码来开发许多类似的应用程序。
我不对应用程序大小发表评论,因为有关于它的评论,我不看它。
是的。您可以将小型声音文件作为 blob 字段存储在 sqlite 数据库中。它运作良好。首先将您的数据存储在数据库中,然后检索它并将其放入临时文件中。这样您就可以将声音文件存储在数据库中。
检查这个:
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 中的动机是什么?与将文件路径存储在数据库中以及文件系统上的实际文件相比,我没有看到太多好处......