直接从字节数组播放声音 - java(Play sound directly from byte

2019-07-17 21:34发布

我试图播放存储为使用下面的方法字节数组一个声音:

byte[] clickSamples = getAudioFileData("sound.wav");
ByteBuffer buffer = ByteBuffer.allocate(bufferSize*2);
int tick = 0;

for (int i = 0; i < clickSamples.length; i++) {
    buffer.putShort((short) clickSamples[i]);
    tick++;
    if (tick >= bufferSize/SAMPLE_SIZE) {
        line.write(buffer.array(), 0, buffer.position());
        buffer.clear();
        tick = 0;
    }
}

这是一种很难解释什么错。 我得到了完善,但它只是像噪音的“旋风” -kind。

我想,因为我的整个应用程序在其周围建成使用这种方法与字节缓存等等。 使用剪辑或的AudioInputStream是不是一个真正的选择。

所以我想我的问题是:

我如何可以使用一个字节的缓冲区我的字节数组播放声音直接?

谢谢您的帮助!

Answer 1:

我已经成功地使其发挥作用。 这是我的新的代码:

    int tick = 0;
    for (int i = 0; i < clickSamples.length; i++) {
        tick++;
        if (tick >= bufferSize/SAMPLE_SIZE) {
            line.write(clickSamples, i-tick+1, tick);
            buffer.clear();
            tick = 0;
        }
    }

这似乎是播放声音就像使用的AudioInputStream一个复杂的方式,但现在我能做到在每个tick ++并通过这样做,我可以介入,如果我需要给确切的时间计算。

如果这听起来很愚蠢的,有这样的一个简单的方法,请让我知道。

此外,它听起来非常扭曲的原因是,它似乎像字节缓冲区彻底改变我的样本值。 对于什么原因我也不知道。 如果有人知道,请让我知道!

谢谢。 :)



文章来源: Play sound directly from byte array - Java