Как играть WAV-файл в Java 1,4 - PullRequest
       28

Как играть WAV-файл в Java 1,4

1 голос
/ 29 сентября 2010

как заголовок Как я могу воспроизвести звуковой файл повторно в Java v1.4?

Ответы [ 3 ]

0 голосов
/ 29 сентября 2010
import java.net.URL;
import javax.sound.sampled.*;

public class LoopSound {

  public static void main(String[] args) throws Exception {
    URL url = new URL(
      "http://pscode.org/media/leftright.wav");
    Clip clip = AudioSystem.getClip();
    AudioInputStream ais = AudioSystem.
      getAudioInputStream( url );
    clip.open(ais);
    clip.loop(0);
    javax.swing.JOptionPane.
      showMessageDialog(null, "Close to exit!");
  }
} 
0 голосов
/ 02 мая 2019

Это будет работать в JDK 1.4 (протестировано в Windows XP и JDK 1.4.2_06).Другой ответ терпит неудачу, потому что, как правильно указано в комментариях, AudioSystem.getClip() не существует в JDK 1.4.Ниже приведен полный исходный код (в форме основной функции, но он может быть адаптирован к чему-либо еще), который использует DataLine и играет в отдельном потоке, а также для улучшения общей производительности:

import java.io.File;

import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.DataLine;
import javax.sound.sampled.SourceDataLine;

public class AudioTest {

  public static void main(String[] args) throws Exception {
    AudioInputStream ais = AudioSystem.getAudioInputStream(new File("C:/sound1.wav"));

    AudioFormat format = ais.getFormat();
    DataLine.Info dataLineInfo = new DataLine.Info(SourceDataLine.class, format);
    SourceDataLine sourceDataLine = (SourceDataLine) AudioSystem.getLine(dataLineInfo);

    class PlayThread extends Thread {
      private AudioInputStream ais;
      private AudioFormat format;
      private SourceDataLine sourceDataLine;

      byte tempBuffer[] = new byte[10000];

      public PlayThread(AudioInputStream ais, SourceDataLine sourceDataLine, AudioFormat format) {
        this.ais = ais;
        this.sourceDataLine = sourceDataLine;
        this.format = format;
      }

      public void run() {
        try {
          sourceDataLine.open(this.format);
          sourceDataLine.start();

          int cnt;
          while ((cnt = this.ais.read(tempBuffer, 0, tempBuffer.length)) != -1) {
            if (cnt > 0) {
              sourceDataLine.write(tempBuffer, 0, cnt);
            }
          }

          sourceDataLine.drain();
          sourceDataLine.close();

        } catch (Exception e) {
          throw new RuntimeException(e);
        }
      }
    }

    new PlayThread(ais, sourceDataLine, format).start();

  }
}

Оба вопросаи ответы действительно старые, но мне просто нужно было заставить эту работу работать на мини-ПК без вентилятора, который работает только под управлением Windows XP, так что ... ¯ \ _ (ツ) _ / ¯

0 голосов
/ 29 сентября 2010

Если вы просто хотите воспроизвести файл wav, то ответ 'org.life.java' верен.Для других типов форматов вы можете использовать JMF (http://www.oracle.com/technetwork/java/javase/tech/index-jsp-140239.html).

Примечание: JMF устарел сейчас ... Но он будет работать с jdk 1.4

...