Unofficial
"CLDC 1.1
+ MIDP 2.0"
API Reference.
(日本語版)

javax.microedition.media.control
インタフェース ToneControl

すべてのスーパーインタフェース:
Control

public interface ToneControl
extends Control

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
              ; 各パラメータの追加条件と各定数値は以下で定義します。

VERSIONTEMPORESOLUTIONBLOCK_STARTBLOCK_ENDPLAY_BLOCKSET_VOLUMEREPEAT は定義済みの定数です。

パラメータの有効な範囲を以下の表に示します:

パラメータ正当な範囲有効な範囲デフォルト
テンポ設定値 5 <= テンポ設定値 <= 12720bpm から 508bpm120bpm
分解能単位 1 <= 分解能単位 <= 1271/1 音符から 1/127 音符 1/64 音符
ブロック数 0 <= ブロック数 <= 127
音階 0 <= 音階 <= 127 または SILENCE オクターブ1ド♭(C-1)からオクターブ9ソ(G9) または 休符
持続時間 1 <= 持続時間 <= 127
音量 0 <= 音量 <= 1000% 〜 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 から 508bpm に相当します。

トーンのためのミリ秒単位の持続時間は以下の公式を使用することで計算できます:

持続時間 * 60 * 1000 * 4 / ( 分解能 * テンポ )

以下の表はいくつかの一般的な音符の持続時間を示します:

音符長分解能 =64 の持続時間分解能 =96 の持続時間
1/16496
1/41624
1/4 付点 2436
1/8812
1/8 三連符 -8
4/1REPEAT 4 <音階> 64REPEAT 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)
          トーン・シーケンスを設定します。
 

フィールドの詳細

VERSION

static final byte VERSION

VERSION 属性タグです。

VERSION には値として -2 が割り当てられています。

関連項目:
定数フィールド値

TEMPO

static final byte TEMPO

TEMPO イベントタグです。

TEMPO には値として -3 が割り当てられています。

関連項目:
定数フィールド値

RESOLUTION

static final byte RESOLUTION

RESOLUTION イベントタグです。

RESOLUTION には値として -4 が割り当てられています。

関連項目:
定数フィールド値

BLOCK_START

static final byte BLOCK_START

ブロックの開始位置を定義します。

BLOCK_START には値として -5 が割り当てられています。

関連項目:
定数フィールド値

BLOCK_END

static final byte BLOCK_END

ブロックの終了位置を定義します。

BLOCK_END には値として -6 が割り当てられています。

関連項目:
定数フィールド値

PLAY_BLOCK

static final byte PLAY_BLOCK

定義済みのブロックを再生します。

PLAY_BLOCK には値として -7 が割り当てられています。

関連項目:
定数フィールド値

SET_VOLUME

static final byte SET_VOLUME

SET_VOLUME イベントタグです。

SET_VOLUME には値として -8 が割り当てられています。

関連項目:
定数フィールド値

REPEAT

static final byte REPEAT

REPEAT イベントタグです。

REPEAT には値として -9 が割り当てられています。

関連項目:
定数フィールド値

C4

static final byte C4

オクターブ4ド(C)です。

C4 には値として 60 が割り当てられています。

関連項目:
定数フィールド値

SILENCE

static final byte SILENCE

休符です。

SILENCE には値として -1 が割り当てられています。

関連項目:
定数フィールド値
メソッドの詳細

setSequence

void setSequence(byte[] sequence)

トーン・シーケンスを設定します。

パラメータ:
sequence - 設定するシーケンスを渡します。
例外:
IllegalArgumentException - パラメータ sequencenull あるいは無効ならば throw します。
IllegalStateException - このコントロールが属する PlayerPREFETCHED または 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 部分は同仕様の範囲外であるため、まったく参考とはしていません。

※仕様書のライセンス上、問題は無いと考えておりますが、万が一問題があるとお考えの関係者の方がいらっしゃいましたらメールにて連絡をいただけると幸いに存じます(第一言語に日本語、第二言語に英語を希望しますが、返信は基本的に日本語で行います)。

この API リファレンスは仕様書の日本語版という位置づけでは作成していませんし、仕様書ほど厳格でもありません。MUST、SHOULD、MAY などの仕様の条件を強調する文を維持していません(反映すらしていない個所もあります)。仮想マシンおよび MIDP の実装のために使用することは避けてください。そのような用途には必ず公式仕様書原文そのものを用いるべきです。
この API リファレンスに記載されている内容は"さかきけい"が Sun Microsystems, Inc や Motorola, Inc、Java Community Process が公開している各種公式資料を元に、独自に調査・編集したものであり、Sun Microsystems, Inc や Motorola, Inc、Java Community Process 等とは一切関係ありません。したがってこの API リファレンスに関する問い合わせを関係各社等に対して行うことを固く禁じます。
また、記載された内容には既知か否かに関らず誤りが含まれる可能性があり、一切保証はありません。本 API リファレンスを使用した結果、不利益が生じたとしても"さかきけい"は一切の責任を負いません。
許可無く公開/非公開および Internet/Intranet/LAN を問わず他サイトに転載すること、複写および複製すること、ローカル・ファイル等に保存することを禁じます。


Copyright© 2001-2002,2005-2009,2011 by KEI SAKAKI.
ALL RIGHTS RESERVED.
無断転載を禁じます。

Unofficial "CLDC 1.0 + MIDP 1.0" API Reference はこちらです。