たれぱんのびぼーろく

わたしの備忘録、生物学とプログラミングが多いかも

Windows user-kernel I/O

Windowsにおいて、ユーザーモードカーネルモード間でデータ転送を行う手法.

  • Buffered I/O: user-mode Buffer, kernel-mode nonpaged Buffer, then an I/O manager transfers contents between buffers
  • Direct I/O: user-mode Buffer, kernel-mode MDL which links to the user-mode buffer, access the buffer through MDL
  • Neither Buffered Nor Direct I/O: まだよくわかってない

解説: LPCNet

LPCNet: 線形予測ボコーダーのうちexcitation予測部をAR-RNN化、WaveRNN (full neural Vocoders) より省パラメータで同精度
スパース化やノイズあり学習、全結合層の工夫など色々最適化してそんな強くないCPUでもリアルタイム合成に成功.

Abstract

Vocoderのefficiencyに注目した論文.
RNN + LPCでパラメータ効率を向上, 16 kHz waveform リアルタイムCPU合成に成功.

既存モデル

efficiency面での先行研究: FFTNet, WaveRNN
古典モデル: 線形予測ボコーダ/ソースフィルタモデル

着想: LPCの良くて軽い部分を拝借

波形モデリング = スペクトル包絡モデリング + 励起モデリング
LPC: スペクトル包絡/線形部は良く近似できても、励起/残差は上手くモデル化/予測できない.

Model

xt = linearPredictor(x<t|θ) + ResidualByWaveRNN()

Coefficintsの計算

The prediction coefficients ak are computed

  1. 18-band Bark-frequency cepstrum => a linear-frequency power spectral density (PSD)
  2. a PSD => (inverse FFT) => an autocorrelation
  3. a auto-correlation => (Levinson-Durbin algorithm) => predictor

sampleからじゃなくてケプストラムから出すのでLPC精度は落ちるけど、LPCはあくまで手段で、RNNの残差算出で補償して全体のefficiencyが上がっていればいい.

Excitation算出

純粋なLPCとみなす場合、excitation部はスペクトル包絡や生成サンプルと無関係.
それで試した場合の精度がイマイチだったので両方ともfeature的な感じで入れてる.

We still include st−1 and pt because we find that open-loop synthesis based only on et−1 produces bad quality speech (see Section 3.8).

DualFC

必須ではないが同計算量で性能をちょっとあげる工夫.

  • 従来: softmax(W2 ReLU(W1ht))
  • 今回: softmax(DualFC(ht)) = softmax(a1⦿tanh(W1ht)+a2⦿tanh(W2ht))

直感的説明: ステップ関数2つを組み合わせてbin推定
今回のタスクは「量子化されたどのbinに入るか」を当てるものなので究極的には正答binのone-hotベクトルをsoftmaxに入れたい.
「X以上」つまり閾値がxのステップ関数と「X+1以下」つまり閾値がx+1のステップ関数を用意すれば、その差分はone-hotになる.
非線形で特定区間のみ値がデカくなるよう学習させなくても、反対方向のステップ関数2つ用意すれば済むという発想.
あくまで直感的説明なので実際にそう学習しているかはわからない (重みの監視をしたらそれっぽく振る舞ったらしい. Figure無し)

スパース化

block-sparse matrices (from WaveRNN): blocks with the lowest magnitudes are progressively forced to zero until the desired sparseness is achieved
+ Keep diagonal terms?

ノイズ挿入

The use of linear prediction makes the details of the noise injection particularly important.

わりと大事そうだけどまだ読めてない.

official docs

jmvalin.ca
jmvalin.ca

derivatives

IBM High quality, lightweight and adaptable Text-to-Speech (TTS) using LPCNet | IBM Research Blog

LPCNet君が充分有能 & C実装まである、が遠因なのか、派生形はあんまり盛り上がってない印象がある(私の感想)

Full-band LPCNet

model input for analy/synth input for TTS
WORLD input for analy/synth acoustic feat. (57 dim)
WaveNet mel-spec (80 dim, 0-7.6kHz) acoustic feat. (80 dim)
PWG mel-spec (80 dim, 0-7.6kHz) acoustic feat. (80 dim)
LPCNet BerkCep. (50 dim), fo, pitch corr. acoustic feat. (52 dim)

OriginalがMOS 4.25くらい。TTSモデルはそれと完全に同じ. Analy/Synthが逆に4.0どまり.

音声帯域・フルバンド

