|
MID 프로필 | ||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES All Classes | ||||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
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
<= 12720bpm - 508bpm 120bpm resolution_unit
1<= resolution_unit
<= 1271/1 음표 - 1/127 음표 1/64 음표 block_number
0<= block_number
<= 127- - note
0<= note
<= 127 또는 SILENCEC-1 - G9 또는 나머지 - duration
1<= duration
<= 127- - volume
0<= volume
<= 1000% - 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.
각 톤의 재생 시간은 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 <음표> 64REPEAT
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 |
public static final byte VERSION
-2 값이 VERSION
에 지정됩니다.
public static final byte TEMPO
-3 값이 TEMPO
에 지정됩니다.
public static final byte RESOLUTION
-4 값이 RESOLUTION
에 지정됩니다.
public static final byte BLOCK_START
-5 값이 BLOCK_START
에 지정됩니다.
public static final byte BLOCK_END
-6 값이 BLOCK_END
에 지정됩니다.
public static final byte PLAY_BLOCK
-7 값이 PLAY_BLOCK
에 지정됩니다.
public static final byte SET_VOLUME
-8 값이 SET_VOLUME
에 지정됩니다.
public static final byte REPEAT
-9 값이 REPEAT
에 지정됩니다.
public static final byte C4
60 값이 C4
에 지정됩니다.
public static final byte SILENCE
-1 값이 SILENCE
에 지정됩니다.
Method Detail |
public void setSequence(byte[] sequence)
sequence
- 설정할 시퀀스
IllegalArgumentException
- 시퀀스가
null
이거나 유효하지 않은 경우 발생합니다.
IllegalStateException
- 이 컨트롤이 속해 있는
Player
가 PREFETCHED 또는
STARTED 상태에 있는 경우 발생합니다.
|
MID 프로필 | ||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES All Classes | ||||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |