Воспроизведение звука в программе Java - PullRequest
0 голосов
/ 08 февраля 2012

Несмотря на то, что API sun.audio говорит, что .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 голосов
/ 09 февраля 2012

Wav-файлы поддерживаются, но есть много переменных, и некоторые из них не поддерживаются. Например, вы можете получить нераспознанное исключение формата, если wav кодируется в 48000 вместо 44100, или в 24 или 32 бита вместо 16-битной кодировки.

Какую именно ошибку вы получили?

Каковы спецификации (свойства) wav-файла?

Можно конвертировать из одного wav в совместимый wav с помощью такого инструмента, как Audacity. Формат, который я использую для файлов WAV, имеет следующие свойства:

16-bit encoding
little endian
44100 sample rate
stereo

Я не особо внимательно изучал сам пример кода. Мне нравится этот пример воспроизведения.

0 голосов
/ 08 февраля 2012

Согласно исходному коду он не распознается как поддерживаемый формат файла.

...