Upgrade to Pro — share decks privately, control downloads, hide ads and more …

自由を求めてWindowsオーディオプログラミング

ryoha
March 27, 2022
370

 自由を求めてWindowsオーディオプログラミング

Audio Processing Object の話です

ryoha

March 27, 2022
Tweet

Transcript

  1. 自己紹介 4 ▣ りょは □ Twitter, GitHub @ryoha000 ▣ 趣味

    □ 美少女ゲーム □ 麻雀 今やってるゲームの好きなキャラ (かわいい)
  2. おおざっぱな方針 8 ▣ ぶっこ抜いてそれを改ざん □ 犯罪かもしれん ▣ ユーザーモードで動くアプリの権限だけでなんとか □ システムへの影響が小さい

    □ 失敗 ▣ カーネルモードでやってる処理に差し込む □ C++を書く必要 □ なんか大変そう □ 最終的にはこの方針
  3. 発想 ▣ ピー音がある程度の間続いて、1ループが十分短い ▣ 自分で出してるピー音と、消したいピー音の位相差は 結果的に再生された音からわかる ▣ フィードバック制御で逆位相にしてピー音を打ち消す 12 出力

    プログラム + - 他アプリからでる音 消したい周波数の 同じ振幅の逆位相を流す 消したい周波数の振幅・位相と 今プログラムで流してる振幅・位相が 実際どのくらいずれてるか計算
  4. 「ドライバ」の領域 ▣ ユーザーモード ▣ APOが動いてる ▣ 署名はいらない(ただしDRMコンテンツは再生不可) ▣ カーネルモード □

    ハードウェアとのつなぎこみをしてる □ 署名が必要(法人じゃないと無理?) ▣ どっちでも「今から再生する音」に触れる 17
  5. ▣ ←みたいな2次の再帰的な線 形フィルタ ▣ 適切な𝑎1 , 𝑎2 , 𝑏0 ,𝑏1

    , 𝑏2 を与え ると特定の周波数をカットで きる □ Notch Filter ▣ フーリエ変換とかせずにでき てすごい(どの周波数をカット するかで必要ではある) Biquad Filter 24 https://jp.mathworks.c om/help/control/ug/di scretizing-a-notch- filter.html https://en.wikip edia.org/wiki/Di gital_biquad_fil ter
  6. 試したアプローチ ▣ 結構な精度でBGMと声を分けられる OSS(spleeter) ▣ 声だけにした音声なら簡単に直前の 音素が分かる? ▣ 例えば「t」や「m」なら特徴的でわかるかも? ▣

    「t」は破裂音でスペクトルがかなり特徴的 ▣ 「m」は有声音で母音が強く出ててフォルマン ト周波数が目立つ ▣ spleeterのピークが重くてリアルタ イムで処理できず 29 0 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0 500 1000 処理時間[s] 試行回数[回]
  7. 考えてるアプローチ ▣ spleeterにピークが立ってる原因調査 ▣ それなりに軽い音声認識モデルをつくる ▣ データは用意できる ▣ 母音や吐息だけの無意味な音声の扱いをどうするか ▣

    「おだ_ご」→「おだんご」は生成するなり、いくつかの パターンに分類して決まった音声で置換なりどうとで もなりそう ▣ 来月末にリリースしたい! ▣ アイディア募集中! 30
  8. ▣ 【最重要】Program Files以下に置かないと動かない ▣ DebugViewでデバッグするときは、管理者権限で起 動してGlobal Win32 debug outputを拾う ▣

    プロセス間通信はできない ▣ ソケット通信 ▣ 共有メモリ ▣ 名前付き/匿名パイプ APOを作ってみたい人向け1 32
  9. 参考文献 35 ▣ MSDN □ https://docs.microsoft.com/en-us/windows- hardware/drivers/audio/audio-processing-object- architecture □ 文句は無限にあるけどないと始まらない

    ▣ フラキチさんブログ □ http://frchick.blog129.fc2.com/blog-entry-733.html □ 公式以外でAPOの話をしてるほぼ唯一のサイト