Kaleido Vocoder — システム説明






Kaleido Vocoder — システム説明


Python + Flask + Web Audio

Kaleido Vocoder

声を帯域ごとの音量変化に分解し、シンセ音へ掛け合わせる
チャンネル・ボコーダー型ボイスチェンジャー。ファイルのアップロード変換と、
マイクのリアルタイム変換に対応します。

1. システム概要

Kaleido Vocoder は、入力した声から「どの周波数帯域がどれくらい鳴っているか」
という時間変化(包絡)だけを取り出し、ノコギリ波などのシンセ音(キャリア)へ
掛け合わせることで、ロボット声・レトロシンセ声を作るシステムです。
動作モードは2つあります。

アップロード変換モード

音声ファイルをサーバへ送り、Python(SciPy)で
高品質に一括変換して WAV を返す。録画・配布向け。

リアルタイム変換モード

マイク入力をブラウザ内(Web Audio API)で
即時変換。サーバへ音声を送らず低遅延。実演・会議向け。

2. 構成とファイル

Flask(Python)が画面とアップロード変換を担当し、リアルタイム変換は
ブラウザの JavaScript が単独で処理します。

kaleido_vocorder/
├── app.py                  Flask本体 / アップロード変換のDSP(SciPy)
├── requirements.txt        依存パッケージ
├── run.sh                  起動スクリプト
├── README.md
├── templates/
│   └── index.html          画面(UI)
├── static/
│   ├── css/style.css       スタイル
│   └── js/
│       ├── recorder.js          アップロード用ブラウザ録音→WAV化
│       └── realtime_vocoder.js  リアルタイム変換の全DSP
├── uploads/                アップロード/録音の一時保存
└── outputs/                変換結果のWAV

3. アップロード変換モード

WAV / FLAC / OGG / AIFF を受け取り、サーバ側(app.py)で変換します。
オフライン処理のため、未来のサンプルも使える高品質な手法を採用しています。

処理の流れ

  • 音声をモノラル化・正規化し、低域のゴロつきをハイパスで除去
  • 90Hz〜約7kHz を対数間隔で 8〜32 バンドに分割
  • 各バンドを Butterworth バンドパス + sosfiltfilt(ゼロ位相)で抽出
  • ヒルベルト変換で正確な包絡を取得 → 平滑化 → 平方根圧縮 →
    パーセンタイル正規化(バンドごとの音量バランスを揃える)
  • キャリア波(Saw / Square / Sine Mix)を同じ帯域に分割し、包絡を掛けて加算
  • 少量の原音をミックス → tanh サチュレーション → 正規化
  • 16bit PCM の WAV として保存・再生(最大90秒)

対応形式: WAV / FLAC / OGG / AIFF。MP3 は ffmpeg で WAV に変換してから使用します。

4. リアルタイム変換モード

ブラウザのマイク入力を Web Audio API のノードグラフで即時処理します。
サーバへ音声を送らないため低遅延で、Flask は画面配信のみを担当します。

信号の流れ

マイク ─▶ ハイパス55Hz ─┬─▶ [25バンド] バンドパス→整流→平滑化→感度 ─┐
                        │                              (各バンドの包絡)│
                        │   キャリア(シンセ)──▶ バンドパス ──▶ ゲイン◀┘
                        │                                        │
                        └─▶ 子音補助(3.8kHz以上・自己ゲート)─────┤
                                                                  ▼
              合算 ─▶ コンプレッサ ─▶ ソフトクリップ ─▶ マスターゲート
                  ─▶ 高音ダンプ ─▶ 出力音量 ─▶ 出力デバイス

各バンドでは、声の包絡(音量の時間変化)がキャリア帯域のゲインを変調します。
これにより、声の音色の動きだけがシンセ音に乗り移ります。

5. リアルタイムの主な機能

マスターノイズゲート

入力全体の音量(RMS)を監視し、無音時は変換音をミュート、発話時に開きます。
しきい値はマイクのノイズフロアに自動追従。帯域ごとには手を加えないため、
開いている間の発話の明瞭度・音色バランスは損なわれません。

子音明瞭度の補助

「サ・シュ・タ・カ」などの子音はハーモニックなキャリアでは再現できません。
そこで声の 3.8kHz 以上の高域だけを取り出し、それ自身の包絡でゲートして
混ぜています。母音やピッチ成分を含まないので「生声」には聞こえず、無音時は閉じます。

フィルタ精度

各バンドのバンドパスと包絡の平滑化を2段カスケード化し、
帯域の分離を高めて混信・濁りを低減しています。

キャリア音程モード

モード 動作
固定 「基準音程」スライダーの音程でキャリアが鳴る。一定のロボ声。
ピッチ追従 声の基本周波数を検出し、キャリアを追従させる。歌のメロディが
ロボ声で出る。追従開始時の声を基準に、そこからの相対変化で動く。
MIDI入力 MIDIキーボードでキャリアの音程を演奏する(Web MIDI API)。

