JavaTM Platform
Standard Ed. 6

javax.sound.sampled
인터페이스 DataLine

모든 슈퍼 인터페이스:
Line
기존의 서브 인터페이스의 일람:
Clip , SourceDataLine , TargetDataLine


public interface DataLine
extends Line

DataLine 는, 미디어 관련의 기능을 그 슈퍼 인터페이스,Line 에 추가합니다. 이 기능에는, 라인을 개입시켜 건네받는 오디오 데이터를 개시, 정지, 배출, 및 플래시 하는 이송 제어 메소드가 포함됩니다. 데이터 라인은 현재의 위치, 볼륨, 미디어의 오디오 형식에 대해서도 리포트할 수 있습니다. 데이터 라인은, 응용 프로그램으로 데이터의 기입을 가능하게 하는 서브 인터페이스,SourceDataLine 또는 Clip 에 의해, 오디오의 출력용으로 사용됩니다. 같이 오디오 입력은, 데이터의 읽기를 가능하게 하는 서브 인터페이스,TargetDataLine 로 처리됩니다.

데이터 라인에는, 수신 또는 송신 오디오 데이터를 큐에 넣는 내부 버퍼가 있습니다. 일반적으로 큐에 넣어진 데이터는 모두 처리되기 (위해)때문에,drain() 메소드는 내부 버퍼가 비울 때까지 블록 됩니다. flush() 메소드는, 내부 버퍼로부터 큐에 넣어진 사용 가능한 데이터를 모두 파기합니다.

데이터 라인은, 데이터의 액티브한 표시나 혼잡이 개시 또는 정지되면(자), 항상 START STOP 이벤트를 생성합니다. 이러한 이벤트는, 특정의 요구에 응답해, 또는 직접 변경된 상태가 적은 경우에 생성됩니다. 예를 들어,start() 가 액티브하지 않은 데이터 라인에 불려 가 데이터의 수중에 넣어 또는 재생이 가능한 경우는, 실제로 데이터의 재생이나 혼잡을 개시하면(자) START 이벤트가 즉시 생성됩니다. 혹은, 액티브한 데이터 라인에 대한 데이터의 플로우를 수축한 결과, 데이터의 표시에 갭이 생기면(자),STOP 이벤트가 생성됩니다.

믹서는, 복수의 데이터 라인의 동기 제어를 지원하는 경우가 자주 있습니다. 동기화는, 믹서 인터페이스의 synchronize 메소드를 개입시켜 확립할 수 있습니다. 자세한 것은,Mixer 인터페이스의 설명을 참조해 주세요.

도입된 버젼:
1.3
관련 항목:
LineEvent

상자의 클래스의 개요
static class DataLine.Info
          슈퍼 클래스로부터 상속된 클래스 정보 이외에,DataLine.Info 는 데이터 라인에 고유의 추가 정보를 제공합니다.
 
메소드의 개요
 int available ()
          어플리케이션이 데이터 라인의 내부 버퍼내에서 현재 처리할 수 있는 데이터의 바이트수를 가져옵니다.
 void drain ()
          데이터의 입출력을 데이터 라인의 내부 버퍼가 비울 때까지 계속해, 그 라인으로부터 큐에 들어가 있는 데이터를 배출합니다.
 void flush ()
          라인으로부터 큐에 들어가 있는 데이터를 플래시 합니다.
 int getBufferSize ()
          데이터 라인의 내부 버퍼내에 들어가는 데이터의 최대 바이트수를 가져옵니다.
 AudioFormat getFormat ()
          데이터 라인의 오디오 데이터의 현재의 형식 (인코딩, 샘플 레이트, 채널수등)을 가져옵니다.
 int getFramePosition ()
          오디오 데이터의 현재의 위치를 샘플 프레임수로 가져옵니다.
 float getLevel ()
          라인의 현재의 볼륨 레벨을 가져옵니다.
 long getLongFramePosition ()
          오디오 데이터의 현재의 위치를 샘플 프레임수로 가져옵니다.
 long getMicrosecondPosition ()
          오디오 데이터내의 현재의 위치를 마이크로 세컨드 단위로 가져옵니다.
 boolean isActive ()
          라인이 액티브한 입출력 (재생이나 혼잡등)을 실행하고 있을지 어떨지를 나타냅니다.
 boolean isRunning ()
          라인이 실행중인가 어떤가를 나타냅니다.
 void start ()
          라인에서의 데이터 입출력을 가능하게 합니다.
 void stop ()
          라인을 정지합니다.
 
인터페이스 javax.sound.sampled. Line 로부터 상속된 메소드
addLineListener , close , getControl , getControls , getLineInfo , isControlSupported , isOpen , open , removeLineListener
 

메소드의 상세

drain

