2012-07-12 17 views
6

सबसे पहले मुझे आपको यह बताना होगा कि मैं एंड्रॉइड के लिए नया हूं। मैं दो .wav (ऑडियो फ़ाइल) फ़ाइलों को गठबंधन करना चाहता हूं। मैंने इसके बारे में googled है, javax पैकेज का उपयोग कर उन्हें गठबंधन करना आसान है, लेकिन यह एंड्रॉइड पर समर्थित नहीं है। क्या आप मुझे बता सकते हैं कि एंड्रॉइड में यह कैसे करें। क्या आप मुझे कोई ट्यूटोरियल या पुस्तकालय सुझा सकते हैं जो मदद कर सकता है? अग्रिम में Thanxएंड्रॉइड में दो या दो से अधिक .wav फ़ाइलों को विलय करना

+1

आपका क्या मतलब है द्वारा गठबंधन, वास्तव में? जोड़? ओवरले? – tomfanning

+0

मेरा मतलब है Concatenate – Harsh

+1

@tomfanning हाय। क्या आप दो .wav फ़ाइलों को ओवरलैप करने में मदद कर सकते हैं। स्निपेट के लिए – Harsh

उत्तर

10

एक नौसिखिया के रूप में उपयोगकर्ता केवल फ़ाइल से बाइट पढ़ेगा और इसे दूसरी फ़ाइल के साथ जोड़ देगा !!

लेकिन यह इस तरह से काम नहीं करता है। आपको दो फाइलों के संयोजन के दौरान लहर फ़ाइल शीर्षलेख के बारे में बहुत सावधान रहना होगा। दुर्भाग्यवश मेरे पास मेरे साथ तैयार स्निपेट है जो आपकी मदद करेगा।

यहां आपको

private void CombineWaveFile(String file1, String file2) { 
    FileInputStream in1 = null, in2 = null; 
    FileOutputStream out = null; 
    long totalAudioLen = 0; 
    long totalDataLen = totalAudioLen + 36; 
    long longSampleRate = RECORDER_SAMPLERATE; 
    int channels = 2; 
    long byteRate = RECORDER_BPP * RECORDER_SAMPLERATE * channels/8; 

    byte[] data = new byte[bufferSize]; 

    try { 
     in1 = new FileInputStream(file1); 
     in2 = new FileInputStream(file2); 

     out = new FileOutputStream(getFilename3()); 

     totalAudioLen = in1.getChannel().size() + in2.getChannel().size(); 
     totalDataLen = totalAudioLen + 36; 

     WriteWaveFileHeader(out, totalAudioLen, totalDataLen, 
     longSampleRate, channels, byteRate); 

     while (in1.read(data) != -1) { 

      out.write(data); 

     } 
     while (in2.read(data) != -1) { 

      out.write(data); 
     } 

     out.close(); 
     in1.close(); 
     in2.close(); 

     Toast.makeText(this, "Done!!", Toast.LENGTH_LONG).show(); 
    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

private void WriteWaveFileHeader(FileOutputStream out, long totalAudioLen, 
long totalDataLen, long longSampleRate, int channels, long byteRate) 
throws IOException { 

    byte[] header = new byte[44]; 

    header[0] = 'R'; 
    header[1] = 'I'; 
    header[2] = 'F'; 
    header[3] = 'F'; 
    header[4] = (byte)(totalDataLen & 0xff); 
    header[5] = (byte)((totalDataLen >> 8) & 0xff); 
    header[6] = (byte)((totalDataLen >> 16) & 0xff); 
    header[7] = (byte)((totalDataLen >> 24) & 0xff); 
    header[8] = 'W'; 
    header[9] = 'A'; 
    header[10] = 'V'; 
    header[11] = 'E'; 
    header[12] = 'f'; 
    header[13] = 'm'; 
    header[14] = 't'; 
    header[15] = ' '; 
    header[16] = 16; 
    header[17] = 0; 
    header[18] = 0; 
    header[19] = 0; 
    header[20] = 1; 
    header[21] = 0; 
    header[22] = (byte) channels; 
    header[23] = 0; 
    header[24] = (byte)(longSampleRate & 0xff); 
    header[25] = (byte)((longSampleRate >> 8) & 0xff); 
    header[26] = (byte)((longSampleRate >> 16) & 0xff); 
    header[27] = (byte)((longSampleRate >> 24) & 0xff); 
    header[28] = (byte)(byteRate & 0xff); 
    header[29] = (byte)((byteRate >> 8) & 0xff); 
    header[30] = (byte)((byteRate >> 16) & 0xff); 
    header[31] = (byte)((byteRate >> 24) & 0xff); 
    header[32] = (byte)(2 * 16/8); 
    header[33] = 0; 
    header[34] = RECORDER_BPP; 
    header[35] = 0; 
    header[36] = 'd'; 
    header[37] = 'a'; 
    header[38] = 't'; 
    header[39] = 'a'; 
    header[40] = (byte)(totalAudioLen & 0xff); 
    header[41] = (byte)((totalAudioLen >> 8) & 0xff); 
    header[42] = (byte)((totalAudioLen >> 16) & 0xff); 
    header[43] = (byte)((totalAudioLen >> 24) & 0xff); 

    out.write(header, 0, 44); 
} 
+1

विपुल थेंक्स। RECORDER_SAMPLERATE और RECORDER_BPP द्वारा आपका क्या मतलब है। यदि वे मूल्यों के मुकाबले स्थिर हैं? – Harsh

+0

मूल्य डिवाइस के हिसाब से भिन्न होता है। लेकिन मेरे मामले में मूल्य 44100 और 16 –

+1

आपका कोड ठीक Vipul काम करता है। मैं आउटपुट फ़ाइल (विलय फ़ाइल) प्राप्त करने में सक्षम हूं। मदद के लिए Thanx – Harsh

संबंधित मुद्दे