Ich lese eine WAV-Datei zu einem Byte-Array mit this method (shown below). Jetzt, da ich es in meinem Byte-Array gespeichert habe, möchte ich die Lautstärken ändern.Audio: Ändern der Lautstärke von Samples in Byte-Array
private byte[] getAudioFileData(final String filePath) {
byte[] data = null;
try {
final ByteArrayOutputStream baout = new ByteArrayOutputStream();
final File file = new File(filePath);
final AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(file);
byte[] buffer = new byte[4096];
int c;
while ((c = audioInputStream.read(buffer, 0, buffer.length)) != -1) {
baout.write(buffer, 0, c);
}
audioInputStream.close();
baout.close();
data = baout.toByteArray();
} catch (Exception e) {
e.printStackTrace();
}
return data;
}
Edit: einige Informationen über das Audio-Format pro Anfrage:
PCM_SIGNED 44.100,0 Hz, 16 Bit, Mono, 2 Bytes/Rahmen, Little-Endian
Aus Physik-Klasse Ich erinnerte mich, dass Sie die Amplitude einer Sinuswelle ändern können, indem Sie den Sinus-Wert mit einer Zahl zwischen 0 und 1 multiplizieren.
Edit: Aktualisiert Code für 16-Bit-Samples:
private byte[] adjustVolume(byte[] audioSamples, double volume) {
byte[] array = new byte[audioSamples.length];
for (int i = 0; i < array.length; i+=2) {
// convert byte pair to int
int audioSample = (int) ((audioSamples[i+1] & 0xff) << 8) | (audioSamples[i] & 0xff);
audioSample = (int) (audioSample * volume);
// convert back
array[i] = (byte) audioSample;
array[i+1] = (byte) (audioSample >> 8);
}
return array;
}
Der Klang stark, wenn ich audioSample
mit volume
multiplizieren ist verzerrt. Wenn ich die beiden Arrays nicht mit Arrays.compare(array, audioSample)
vergleiche, kann ich daraus schließen, dass das Byte-Array korrekt in int konvertiert wird und umgekehrt.
Kann mir jemand helfen? Was mache ich hier falsch? Vielen Dank! :)
Sie können bessere Antworten auf dsp erhalten .stackexchange.com – egrunin
1) Für bessere Hilfe, früher, ein [SSCCE] (http://sscce.org/). 2) Melden Sie 'audioInputStream.getFormat()'. –
@egrunin Danke! Kann ich es einfach kopieren und einfügen oder wie lauten die Regeln für das Verschieben von Themen? – Macks