Play sound directly from byte array - Java

≯℡__Kan透↙ 提交于 2019-12-01 09:56:04

问题


I'm trying to play a sound that is stored as a byte-array using the following method:

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

It's kind of hard to explain what's going wrong. I'm getting a sound but it's only like a "swoosh"-kind of noise.

I want to use this method with the byte-buffer and so on because my whole application is built around it. Using Clip or AudioInputStream is not really an option.

So I guess my question is:

How can I play sound directly from my byte-array using a byte-buffer?

Thank you for your help!


回答1:


I've managed to make it work. Here is my new code:

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

This may seem like a complicated way of playing sound just like with AudioInputStream but now I can do calculations on each tick++ and by doing that I can intervene to exact times if I need to.

If this sounds silly and there is an easier way of doing this, please let me know.

Also, the reason it sounded so distorted is that it seems like ByteBuffer drastically changed my sample-values. For what reason I don't know. If anybody knows, please let me know!

Thank you. :)



来源:https://stackoverflow.com/questions/14187667/play-sound-directly-from-byte-array-java

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!