N's Tuner
初めに
Android 用のクロマチックチューナーアプリです。
スマートフォンのマイクで楽器の音を拾い、YIN アルゴリズムによるリアルタイムのピッチ検出で音名・周波数・セント偏差を表示します。針式メーターによる直感的なビジュアルフィードバックで、素早く正確なチューニングが行えます。
開発経緯
ギターのチューニングに使えるシンプルで動作の軽いアプリが欲しかったことが出発点です。
既存のチューナーアプリは広告が多かったり、不要な機能が満載だったりするものが多いため、必要な機能だけを備えたミニマルなチューナーを自分で作ることにしました。
概要
主な機能
- リアルタイムピッチ検出 — YIN アルゴリズムによるモノフォニック・ピッチ検出 (対応周波数: 60Hz~1400Hz)
- 音名表示 — 検出された音名 (C, C#, D, D#, E, F, F#, G, G#, A, A#, B) をオクターブ番号付きで表示
- 周波数表示 — 検出された周波数を Hz 単位で表示
- セント偏差表示 — 目標音からのずれを -50~+50 セントで表示
- 針式メーター — アニメーション付きの針がチューニング状態を直感的に表示
- 色分けフィードバック:
- 緑: チューニング合致 (±5 セント以内)
- 黄: 近い (±5~15 セント)
- 赤: 遠い (15 セント超)
- 表示安定化 — 同じ音名+オクターブが 3 フレーム連続で検出されてから表示を更新。針のちらつきを防止
設定項目
- RMS Threshold (デフォルト: 0.0001)
- 「どのくらい小さい音まで拾うか」を設定します (0.000001~0.01)。値を小さくするほど微弱な音にも反応しますが、周囲のノイズも拾いやすくなります。静かな環境では小さめ、騒がしい環境では大きめに設定してください。
- YIN Threshold (デフォルト: 0.30)
- 「どのくらい曖昧な音まで認識するか」を設定します (0.05~0.50)。値を小さくすると明瞭な音だけを検出し、大きくすると減衰中の弱い音やこもった音も拾います。針がちらつく場合は値を小さくしてみてください。
- 基準ピッチ A4 (デフォルト: 440Hz)
- チューニングの基準周波数を設定します (430~450Hz)。バロックピッチ (415Hz 付近) やコンサートピッチなど、標準以外の基準にも対応します。
動作環境
- Android 8.0 (API 26) 以降
- マイク搭載のデバイス
配布ファイル
- NsTuner_0.1.0_beta.apk
- Android 用 APK ファイル
- 参考
- VirusTotal 検証結果
インストール方法
本アプリは Google Play ストアを経由しない APK ファイルでの配布です。インストールには以下の手順が必要です。
- 上記リンクから APK ファイルをダウンロードします。ブラウザが「有害なファイルの可能性」と警告を表示する場合がありますが、ダウンロードを続行してください。
- ダウンロードした APK ファイルを開きます。初回は「提供元不明のアプリ」のインストールを許可する設定が必要です。画面の指示に従い、使用しているブラウザまたはファイルマネージャーに対してインストールを許可してください。
- Google Play プロテクトが「不明なアプリ」として警告を表示する場合があります。「インストールする」を選択してください。
必要な権限
- マイクの使用 — 楽器の音を聞き取るためにマイクを使用します。音声データの録音・保存・外部への送信は一切行いません。
対応楽器
クロマチックチューナーのため、12 音階のすべての音名を検出できます。対応周波数は 60Hz~1400Hz で、以下の楽器に対応しています。
- アコースティックギター / エレキギター
- ベースギター
- ウクレレ
- その他の弦楽器・管楽器 (対応周波数範囲内)
※本アプリはスマートフォンのマイクで音を拾います。エレキギターやエレキベースはアンプから音を出した状態で使用してください。生音 (アンプなし) では音が小さく、正確に検出できない場合があります。ピックアップからのライン入力には対応していません。
使い方
基本操作
- アプリを起動すると、マイクの使用許可を求められます。許可してください。
- 楽器の弦を弾くと、自動的にピッチが検出されます。
- 画面中央に検出された音名とオクターブが大きく表示されます。
- 針式メーターの針が中央に来るよう、ペグを回してチューニングを合わせてください。
- 針が中央付近 (±5 セント以内) に収まると、緑色に変わり「In tune!」と表示されます。
設定の変更
- 画面右上の設定アイコンをタップして設定画面を開きます。
- 各スライダーで RMS Threshold、YIN Threshold、基準ピッチ A4 を調整できます。
- 「Reset to Defaults」ボタンで全設定を初期値に戻せます。
ピッチ検出の仕組み
N's Tuner は YIN アルゴリズム を採用しています。YIN は Alain de Cheveigné と Hideki Kawahara が 2002 年に発表したモノフォニック・ピッチ検出アルゴリズムで、自己相関関数をベースに以下の処理を行います。
- 差分関数の計算 — 信号と時間シフトした信号の差分二乗和を算出
- 累積平均正規化差分関数 (CMND) — 差分関数を正規化し、閾値との比較を可能に
- 絶対閾値によるピッチ候補検出 — CMND が閾値を下回る最初のディップを基本周波数の候補として選出
- 放物線補間 — サブサンプル精度でピッチを確定
音声処理パイプライン
- 音声キャプチャ — AudioRecord で 44.1kHz / モノラル / PCM Float 形式で取り込み
- リングバッファ — 8192 サンプル (4 チャンク × 2048) のリングバッファに格納
- ピッチ検出 — YIN アルゴリズムでチャンク単位に解析。失敗時はリングバッファ全体で再試行
- 音名変換 — 周波数 → MIDI ノート番号 → 音名 + オクターブ + セント偏差
- 安定化フィルタ — 同一音名+オクターブが 3 フレーム連続で一致した場合のみ表示を更新
技術仕様
- 開発言語
- Kotlin
- UI フレームワーク
- Jetpack Compose (Material 3)
- サンプルレート
- 44,100 Hz
- オーディオ形式
- PCM Float / モノラル
- バッファサイズ
- 8,192 サンプル
- 検出周波数範囲
- 60 Hz ~ 1,400 Hz
- Min SDK
- 26 (Android 8.0)
- Target SDK
- 35 (Android 15)
既知の制限
- 低音域 (65Hz 付近) の検出精度 — ギター 6 弦 C2 (65Hz) など極低音域では、YIN アルゴリズムが倍音を基本周波数として誤検出する場合があります。これは YIN の構造的な特性によるもので、サブハーモニクスの CMND ディップが深くなることが原因です。低音弦のチューニングが不安定な場合は、12 フレットのナチュラルハーモニクス (1 オクターブ上の音) で合わせると正確に検出できます。
- モノフォニック専用 — 和音 (複数の音を同時に鳴らす) には対応していません。単音での使用を前提としています。
免責事項
- 本アプリの使用は自己責任でお願いします。
- チューニング結果の精度について、開発者は一切の保証を行いません。
- 本アプリの使用により生じたいかなる損害についても、開発者は一切責任を負いません。
- Android OS の仕様変更により、将来的に動作しなくなる可能性があります。
- サポートは基本的に提供いたしません。
更新履歴
- 2026年3月 v0.1.0-beta
- 初版リリース。リアルタイムピッチ検出、針式メーター表示、設定画面を搭載。
開発者情報
- 開発者 Noriya
- E-mail noriyahd28v@gmail.com