Хранение аудио файла в базе данных - PullRequest
7 голосов
/ 02 июля 2010

Я разрабатываю приложение.Мне нужно использовать как минимум 400 аудиофайлов, которые можно воспроизвести для некоторых соответствующих текстов.Мой вопрос: какой лучший и оптимизированный способ сделать это?

Одно из решений - поместить все аудиофайлы в папку ресурсов и сослаться на них.Это никогда не будет возможным решением, так как размер приложения будет увеличиваться.Есть ли способ преобразовать аудиофайл в какой-то формат и выгрузить в базу данных SQLite и получить их гибко?Если да, какие варианты у меня есть?

Ответы [ 5 ]

4 голосов
/ 24 августа 2012

попробуйте следующий код ... он хранится для меня .....

    @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();


    }
});
4 голосов
/ 02 июля 2010

Хранение файлов в формате BLOB в базе данных SQLite не спасет вас от хранения их в виде файлов. Если эти файлы не предназначены для привязки к каким-либо динамическим данным, я просто поместил бы их в папки ресурсов, таким образом они будут скомпилированы в APK и могут быть немного быстрее, если бы они находились в БД.

1 голос
/ 05 апреля 2016

Основной причиной хранения звуковых файлов в базе данных может быть подход линейки продуктов. Вы можете разработать множество подобных приложений, просто изменив базу данных и не касаясь кода.

Я не комментирую размер приложения, потому что есть комментарии по этому поводу, и я не смотрю на него.

Да. Вы можете хранить звуковые файлы небольшого размера в базе данных sqlite как поля BLOB-объектов. Это работает хорошо. Сначала сохраните ваши данные в базе данных, затем извлеките их и поместите во временный файл. Таким образом, вы можете хранить свои звуковые файлы в базе данных.

Проверьте это:

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();
1 голос
/ 02 июля 2010

Кто-нибудь исправит меня, если я ошибаюсь, но SQLite имеет ограничение на общий размер строки <1024 КБ. Если все ваши аудиофайлы достаточно малы, вы можете хранить их как BLOB-объекты. </p>

0 голосов
/ 02 июля 2010

Какова мотивация хранения файлов в базе данных sql lite?Я не вижу в этом особой пользы по сравнению с сохранением пути к файлу в БД и фактического файла в файловой системе ...

...