Je sais que cette question est déjà discutée mais après avoir beaucoup googlé je ne peux pas trouver la solution pourquoi deux fichiers fusionnés .wav n'est pas jouable? Je fusionne deux fichiers .wav en un seul fichier .Mais le fichier fusionné est en cours de lecture pendant une seconde. Rien d'autre.Après cliquez sur le bouton de lecture, il joue pendant une seconde.S'il vous plaît me donner une suggestion ou vérifier mon code pour identifier le problème.Merci à l'avance.Le code que j'utilise deux fusionner deux fichiers est comme ci-dessous:Comment fusionner deux fichier audio .wav
private static final int RECORDER_SAMPLERATE = 44100;
private static final int RECORDER_BPP = 16;
private void CombineWaveFile(String file1, String file2, String path) {
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[8192];
try {
in1 = new FileInputStream(file1);
in2 = new FileInputStream(file2);
File file_path = new File(path);
file_path.setReadable(true);
out = new FileOutputStream(file_path);
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();
Log.e("mPAthTemp Combine", file_path.toString());
Log.e("mFileSecond Combine", file2);
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);
}
}
code J'utilise pour lire le fichier audio est comme ci-dessous:
private void startPlaying(String file_path) {
mPlayer = new MediaPlayer();
try {
Log.e("playing", file_path);
mPlayer.setDataSource(file_path);
mPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mPlayer.prepare();
mPlayer.start();
mPlayer.setOnCompletionListener(new OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
// TODO Auto-generated method stub
showToast("Complete");
setProgressBar(false);
mButtonStart.setEnabled(true);
mButtonStop.setEnabled(false);
stopPlaying();
}
});
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
Donne-moi une solution pourquoi cette happen.Thanks ..
Vérifiez ce lien;) [Fusion de deux ou plusieurs fichiers wav dans Android] [1] [1]: http://stackoverflow.com/questions/11452464/merging-two-or-more- wav-files-in-android –
J'utilise simplement le même code donné dans l'URL que vous avez fournie. @ Jose Montero – AndiM