@kongyo2/saens
v0.3.0
Published
Experimental library that splices an input audio's nearest-pitch segments into the notes of a reference MIDI file.
Maintainers
Readme
saens
入力音声そのものの断片を切り貼りして、同梱の元曲(元データ.mid + その原曲 2.wav)を
「無理やり歌わせる」——いわゆる空耳/人力系ミームの合成を自動化した実験的な TypeScript ライブラリです。
元曲(参照 2.wav)を MIDI ノート単位のスライスに区切り、各スライスについて、その区間の参照の
発音(音素)にスライス全体で最も似ていて MIDI ノート近傍のピッチを持つ入力位置を選び、そこから
**入力の生サンプルをそのまま(verbatim に)**コピーして貼り付けます。出力は合成音ではなく
入力そのものの生スライスの寄せ集め(繋ぎ目だけ短くクロスフェード)。手作業の切り貼りと同じく、
入力全体を前後に飛び回って元曲へ並べ替えます。
発音の明瞭さは入力素材に依存します。 澄んだ(調波的な)声を入力にすると、選ばれる生スライスも 澄んだ音節になり発音がはっきりします。逆に broadband/ノイズ的な入力では発音の解像度は上がりません (=素材の物理的上限)。狙いは自然な歌唱ではなく、元ネタを生のまま元曲に強引に乗せる“無理やり感”です。
最小コマンド(npx)
npx @kongyo2/saens --audio input.wav --out output.wav元データ.mid と、その原曲 2.wav はパッケージに同梱されます。--audio が切り貼りされる素材(声)で、
2.wav は歌詞・発音のガイド(合わせ先)として常に内部で使われます。
質感の調整
spliceAudioFromMidi のオプションで“発音(言葉の解像度) ⇔ 生スライス感”のトレードオフを振れます。
minSliceSeconds… スライスの最短長(既定 0.06)。maxSliceSeconds… スライスの最長長(既定 0.12)。短いほど各スライスが参照の言葉に密着し発音寄り、 長いほど生の塊が大きく「元ネタそのまま感(verbatim)」が強い。crossfadeSeconds… 繋ぎ目のクロスフェード長。短いほどスライスが生のまま(既定 6ms)。pitchTolerance… MIDI 音程からどれだけ外れた入力まで許すか(オクターブ畳み込み・既定 2 半音)。
