2014-12-30 3 views
0

안녕하세요 저는 게임에서 사운드를 재생할 수있는 작은 클래스를 만들었습니다. 여기 :런타임 중에 사운드를로드 할 수 없습니다.

패키지 sk.tuke.oop.game.sounds;

import java.applet.AudioClip; 
import java.io.File; 
import javax.sound.sampled.AudioInputStream; 
import javax.sound.sampled.AudioSystem; 
import javax.sound.sampled.Clip; 
import javax.sound.sampled.FloatControl; 

public class Sound implements AudioClip { 

    private Clip clip; 
    private FloatControl volume; 
    private int framePosition; 

    public Sound(String path) { 
     loadMusic(path); 
    } 

    public void loadMusic(String path) { 
     if (clip != null) 
      clip.stop(); 

     clip = null; 

     if (!path.equals("")) { 

      File soundFile = null; 

      try { 
       soundFile = new File(path); 
      } catch (Exception e) { 
       return; 
      } 

      try { 
       AudioInputStream input = AudioSystem.getAudioInputStream(soundFile); 
       clip = AudioSystem.getClip(); 
       clip.open(input); 
      } catch (Exception e) { 
       e.printStackTrace(); 
       clip = null; 
      } 

     } 

    } 

    public void play() { 
     if (clip != null) { 
      stop(); 
      clip.start(); 
     } 
    } 

    public void stop() { 
     if (clip != null) { 
      clip.stop(); 
      clip.setFramePosition(0); 
     } 
    } 

    public void pause() { 
     if (clip != null) { 
      if (clip.isRunning()) { 
       framePosition = clip.getFramePosition(); 
       clip.stop(); 
      } 
     } 
    } 

    public void unpause() { 
     if (clip != null) { 
      if (!clip.isRunning()) { 
       clip.setFramePosition(framePosition); 
       clip.start(); 
      } 
     } 
    } 

    public void loop() { 
     if (clip != null) { 
      clip.loop(clip.LOOP_CONTINUOUSLY); 
     } 
    } 

    public void setVolume(float vol) { 
     if (volume.getMinimum()+ vol <= volume.getMaximum()) { 
      volume.setValue(volume.getMinimum()); 
      volume.setValue(volume.getValue() + vol); 
     } 
    } 
} 
모든 배우가 게임 루프 전에 생성 될 때 그것은 잘 일하고있어하지만 난 총알을 촬영하고 내가 얻을 사운드를 재생하고자 할 때

:

javax.sound.sampled.LineUnavailableException: line with format PCM_SIGNED 44100.0 Hz, 16 bit, stereo, 4 bytes/frame, little-endian not supported. 

는 당신이 좀 도와 주 시겠어요? 고맙습니다.

+0

당신이 말하는 형식은 일반적으로 Java에서 지원되는 형식이므로 분명히 신비합니다. 오류가 loadMusic()이 아닌 play()에서 발생한다고 말하십니까? 이것은 Java가 파일을 읽는 것으로 괜찮은 것입니다 (파일이 디버깅의 일부로로드되었는지 확인해야 함). 그러나 사용중인 시스템이 해당 파일 형식을 재생하지 못합니다. 컴퓨터가 아마도 빅 엔디안을 선호합니까? 그렇지 않으면 형식을 지원하지 않습니까? 나는 당혹 스럽다. –

답변

0

사운드 파일이 mp3 형식이 아닌 경우 mp3로 변환을 시도하십시오. 또한 파일 이름이 소문자인지 확인하십시오.

관련 문제