void drain()
데이터의 입출력을 데이터 라인의 내부 버퍼가 비울 때까지 계속해, 그 라인으로부터 큐에 들어가 있는 데이터를 배출합니다. 이 메소드는 배출이 완료할 때까지 블록 됩니다. 이것은 블로킹 메소드이기 때문에, 주의해 사용할 필요가 있습니다. 큐내에 데이터가 있는 라인이 정지하고 있는 상태로 drain() 를 호출하면(자), 라인이 실행되어 데이터 큐가 비울 때까지 이 메소드는 블록 됩니다. drain() 를 1 개의 thread로 호출해, 다른 thread로 데이터 큐의 포함을 계속하면(자), 조작은 완료하지 않습니다. 이 메소드는 데이터 라인이 닫으면(자) 항상 돌려주어집니다.

관련 항목:
flush()

flush

void flush()
라인으로부터 큐에 들어가 있는 데이터를 플래시 합니다. 플래시 된 데이터는 파기됩니다. 일부의 큐 데이터 밖에 파기할 수 없는 경우도 있습니다. 예를 들어, 믹서는 특정의 입력 라인의 버퍼로부터 데이터를 플래시 할 수 있습니다만, 출력 버퍼내에 있는 재생되어 있지 않은 데이터 (혼재의 결과)는, 그대로 재생됩니다. 재생이나 혼잡을 재개할 경우에 「무효인」데이터를 스킵 하는 경우는, 일반적으로 라인을 일시정지한 뒤 이 메소드를 호출할 수가 있습니다. 정지되어 있지 않은 라인을 플래시 하는 것은 정당한 방법입니다만, 이 방법을 액티브한 라인으로 실행하면(자), 데이터내에서 불연속부가 발생하는 경우가 있습니다. 이 경우는, 클릭소리가 들립니다.

관련 항목:
stop() , drain()

start

void start()
라인에서의 데이터 입출력을 가능하게 합니다. 이 메소드를, 벌써 실행하고 있는 라인으로 호출해도, 아무것도 기능하지 않습니다. 버퍼내의 데이터가 플래시되어 있지 않은 경우, 라인이 정지한 시점에서 처리되지 않았던 최초의 프레임으로부터, 라인은 입출력을 재개합니다. 오디오 수중에 넣어 또는 재생이 개시되면(자),START 이벤트가 생성됩니다.

관련 항목:
stop() , isRunning() , LineEvent

stop

void stop()
라인을 정지합니다. 정지된 라인은 입출력을 정지합니다. 다만, 라인을 열어 실행하면(자), 입출력을 재개하는데 필요한 자원이 보관 유지됩니다. 정지된 라인에서는 오디오 데이터는 파기되지 않고 버퍼내에 보관 유지되기 (위해)때문에, 라인을 재개하면(자) 오프가 되어 있던 장소로부터 입출력을 계속할 수 있는 경우가 있습니다. 이 경우는 당연, 현재의 버퍼 이외에 불연속부가 발생할 가능성이 있습니다. 정지상태황이 매우 길게 계속되는 경우는, 입력 또는 출력의 샘플이 무효가 되는 일이 있습니다. 필요에 따라서,flush 메소드를 호출해 보관 유지되고 있는 데이터를 파기할 수 있습니다. 오디오 수중에 넣어 또는 재생을 정지하면(자),STOP 이벤트가 생성됩니다.

관련 항목:
start() , isRunning() , flush() , LineEvent

isRunning

boolean isRunning()
라인이 실행중인가 어떤가를 나타냅니다. 디폴트는 false 입니다. 열린 라인은,start 메소드의 호출에 응해 최초의 데이터가 제시되면(자) 실행이 개시되어stop 메소드의 호출에 응해, 혹은 재생이 완료해, 표시되지 않게 될 때까지 계속해 실행됩니다.

반환값:
라인이 실행중인 경우는 true, 그렇지 않은 경우는 false
관련 항목:
start() , stop()

isActive

boolean isActive()
라인이 액티브한 입출력 (재생이나 혼잡등)을 실행하고 있을지 어떨지를 나타냅니다. 액티브하지 않은 라인이 액티브하게 되면(자), 이 라인은 START 이벤트를 그 청취자에게 송신합니다. 같이 액티브한 라인이 액티브하지 않게 되면(자), 라인은 STOP 이벤트를 송신합니다.

반환값:
라인이 사운드의 혼잡이나 draw를 실행하고 있는 경우는 true, 그렇지 않은 경우는 false
관련 항목:
Line.isOpen() , Line.addLineListener(javax.sound.sampled.LineListener) , Line.removeLineListener(javax.sound.sampled.LineListener) , LineEvent , LineListener

getFormat

AudioFormat  getFormat()
데이터 라인의 오디오 데이터의 현재의 형식 (인코딩, 샘플 레이트, 채널수등)을 가져옵니다.

