デモ公開中:ブラウザで動くカラオケ採点
まず成果物からご覧ください。マイクの歌声から音の高さをリアルタイムに推定し、音程のズレ(セント単位)・ビブラート・しゃくり・こぶしを検出してスコア化するデモを当サイトで公開しました。インストール不要、ブラウザだけで動きます。
▶ カラオケ採点デモを試す
音声はブラウザ内だけで処理され、サーバーには送信されません。マイクがなくても「シミュレーション歌唱」で動作を確認できます
この記事では、このデモを作るために調べ上げた「カラオケ採点の仕組み」を解説します。前半は業務用カラオケ機がどんな項目を採点しているのかをメーカー公式の一次情報だけで整理し、後半はそれをブラウザで再現する信号処理——F0推定・セント変換・テクニック検出——の実装に踏み込みます。
実機の採点は何を見ているのか(公式情報の整理)
カラオケ採点の話題はネット上に俗説も多いため、まずメーカーが公式に公表している情報を押さえます。業務用カラオケの採点は大きく2系統、第一興商のDAM「精密採点」シリーズと、エクシングのJOYSOUND「分析採点」シリーズがあります。
DAM「精密採点DX-G / Ai」
精密採点DX-Gの公式ページは、高得点に必要な要素として「音程」「安定性」「表現力(抑揚)」「しゃくり」「こぶし」「フォール」の6項目を挙げています。音程は「原曲の音程を外さずに正確に歌えたか」を分析するとされ、画面の「見えるガイドメロディー」に自分の歌唱軌跡が重ねて表示されます。しゃくり・こぶし・フォール・ビブラートは検出回数が「技法カウント」として表示されます。採点結果には「上手なポイントによって加点される」ボーナス点の機能もあります(どの技法がどれだけ加点されるかは非公開)[1]。
後継の精密採点Aiでは「こぶし、しゃくり、フォール、ビブラートを検出すると光のエフェクトが技法カウンターに飛んでいく」と公式に説明されており、従来の音程・表現力・ビブラートの各ボーナスを統合した「Ai感性ボーナス」が導入されました[2]。2025年発売の最新機LIVE DAM WAO!の「精密採点Ai Heart」では、検出技法にアクセント・ハンマリングの2つが追加されています[3]。
JOYSOUND「分析採点AI」
JOYSOUNDの分析採点AIは、採点結果を「音程」「安定感」「抑揚」「ロングトーン」「テクニック」+「AIボーナス」で構成し、テクニックとして採点されるのは「こぶし・しゃくり・ビブラートの3つ」と公式ページに明記されています(DAMと異なりフォールは対象外)[4]。また公式ヘルプには「主旋律のガイドメロディ通りに声の高さを合わせて歌うと高い評価になる」とあり、音程評価の基準がガイドメロディであることが公表されています[5]。
技法の公式定義
両社は各技法を次のように説明しています。この定義が、後半で作る検出器の仕様になります。
| 技法 | 公式の説明 |
|---|---|
| しゃくり | 「低い音程から滑らかに本来の音程までずり上げて歌唱する技法」(DAM[6])/「低い音から高い音(本来の音の高さ)へ滑らかに声を出す歌唱技法」(JOYSOUND[4]) |
| こぶし | 「基本となる旋律の中で音を細かく動かす装飾音的な節回し」(DAM[6])/「歌の途中で瞬間的に上下振幅される歌唱技法」(JOYSOUND[4]) |
| ビブラート | 「音程を上下に揺らすこと」(DAM[6])。DAMは揺れの形で「ボックス型A/B/C・上昇形・下降形・縮小形・拡張形・ひし形」等のタイプに分類[7]、JOYSOUNDは「早さや深さの組み合わせで全9種類」[4] |
| フォール | 「本来の音程から滑らかにずり下げる技法」(DAM[6]) |
一方で、各項目の配点・重み・加点量は両社とも非公開です。ネット上で見かける「しゃくり1回で◯点」といった数値は非公式の検証値なので、本記事では扱いません。
歌声を数値にする:基本周波数とセント
採点の第一歩は、歌声の「高さ」を数値にすることです。声帯の振動の繰り返し周波数を基本周波数(F0)と呼び、これが知覚される音の高さ(ピッチ)にほぼ対応します。たとえばA4の「ラ」は440Hz、1オクターブ上のA5は880Hzです。
ここで重要なのが、周波数をそのまま使わないことです。人間の音程感覚は周波数の比率で決まるため(440Hz→441Hzの1Hzと、110Hz→111Hzの1Hzでは音程の差が4倍違う)、音楽の世界では対数尺度のセント(cent)を使います。
セント差 = 1200 × log2( f ÷ f_ref )
・1オクターブ = 1200セント
・半音 = 100セント
・「ドレミ」の隣り合う鍵盤の差が100セント「音程のズレ」とは、ガイドメロディ(あるべき音)と歌声のF0のセント差のことです。ちなみに人間の耳の音程の弁別能力は条件によりますが、訓練された音楽家で1〜2セント程度、一般には10セント前後の差から聞き分けられると報告されています[13]。±50セント(半音の半分)ズレると隣の音に聞こえ始める境界なので、採点機がセント単位でズレを測るのは理にかなっています。
心臓部:F0推定アルゴリズム(自己相関からYINへ)
では、マイク波形からF0をどう求めるか。これは「ピッチ検出」と呼ばれる信号処理の古典的テーマです。
基本は自己相関法
周期的な波形は「1周期ぶんズラして重ねると自分自身とよく一致する」性質があります。波形を少しずつズラしながら自分自身との相関を計算し、最も一致するズラし幅(ラグ)τを見つければ、F0 = サンプリング周波数 ÷ τ で求まります。これが自己相関法で、カラオケ採点関連の特許にも自己相関ベースの歌唱ピッチ抽出が登場します[12]。ただし素朴な自己相関は、倍音の強い声で1オクターブ間違える「オクターブエラー」を起こしやすい弱点があります。
実用の定番:YIN
この弱点を系統的に潰したのが、de Cheveigné と河原英紀によるYINアルゴリズム(2002年)です[8]。相関の代わりに「ズラした波形との差の二乗和(差分関数)」を使い、それを累積平均で正規化した関数(CMNDF)の谷を探します。論文では、既存手法に比べ大きな推定誤りを約1/3に減らしたと報告されています。本デモのF0推定もYINをJavaScriptで素直に実装したものです。
// YINの中核部(本デモ pitch-engine.js より抜粋)
// Step1: 差分関数 d(τ) = Σ (x[i] - x[i+τ])²
for (let tau = 1; tau <= maxTau; tau++) {
let sum = 0;
for (let i = 0; i < W; i++) {
const delta = buf[i] - buf[i + tau];
sum += delta * delta;
}
d[tau] = sum;
}
// Step2: 累積平均正規化 d'(τ) = d(τ)·τ / Σd(1..τ)
// → 自己相関のゼロラグ偏りを除去しオクターブエラーを抑える
// Step3: d'(τ) が閾値(0.1〜0.15)を最初に下回る谷を採用
// Step4: 谷の周囲3点で放物線補間 → サブサンプル精度のτ
// F0 = sampleRate / τより新しい手法として、YINの閾値判定を確率化しHMMで滑らかなピッチ経路を選ぶpYIN[9]や、波形を直接畳み込みニューラルネットに入力するCREPE[10]もあります。精度は上がりますが計算は重くなるため、「60fpsで動くブラウザデモ」にはYINで十分という判断をしました。
なお解析窓は2048サンプルを使っています。自己相関系の手法は窓の半分までのラグしか信頼できないため、48kHzサンプリングなら検出下限は約47Hz。男性の低い歌声(E2≒82Hz)にも余裕があります。
しゃくり・ビブラート・こぶしはピッチ軌跡の「形」で分かる
F0推定を毎フレーム(本デモでは描画フレームごと、約60回/秒)実行すると、時間×音高のピッチ軌跡が得られます。歌唱テクニックは、この軌跡に特徴的な「形」として現れます。
ビブラート:規則的な揺れを見つける
声楽研究では、ビブラートは「中心音高のまわりでF0が周期的(正弦波状)に変調される現象」と定義され、古典声楽の典型的なレートは毎秒5〜7回(近年の実測研究では4.5〜6.5Hz付近)、深さは片側±25〜60セント程度を中心にスタイルによって幅があると報告されています[11]。
本デモの検出器は、直近1秒のピッチ軌跡から移動平均(=メロディの動き)を引いた「残差」を作り、その残差が①4〜8.5Hzに相当する間隔で交互にゼロ交差し、②平均振幅が8セント以上で、③揺れの周期が揃っている(半周期のばらつきが小さい)ときにビブラートと判定します。①②③のような数値は本デモの設計値で、規則性の条件③が、次に述べる「こぶし」との判別に効きます。
しゃくり:出だしの「ずり上げ」を見つける
しゃくりに相当する現象は歌唱スタイル解析の研究では scooping と呼ばれ(論文中でも日本語の "shakuri" が紹介されています)、上向きに連続的に音高が変化するものとして、ビブラートの周期的な音高の振動とは区別されています[14]。検出はノートオンセット(音の出だし)付近のF0軌跡の解析に帰着します。
本デモでは「歌っている音がある半音に安定した」瞬間に、その直前350ms以内の軌跡を遡り、目標より80セント以上低い位置から始まり、概ね単調に上昇して目標に到達していたら「しゃくり」とカウントします(この閾値も本デモの設計値です)。DAM公式の「低い音程から滑らかに本来の音程までずり上げて歌唱する技法」[6]という説明を、そのまま数式の条件に置き換えた形です。
こぶし:一回だけの装飾的な揺れを見つける
こぶしはJOYSOUND公式の「歌の途中で瞬間的に上下振幅される歌唱技法」[4]という説明が検出器設計の手がかりになります。ビブラートとの違いは規則的に繰り返すか、一回きりかです。なお、こぶしの音響的な定量研究(揺れの速さや深さの標準値)は、調べた範囲では査読論文として見つかりませんでした。演歌の装飾技法として「不規則な揺れ」がビブラートと対比される、という定性的な整理に留まります。
そこで本デモでは「保持中の音から+60セント以上の山が現れ、400ms以内に元の音程(±30セント)へ戻る。ただしビブラート判定中は除外」という条件(本デモの設計値)で検出しています。実際に演歌調で「うぅん↑」と一瞬こぶしを回すと反応します。
Web Audio APIでブラウザに実装する
ここまでの仕組みは、実はブラウザのJavaScriptだけで実装できます。本デモの構成は次のとおりです。
マイク ─ getUserMedia ─→ AudioContext
└→ AnalyserNode (fftSize=2048)
└→ requestAnimationFrame ループ(約60fps)で
getFloatTimeDomainData() → 波形2048サンプル
→ YINでF0推定 → セント変換
→ ピッチ軌跡の解析(ビブラート/しゃくり/こぶし)
→ Canvas描画・スコア更新実装上のポイントは3つあります。
- ブラウザの「音声加工」を切る——getUserMediaの音声はデフォルトでエコーキャンセル・ノイズ抑制・自動ゲイン調整(AGC)が有効です。通話には便利ですが歌声解析には邪魔なので、
echoCancellation: false, noiseSuppression: false, autoGainControl: falseを指定します(機種によっては無効化できないため、実際の設定値をgetSettings()で確認します)。 - HTTPSが必須——getUserMediaはセキュアコンテキスト専用APIで、HTTP配信のページではマイクにアクセスできません(localhostは例外)。
- 無声区間を弾く——息継ぎや子音では「音の高さ」が存在しません。音量(RMS)が小さいフレームと、YINの正規化差分が閾値を下回らない(=周期性が弱い)フレームは「無声」として軌跡から除外します。これをサボると、ブレスのたびにピッチが乱れて誤検出だらけになります。
処理量の目安として、2048サンプルのYINは現代のPCなら1フレーム1ミリ秒未満で計算でき、60fpsのメインスレッド処理で間に合います。より本格的にやるならAudioWorkletで音声スレッド側に解析を移す設計になりますが、デモ用途には過剰と判断しました。
なお本デモには、マイクがない環境でも動作を確認できる「シミュレーション歌唱」モードを用意しました。OscillatorNodeの周波数を自動化した合成音声(ストレート→しゃくり→ビブラート→こぶしの順に"歌う")を、マイクとまったく同じ解析パイプラインに流すもので、検出器の動作テストにもこの仕組みを使っています。
採点式をどう作るか
最後に点数化です。冒頭で述べたとおり実機の配点は非公開なので、本デモでは公式に公表されている「音程が中心、テクニックは加点」という構造だけを借りて、次の簡易式を作りました。
スコア(100点満点) = 音程点(最大70点) + 表現点(最大30点)
音程点 = 「±30セント以内で歌えたフレームの割合」× 70
表現点 = ビブラート秒数×2 (最大12点)
+ しゃくり 1回3点 (最大9点)
+ こぶし 1回3点 (最大9点)
※本デモ独自の学習用モデル。実機の採点仕様とは無関係実機との最大の違いはガイドメロディの有無です。実機は「この瞬間にどの音を歌うべきか」を楽曲データとして持っており、そこからのズレを測ります(JOYSOUNDは公式ヘルプでガイドメロディ基準を明言[5])。課題曲を持たない本デモは、代わりに「最寄りの半音にどれだけ正確に乗っているか」で音程を評価しています。平均律の鍵盤の音からズレ続ける歌い方は不利になる、という限界はありますが、「音程を数値で突きつけられる」体験としては十分成立します。
よくある質問(FAQ)
Q. カラオケの採点は何を評価しているのですか?
公式情報では、DAM精密採点DX-Gは「音程・安定性・表現力(抑揚)・しゃくり・こぶし・フォール」[1]、JOYSOUND分析採点AIは「音程・安定感・抑揚・ロングトーン・テクニック(こぶし/しゃくり/ビブラート)+AIボーナス」[4]です。中心は音程の正確さで、テクニックは加点要素です。
Q. しゃくりやビブラートは、どうやって機械で検出するのですか?
歌声から基本周波数(F0)を推定してピッチ軌跡を作り、その「形」で判別します。出だしの滑らかなずり上げ=しゃくり、規則的な周期の揺れ=ビブラート、瞬間的に動いて戻る装飾=こぶし、です。詳しくはテクニック検出の章をご覧ください。
Q. ブラウザだけでカラオケ採点は作れますか?
基本的な仕組みは作れます。実際に動くデモを公開していますので、マイクで歌って試してみてください。音声はブラウザ内だけで処理され、サーバーには送信されません。
Q. 高得点のコツはありますか?
本記事は採点攻略ではなく仕組みの解説が目的ですが、仕組みから言えることはあります。採点の土台は一貫して「ガイドメロディに対する音程の正確さ」なので、まず音程、その上でテクニックです。興味深いことにDAM公式自身が、ビブラートの評価が低い場合について「ビブラートは使わずまっすぐ歌うと得点が上がる可能性もあります」と述べています[6]。
まとめ
この記事のまとめ
- カラオケ採点の中心は「ガイドメロディに対する音程の正確さ」。しゃくり・こぶし・ビブラート等のテクニックも評価対象(DAM/JOYSOUND公式)
- 音の高さは基本周波数(F0)として推定し、対数尺度の「セント」(半音=100セント)でズレを測る
- F0推定の実用定番はYIN。差分関数+正規化でオクターブエラーを抑え、ブラウザのJSでもリアルタイムに動く
- テクニックはピッチ軌跡の「形」——出だしのずり上げ=しゃくり、規則的な揺れ=ビブラート、瞬間的な装飾=こぶし——として検出できる
- Web Audio API(getUserMedia + AnalyserNode)だけで採点デモは実装可能。音声加工オフ・HTTPS・無声区間処理が実装の勘所
「マイク入力のリアルタイム解析」「信号処理アルゴリズムの製品実装」「ブラウザだけで動くインタラクティブなWebアプリ」——本記事の技術は、音声UI、異音検知、発話解析といった業務案件にそのまま応用できます。テクノスフィアは音声AIから組込のDSP実装、Webシステムまで一気通貫で対応します。
参考文献・出典
- 第一興商「精密採点DX-G」公式ページ — clubdam.com/contents/saiten/seimitsusaiten_dx_g.html
- 第一興商「精密採点Ai」公式ページ — clubdam.com/contents/saiten/seimitsusaiten_ai.html
- 第一興商「精密採点Ai Heart」公式ページ — clubdam.com/contents/saiten/seimitsusaiten_ai_heart.html
- JOYSOUND「分析採点AI/AI+」公式ページ — joysound.com/web/s/function/bunseki
- JOYSOUND公式ヘルプ「分析採点について」 — joysound.com/web/s/help/ranking/analysis
- 第一興商「精密採点"キホンのキ"」技法解説(しゃくり/こぶし/フォール/ビブラート/音程) — clubdam.com/tips/tips2307_04.html ほか同シリーズ
- 第一興商「DAM★とも精密採点 歌唱タイプ(ビブラートタイプ)」 — clubdam.com/membership/import/marking/vibrato_description.html
- A. de Cheveigné and H. Kawahara, "YIN, a fundamental frequency estimator for speech and music," J. Acoust. Soc. Am., vol. 111, no. 4, pp. 1917–1930, 2002. doi:10.1121/1.1458024
- M. Mauch and S. Dixon, "pYIN: A Fundamental Frequency Estimator Using Probabilistic Threshold Distributions," Proc. IEEE ICASSP, pp. 659–663, 2014.
- J. W. Kim, J. Salamon, P. Li, and J. P. Bello, "CREPE: A Convolutional Representation for Pitch Estimation," Proc. IEEE ICASSP, 2018. arXiv:1802.06182
- ビブラートのレート・深さの標準値: C. E. Seashore らの古典的計測、J. Sundberg らの声楽音響研究、および Journal of Voice 誌の実測研究群(例: "Vibrato Rate and Extent in College Music Majors")。深さはスタイル・個人により幅がある
- 特開2008-15211「ピッチ抽出方法、歌唱力評価方法、歌唱訓練プログラム及びカラオケ装置」(自己相関ベースの歌唱ピッチ抽出の例) — patents.google.com/patent/JP2008015211A/ja
- 音程の弁別閾(JND): Stanford CCRMA "Frequency Difference Limen or JND"、M. F. Spiegel and C. S. Watson, "Performance on frequency-discrimination tasks by musicians and nonmusicians," J. Acoust. Soc. Am. 76(6), 1984 ほか。値は周波数・音圧・訓練度に依存
- Y. Yamamoto, J. Nam, and H. Terasawa, "Analysis and Detection of Singing Techniques in Repertoires of J-POP Solo Singers," Proc. ISMIR, 2022. archives.ismir.net/ismir2022/paper/000046.pdf
※各社の採点機能・対応機種は執筆時点(2026年7月)の公式サイトの記載に基づきます。採点の内部アルゴリズム・配点は非公開であり、本記事のデモはそれらとは無関係の独自実装です。DAMは株式会社第一興商、JOYSOUNDは株式会社エクシングの登録商標です。
ブラウザだけで動くアプリの実例はPC-88エミュレータのWASM移植、音声・対話AIの取り組みはTechnoVoiceでも紹介しています。