MID 프로필

javax.microedition.media.control
Interface ToneControl

All Superinterfaces:
Control

public interface ToneControl
extends Control

ToneControl은 사용자 정의 모노 톤 시퀀스를 재생할 수 있는 인터페이스입니다.

톤 시퀀스는 톤 재생 시간 쌍 목록과 사용자 정의 시퀀스 블록으로 지정됩니다. 목록은 바이트의 배열로 패키지화됩니다. setSequence 메소드는 ToneControl에 시퀀스를 입력하는 데 사용됩니다.

톤 시퀀스 구문은 Augmented BNF 주석에 설명되어 있습니다.

 sequence              = version *1tempo_definition *1resolution_definition 
		             *block_definition 1*sequence_event
 
version               = VERSION version_number
 VERSION               = byte-value
 version_number        = 1	; version # 1

 tempo_definition      = TEMPO tempo_modifier
 TEMPO                 = byte-value
 tempo_modifier        = byte-value 
              ; multiply by 4 to get the tempo (in bpm) used 
              ; in the sequence.
 
 resolution_definition = RESOLUTION resolution_unit
 RESOLUTION            = byte-value
 resolution_unit       = byte-value

 block_definition      = BLOCK_START block_number 
                            1*sequence_event 
                         BLOCK_END block_number
 BLOCK_START           = byte-value
 BLOCK_END             = byte-value
 block_number          = byte-value 
              ; block_number specified in BLOCK_END has to be the 
              ; same as the one in BLOCK_START 

 sequence_event        = tone_event / block_event / 
                           volume_event / repeat_event
 
 tone_event            = note duration
 note                  = byte-value ; note to be played
 duration              = byte-value ; duration of the note

 block_event           = PLAY_BLOCK block_number
 PLAY_BLOCK            = byte-value
 block_number          = byte-value 
              ; block_number must be previously defined 
              ; by a full block_definition

 volume_event          = SET_VOLUME volume
 SET_VOLUME            = byte-value
 volume                = byte-value ; new volume

 repeat_event          = REPEAT multiplier tone_event
 REPEAT                = byte-value
 multiplier            = byte-value  
              ; number of times to repeat a tone

 byte-value            = -128 - 127
              ; the value of each constant and additional
              ; constraints on each parameter are specified below.
VERSION, TEMPO, RESOLUTION, BLOCK_START, BLOCK_END, PLAY_BLOCK SET_VOLUME REPEAT는 미리 정의된 상수입니다.

다음 테이블은 유효한 매개 변수 범위를 보여 줍니다.

매개 변수 올바른 범위 유효 범위 기본값
tempo_modifier 5<= tempo_modifier <= 127 20bpm - 508bpm 120bpm
resolution_unit 1<= resolution_unit <= 127 1/1 음표 - 1/127 음표 1/64 음표
block_number 0<= block_number <= 127 - -
note 0<= note <= 127 또는 SILENCE C-1 - G9 또는 나머지 -
duration 1<= duration <= 127 - -
volume 0<= volume <= 100 0% - 100% 볼륨 100%
multiplier 2<= multiplier <= 127 - -

음표의 주파수는 다음 공식으로 계산할 수 있습니다.
     SEMITONE_CONST = 17.31234049066755 = 1/(ln(2^(1/12)))
     note = ln(freq/8.176)*SEMITONE_CONST
음표 A = 음표 69(0x45) = 440Hz.
Middle C (C4)SILENCE는 상수로 정의되어 있습니다.

각 톤의 재생 시간은 1/음절 분열 단위로 측정되며 템포는 비트/분으로 지정됩니다. 여기서 1비트 = 1/4음표입니다. byte의 양수 값 범위는 1 - 127이므로 템포는 템포 수정자에 4를 곱하여 형성됩니다. 아주 느린 템포는 제외되므로 템포 수정자의 범위가 5 - 127이어서 20 - 508bpm의 유효 범위를 제공합니다.

톤의 유효 재생 시간을 밀리초 단위로 계산하기 위해 다음 공식을 사용할 수 있습니다.

     duration * 60 * 1000 * 4 / (resolution * tempo)