현재 열지 않고, 지금까지도 열었던 적이 없는 라인은, 디폴트의 형식을 돌려줍니다. 디폴트의 형식은, 구현 고유의 오디오 형식이 됩니다. 또는,DataLine.Info 객체 (이 DataLine 의 취득에 사용)가 1 개 이상의 완전 수식 오디오 형식을 지정하는 경우, 마지막 것이 디폴트의 형식이 됩니다. 특정의 오디오 형식 (SourceDataLine.open(AudioFormat) 등)으로 라인을 열면(자), 디폴트의 형식은 오버라이드(override) 됩니다.

반환값:
오디오 데이터의 현재의 형식
관련 항목:
AudioFormat

getBufferSize

int getBufferSize()
데이터 라인의 내부 버퍼내에 들어가는 데이터의 최대 바이트수를 가져옵니다. 소스 데이터 라인의 경우는, 데이터를 기입할 수 있는 버퍼의 사이즈의 값이 됩니다. 타겟 데이터 라인의 경우는, 데이터를 읽기할 수 있는 버퍼의 사이즈의 값이 됩니다. 사용되는 단위는 바이트입니다만, 단위는 오디오 데이터의 샘플 프레임의 적분수에 항상 일치합니다.

반환값:
버퍼의 사이즈 (바이트수)

available

int available()
어플리케이션이 데이터 라인의 내부 버퍼내에서 현재 처리할 수 있는 데이터의 바이트수를 가져옵니다. 소스 데이터 라인의 경우는, 블록 되지 않고 버퍼에 기입할 수 있는 데이터량이 이 값이 됩니다. 타겟 데이터 라인의 경우는, 어플리케이션으로 읽어들일 수 있는 데이터량이 이 값이 됩니다. 클립의 경우는, 클립을 열면(자) 오디오 데이터는 버퍼에 로드 되어 클립이 닫을 때까지 변경되지 않고 유지되기 (위해)때문에, 이 값은 항상 0 이 됩니다.

사용되는 단위는 바이트입니다만, 단위는 오디오 데이터의 샘플 프레임의 적분수에 항상 일치합니다.

어플리케이션에서는,available() 로부터 반환된 바이트수까지의 읽어들여 또는 기입해 조작은 블록 되지 않습니다. 다만, 그 바이트수보다 많은 데이터의 읽어들여 또는 기입해 조작을 실행하면(자) 블록 될지 어떨지 확실하지는 않습니다.

반환값:
사용 가능한 데이터량 (바이트수)

getFramePosition

int getFramePosition()
오디오 데이터의 현재의 위치를 샘플 프레임수로 가져옵니다. 프레임 위치는, 라인이 열리고 나서 받아들여진, 또는 draw 된 샘플 프레임수로 측정됩니다. 이 반환값은, 2 ~ 31 프레임 다음에 랩 되므로, 대신에 getLongFramePosition 를 사용하는 것을 추천합니다.

반환값:
라인이 열리고 나서 벌써 처리된 프레임수
관련 항목:
getLongFramePosition()

getLongFramePosition

long getLongFramePosition()
오디오 데이터의 현재의 위치를 샘플 프레임수로 가져옵니다. 프레임 위치는, 라인이 열리고 나서 받아들여진, 또는 draw 된 샘플 프레임수로 측정됩니다.

반환값:
라인이 열리고 나서 벌써 처리된 프레임수
도입된 버젼:
1.5

getMicrosecondPosition

long getMicrosecondPosition()
오디오 데이터내의 현재의 위치를 마이크로 세컨드 단위로 가져옵니다. 마이크로 세컨드의 위치는, 라인이 열리고 나서 받아들여진, 또는 draw 된 샘플 프레임수에 상당하는 시간에 측정됩니다. 정밀도의 레벨은 보증되지 않습니다. 예를 들어, 구현에서는, 현재의 프레임 위치 및 오디오 샘플 frame rate로부터 마이크로 세컨드 위치가 계산되는 경우가 있습니다. 마이크로 세컨드 단위의 정밀도는, 1 샘플 프레임 근처의 마이크로 세컨드수에 제한됩니다.

반환값:
라인이 열리고 나서 처리된 데이터의 마이크로 세컨드수

getLevel

float getLevel()
라인의 현재의 볼륨 레벨을 가져옵니다. 이 레벨은 신호의 현재의 진폭의 척도입니다. 또, 이 레벨과 게인 컨트롤의 현재의 설정을 혼동 하지 말아 주세요. 범위는 0.0 (소리의 나오지 않는 상태)에서 1.0 (사운드 파형의 최대 진폭)까지입니다. 단위는 데시벨은 아니고 선형 진폭으로 측정됩니다.

반환값:
이 라인의 신호의 현재의 진폭, 또는 AudioSystem.NOT_SPECIFIED

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 도 참조해 주세요.