含まれている周波数成分の幅が帯域/バンド.
可聴域を全て含んでいればフルバンド, 可聴上限が20kHz成分とされているのでサンプリング周波数44.1kHzや48kHzが対応.

フルバンドのCodecが20kHzでローパスフィルタかけたりしてるのは可聴域に由来.
それ以上あっても意味がない.

Refs

帯域

  • 狭帯域: 3.4kHz
  • ワイドバンド: 7kHz
  • スーパワイドバンド: 14kHz~
  • フルバンド: 21kHz~

スーパーワイドバンド音声|用語集|テレビ会議のVTVジャパン

G.719: The First ITU-T Standard for Full-Band Audio
...
codec that supports full human auditory bandwidth, that is, all sounds that a human can hear. This has led to the development and standardization of the G.719 audio codec.
POLYCOM (2009) White Paper: G.719: The First ITU-T Standard for Full-Band Audio.

Windows AudioGraph

オーディオの入出力・ルーティング・処理を担うWinRT高レベルAPIs1.

入出力のマイク・ファイル指定、合成音の入力化などが可能.
UnityやWebにあるノードベースオーディオとだいたい同じ機能を提供.
音響効果の差し込みも可能.

Audio graphs - UWP applications | Microsoft Docs

WASAPIとの対比

  • shared/exclusive: shared-modeのみ.
  • 音響効果: callback (event-driven) モードで動作. AudioEffectオブジェクトに効果を実装し、Graph生成時にノードへeffectsを差し込む.
  • ファイル入出力: AudioGraphはデフォルトサポート.
  • 優先度制御: ベストの形を暗示的に提供. 高レベルAPIらしくてgood

AudioEffect

ノードへアタッチされ状態を持ち、packet処理ごとにcallbackで呼び出される音響効果.
IAudioEffectDefinitionを実装し、ON/OFFの制御が可能.
状態を持てるので1秒遅れエコーの実装等が可能.

Quantum/Buffer

Quantum: 1度に処理されるサンプル集合.
デフォルトで10msec分, DesiredSamplesPerQuantumで希望値設定可能.
AudioGraphのSamplesPerQuantumで現在値確認.
バッファサイズは直接指定がない. SamplesPerQuantum分のバッファで、毎回フルサイズ転送してると思われる.


  1. “This section provides detailed information about the Windows Runtime (WinRT) APIs. … Windows.Media.Audio” Windows Developer. Windows UWP Namespaces

アイライン

まつ毛の隙間をうめていく。その後目尻を延長する.
粘膜部分は触らない.
ただ、インラインを塗る危険な流派もあり、イラストでならこれができる。検証する価値あり?

アイライナーをインライン(目の粘膜部分)につけることは、おすすめしません。
...
アイライナーは、まつ毛とまつ毛の間を埋めるように、目の際の粘膜部分を避けてお使いください。
資生堂 https://faq.wp.shiseido.co.jp/faq/show/18752?category_id=8&site_domain=support

刺激のエンタメ、平穏のエンタメ

「人生は平凡で退屈だ」「人生は世知辛くて疲れる」
そんな人生の潤いが刺激のエンタメ平穏のエンタメ

退屈なので普通の人生にはない刺激を取り入れる.
疲れるので普通の人生にはない平穏を取り入れる.

刺激のエンタメ: 遊園地
平穏のエンタメ: 実家

生物は贅沢なもんで、学習による慣れをする.
平穏が満たされると刺激が欲しくなり、刺激が充たされると平穏が欲しくなる.

エンタメの提供者は「自分が何を提供する者なのか」を認識する必要あり.
アトラクション特化遊園地なのか、休憩も充実した遊園地なのか、たまに刺激をくれる実家なのか、平々凡々な実家なのか.
マーケティングに関わるポイント.

「愛したい」という欲望

「愛されたい」じゃなくて「愛したい」

生物の本能にたぶん埋め込まれてる.
だから人間関係が薄くなると「誰かに愛されたい」だけじゃなくて「誰かを愛したい」欲がでてくる.

誰でもいいから愛したいって人は稀で、愛する人を愛したいと思ってる.
だから愛する理由を探してる.
理由があればその人を愛する人に出来、そうすれば誰かを愛することができるから.
誰かを愛するために愛する理由を探してるという、一種の倒錯がそこにはある.
恋に恋してるってやつはこれなんだと思う.

推し活と云ふは愛す事と見つけたり