Cat Oscillator Sync - TypeScript/Node.js CLI版(Windows専用)
🎵 TypeScript (Node.js) で実装したマウス制御ハードシンク・オシレータ(Windows環境向け)
概要
このディレクトリには、Node.js ランタイムを使用した TypeScript 実装が含まれています。
speaker パッケージを使用してオーディオ出力を実現し、robotjs を使用してマウス位置を取得します。
特徴
- ✅ Windows専用設計: Windows環境に最適化
- ✅ Node.js使用: 安定したランタイム環境
- ✅ speaker パッケージ: リアルタイムオーディオ出力
- ✅ robotjs: クロスプラットフォームなマウス位置取得
- ✅ CUI で動作: ブラウザ不要、コマンドラインから即座に起動
- ✅ 低レイテンシ: 8ms ポーリング間隔で高い応答性
- ✅ TypeScript ネイティブ: 型安全な開発
- ✅ シンプル版とスムーズ版: 2つのモードから選択可能
動作環境
- OS: Windows 10/11
- Node.js: v20.0.0 以降
- npm: v10.0.0 以降
インストール
1. Node.js のインストール
Windows用のNode.jsをインストールします:
- Node.js公式サイトにアクセス
- LTS版(推奨版)をダウンロード
- インストーラーを実行してインストール
インストール後、コマンドプロンプトまたはPowerShellで確認:
node --version
npm --version
2. リポジトリのクローン
git clone https://github.com/cat2151/cat-oscillator-sync.git
cd cat-oscillator-sync\src\typescript\cli
3. 依存パッケージのインストール
npm install
注意: speaker と robotjs はネイティブモジュールです。
初回インストール時にコンパイルが行われます。
以下のツールが必要になる場合があります:
- Visual Studio Build Tools (C++ビルドツール)
-
インストール方法(以下のいずれか):
方法1: winget を使用(推奨) PowerShellを管理者権限で開き、以下を実行:
winget install --id Microsoft.VisualStudio.2022.BuildTools --override "--wait --passive --add Microsoft.VisualStudio.Workload.VCTools --includeRecommended"方法2: Visual Studio Installer を使用
- Visual Studio Downloads にアクセス
- “Build Tools for Visual Studio 2022” をダウンロード
- インストーラーを実行し、「C++ によるデスクトップ開発」ワークロードを選択してインストール
4. TypeScriptのコンパイル
npm run build
使用方法
シンプル版(8msごとに階段状に周波数が変化)
npm start
または
node dist/main.js
スムーズ版(1サンプルごとに滑らかに周波数が変化)
node dist/main.js smooth
操作方法
- プログラムを実行するとオーディオストリームが開始されます
- マウスを画面上で動かして音を制御してください
- X軸 (横): マスター周波数 (40Hz - 600Hz)
- Y軸 (縦): スレーブ周波数 (100Hz - 2000Hz)
Ctrl + Cで終了
プロジェクト構造
cli/
├── package.json # npm設定
├── tsconfig.json # TypeScript設定
├── README.md # このファイル
├── src/
│ ├── main.ts # エントリポイント
│ ├── audio/
│ │ └── output.ts # speaker を使用したオーディオ出力
│ ├── mouse/
│ │ └── position.ts # robotjs を使用したマウス位置取得
│ └── synth/
│ ├── simple.ts # シンプル版シンセサイザー
│ └── smooth.ts # スムーズ版シンセサイザー
└── dist/ # ビルド出力
技術詳細
オーディオ出力 (speaker パッケージ)
speaker パッケージを使用して、Node.jsからリアルタイムでオーディオを出力します。
このパッケージはネイティブモジュールとして実装されており、低レイテンシな音声出力が可能です。
const speaker = new Speaker({
channels: 1, // モノラル
bitDepth: 16, // 16ビット
sampleRate: 48000, // 48kHz
signed: true // 符号付き整数
});
マウス位置取得 (robotjs パッケージ)
robotjs パッケージを使用して、マウスカーソル位置を取得します。
const pos = robot.getMousePos();
console.log(`Mouse position: ${pos.x}, ${pos.y}`);
ハードシンク・オシレータ
マスターオシレータの位相がリセットされるタイミングで、スレーブオシレータの位相も強制的にリセットします。 これにより、豊かな倍音を持つ音色が生成されます。
// マスター位相のラップアラウンドを検出
if (phaseMaster >= 1.0) {
phaseMaster -= 1.0;
// スレーブもリセット (HARD SYNC)
phaseSlave = 0.0;
}
シンプル版 vs スムーズ版
シンプル版
- マウス位置の変化が8msごとに音に反映される
- 急激にマウスを動かすと、階段状に周波数が変化
- シンプルな実装のため、仕組みを学びやすい
スムーズ版
- 指数平滑化により1サンプルごとの滑らかな周波数変化を実現
- 時定数(デフォルト16ms)で滑らかさを調整可能
- より音楽的で実用的な動作
パフォーマンス
- サンプリングレート: 48000 Hz
- ポーリング間隔: 8ms
- バッファサイズ: 384 フレーム (8ms @ 48kHz)
- ビット深度: 16ビット符号付き整数
トラブルシューティング
インストールエラー: node-gyp のビルドに失敗
原因: C++コンパイラやビルドツールが不足しています
解決方法:
方法1: winget を使用(推奨) PowerShellを管理者権限で開き、以下を実行:
winget install --id Microsoft.VisualStudio.2022.BuildTools --override "--wait --passive --add Microsoft.VisualStudio.Workload.VCTools --includeRecommended"
インストール完了後、コマンドプロンプトまたはPowerShellを再起動し、再度 npm install を実行
方法2: Visual Studio Build Tools を手動インストール
- Visual Studio Downloads にアクセス
- “Build Tools for Visual Studio 2022” をダウンロード
- インストーラーを実行し、「C++ によるデスクトップ開発」ワークロードを選択
- インストール完了後、コマンドプロンプトまたはPowerShellを再起動
- 再度
npm installを実行
エラー: “Cannot find module ‘speaker’”
原因: 依存パッケージがインストールされていません
解決方法:
npm install
npm run build
エラー: “Failed to initialize audio”
原因: オーディオデバイスが見つからないか、使用中です
解決方法:
- オーディオデバイスが接続されているか確認
- 他のアプリケーションでオーディオデバイスを使用していないか確認
- PCを再起動してみる
エラー: “robotjs が動作しない”
原因: ネイティブモジュールのビルドに失敗した可能性があります
解決方法:
npm uninstall robotjs
npm install robotjs --build-from-source
音が出ない
解決方法:
- ボリュームが適切に設定されているか確認
- 既定のオーディオデバイスが正しく設定されているか確認
- コマンドプロンプトまたはPowerShellを管理者権限で実行してみる
開発
開発モード
TypeScriptファイルを編集した後、以下のコマンドでビルドと実行を一度に行えます:
npm run dev
コードの変更
src/ディレクトリ内のTypeScriptファイルを編集npm run buildでコンパイルnpm startで実行
Node.js CLI版の特徴
利点
- ✅ Windows環境に最適化
- ✅ 安定したNode.jsランタイム
- ✅ speaker パッケージによる低レイテンシ音声出力
- ✅ TypeScriptによる型安全な開発
- ✅ npmエコシステムの活用
注意点
- ⚠️ ネイティブモジュールのビルドが必要
- ⚠️ 初回インストールがやや複雑
パフォーマンスチューニング
バッファサイズの調整
src/main.ts の POLLING_INTERVAL_MS を変更することで、レイテンシとCPU使用率のバランスを調整できます:
const POLLING_INTERVAL_MS = 8; // デフォルト: 8ms
- 小さい値: より低レイテンシ、CPU使用率高
- 大きい値: レイテンシやや高、CPU使用率低
時定数の調整(スムーズ版)
src/main.ts の TIME_CONSTANT_MS を変更することで、周波数変化の滑らかさを調整できます:
const TIME_CONSTANT_MS = 16; // デフォルト: 16ms
- 小さい値: より応答性が高い(急激な変化)
- 大きい値: より滑らか(緩やかな変化)
ライセンス
MIT License - 詳細は LICENSE を参照