2010-12-30 2 views
0

나는이 코드를 내 친구에게서 얻었습니다.무엇 (클립) 및 DataLine.Info ... ...?

import java.io.*; 
import javax.sound.sampled.*; 
public class xx 
{ 
    public static void main(String args[]) 
    { 
     try 
     { 
      File f=new File("mm.wav"); 
      AudioInputStream a=AudioSystem.getAudioInputStream(f); 
      AudioFormat au=a.getFormat(); 
      DataLine.Info di=new DataLine.Info(Clip.class,au); 
      Clip c=(Clip)AudioSystem.getLine(di); 
      c.open(a); 
      c.start(); 
     } 
     catch(Exception e) 
     { 
      System.out.println("Exception caught "); 
     } 
    } 
} 

그러나이 줄의 의미를 이해하지 못했습니다. Cilp c = (Clip) AudioSystem.getLine (di); 무엇 (클립)을 나타냅니다 ....? 그리고 제 2의 문제는 DataLine이 인터페이스이고 DataLine.Info라는이 문장의 의미는 무엇입니까?

+0

도와주세요 .... !! – user528050

답변

1

DataLine은 "Info"중첩 클래스를 포함하는 인터페이스입니다. 여기 진술 :

DataLine.Info di = ... 

은 DataLine 클래스에 정의 된 Info 클래스의 새 인스턴스를 만듭니다.

문장 (Clip)은 우리가 캐스트라고 부르는 것입니다. 객체를 유형에서 다른 유형으로 변환하는 데 사용됩니다. AudioSystem.getLine (di) 메서드는 Line 유형의 객체를 반환합니다. 그래서 기본적으로 친구는 반환 된 객체를 클립으로 변환하여 객체를 인스턴스화하는 데 사용합니다. c. c는 c가 DataLine을 확장하는 Clip 유형이고 DataLine 자체가 Line을 확장하기 때문에 오류가 발생하지 않으며 허용되지 않습니다.

희망이 도움이됩니다.

+0

좋은 도움을 주셔서 감사합니다 .... 하나 더 도움주세요 제게 당신이 Clip.class의 의미를 말해 줄 수 있어요. – user528050

+1

Clip.class는 위의 샘플에서 Info 클래스의 생성자의 첫 번째 매개 변수로 사용됩니다. 이것은 정보 오브젝트 (source : javadoc)에 의해 기술 된 데이터 라인의 클래스 (또는 원한다면 타입)를 결정하는데 사용됩니다. Clip.class는 실제로 클래스 자체입니다. – Hal

+0

안녕하세요 고맙습니다. .... javax.sound.sampled를 사용하여 볼륨을 제어하는 ​​방법을 알고 계신가요? 여기에 답장 해주세요 .... http : //stackoverflow.com/questions/4569074/can-anyone - 왜 - 내 - 볼륨 - 컨트롤 - 나던 - 작품 – user528050