2012-07-12 38 views
6

Trước hết, tôi phải cho bạn biết rằng tôi mới sử dụng Android. Tôi muốn kết hợp hai tệp .wav (tệp âm thanh). Tôi đã googled về nó, nó rất dễ dàng để kết hợp chúng bằng cách sử dụng gói javax nhưng nó không được hỗ trợ trên Android. Bạn có thể cho tôi biết làm thế nào để làm điều này trong Android. Bạn có thể gợi ý cho tôi bất kỳ hướng dẫn hoặc thư viện nào có thể giúp bạn không? Thanx trướcHợp nhất hai hoặc nhiều tệp .wav trong android

+1

Ý anh là gì bằng cách kết hợp, chính xác? Kết hợp? Lớp phủ? – tomfanning

+0

Ý tôi là Concatenate – Harsh

+1

@tomfanning Xin chào. Bạn có thể giúp chồng chéo hai tệp .wav. – Harsh

Trả lời

10

Là người mới, người dùng sẽ chỉ đọc byte từ tệp và kết hợp nó với tệp thứ hai !!

Nhưng nó không hoạt động theo cách đó.Bạn phải rất cẩn thận về tiêu đề tập tin sóng trong khi kết hợp hai tập tin.thật tôi có đoạn sẵn sàng với tôi mà sẽ giúp bạn.

Ở đây bạn đi

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

Vipul thanx cho đoạn mã. Ý bạn là RECORDER_SAMPLERATE và RECORDER_BPP. Nếu chúng không đổi so với giá trị phải là gì? – Harsh

+0

Giá trị thay đổi theo thiết bị.Nhưng trong trường hợp giá trị của tôi là 44100 và 16 –

+1

Mã của bạn hoạt động tốt Vipul. Tôi có thể nhận được một tập tin đầu ra (tập tin sáp nhập). Thanx để được giúp đỡ – Harsh

Các vấn đề liên quan