|
Unofficial "CLDC 1.1 + MIDP 2.0" API Reference. (日本語版) |
|||||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
public interface ToneControl
ToneControl
は、ユーザー定義の単調なトーン・シーケンスの再生を可能にするインタフェースです。
トーン・シーケンスはトーン持続時間とユーザー定義のシーケンスブロックのリストとして指定します。
リストは byte
配列に梱包します。
setSequence(byte[])
メソッドは、シーケンスを ToneControl
を入力するために使用します。
トーン・シーケンスの書式を拡張 BNF にて解説します:
シーケンス = バージョン *1 テンポ定義 *1 分解能定義 * ブロック定義 1* シーケンス・イベント バージョン = VERSION バージョン番号 VERSION = バイト値 バージョン番号 = 1 ; バージョン # 1 テンポ定義 = TEMPO テンポ設定値 TEMPO = バイト値 テンポ設定値 = バイト値 ; シーケンスの中で使用する四分音符単位でのテンポ ; (単位: bpm)です。 分解能定義 = RESOLUTION 分解能単位 RESOLUTION = バイト値 分解能単位 = バイト値 ブロック定義 = BLOCK_START ブロック番号 1* シーケンス・イベント BLOCK_END ブロック番号 BLOCK_START = バイト値 BLOCK_END = バイト値 ブロック番号 = バイト値 ; BLOCK_END で指定するブロック番号は BLOCK_START のものと同じで ; なければなりません。 シーケンス・イベント = トーン・イベント / ブロック・イベント / ボリューム・イベント / リピート・イベント トーン・イベント = 音階 持続時間 音階 = バイト値 ; 再生する音階 持続時間 = バイト値 ; 音階の持続時間 ブロック・イベント = PLAY_BLOCK ブロック番号 PLAY_BLOCK = バイト値 ブロック番号 = バイト値 ; 完全なブロック定義は事前にブロック番号を定義しなければなり ; ません。 ボリューム・イベント = SET_VOLUME 音量 SET_VOLUME = バイト値 音量 = バイト値 ; 新しい音量 リピート・イベント = REPEAT 回数 トーン・イベント REPEAT = バイト値 回数 = バイト値 ; トーンを繰り返す回数 バイト値 = -128 - 127 ; 各パラメータの追加条件と各定数値は以下で定義します。
VERSION
、TEMPO
、RESOLUTION
、BLOCK_START
、BLOCK_END
、PLAY_BLOCK
、SET_VOLUME
、REPEAT
は定義済みの定数です。
パラメータの有効な範囲を以下の表に示します:
パラメータ | 正当な範囲 | 有効な範囲 | デフォルト |
---|---|---|---|
テンポ設定値 | 5 <= テンポ設定値 <= 127 | 20bpm から 508bpm | 120bpm |
分解能単位 | 1 <= 分解能単位 <= 127 | 1/1 音符から 1/127 音符 | 1/64 音符 |
ブロック数 | 0 <= ブロック数 <= 127 | − | − |
音階 | 0 <= 音階 <= 127 または SILENCE | オクターブ1ド♭(C-1)からオクターブ9ソ(G9) または 休符 | − |
持続時間 | 1 <= 持続時間 <= 127 | − | − |
音量 | 0 <= 音量 <= 100 | 0% 〜 100% の音量 | 100% |
回数 | 2 <= 回数 <= 127 | − | − |
(筆者注)※ bpm = beats per minute です。
以下の公式によって音階の周波数を計算することができます:
半音固定値 = 17.31234049066755 = 1/(ln(2^(1/12))) 音階 = ln( 周波数/8.176)* 半音固定値
オクターブ4ラ(A) = 音階 69 (0x45) = 440 Hz です。
それぞれのトーンの持続時間は、1ビート(一拍)=四分音符として、1/音符分解能およびテンポが指定するビート/分によります。
バイト値の正数の範囲が 1
から 127
に限られるため、テンポはテンポ設定値に 4
を掛けることによって作成します。
テンポ設定値は、非常に遅いテンポを除く 5
から 127
の範囲で、これは有効な範囲 20
から 508
bpm に相当します。
トーンのためのミリ秒単位の持続時間は以下の公式を使用することで計算できます:
持続時間 * 60 * 1000 * 4 / ( 分解能 * テンポ )
以下の表はいくつかの一般的な音符の持続時間を示します:
音符長 | 分解能 =64 の持続時間 | 分解能 =96 の持続時間 |
---|---|---|
1/1 | 64 | 96 |
1/4 | 16 | 24 |
1/4 付点 | 24 | 36 |
1/8 | 8 | 12 |
1/8 三連符 | - | 8 |
4/1 | REPEAT 4 <音階> 64 | REPEAT 4 <音階> 96 |
// "メリーさんの羊"は、"ABAC"構造です。 // "A"セクションのブロック・リピートを使用します。 byte tempo = 30; // テンポ120 byte d = 8; // 八分音符 byte C4 = ToneControl.C4; // (ト音記号オクターブ4ド) byte D4 = (byte)(C4 + 2); // (ト音記号オクターブ4レ) byte E4 = (byte)(C4 + 4); // (ト音記号オクターブ4ミ) byte G4 = (byte)(C4 + 7); // (ト音記号オクターブ4ソ) byte rest = ToneControl.SILENCE; // 休符 byte[] mySequence = { ToneControl.VERSION, 1, // バージョン 1 ToneControl.TEMPO, tempo, // テンポ設定 ToneControl.BLOCK_START, 0, // "A"セクション定義開始 E4,d, D4,d, C4,d, E4,d, // "A"セクションの内容 E4,d, E4,d, E4,d, rest,d, ToneControl.BLOCK_END, 0, // "A"セクション定義終了 ToneControl.PLAY_BLOCK, 0, // "A"セクション再生 D4,d, D4,d, D4,d, rest,d, // "B"セクション再生 E4,d, G4,d, G4,d, rest,d, ToneControl.PLAY_BLOCK, 0, // "A"セクション・リピート D4,d, D4,d, E4,d, D4,d, C4,d // "C"セクション再生 }; 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) { }
フィールドの概要 | |
---|---|
static byte |
BLOCK_END
ブロックの終了位置を定義します。 |
static byte |
BLOCK_START
ブロックの開始位置を定義します。 |
static byte |
C4
オクターブ4ド(C)です。 |
static byte |
PLAY_BLOCK
定義済みのブロックを再生します。 |
static byte |
REPEAT
REPEAT イベントタグです。 |
static byte |
RESOLUTION
RESOLUTION イベントタグです。 |
static byte |
SET_VOLUME
SET_VOLUME イベントタグです。 |
static byte |
SILENCE
休符です。 |
static byte |
TEMPO
TEMPO イベントタグです。 |
static byte |
VERSION
VERSION 属性タグです。 |
メソッドの概要 | |
---|---|
void |
setSequence(byte[] sequence)
トーン・シーケンスを設定します。 |
フィールドの詳細 |
---|
static final byte VERSION
VERSION 属性タグです。
VERSION
には値として -2
が割り当てられています。
static final byte TEMPO
TEMPO イベントタグです。
TEMPO
には値として -3
が割り当てられています。
static final byte RESOLUTION
RESOLUTION イベントタグです。
RESOLUTION
には値として -4
が割り当てられています。
static final byte BLOCK_START
ブロックの開始位置を定義します。
BLOCK_START
には値として -5
が割り当てられています。
static final byte BLOCK_END
ブロックの終了位置を定義します。
BLOCK_END
には値として -6
が割り当てられています。
static final byte PLAY_BLOCK
定義済みのブロックを再生します。
PLAY_BLOCK
には値として -7
が割り当てられています。
static final byte SET_VOLUME
SET_VOLUME イベントタグです。
SET_VOLUME
には値として -8
が割り当てられています。
static final byte REPEAT
REPEAT イベントタグです。
REPEAT
には値として -9
が割り当てられています。
static final byte C4
オクターブ4ド(C)です。
C4
には値として 60
が割り当てられています。
static final byte SILENCE
休符です。
SILENCE
には値として -1
が割り当てられています。
メソッドの詳細 |
---|
void setSequence(byte[] sequence)
トーン・シーケンスを設定します。
sequence
- 設定するシーケンスを渡します。
IllegalArgumentException
- パラメータ sequence
が null
あるいは無効ならば throw します。
IllegalStateException
- このコントロールが属する Player
が PREFETCHED
または STARTED
状態ならば throw します。
|
Unofficial "CLDC 1.1 + MIDP 2.0" API Reference. (日本語版) |
|||||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
公式仕様書原文の著作権表記等(※): Mobile Information Device Profile Specification ("Specification") Version: 2.0 Status: FCS Release: November 5, 2002 Copyright 2002 Sun Microsystems, Inc. and Motorola, Inc. All rights reserved. | ※ただしこの API リファレンスは英語仕様を一語一句正確に翻訳したものではなく、一度私が英語の仕様原文を読んだ上で元の意味と構造をなるべく保つように書き起こしたものです。このため一部は完全に異なる説明となっています。また CLDC 1.1 部分は同仕様の範囲外であるため、まったく参考とはしていません。 ※仕様書のライセンス上、問題は無いと考えておりますが、万が一問題があるとお考えの関係者の方がいらっしゃいましたらメールにて連絡をいただけると幸いに存じます(第一言語に日本語、第二言語に英語を希望しますが、返信は基本的に日本語で行います)。 |