ToneGeneratorでトーンを鳴らす


ToneGeneratorクラスを使うと様々なトーンを鳴らせることができます。
トーン信号で動作する機器をAndroidアプリから制御したいような場合に利用することが可能です。

詳細は続きからどうぞ。

コンストラクタ

ToneGeneratorクラスのコンストラクタは以下のような定義になっています。

public ToneGenerator (int streamType, int volume)
  • streamType:ストリームタイプを指定します。
  • volume:トーンのボリュームを最大ボリュームに対するパーセンテージ(0-100)で指定します。

なお、最大ボリュームと最小ボリュームには以下の定数を使うことができます。

  • MAX_VOLUME:最大ボリューム
  • MIN_VOLUME:最小ボリューム

各種メソッド

ToneGeneratorクラスのメソッドには以下のようなものがあります。

public boolean startTone (int toneType)
public boolean startTone (int toneType, int durationMs)

指定した種類のトーンの再生を開始します。

  • toneType:トーンの種類を指定します。
  • durationMs:トーンの再生時間を指定します。
public void stopTone ()

トーンの再生を停止します。

public void release ()

ToneGeneratorのオブジェクトを解放します。

トーンの種類

指定できるトーンの種類ですが非常に多くのトーンを再生することができます。
今回全ての種類のトーンをご紹介することはできませんが、たとえば日本のプッシュ式電話回線での送出信号に用いられているトーンの場合ですと以下のようなものがあります。

TONE_DTMF_0 DTMFトーンのキー0: 1336Hz, 941Hzの合成音, 継続音
TONE_DTMF_1 DTMFトーンのキー1: 1209Hz, 697Hzの合成音, 継続音
TONE_DTMF_2 DTMFトーンのキー2: 1336Hz, 697Hzの合成音, 継続音
TONE_DTMF_3 DTMFトーンのキー3: 1477Hz, 697Hzの合成音, 継続音
TONE_DTMF_4 DTMFトーンのキー4: 1209Hz, 770Hzの合成音, 継続音
TONE_DTMF_5 DTMFトーンのキー5: 1336Hz, 770Hzの合成音, 継続音
TONE_DTMF_6 DTMFトーンのキー6: 1477Hz, 770Hzの合成音, 継続音
TONE_DTMF_7 DTMFトーンのキー7: 1209Hz, 852Hzの合成音, 継続音
TONE_DTMF_8 DTMFトーンのキー8: 1336Hz, 852Hzの合成音, 継続音
TONE_DTMF_9 DTMFトーンのキー9: 1477Hz, 852Hzの合成音, 継続音
TONE_DTMF_A DTMFトーンのキーA: 1633Hz, 697Hzの合成音, 継続音
TONE_DTMF_B DTMFトーンのキーB: 1633Hz, 770Hzの合成音, 継続音
TONE_DTMF_C DTMFトーンのキーC: 1633Hz, 852Hzの合成音, 継続音
TONE_DTMF_D DTMFトーンのキーD: 1633Hz, 941Hzの合成音, 継続音
TONE_DTMF_P DTMFトーンのキーP: 1477Hz, 941Hzの合成音, 継続音
TONE_DTMF_S DTMFトーンのキーS: 1209Hz, 941Hzの合成音, 継続音

上記のトーンは一度再生を始めると停止するまで鳴り続けてしまう種類になりますが、他の種類のトーンでは一定時間だけ再生するというようなものもあります。
他の種類のトーンに関してはAndroid Developersをご覧下さい。

サンプルプログラム

サンプルプログラムでは再生ボタンを押すとTONE_DTMF_0を5秒間だけ再生します。
また、トーンが再生中に停止ボタンを押すとトーンが停止します。

// ToneGeneratorインスタンス作成
ToneGenerator tg;

// ToneGenerator初期化
tg = new ToneGenerator(android.media.AudioManager.STREAM_DTMF, ToneGenerator.MAX_VOLUME);

// 再正開始ボタン
Button startButton = (Button) findViewById(R.id.startButton);
startButton.setOnClickListener(new View.OnClickListener() {
	@Override
	public void onClick(View v) {
		// TONE_DTMF_0を5秒間再生。
		tg.startTone(ToneGenerator.TONE_DTMF_0, 5000);
	}
});

// 再正停止ボタン
Button stopButton = (Button) findViewById(R.id.stopButton);
stopButton.setOnClickListener(new View.OnClickListener() {
	@Override
	public void onClick(View v) {
		// 再生停止
		tg.stopTone();
	}
});

関連する記事: