2012-01-08 2 views
0

У меня есть несколько WAV-файлов, которые я воспроизвожу с Java. В этом урезаном примере «капель» слышна, но «свист» даже не выполняется, хотя они работают через один и тот же код. В «swish» нет ничего необычного: он воспроизводится с рабочего стола Gnome. У меня есть аналогичное приложение, не совсем такое урезанное, что играет «swish», но не «капает», так что опять-таки это не проблема, связанная с природой данных.Несоответствие файла Java AudioSystem .wav в поведении

Любые идеи, что здесь происходит? Эта ошибка была замечена после того, как код, который, как было известно, работал, был «перераспределен» на восстановленной системе: переустановил Ubuntu 10.10 и Eclipse Indigo. Эта ошибка происходит как с Sun JDK 6, так и с OpenJDK 6. Редактировать «Перестроенная» система на самом деле отличается от другого: Intel E6500 (2 ядра, 2,93 ГГц) Я установил только Ubuntu, Eclipse, OpenJDK, Sun JDK. Предыдущая система была AMD 630 (4 ядра, 2,8 ГГц) с Ubuntu, Eclipse, OpenJDK (я думаю).

Редактировать После некоторых экспериментов, кажется, первый загруженный клип будет тем, который работает. Конструктор TestSounder загружает их так, чтобы порядок был отменен. Возможно, использование статического метода AudioSystem.getLine имеет какое-то отношение к нему, поскольку это, очевидно, не-объектно-ориентированная операция здесь.

import java.io.IOException; 

import javax.sound.sampled.AudioInputStream; 
import javax.sound.sampled.AudioSystem; 
import javax.sound.sampled.AudioFormat; 
import javax.sound.sampled.DataLine; 
import javax.sound.sampled.Clip; 
import javax.sound.sampled.UnsupportedAudioFileException; 
import javax.sound.sampled.LineUnavailableException; 

public class TestSounder 
{ 
    String resourcePathFromBin = "/resources/"; 

    Clip dripClip; 
    Clip swishClip; 

    public TestSounder() 
    { 
     dripClip = setupClip("drip.wav"); 
     swishClip = setupClip("swish.wav"); 
    } 

    public void close() 
    { 
     dripClip.close(); 
     swishClip.close(); 
    } 

    private Clip setupClip(String fileName) 
    { 
     Clip clip = null; 
     try 
     { 
      AudioInputStream ais = 
       AudioSystem.getAudioInputStream(this.getClass().getResourceAsStream(resourcePathFromBin + 
                        fileName)); 
      AudioFormat af = ais.getFormat(); 
      DataLine.Info lineInfo = new DataLine.Info(Clip.class, af); 
      clip = (Clip)AudioSystem.getLine(lineInfo); 
      clip.open(ais); 
     } 
     catch (UnsupportedAudioFileException e) 
     { 
      assert false: "bug"; 
     } 
     catch (IOException e) 
     { 
      assert false: "bug"; 
     } 
     catch (LineUnavailableException e) 
     { 
      assert false: "bug"; 
     } 
     return clip; 
    } 

    public void go(UtilityK.Sounds s) 
    { 
     Clip clip = null; 
     if (s == UtilityK.Sounds.drip) 
      clip = dripClip; 
     if (s == UtilityK.Sounds.swish) 
      clip = swishClip; 

     clip.stop(); 
     clip.setFramePosition(0); 
     clip.start(); 
     //while (clip.isRunning()) 
     // TestSounder.delay(); 
    } 

    public static void main(String[] args) 
    { 
     TestSounder obj = new TestSounder(); 

     obj.go(UtilityK.Sounds.swish); 
     TestSounder.delay(); 

     obj.go(UtilityK.Sounds.drip); 
     TestSounder.delay(); 

     obj.go(UtilityK.Sounds.swish); 
     TestSounder.delay(); 

     obj.go(UtilityK.Sounds.drip); 
     TestSounder.delay(); 

     obj.close(); 
    } 

    private static void delay() 
    { 
     Thread.sleep(5000); 
    } 
} 

public interface UtilityK 
{ 
    enum Sounds { drip, swish }; 
} 
+0

Какое кодирование и формат являются 2 WAVs? BTW - для всех уловов вызовите 'e.printStackTrace()'. –

+0

@ Andrew Thompson, я использовал веб-сервис для преобразования некоторых звуков в .wav. Я не помню, что такое оригинальный формат. У меня есть 11 таких файлов, и все они работают с одним и тем же исходным кодом на моем предыдущем компьютере. – H2ONaCl

+0

.. и каков результат следов стека при открытии этих WAV? –

ответ

Смежные вопросы