JavaTM Platform
Standard Ed. 6

javax.sound.sampled
인터페이스 SourceDataLine

모든 슈퍼 인터페이스:
DataLine , Line


public interface SourceDataLine
extends DataLine

소스 데이터 라인은 데이터를 기입할 수 있는 데이터 라인입니다. 소스 데이터 라인은 믹서에 대해서 소스로서 동작합니다. 어플리케이션이 오디오 바이트를 소스 데이터 라인에 기입하면(자), 소스 데이터 라인은 바이트의 버퍼링을 처리해, 그것을 믹서에 전달합니다. 믹서는 샘플을 다른 소스로부터의 샘플과 믹스 해, 그것을 출력 포트등의 타겟으로 전달합니다. 출력 포트란, 사운드 카드의 오디오 출력 디바이스등의 일입니다.

이 인터페이스의 명명 규칙은, 라인과 믹서의 관계를 반영하고 있습니다. 어플리케이션으로부터 보면(자), 소스 데이터 라인은 오디오 데이터의 타겟의 역할을 완수합니다.

소스 데이터 라인을 믹서로부터 가져오려면 , 적절한 DataLine.Info 객체를 지정해 MixergetLine 메소드를 호출합니다.

SourceDataLine 인터페이스는, 오디오 데이터를 데이터 라인의 버퍼에 기입하는 메소드를 제공합니다. 오디오를 재생 또는 믹스 하는 어플리케이션은, 버퍼가 언더 플로우(underflow) (공백화) 하지 않는 동안에 데이터를 재빠르게 소스 데이터 라인에 기입합니다. 언더 플로우(underflow)에 의해 오디오에 불연속부가 생기는 일이 있어, 클릭음으로서 지각됩니다. 어플리케이션에서는,DataLine 인터페이스로 정의되고 있는 available 메소드를 사용해, 데이터 라인의 버퍼로 현재 큐에 들어가 있는 데이터의 양을 판별할 수가 있습니다. 블록 하지 않고 버퍼에 기입할 수 있는 데이터량은, 버퍼 사이즈와 큐에 들어가 있는 데이터량과의 차이입니다. 언더 플로우(underflow)를 위해서(때문에) 오디오 출력의 전달이 정지했을 경우는,STOP 이벤트가 생성됩니다. 오디오 출력이 재개하면(자),START 이벤트가 생성됩니다.

도입된 버젼:
1.3
관련 항목:
Mixer , DataLine , TargetDataLine

상자의 클래스의 개요
 
인터페이스 javax.sound.sampled. DataLine 로부터 상속된 상자의 클래스/인터페이스
DataLine.Info
 
메소드의 개요
 void open (AudioFormat  format)
          지정된 포맷으로 라인을 열어, 라인이 필요한 system resource를 획득해 조작 가능하게 되도록(듯이) 합니다.
 void open (AudioFormat  format, int bufferSize)
          지정된 포맷과 지정된 버퍼 사이즈로 라인을 열어, 라인이 필요한 system resource를 획득해 조작 가능하게 되도록(듯이) 합니다.
 int write (byte[] b, int off, int len)
          이 소스 데이터 라인을 개입시켜 오디오 데이터를 믹서에 기입합니다.
 
인터페이스 javax.sound.sampled. DataLine 로부터 상속된 메소드
available , drain , flush , getBufferSize , getFormat , getFramePosition , getLevel , getLongFramePosition , getMicrosecondPosition , isActive , isRunning , start , stop
 
인터페이스 javax.sound.sampled. Line 로부터 상속된 메소드
addLineListener , close , getControl , getControls , getLineInfo , isControlSupported , isOpen , open , removeLineListener
 

메소드의 상세

open

void open(AudioFormat  format,
          int bufferSize)
          throws LineUnavailableException 
지정된 포맷과 지정된 버퍼 사이즈로 라인을 열어, 라인이 필요한 system resource를 획득해 조작 가능하게 되도록(듯이) 합니다.

버퍼 사이즈는 바이트 단위로 지정합니다만, 샘플 frame size의 배수인 것이 필요합니다. 이 요건에 적합하지 않는 버퍼 사이즈를 지정해 이 메소드를 호출하면(자), IllegalArgumentException 가 throw 되는 일이 있습니다. 연 라인의 실제의 버퍼 사이즈는, 지정한 버퍼 사이즈와는 다른 일이 있습니다. 실제로 설정된 값은, 계속되어 DataLine.getBufferSize() 를 호출하면 조회할 수 있습니다.

이 조작이 성공하면(자), 라인은 열려 있는 상태로서 마크 되어OPEN 이벤트가 라인의 청취자에게 발송 됩니다.

벌써 열려 있는 라인으로 이 메소드를 호출하는 것은 부적절하고,IllegalStateException 가 표시되는 일이 있습니다.

라인에 따라서는, 한 번 닫으면(자) 재차 열 수가 없는 경우가 있습니다. 이러한 라인을 재차 열려고 하면(자), 항상 LineUnavailableException 가 표시됩니다.