다음 테이블은 음표에서 사용되는 몇몇 일반적인 재생 시간을 나열합니다.
음표 길이 재생 시간, 음절 분열=64 재생 시간, 음절 분열=96
1/1 64 96
1/4 16 24
1/4 점음표 24 36
1/8 8 12
1/8 3연음표 - 8
4/1 REPEAT 4 <음표> 64 REPEAT 4 <음표> 96

    // "Mary Had A Little Lamb" has "ABAC" structure.
    // Use block to repeat "A" section. 

    byte tempo = 30; // set tempo to 120 bpm 
    byte d = 8;      // eighth-note 

    byte C4 = ToneControl.C4;; 
    byte D4 = (byte)(C4 + 2); // a whole step 
    byte E4 = (byte)(C4 + 4); // a major third 
    byte G4 = (byte)(C4 + 7); // a fifth 
    byte rest = ToneControl.SILENCE; // rest 

    byte[] mySequence = {
        ToneControl.VERSION, 1,   // version 1
        ToneControl.TEMPO, tempo, // set tempo
        ToneControl.BLOCK_START, 0,   // start define "A" section
        E4,d, D4,d, C4,d, E4,d,       // content of "A" section
        E4,d, E4,d, E4,d, rest,d,           
        ToneControl.BLOCK_END, 0,     // end define "A" section
        ToneControl.PLAY_BLOCK, 0,    // play "A" section
        D4,d, D4,d, D4,d, rest,d,     // play "B" section
        E4,d, G4,d, G4,d, rest,d,
        ToneControl.PLAY_BLOCK, 0,    // repeat "A" section
        D4,d, D4,d, E4,d, D4,d, C4,d  // play "C" section
    }; 

    try {
        Player p = Manager.createPlayer(Manager.TONE_DEVICE_LOCATOR);
        p.realize();
        ToneControl c = (ToneControl)p.getControl("ToneControl"); 
        c.setSequence(mySequence); 
        p.start();
    } catch (IOException ioe) {
    } catch (MediaException me) {}


Field Summary
static byte BLOCK_END
          블록의 끝점을 정의합니다.
static byte BLOCK_START
          블록의 시작점을 정의합니다.
static byte C4
          중앙 C 60 값이 C4에 지정됩니다.
static byte PLAY_BLOCK
          정의된 블록을 재생합니다.
static byte REPEAT
          REPEAT 이벤트 태그 -9 값이 REPEAT에 지정됩니다.
static byte RESOLUTION
          RESOLUTION 이벤트 태그.
static byte SET_VOLUME
          SET_VOLUME 이벤트 태그.
static byte SILENCE
          무음 -1 값이 SILENCE에 지정됩니다.
static byte TEMPO
          TEMPO 이벤트 태그.
static byte VERSION
          VERSION 속성 태그 -2 값이 VERSION에 지정됩니다.
 
Method Summary
 void setSequence(byte[] sequence)
          톤 시퀀스를 설정합니다.
 

Field Detail

VERSION

public static final byte VERSION
VERSION 속성 태그

-2 값이 VERSION에 지정됩니다.

See Also:
Constant Field Values

TEMPO

public static final byte TEMPO
TEMPO 이벤트 태그.

-3 값이 TEMPO에 지정됩니다.

See Also:
Constant Field Values

RESOLUTION

public static final byte RESOLUTION
RESOLUTION 이벤트 태그.

-4 값이 RESOLUTION에 지정됩니다.

See Also:
Constant Field Values

BLOCK_START

public static final byte BLOCK_START
블록의 시작점을 정의합니다.

-5 값이 BLOCK_START에 지정됩니다.

See Also:
Constant Field Values

BLOCK_END

public static final byte BLOCK_END
블록의 끝점을 정의합니다.

-6 값이 BLOCK_END에 지정됩니다.

See Also:
Constant Field Values

PLAY_BLOCK

public static final byte PLAY_BLOCK
정의된 블록을 재생합니다.

-7 값이 PLAY_BLOCK에 지정됩니다.

See Also:
Constant Field Values

SET_VOLUME

public static final byte SET_VOLUME
SET_VOLUME 이벤트 태그.

-8 값이 SET_VOLUME에 지정됩니다.

See Also:
Constant Field Values

REPEAT

public static final byte REPEAT
REPEAT 이벤트 태그

-9 값이 REPEAT에 지정됩니다.

See Also:
Constant Field Values

C4

public static final byte C4
중앙 C

60 값이 C4에 지정됩니다.

See Also:
Constant Field Values

SILENCE

public static final byte SILENCE
무음

-1 값이 SILENCE에 지정됩니다.

See Also:
Constant Field Values
Method Detail

setSequence

public void setSequence(byte[] sequence)
톤 시퀀스를 설정합니다.

Parameters:
sequence - 설정할 시퀀스
Throws:
IllegalArgumentException - 시퀀스가 null이거나 유효하지 않은 경우 발생합니다.
IllegalStateException - 이 컨트롤이 속해 있는 PlayerPREFETCHED 또는 STARTED 상태에 있는 경우 발생합니다.

MID 프로필

의견이나 제안 사항 보내기 MID 프로필 사양 버전 2.0
Java는 미국 및 다른 국가에서 Sun Microsystems, Inc.의 상표 또는 등록 상표입니다. Copyright 1993-2002 Sun Microsystems, Inc. 901 San Antonio Road, Palo Alto, California, 94303, U.S.A. 모든 권리는 저작권자의 소유입니다.