Convert wav audio format byte array to floating point

后端 未结 1 1748
旧巷少年郎
旧巷少年郎 2020-12-14 05:08

I am reading a .wav audio file using Java AudioInputStream.The audio file is 16 bit PCM signed, with samplerate = 44100, framesize = 2, framelength= 114048. I managed to get

相关标签:
1条回答
  • 2020-12-14 05:25

    The audio file is 16 bit PCM signed, with samplerate = 44100, framesize = 2, framelength= 114048.

    I'm assuming from the above that you have only a single channel (2 byte samples * 1 channel = 2 byte frames).

    First step is to get the data as a sequence of a 16-bit integral type, which is short in Java.

    import java.nio.ByteBuffer;
    import java.nio.ByteOrder;
    import java.nio.ShortBuffer;
    
    ...
    
    byte[] audioBytes = ...
    
    ShortBuffer sbuf =
        ByteBuffer.wrap(audioBytes).order(ByteOrder.LITTLE_ENDIAN).asShortBuffer();
    short[] audioShorts = new short[sbuf.capacity()];
    sbuf.get(audioShorts);
    

    Now how you convert that to floats depends on how downstream functions expect the audio to be represented. For example if they expect floating point numbers >= -1 and <= 1, then you can do this:

    float[] audioFloats = new float[audioShorts.length];
    for (int i = 0; i < audioShorts.length; i++) {
        audioFloats[i] = ((float)audioShorts[i])/0x8000;
    }
    

    Unfortunately there are a lot of ways to represent audio.

    0 讨论(0)
提交回复
热议问题