在Java程序中发挥良好作用

时间:2012-02-08 17:34:52

标签: java audio javasound

即使sun.audio API说.wav是一个受支持的文件,显然我所拥有的文件一定不是。一个.aiff文件现在正在工作但不是这样我找到了一个更好的方法,虽然有点复杂。

String strFilename = "C:\\Documents and Settings\\gkehoe\\Network\\GIM\\Explode.aiff";
    File soundFile = new File(strFilename);

    AudioInputStream    audioInputStream = null;
    try
    {
        audioInputStream = AudioSystem.getAudioInputStream(soundFile);
    }
    catch (Exception e)
    {
        e.printStackTrace();
    }

    AudioFormat audioFormat = audioInputStream.getFormat();
    SourceDataLine  line = null;
    DataLine.Info   info = new DataLine.Info(SourceDataLine.class,
                                             audioFormat);
    try
    {
        line = (SourceDataLine) AudioSystem.getLine(info);

        /*
          The line is there, but it is not yet ready to
          receive audio data. We have to open the line.
        */
        line.open(audioFormat);
    }
    catch (LineUnavailableException e)
    {
        e.printStackTrace();
        System.exit(1);
    }
    catch (Exception e)
    {
        e.printStackTrace();
        System.exit(1);
    }
    line.start();

    int nBytesRead = 0;
    byte[]  abData = new byte[EXTERNAL_BUFFER_SIZE];
    while (nBytesRead != -1)
    {
        try
        {
            nBytesRead = audioInputStream.read(abData, 0, abData.length);
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
        if (nBytesRead >= 0)
        {
            int nBytesWritten = line.write(abData, 0, nBytesRead);
        }
    }
    line.drain();

    /*
      All data are played. We can close the shop.
    */
    line.close();

2 个答案:

答案 0 :(得分:0)

根据source code,它无法识别为支持的文件格式。

答案 1 :(得分:0)

支持Wav文件,但有许多变量,其中一些不受支持。 例如,如果wav以48000而不是44100编码,或者以24或32位而不是16位编码进行编码,则可能会出现无法识别的格式异常。

你得到了什么确切的错误?

wav文件的规格(属性)是什么?

可以使用Audacity等工具从一个wav转换为兼容的wav。我用于wav文件的格式具有以下属性:

16-bit encoding
little endian
44100 sample rate
stereo

我并没有真正仔细研究代码示例本身。我喜欢this播放示例。