Não consigo alterar a velocidade de um arquivo de música sem evitar que um ruído perturbador apareça

Estou tentando alterar a velocidade de um arquivo de áudio, se fizer tudo com valores não assinados, tudo bem, mas, quando começo a usar valores duplos, as coisas ficam bagunçadas, por exemplo, meu código funciona com todos os números "x.5" mas não com qualquer outro número com decimais e, no meu caso, quero aumentar a velocidade em 1,3 pontos. Mas tudo o que recebo é um arquivo em que você mal consegue ouvir nada além de um barulho irritante.

Aqui está o código que estou usando:

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);
}

}

questionAnswers(1)

yourAnswerToTheQuestion