Ich kann die Geschwindigkeit einer Musikdatei nicht ändern, ohne zu vermeiden, dass ein störendes Geräusch auftritt

Ich versuche, die Geschwindigkeit einer Audiodatei zu ändern. Wenn ich vorzeichenlose Werte verwende, ist alles in Ordnung. Wenn ich jedoch anfange, doppelte Werte zu verwenden, wird es beispielsweise unordentlich. Mein Code funktioniert mit allen "x.5". Zahlen, aber keine andere Zahl mit Dezimalstellen. In meinem Fall möchte ich die Geschwindigkeit um 1,3 Punkte erhöhen. Aber alles, was ich bekomme, ist eine Datei, in der Sie nur ein nerviges Geräusch hören können.

Hier ist der Code, den ich verwende:

import javax.swing.JOptionPane;
import javax.sound.sampled.*;
import java.net.URL;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.ByteArrayInputStream;
import java.util.Date;

class AcceleratePlayback {

public static void main(String[] args) throws Exception {

    //double playBackSpeed = 1.5;  Works

    //double playBackSpeed = 1.3; Doesn't work

    File file1= new File("Sample2.wav");
    File file2= new File("DEF.wav");
    AudioInputStream ais = AudioSystem.getAudioInputStream(file1);
    AudioFormat af = ais.getFormat();

    int frameSize = af.getFrameSize();

    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    byte[] b = new byte[2^16];
    int read = 1;
    while( read>-1 ) {
        read = ais.read(b);
        if (read>0) {
            baos.write(b, 0, read);
        }
    }

    byte[] b1 = baos.toByteArray();
    byte[] b2 = new ,byte[(int)(b1.length/playBackSpeed)];
    for (int i=0; i<(b2.length/frameSize); i++) {
        for (int j=0; j<frameSize; j++) {
            b2[(i*frameSize)+j] = b1[(int)((i*frameSize*playBackSpeed)+j)];
        }
    }

    ByteArrayInputStream bais = new ByteArrayInputStream(b2);
    AudioInputStream aisAccelerated =
        new AudioInputStream(bais, af, b2.length/frameSize);
    AudioSystem.write(aisAccelerated, AudioFileFormat.Type.WAVE, file2);
}

}

Antworten auf die Frage(2)

Ihre Antwort auf die Frage