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をピッチクラス化して推定する方法がある。 この方法では、倍音が構成音と誤検知される場合があり、…

スペクトログラム解析VST3プラグイン

先日、実装したリアルタイムスペクトログラム解析VST3プラグインをPayhipで公開した。 payhip.com Audio Spectrogram Monitor VST3 — Windows対応 リアルタイムCQTスペクトログラム(ピアノロール軸表示) Audio Spectrogram Monitor は、トラックに挿入する…

Payhip使ってみる

先日開発したVocal Pitch MonitorのVST3版をPayhipで公開した。payhip.comはじめGumroadで公開したがPayoutの設定がうまくいかなかったので、Payhipに変更した。Payhipは、PayPalもしくはStripeと連携することができる。 PayPalのアカウントがあったので連携…

CQTでスペクトログラムを描く その10(拡大縮小)

自作スペクトログラム解析VST3プラグインにマウスホイールによる拡大縮小とスクロール処理を実装した。はじめ解析範囲をVSTのパラメータに使用としたが、マウスホイールの方が操作しやすいのでそちらで実装することにした。 操作 Ctrl + ホイール → 垂直方向…

CQTでスペクトログラムを描く その9(補間方法変更)

その6で、低域をバンク分割することで、時間分解能を上げつつ、最小音階をC1まで下げることができた。その際に、低域のバンクでは、オクターブあたりのビン数が高域の半分になるため、本来のCQTのビンの間隔の半分の間隔でスペクトルカーネルを作成すること…

ピッチ解析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で短時間フーリエ変換を行うと、低周波数帯で周波数分解能が不足し、高周波数帯では必要以上の周波数分解能になる。 音楽の解析をする場合、周波数の対数スケールで、半音区間ごとのビンを扱うと都合がよい場合がある。 そのような場…

WindowsでVST3プラグインを作る

個人メモWindowsでVST3プラグインを開発する方法について記載する。 開発環境 Windows 11 Visual Studio Community 2022 cmake(Visual Studioのオプションでインストール) VST 3 SDK vsthost(テスト用) Visual Studio Community 2022はインストール済みで、c…

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

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

【Androidアプリ】ビブラートモニターを公開

マイクから入力した音声のビブラートをリアルタイムに解析するアプリを作成して、Google Playで公開しました。音程の波形と、ビブラートの周期(Hz)と振幅(cent)を同時に可視化できます。また、周期と振幅が一定かを安定度(0~100%)という指標で確認できます…

ITエンジニアが読むべき古典 #5:アラン・チューリング「計算可能数、ならびにそのヒルベルトの決定問題への応用」

1936年に発表された本論文は、「計算」の本質を数学的に定義した画期的な研究である。チューリングは、テープとヘッドを持つ単純な機械モデル(チューリングマシン)を考案し、「計算可能性」を厳密に定式化した。さらに、あらゆる機械の動作を模倣できる「…

ITエンジニアが読むべき古典 #4:アラン・ケイ「User Interface: A Personal View」

コンピュータ科学者アラン・ケイによるUIデザイン論である。UIの本質は、単なる見た目ではなく、人間の「心」の働き、すなわち認知モデルを理解し設計に反映させることにあると主張。心理学に基づき「動作的・映像的・象徴的」という心の働きを統合する理念…

ITエンジニアが読むべき古典 #3:アラン・ケイ「The Early History of Smalltalk」

本稿は、コンピュータ科学者アラン・ケイがゼロックスPARCにて、子供でも使える「Dynabook」構想を実現する過程で生み出したSmalltalkの初期の歴史を綴ったものである。 コンピュータを、メッセージで通信する自律的な「オブジェクト」の集合体と捉える、画…

ITエンジニアが読むべき古典 #2:アラン・ケイ「The Reactive Engine」

1969年にアラン・ケイが発表した博士論文である。当時主流の大型コンピュータとは一線を画す、対話的でグラフィカルなパーソナルコンピュータ「FLEXマシン」の全体設計を提案した。核となるのは、ユーザーが構文を拡張できる言語「FLEX」と、ウィンドウや仮…

ITエンジニアが読むべき古典 #1:アラン・ケイ「A Personal Computer for Children of All Ages」

1972年にアラン・ケイが発表した、未来のパーソナルコンピュータ「DynaBook」構想の論文である。これは子供から大人まで使える、ノート型の携帯端末を提唱した。コンピュータを単なる計算機ではなく、遊びや創造を通じて自ら学ぶための「個人の動的なメディ…

【Tips】VS Codeでcondaのbaseが有効にならない

VS Codeのバージョンアップで、Python Environments拡張機能がデフォルトで有効になった。 condaのbaseが有効にならない問題 この拡張機能が有効になると、Pythonのプロジェクトで、Python Interpriterに、condaのbase環境を選んでも、デバッガで、base環境…

Gumbel dlshogiを作る その12(途中経過)

1サイクル100万局面生成して106サイクルまで学習できたので、途中経過を報告する。 学習スケジューラ 前回、記載した通り、サイクル数を閾値にして、以下の通りハイパーパラメータを変更している。 パラメータ 0~9 10~99 100~999 シミュレーション回数 16…

Gumbel dlshogiを作る その11(ハイパーパラメータスケジューラ)

前回、自己対局と訓練のサイクルの自動化を行った。今回は、ハイパーパラメータスケジューラを実装して、本格的な学習を開始したので、途中経過を報告する。 ハイパーパラメータスケジューラ 論文では、シミュレーション回数は固定で実験しているが、WCSC34…

Gumbel dlshogiを作る その10(訓練サイクル自動化)

前回までは手動で行っていた、自己対局と訓練のサイクルを自動化することを検討する。 処理方式 WindowsでもLinuxでも実行できるようにOSのシェルは使わずに、Pythonで実装する。 自己対局と、訓練処理のメイン処理は関数にしているので、自動化処理からPyth…

Gumbel dlshogiを作る その9(3手詰め)

前回、初期値のモデルから自己対局と学習を繰り返すと、入玉宣言の割合が増え過ぎる問題の対策として、最大手数で終局した対局を除くことを検証した。 詰みで終局する割合が増えることを期待したが、効果は薄かった。今回は、3手詰めを導入し、3手以内の詰み…