Antes que nada debo decirte que soy nuevo en Android. Quiero combinar dos archivos .wav (archivo de audio). He buscado en Google, es fácil combinarlos usando el paquete javax pero no es compatible con Android. ¿Puedes decirme cómo hacer esto en Android? ¿Me puede sugerir algún tutorial o biblioteca que pueda ayudar? Gracias por adelantadoFusionando dos o más archivos .wav en android
Respuesta
Como novato, el usuario simplemente leerá los bytes del archivo y lo concat con el segundo archivo !!
Pero no funciona de esa manera. Debe tener mucho cuidado con el encabezado del archivo de onda mientras combina dos archivos. Desafortunadamente, tengo listo un fragmento que lo ayudará.
Aquí tiene
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);
}
Vipul thanx para el fragmento. ¿Qué quiere decir con RECORDER_SAMPLERATE y RECORDER_BPP? Si son constantes de lo que deben ser los valores? – Harsh
El valor varía de acuerdo con el dispositivo.Pero en mi caso los valores son 44100 y 16 –
Su código funciona bien Vipul. Puedo obtener un archivo de salida (archivo fusionado). Gracias por la ayuda – Harsh
- 1. fusionando dos archivos
- 2. Unir dos archivos WAV de Java?
- 3. Fusionando dos UIImages más rápido que CGContextDrawImage
- 4. ¿Cómo unir dos archivos wav usando python?
- 5. fusionando dos consultas SELECT
- 6. Fusionando dos mapas
- 7. fusionando dos dataframes en R
- 8. Fusionando dos archivos por una sola columna en Unix
- 9. Fusionando dos aplicaciones de rieles
- 10. fusionando dos objetos en C#
- 11. Fusionando dos arrays en .NET
- 12. Fusionando dos matrices en Bash
- 13. Fusionando dos imágenes
- 14. Fusionando dos o más proyectos de Visual Studio en un solo proyecto
- 15. Creando un System.Configuration.Configuration fusionando dos archivos de configuración?
- 16. Fusionando varios archivos javascript
- 17. Fusionando archivos CSS
- 18. Fusionando dos matrices por índice
- 19. Fusionando dos archivos con cat sin línea nueva
- 20. Fusionando dos archivos de base de datos SQLite (C# .NET)
- 21. Fusionando archivos vcproj - SCM infierno
- 22. dos o más RelativeLayout anidado
- 23. Fusionando dos selecciones de jQuery
- 24. Ruby fusionando dos matrices en una
- 25. Fusionando dos objetos complejos en PHP
- 26. Fusionando dos imágenes en C# /. NET
- 27. Archivo de audio más pequeño: MP3, Ogg o Wav?
- 28. TextToSpeech, playEarcon y archivos .wav
- 29. Fusionando archivos de proyecto Xcode
- 30. Fusionando archivos PDF con ITextSharp
¿Qué quiere decir por combinar, exactamente? ¿Concatenar? ¿Cubrir? – tomfanning
Me refiero a Concatenate – Harsh
@tomfanning Hola. ¿Puedes ayudar a superponer dos archivos .wav? – Harsh