파라미터:
format - 바람직한 오디오 형식
bufferSize - 바람직한 버퍼 사이즈
예외:
LineUnavailableException - 자원의 제약을 위해서(때문에) 라인을 열지 않는 경우
IllegalArgumentException - 버퍼 사이즈가 샘플 frame size 배수가 아닌 경우, 혹은 format 의 지정이 불완전 또는 무효인 경우
IllegalStateException - 라인이 벌써 열려 있는 경우
SecurityException - 시큐리티의 제약을 위해서(때문에) 라인을 열지 않는 경우
관련 항목:
open(AudioFormat) , Line.open() , Line.close() , Line.isOpen() , LineEvent

open

void open(AudioFormat  format)
          throws LineUnavailableException 
지정된 포맷으로 라인을 열어, 라인이 필요한 system resource를 획득해 조작 가능하게 되도록(듯이) 합니다.

버퍼 사이즈는 구현에 의해 선택됩니다. 버퍼 사이즈는 바이트 단위입니다만, 샘플 frame size의 배수인 것이 필요합니다. 시스템이 선택한 버퍼 사이즈는, 계속되어 DataLine.getBufferSize() 를 호출하면 조회할 수 있습니다.

이 조작이 성공하면(자), 라인은 열려 있는 상태로서 마크 되어OPEN 이벤트가 라인의 청취자에게 발송 됩니다.

벌써 열려 있는 라인으로 이 메소드를 호출하는 것은 부적절하고,IllegalStateException 가 표시되는 일이 있습니다.

라인에 따라서는, 한 번 닫으면(자) 재차 열 수가 없는 경우가 있습니다. 이러한 라인을 재차 열려고 하면(자), 항상 LineUnavailableException 가 표시됩니다.

파라미터:
format - 바람직한 오디오 형식
예외:
LineUnavailableException - 자원의 제약을 위해서(때문에) 라인을 열지 않는 경우
IllegalArgumentException - format 의 의 지정이 불완전 또는 무효인 경우
IllegalStateException - 라인이 벌써 열려 있는 경우
SecurityException - 시큐리티의 제약을 위해서(때문에) 라인을 열지 않는 경우
관련 항목:
open(AudioFormat, int) , Line.open() , Line.close() , Line.isOpen() , LineEvent

write

int write(byte[] b,
          int off,
          int len)
이 소스 데이터 라인을 개입시켜 오디오 데이터를 믹서에 기입합니다. 요구된 바이트수의 데이터가, 지정된 오프셋(offset)를 시점으로서 지정된 배열로부터 읽혀 데이터 라인의 버퍼에 기입해집니다. 현재 기입할 수 있는 양을 넘는 데이터를 기입하려고 하면(자) (available 를 참조), 요구된 양의 데이터를 기입해 끝낼 때까지 이 메소드는 블록 됩니다. 이것은, 기입이 요구된 데이터의 양이 데이터 라인의 버퍼 사이즈보다 큰 경우에도 들어맞읍니다. 다만, 요구된 양의 기입이 끝나기 전에 데이터 라인이 클로즈, 정지, 또는 플래시 되었을 경우는, 메소드의 블록이 해제되어, 그때까지 기입해진 바이트수가 돌려주어집니다.

블록 되지 않고 기입할 수 있는 바이트수는,DataLine 인터페이스의 available 메소드를 사용해 확인할 수 있습니다. 이 바이트수는 블록 되지 않고 확실히 기입할 수 있습니다만, 추가 데이터를 기입하려고 했을 때에 블록 될지 어떨지는 확실하지는 않습니다.

기입해지는 바이트수는, 다음과 같은 샘플 프레임의 정수를 표시할 필요가 있습니다.

[기입해지는 바이트수] % [frame size의 바이트수] == 0

반환값은 항상 이 조건을 채우고 있습니다. 샘플 frame size의 배수 이외의 바이트수를 기입한다고 하는 요구는 실행하지 못하고,IllegalArgumentException 가 throw 되는 경우가 있습니다.

파라미터:
b - 데이터 라인에 기입해지는 데이터를 포함한 바이트 배열
len - 바이트 단위에서의 배열의 유효 데이터의 길이 (즉, 바이트 단위에서의 기입해 요구 데이터의 양)
off - 배열의 선두로부터의 좌표, 바이트 단위
반환값:
실제로 기입해지는 바이트수
예외:
IllegalArgumentException - 요구된 바이트수가 샘플 frame size의 배수가 아닌 경우, 또는 len 가 0 보다 작은 값의 경우
ArrayIndexOutOfBoundsException - off 가 0 보다 작은 값의 경우, 또는 off+len 가 배열 b 의 길이보다 큰 경우
관련 항목:
TargetDataLine.read(byte[], int, int) , DataLine.available()

JavaTM Platform
Standard Ed. 6

버그의 보고와 기능의 요청
한층 더 자세한 API 레퍼런스 및 개발자 문서에 대해서는,Java SE 개발자용 문서를 참조해 주세요. 개발자전용의 상세한 해설, 개념의 개요, 용어의 정의, 버그의 회피책, 및 코드 실례가 포함되어 있습니다.

Copyright 2006 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms . Documentation Redistribution Policy 도 참조해 주세요.