Skip to content

2024リファクタ方針 #26

@phenylshima

Description

@phenylshima

現時点での各モジュールの責務

  1. Model
    • htsvoiceをパースする(parser)
    • モデルを表現するstruct群/関数群を提供する
    • morphingを行う
    • 決定木に従ったパラメータ決定を行う
  2. Label
    • Label列をパースする
  3. SStream
    • ModelとLabelからパラメータ(mean, vari)を取ってくる
    • 各Stateの長さを決定する
  4. PStream
    • 無声区間を決定する
    • 無声区間を無視しながら,各Streamのmean/ivarのベクトルを生成する
    • 自然につながるよう行列計算を行う
  5. GStream
    • PStreamで無視された無声区間を埋め戻しながら,パラメータ列を生成する
    • Vocoderを呼び出して音声合成を行う

計画

方針

  • 決定木によるパラメータ取得と計算を近づけ,中間のVecを不要にする
  • パラメータ取得(決定木)とモーフィングはそれぞれ抽象化する
  • パラメータ生成の各段階を分離し,人間が介入する余地を作る
  • ラベルにjlabelをそのまま突っ込めるようにする
  • 音素継続長の供給を抽象化し,ラベル中の時刻列から取得するか,ラベルを用いた推定で取得するかを選択する

手順

パラメータ取得

  • Model trait
    • htsvoiceのパーサー等が実装する
    • Interporatorも実装する(内部に複数のModelをもつ)
    • 要求に応じて決定木やパラメータを(必要なら構築して)返す
  • DecisionTree struct
    • 決定木の構造を保持し,Walkを実装する
  • ProbabilityDistributions trait
    • 確率密度関数列
    • IDをとってmeanとvariを返す
    • MSDもこの一種(ただしvari=0)として実装する
    • Interporatorはここで重みづけを行う

ラベルファイルのパース(utilの類)

  • LabelParser struct

パラメータ推定・合成

  • DurationEstimator struct
    • 音素長を推定する
    • 指定された時刻がある場合と,ない場合がある
    • 話速を供給する
  • MlpgAdjust struct
    • Vec<(mean: f64, vari: f64, msd: bool)>をとり,Mlpgで調整してVec<f64>を返す
    • GVも行う(パラメータをどう渡すかは検討中)
    • 無声区間を抜いてからMlpgに渡し,無声区間を埋め戻すところまで行う
  • Vocoder struct

ピッチ調整は呼び出し側(Engine)の責務とする.
Streamを番号で指定するのはやめ,MCP, LF0, LPFのいずれかの名称を使う(ところでMCPって何?).

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions