2010-07-02 10 views
6

मैं एक एप्लिकेशन विकसित कर रहा हूं। मुझे कम से कम 400 ऑडियो फाइलों का उपयोग करने की आवश्यकता है जिन्हें कुछ संबंधित ग्रंथों के लिए खेला जा सकता है। मेरा सवाल यह है कि ऐसा करने का सबसे अच्छा और अनुकूलित तरीका कौन सा है?डेटाबेस में ऑडियो फ़ाइल संग्रहीत

एक समाधान सभी ऑडियो फ़ाइलों को संसाधन फ़ोल्डर में डाल रहा है और वहां से संदर्भित कर रहा है। आवेदन का आकार बढ़ने के साथ यह कभी भी व्यवहार्य समाधान नहीं होगा। ऑडियो फ़ाइल को कुछ प्रारूप में बदलने और SQLite डेटाबेस में डंप करने और उन्हें flexibly पुनर्प्राप्त करने का कोई तरीका है? यदि हां, तो मेरे पास कौन से विकल्प हैं?

उत्तर

4

SQLite डीबी में बीएलओबी के रूप में फ़ाइलों को संग्रहीत करने से आप उन्हें किसी भी स्थान को फ़ाइलों के रूप में संग्रहीत नहीं कर पाएंगे। यदि ये फ़ाइलें किसी भी गतिशील डेटा से संबद्ध नहीं हैं, तो मैं उन्हें केवल संपत्ति फ़ोल्डर्स में रखूंगा, इस तरह उन्हें एपीके में संकलित किया जाएगा और यदि वे डीबी में थे तो उन्हें पुनः प्राप्त करने के लिए तेज़ हो सकता है।

+0

हाय रिकार्डो, आपके उत्तर के लिए धन्यवाद। अगर मैं अपनी फाइलों को संपत्ति फ़ोल्डर में संग्रहीत करता हूं तो मेरा आवेदन आकार बढ़ता है, क्या यह व्यवहार्य समाधान है। कृपया इस पर टिप्पणी करें। या कम खपत प्रारूप में ऑडियो फ़ाइल को स्टोर करने का कोई तरीका है ?? –

+0

यदि आप अपनी फाइलों को अपने डीबी में स्टोर करते हैं तो आपका ऐप आकार भी बढ़ेगा, मैं नहीं देखता कि आप आकार को बढ़ाए बिना और बाइट्स को कैसे शामिल कर सकते हैं ... आप उन्हें ज़िप करने का प्रयास कर सकते हैं लेकिन आपको ज्यादा लाभ नहीं मिलेगा चूंकि संगीत फ़ाइलों को पहले ही अत्यधिक संपीड़ित किया गया है ... –

+0

@ विनायक-बेविनकाट्टी, यदि आप एपीके आकार के बारे में चिंता कर रहे हैं, तो हो सकता है कि आप पहली बार चलने पर सर्वर से उन फ़ाइलों को डाउनलोड कर सकें। – Rajeev

0

एसक्यूएल लाइट डीबी में फ़ाइलों को संग्रहीत करने के पीछे प्रेरणा क्या है? मुझे डीबी में फ़ाइल पथ को संग्रहीत करने और फ़ाइल सिस्टम पर वास्तविक फ़ाइल को अधिक लाभ नहीं दिखता है ...

+0

हाय बेन, आपके उत्तर के लिए धन्यवाद। अगर मैं अपनी फाइलों को संपत्ति फ़ोल्डर में संग्रहीत करता हूं तो मेरा आवेदन आकार बढ़ता है, क्या यह व्यवहार्य समाधान है। कृपया इस पर टिप्पणी करें। या कम खपत प्रारूप में ऑडियो फ़ाइल को स्टोर करने का कोई तरीका है। –

+1

हां लेकिन इसे डीबी में संग्रहीत करने से आपको कोई भी जगह नहीं बचाई जाएगी ... – Ben

1

अगर कोई गलत है तो कोई भी मुझे सही करता है, लेकिन SQLite के पास कुल पंक्ति आकार < का प्रतिबंध है 1024Kb। अगर आपकी सभी ऑडियो फाइलें काफी छोटी हैं, तो आप उन्हें बीएलओबी के रूप में स्टोर कर सकते हैं।

+0

मुझे नहीं लगता कि यह सच है। https://stackoverflow.com/questions/26968537/maximum-sqlite-size-using-blob – Suragch

4

निम्नलिखित कोड डेटाबेस पर ध्वनि फ़ाइलों को संग्रहीत करने उत्पाद लाइन दृष्टिकोण हो सकता है के लिए मुख्य कारण की कोशिश ... यह मेरे लिए संग्रहीत .....

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


    } 
}); 
1

। आप अपने डेटाबेस को संशोधित करके और अपने कोड को छूकर कई सारे समान अनुप्रयोग विकसित कर सकते हैं।

मैं आवेदन आकार पर टिप्पणी नहीं करता क्योंकि इसके बारे में टिप्पणियां हैं और मैं इसे नहीं देखता हूं।

हां। आप अपनी छोटी आकार की ध्वनि फ़ाइलों को स्क्लाइट डेटाबेस में ब्लॉब फ़ील्ड के रूप में स्टोर कर सकते हैं। यह अच्छा काम करता है। पहले डेटाबेस में अपना डेटा स्टोर करें और फिर इसे पुनर्प्राप्त करें और इसे एक अस्थायी फ़ाइल में रखें। इस तरह आप डेटाबेस में अपनी ध्वनि फ़ाइलों को स्टोर कर सकते हैं।

चेक करें:

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(); 
संबंधित मुद्दे