TadaoYamaokaの開発日記

個人開発しているスマホアプリや将棋AIの開発ネタを中心に書いていきます。

信号処理

CQTで和音を解析する その3(コレスキー分解)

前回実装した、NNLSのLawson–Hansonアルゴリズムで、能動集合(passive set)に制限した最小二乗問題を解くときにコレスキー分解を行っている。辞書行列Eが、各半音ごとに独立した倍音スペクトル分布を列として持つため、ほぼフルランク(すべて線形独立)で…

CQTで和音を解析する その2

前回Pythonで実装したNNLSをWindowsプログラムに組み込んで、リアルタイムで処理できるか検証する。 NNLSの実装 Pythonでは、scipy.optimize.nnlsを使用したが、C++に組み込むため、Lawson–Hansonのアルゴリズムを独自実装した(GPT-5で実装)。 static void n…

CQTで和音を解析する

スペクトログラム解析VST3プラグインに和音の解析機能を加えたい。ミックスされた音源から和音の構成音を取り出すのは容易ではなく、古典的にはCQT や HPCPをピッチクラス化して推定する方法がある。 この方法では、倍音が構成音と誤検知される場合があり、…

ピッチ解析VSTプラグイン

リアルタイム音程解析 VSTプラグイン(vst_pitch)をVST3プラグイン化した。 VST3化 GitHub CopilotのGPT-5でサクッと変換するつもりが結構苦戦した。いきなりすべてを変換させると何度試しても正しく動くものができなかった。「一部は未実装でもよい」という…

【公開】wavdiff — フル+インストからボーカルを抽出するコマンドラインツール

wavdiff — フル+インストからボーカルを抽出するコマンドラインツール Windows 向けのコマンドラインツール 「wavdiff」 を GitHub で公開しました。 このツールは、フルトラック(ボーカル+インスト)とインストトラックを入力すると、その差分から ボー…

CQTでスペクトログラムを描く その8(MIDI入力)

自作スペクトログラム解析VST3プラグインにMIDI入力機能を追加した。 MIDI入力 DAWのMIDIトラック出力をこのプラグインに入力すると、MIDIノートをスペクトラムに重ねて表示できる。採譜した楽譜が合っているかやピッチとのずれを視覚的に確認できる。 実装 …

CQTでスペクトログラムを描く その7(マウスカーソル位置ハイライト)

自作スペクトログラム解析VST3プラグインにマウスカーソル位置にハイライトを表示する機能を追加した。 ハイライト表示 マウスカーソル位置の音階を判定して、その音階のラインに透明な白でハイライトを表示する。 また、ピアノロールの鍵盤を赤で表示する。…

CQTでスペクトログラムを描く その6(基本周波数解析)

スペクトログラム解析VST3プラグインに基本周波数解析を実装した。 基本周波数解析 ボーカル音程モニターと同じアルゴリズムで基本周波数解析を行う。 時間分解能のずれ スペクトログラムはF#1まで4分音の周波数分解能に対応しているため、サンプリング周波…

CQTでスペクトログラムを描く その5(拍の表示)

スペクトログラム解析VST3プラグインに拍の表示を追加した。 拍の表示 VSTのホスト側から拍の情報を受け取り、拍の位置に縦の線を描くようにした。 小節の開始は、色を明るくして目立つようにした。 処理方法 Processorで、IProcessContextRequirementsをイ…

CQTでスペクトログラムを描く その4(ピアノロール)

前回の続き。リアルタイムにスペクトログラムを表示するVST3プラグインに、音高の軸をC4などのノート名の代わりに、ピアノロールを表示するようにした。 ピアノロール表示処理 白鍵は、オクターブを7分割して表示する。 黒鍵は、半音と同じ位置に白鍵の半分…

CQTでスペクトログラムを描く その3(VSTプラグイン化)

前回実装したCQTでスペクトログラムをリアルタイムに解析するWindowsアプリをVST3プラグインにした。 VST3プラグイン 以前の記事で実装した方法をベースにした。 描画処理 はじめ、VSTGUIの描画メソッド(drawLineなど)で、全面を描画するようにしたが、カク…

CQTでスペクトログラムを描く その2(周波数分解能を上げる)

前回実装した高速化CQTによるスペクトログラムは、周波数分解能が低く、ピークが隣の半音のビンに漏れ出していた。原因を調べて、周波数分解能を上げる対策を行った。 CQTの高速化による影響 「An efficient algorithm for the calculation of a constant Q …

CQTでスペクトログラムを描く

個人メモ 音声信号をFFTで短時間フーリエ変換を行うと、低周波数帯で周波数分解能が不足し、高周波数帯では必要以上の周波数分解能になる。 音楽の解析をする場合、周波数の対数スケールで、半音区間ごとのビンを扱うと都合がよい場合がある。 そのような場…

SoundFontを再生してWAVEファイルを作る

個人メモ信号処理のテスト用に、いろいろな音色で、いろいろな音階の音声ファイルをPythonで生成する方法について記載する。 概要 fluidsynth + pyfluidsynthを使用 無料のGM音源(FluidR3_GM.sf2)を使用 fluidsynthインストール Windowsのビルド済みバイナリ…