DTMF 音声エンコーダ — 0-9 / * / # / A-D → 電話プッシュ音 WAV/MP3
電話の **プッシュ音 (DTMF: Dual-Tone Multi-Frequency)** を **任意のキー列** から合成して **WAV / MP3** で書き出します。**16 シンボル** (0-9 / * / # / A-D) を **行 (697/770/852/941 Hz) × 列 (1209/1336/1477/1633 Hz)** の **2 周波数加算合成** で生成、**トーン長 / 間隔 / 音量 / サンプルレート (8/22.05/44.1/48 kHz)** を調整可能。**プレビュー再生** で確認してから WAV (16-bit PCM) / MP3 (lamejs) でダウンロード。**dtmf-decode-audio** の対称ペア — IVR 自動応答のテスト音源、CTF の問題作成、レトロ電話システム研究、phreaking 教材の動作確認に。**完全にブラウザ内** で合成し、入力テキストもサーバーに送信されません。
使い方
**入力欄に DTMF キー列** (0-9 / * / # / A-D) を貼り付けます。大文字小文字どちらでも OK、**空白** はトーンとトーンの間に追加の無音を入れる用途、**ハイフン (-) / 括弧 / 句点** など電話番号でよくある区切り文字は **無視** されます。**サンプル** ボタンで `0120 117 117` の番号を流し込み可能。**出力設定** で **トーン長 (デフォルト 100 ms)**、**間隔 (80 ms)**、**音量 (60%)**、**サンプルレート (44.1 kHz、電話品質なら 8 kHz)**、**MP3 ビットレート (192 kbps)** を調整します。**プレビュー再生** で in-browser に確認した後、**WAV** (16-bit PCM、無圧縮) または **MP3** (lamejs、可逆ではないが小さい) をダウンロード。**dtmf-decode-audio** に流して符号化が正しいか相互検証できます。
詳細解説
DTMF 合成が使われる文脈と、なぜブラウザ内で完結させるか
DTMF トーンを合成する用途は主にテスト・教育・検証です。IVR システムのテスト音源作成、CTF 問題の出題素材、電話プロトコルの学習教材、そして dtmf-decode-audio との相互検証 (生成した音声を復号して符号化精度を確認する) などが代表的な使い方です。入力は数字列なので、音声ファイルを扱う他のツールとは性質が異なりますが、それでもブラウザ内で完結させる理由があります。
電話番号形式の数字列 (特に実際の電話番号・内線番号・PBX アクセスコード) を入力として使う場合、その数字列を外部サーバーへ送ることは好ましくありません。DTMF エンコーダーがオンラインサービスとして提供される場合、入力した番号がサービス側のログに残る可能性があります。テスト目的でもリアルな番号を使うことがあるため、入力データがブラウザ内に留まる設計は意味があります。
入力値の機密性と行動観測の問題
「どの数字列を DTMF として符号化したか」という情報は、文脈によっては機密です。PBX の内線番号体系、IVR のルーティングコード、テスト用のアクセス番号などは、公開されるべきではない情報です。オンラインの DTMF ジェネレーターにこうした番号を入力すると、サービス側のアクセスログに「この IP アドレスがこの番号を DTMF 化しようとした」という記録が残ります。
行動観測の角度でも注意が必要です。「どんな番号を入力したか」は直接的な情報ですが、「いつ、どのくらいの頻度で DTMF を生成しているか」もパターンとして観測可能です。テレコム系の業務やセキュリティ調査に使う場合は特に、入力データがブラウザ外に出ない実装を選ぶメリットがあります。
PCM 合成から lamejs エンコードまでブラウザ内 JavaScript で完結
このツールはキー列のパース、PCM サンプル列の合成、WAV / MP3 エンコードをすべてブラウザ内 JavaScript で実行します。各キーに対応する 2 つの正弦波 (低域グループ + 高域グループ) を振幅 30% で生成して加算し、トーン区間と無音区間を交互に並べて PCM バッファを構築します。WAV は自前の RIFF/WAVE ヘッダ構築でエンコード、MP3 は @breezystack/lamejs (LAME の JavaScript 移植) で CBR エンコードします。
DevTools の Network タブを確認すると、ページロード後の音声生成・ダウンロード操作でリクエストはゼロです。PCM 合成ロジックと lamejs の呼び出し部分を含めて、実装は GitHub で公開されています。
テストと教育目的での活用と、本番環境への注意
IVR システムのテストに使う場合、本ツールで生成した DTMF 音声を dtmf-decode-audio で復号して、期待した数字列が正確に復元されることを確認するという相互検証フローが有用です。CTF 問題では DTMF を使った問題がまれに出題されるため、音源を生成して自己検証するための道具として使えます。連続トーンだけで波形特性を確認したい場合は tone-generate で純音を生成して audio-tone-detect で検出精度を測る、というキャリブレーションも組み合わせられます。
実際の電話番号や PBX コードを使うときは、生成した音声ファイルの保存先と共有範囲に注意してください。DTMF 音声ファイルは「見ただけではわからない」形で数字列を含んでいます。dtmf-decode-audio で簡単に復号できますが、それは本ツールでも同じ手軽さで確認できます。
ITU-T Q.23 / Q.24 仕様と DTMF の 4x4 周波数マトリクス
DTMF は ITU-T 勧告 Q.23 / Q.24 で標準化された 8 周波数 (low group 697 / 770 / 852 / 941 Hz × high group 1209 / 1336 / 1477 / 1633 Hz) の 4x4 マトリクスです。電話端末では 1633 Hz 列 (A / B / C / D キー) は省略されており実質 4x3 = 12 キーですが、本ツールはマトリクスの全 16 シンボルを符号化できます (A / B / C / D は軍用通信や ARC キーパッドで使用)。各周波数は 1.5% 以下の偏差で生成する必要があり、Q.24 はトーン長 40 ms 以上 (典型 70〜100 ms)、ポーズ 40 ms 以上、power 差 (twist) は low group - high group = -8 dB〜+4 dB (北米仕様、ETSI 仕様は別範囲) と規定しています。本ツールは振幅 30% (各周波数) × 2 = 60% peak の正弦波加算で生成し、デフォルトの ON / OFF 長 (120 ms / 80 ms) は ITU-T 仕様に余裕を持って収まります。
なぜ 2 つの周波数の組み合わせなのかという設計判断は、誤検出耐性の確保にあります。1950 年代後半に AT&T Bell Labs (AT&T 1958, Schenker) が設計した時点で、人の話し声 (基音 100〜300 Hz、第 1 ホルマント 500〜900 Hz、第 2 ホルマント 1500〜2500 Hz) とは異なる組み合わせを選び、片方の周波数だけで誤検出が起きないよう twist 比のしきい値を Goertzel 検出側に持たせる構造にしたことが、現代まで残っている DTMF の堅牢性の源泉です。SF (Single Frequency) signaling や Blue Box 系の 2600 Hz シングルトーン (Joybubbles / Steve Wozniak 時代のフリーキング) との対比で、DTMF が「正規の信号と話し声を確実に区別する」という設計目標を持っていたことが分かります。
IVR テスト・テレコムセキュリティ調査での活用と実務的注意点
DTMF 音声の主な実務的用途は (1) IVR システムの自動化テスト (生成した音声を IVR に再生して、メニュー遷移を検証)、(2) PBX / SIP トランクのトーン透過性検査 (G.711 / G.729 / Opus の codec 越しに DTMF が正しく伝わるか)、(3) RFC 4733 (telephone-event payload type) による RTP 帯域内 DTMF と帯域外 DTMF の比較検証、(4) ペネトレーションテスト時の War Dialing 代替 (実機を回さずトーン音源を準備) などです。G.729 のような低ビットレートコーデック越しでは、サイン波の品質が劣化して twist 比が崩れ、受信側で誤検出するケースがあります — このため本ツールで生成した WAV を実環境の codec チェーンに通して、最終受信側で dtmf-decode-audio で逆検証する round-trip テストが、IVR / VoIP の品質保証で有効です。
業務利用上の注意として、生成した音声ファイルが PBX 内線番号やアクセスコードを含む場合、ファイルそのものが機密情報の伝送媒体になります。電子メール添付・チャット共有・クラウドストレージ保存のいずれも、復号可能な形で機密数字列を残します。テスト終了後は音声ファイルを削除し、テスト記録には dtmf:<number> のような構造化記法 (Asterisk / FreeSWITCH の Dialplan 表記) で残すのが運用上は安全です。クレジットカード番号や PIN を含む DTMF を生成する場面は通常ないはずですが、もし業務上必要な場合は、PCI-DSS の Sensitive Authentication Data 保管禁止規定に該当する可能性を確認してください。
よくある質問
- 入力データはサーバーに送信されますか?
- いいえ。キー列の解析・PCM 合成・WAV / MP3 エンコードはすべてブラウザ内 JavaScript で完結します。外部 API もありません。
- DTMF って何ですか?
- **Dual-Tone Multi-Frequency** = 電話のプッシュボタン (タッチトーン) で生成される **2 つの正弦波を重ね合わせた音**。電話機の **行** (697 / 770 / 852 / 941 Hz) と **列** (1209 / 1336 / 1477 / 1633 Hz) から 1 つずつ選んで重ねます。例: ボタン `5` = 770 Hz + 1336 Hz。1963 年に AT&T が標準化、ITU-T Q.23 / Q.24 で国際規格化。IVR (Press 1 for English) や FAX、古い電話システムで今も現役。
- 16 シンボルの周波数表は?
- **行 (Low)**: 697 (1/2/3/A) / 770 (4/5/6/B) / 852 (7/8/9/C) / 941 (*/0/#/D) Hz。**列 (High)**: 1209 (1/4/7/*) / 1336 (2/5/8/0) / 1477 (3/6/9/#) / 1633 (A/B/C/D) Hz。**A B C D** は家庭用電話機にはありませんが、軍用 / 業務無線 / 自動応答機の特別機能として使われます。本ツールでは A-D も含めて生成します。
- なぜ Low + High の **2 周波数加算** なんですか?
- 1 周波数だけだと音声信号 (人の声や音楽) と区別が困難で誤検出が多発します。**異なる周波数帯 (Low: 697-941 / High: 1209-1633)** から **1 つずつ組み合わせる** ことで「自然の音や音声では同時に発生しにくい組み合わせ」になり、ノイズ耐性が大幅に上がります。1963 年に Western Electric が考案、いまも DTMF が現役なのはこの設計の堅牢性ゆえ。
- トーン長 / 間隔のデフォルトは?
- **ITU-T Q.24** は最小トーン長 **40 ms** + 間隔 **40 ms** を規定。telco 業界の推奨は **65 ms + 65 ms**。本ツールは **100 ms + 80 ms** をデフォルトに採用 (IVR 録音や CTF 問題で一般的に使われる値)。**40 ms 未満** にすると本物の電話交換機は受信を拒否することがあるので注意。
- サンプルレートの推奨は?
- **44.1 kHz / 48 kHz**: CD / Web 標準。汎用、編集に向く。**22.05 kHz**: 古いゲーム機・電話会議システム互換。**8 kHz**: 電話品質 (G.711 PCM の標準)。DTMF の最高周波数 1633 Hz は **Nyquist 周波数 4 kHz 以下** に余裕で収まるので、8 kHz でも十分認識できます。**MP3 を 8 kHz で書き出す** のは音質劣化の犠牲が大きいので、低 sample rate なら WAV を推奨。
- 音量の最適値は?
- **60%** がデフォルト。2 つの正弦波を足し合わせると一時的に **2 倍の振幅** に達することがあるため、各 component を半分 (30%) に絞って sum で 60% peak に抑えています。**100%** にすると 2 周波数の位相が揃った瞬間に **clipping** (歪み) が発生する可能性があります。dtmf-decode-audio で読み取り検証する場合は **60-80%** を推奨。
- MP3 の音質は?
- **lamejs** (LGPL / MIT 派生の純 JavaScript 移植) を使用。CBR (固定ビットレート) で 128 / 192 / 256 / 320 kbps から選択。DTMF は単純な正弦波の組み合わせなので **192 kbps で十分**、320 kbps にしても聴感差はほぼなし。サーバー上でデコード検証する場合は **WAV (無圧縮 PCM)** が確実 — MP3 は圧縮ノイズで Goertzel の精度がわずかに落ちます。
- 電話番号の `-` や `(`、`)` は?
- **全て無視** されます。`090-1234-5678` を貼り付ければ `09012345678` として 11 トーンを生成。**空白** だけは「ポーズ (1 ギャップ分の追加無音)」を意味し、`0120 117 117` のように区切ると「0120 _ 117 _ 117」と無音間隔が広がります。**改行** も空白扱い。
- dtmf-decode-audio との関係は?
- **dtmf-encode-audio** (本ツール): キー列 → 音声合成。**dtmf-decode-audio**: 音声 → キー列復号 (Goertzel フィルタ)。**対称ペア** なので、本ツールで生成した WAV を decode 側に流すと **同じキー列が復元** されます (相互検証推奨)。tone-generate (任意周波数の単一トーン) や morse-decode-audio (モールス信号の復号) と並んで Web Audio API シリーズ。
「送らない」を確かめるには
このツールは入力データを外部に送信しません。仕組み・監査手順・運営方針は以下で詳しく説明しています。
類似のツール
DTMF 音声デコーダ — 電話プッシュ音 WAV/MP3 → 0-9 / * / # / A-D
電話の **プッシュ音 (DTMF: Dual-Tone Multi-Frequency)** を録音した WAV / MP3 / OGG を読ませると、**Goertzel アルゴリズム** で 8 種の標準 DTMF 周波数 (697/770/852/941 Hz × 1209/1336/1477/1633 Hz) を検出し、**キーパッド 0-9 / * / # / A-D** の **16 シンボル** に復号。各トーンの **開始時刻 + 持続時間 + 信頼度** も出力。古い IVR (自動音声応答) の録音解析、レトロ電話システムの研究、CTF、Phreaking の学習用途に。**完全にブラウザ内** で処理 (Web Audio API)、音声ファイルはサーバーに送信されません。
テストトーン生成 (Hz)
任意の周波数 (20 Hz〜20 kHz) のテストトーンを Web Audio API で生成。波形は サイン波 / 矩形波 / 三角波 / ノコギリ波 から選択、A4 = 440 Hz / 1 kHz / 10 kHz 等のプリセット、音名 (A4・C5 など) と セント単位の音程ずれもリアルタイム表示。フェードイン/アウトでクリップノイズを回避、WAV (44.1 kHz / 16bit / モノラル) でダウンロード可能。楽器チューニング・スピーカーチャネル確認・聴覚テスト・テスト信号用途に。すべてブラウザ内で生成され、外部にデータは送信されません。
モールス音声デコーダ (WAV/MP3 → ドット・ダッシュ → テキスト)
モールス信号を吹き込んだ **WAV / MP3 / OGG** オーディオファイルをアップロードすると、**音量エンベロープ検出 → 自動しきい値 (Otsu) → on/off セグメント → ドット/ダッシュ判定 → モールス文字列 → テキスト** の流れで自動デコード。**WPM (Words Per Minute) も推定**。CW (Continuous Wave) 練習音源、ハム無線の練習問題、サバイバル/CTF/教育用 SOS 信号の読解で活躍。**完全にブラウザ内** で処理 (Web Audio API)、音声ファイルはサーバーに送信されません。
音声 主音検出 (チューナー) — FFT autocorrelation で音名 + cents ズレを表示
音声ファイルをドロップすると、ブラウザ内で **autocorrelation (自己相関) ベースのピッチ検出** を実行し、主音 (fundamental frequency) を **音名 (例: A4 / F#4)** と **cents 単位のズレ** に変換して表示します。**ギター / ベース / ボーカル / 笛 / ホイッスル** の楽器チューナー代わりに、録音した A 音 + 12 セント等を即座に確認できます。さらに **時間軸での主音遷移グラフ** を CSV 出力できるので、ボイスメモのピッチ追従 (intonation 練習) や、シンセサイザーで作った 1 トーンのチューニング微調整に。autocorrelation は短いトーン (50ms+) で高精度、複合音 (和音 / コーラス) は誤検出することがあります。`tone-generate` (任意の周波数のトーンを生成) の対称ツールで、本ツールは **既存音声 → 音名検出** に特化。`audio-spectrum` (周波数分布の可視化) とは異なり、主音 1 つに絞った出力。音声はサーバーに送信されません。