How to convert a byte array into an AudioInputStream in Java

孤街醉人 提交于 2019-12-11 03:37:23

问题


I want to convert a byte array into an AudioInputStream. The byte array was filled from a *.wav file before. I have the following code:

    public static AudioInputStream writeBytesBackToStream(byte[] bytes) {
    ByteArrayInputStream baiut = new ByteArrayInputStream(bytes);
    AudioInputStream stream = null;
    try {
        stream = AudioSystem.getAudioInputStream(baiut);
    } catch (UnsupportedAudioFileException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

    if(stream.equals(null) || stream == null) {
        System.out.println("WARNING: Stream read by byte array is null!");
    }
    return stream;
}

Now I only want to convert this byte array into an AudioInputStream, but an UnsupportedAudioFileException is thrown:

javax.sound.sampled.UnsupportedAudioFileException: could not get audio input stream from    input stream

Has anyone got an idea?


回答1:


If you properly read the WAV file, the byte array will just contain raw PCM data. Consequently the AudioSystem can not identify the format of the stream and throws the exception.

This can not work by design. You need to provide a complete audio format image in your stream to have AudioSystem recognize what format the stream is, not just raw data.




回答2:


Another way to do this, if the data is actually PCM, is to set the AudioFormat parameters manually. Here is an example to create an A minor.

    byte[] b = new byte[64000];
    //lets make a 440hz tone for 1s at 32kbps, and 523.25hz.
    for(int i = 0; i<b.length/2; i++){

        b[i*2+1] = (byte)(127*Math.sin(4*Math.PI*440.0/b.length*i));
        b[i*2]  = (byte)(127*Math.sin(4*Math.PI*523.25/b.length*i));
    }

    AudioInputStream stream = new AudioInputStream(
        new ByteArrayInputStream(b), 
        new AudioFormat(16000, 8, 2, true, false), 
        64000
    );

Also be careful if you're making bytes into sounds and you have earphones in.



来源:https://stackoverflow.com/questions/17060346/how-to-convert-a-byte-array-into-an-audioinputstream-in-java

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