R2-D2 モード

キャリア波形で「R2-D2 / ピヨピヨ」を選ぶと、細いホイッスル音を
ランダムな音程シーケンサで「ピッ」「ピュイーン」と動かすドロイド風モードになります。
声の内容(言葉)は再現せず、話すリズムにだけ反応します。

高音ハウリング抑制

キャリアの基本周波数が高いほど出力を漸減し、帰還(ハウリング)ループの利得を
下げます。350Hz 以下は等倍、それ以上で段階的に減衰します。

出力デバイス選択

AudioContext.setSinkId() により、変換音の出力先デバイスを選べます。
仮想オーディオケーブルを選べば、Web会議アプリへ変換音を渡せます(第8章)。

6. パラメータ一覧(リアルタイム)

項目 範囲 / 既定 説明
基準音程 55–440 Hz / 110 固定モードのキャリア音程。
ピッチ追従では基準ピッチ、MIDIでは移調量。
キャリア音程モード 固定 / ピッチ追従 / MIDI キャリアの音程を何で決めるか。
バンド数 8–28 / 25 多いほど言葉が明瞭、少ないほど機械的。
キャリア波形 Saw / Square / Sine Mix / R2-D2 シンセ音の種類。
原音ミックス 0–0.20 / 0 原音を混ぜる量。混ぜすぎると普通の声に戻る。
出力音量 0–1 / 0.80 最終出力レベル。
ボコーダー感度 4–80 / 14 包絡の増幅量。小さいと静か、大きいと歪む。
入力モニター 0–0.6 / 0 生マイク音を出す量(動作確認用)。
出力先デバイス 既定 / 任意 変換音を送る出力デバイス。

7. 使い方

起動

cd kaleido_vocorder
python -m venv .venv
# Windows: .venv\Scripts\activate   /   macOS・Linux: source .venv/bin/activate
pip install -r requirements.txt
python app.py
# ブラウザで http://127.0.0.1:5000 を開く

アップロード変換

  • 音声ファイルを選択(またはマイク録音ボタンでその場録音)
  • 音色パラメータを設定して「変換する」
  • 結果を再生・ダウンロード

リアルタイム変換

  • 「リアルタイム開始」→ マイク許可を承認
  • 入力レベルメーターが動くか確認(GATE開/閉表示で開閉が分かる)
  • 波形・バンド数を変えたら「設定を反映」。音量・感度等はリアルタイム反映
localhost または HTTPS でのみマイクが使えます。
ハウリング防止のためヘッドホン推奨です。

8. Web会議で使う

Zoom / Teams 等へ変換音を渡すには、仮想オーディオケーブル
(Windows: VB-CABLE、macOS: BlackHole 等)を橋渡しに使います。

マイク ─▶ ブラウザ(本アプリで変換)─▶ 仮想ケーブル ─▶ Zoom のマイク
  • 仮想オーディオケーブルをインストール
  • 本アプリの「出力先デバイス」で CABLE Input(再生側)を選択
  • Zoom / Teams のマイクで CABLE Output(録音側)を選択
  • 会議アプリ側のノイズ抑制・エコーキャンセルはオフ推奨

名前が紛らわしいですが、アプリが選ぶのは「CABLE Input
(ケーブルへ音を入れる=OS上は再生デバイス)です。「CABLE Output」は Zoom 側で選びます。

9. 制限事項と注意

  • 音質 — リアルタイムは低遅延と引き換えに、アップロード版
    (オフラインのヒルベルト包絡・ゼロ位相フィルタ・帯域正規化)より簡略化されています。
  • 背景タブ — ピッチ追従・マスターゲート・R2-D2 の制御は
    ブラウザの描画タイミングで動くため、タブを背面にすると間引かれて止まります。
    会議用途では本アプリのタブを前面に保つか、固定モードの利用を推奨します。
  • ハウリング — スピーカー併用時はマイクが出力を拾います。
    ヘッドホン使用が根本対策です。
  • 対応ブラウザ — Chrome / Edge 系を推奨。MIDI入力・出力デバイス選択は
    これらでのみ動作します。
  • 音程 — ピッチ追従は単音のみ。和音は検出できません。

10. おすすめ設定

狙い 設定
古いボコーダー風 基準音程 100–120 / バンド数 12–16 / Saw / 原音 0.00–0.03
強いロボ声 基準音程 90–110 / バンド数 10–14 / Square / 原音 0.00
聞き取りやすさ優先 基準音程 120–150 / バンド数 20–25 / Saw / 原音 0.04–0.08
歌う キャリア音程モード = ピッチ追従 / Saw / バンド数 20–25
ドロイド声 キャリア波形 = R2-D2(他パラメータの影響は小)
Kaleido Vocoder — システム説明ドキュメント
リポジトリ: github.com/beeknowledge/kaleido_vocorder


コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA