# 複数F0候補を保持したまま絶対target-Hzへ編集する、一つの制御契約

2026-10-19 UTC。一次資料・著者コードの静的読取り、数学的反例、設計提案。新規実装、ソフト導入、音声生成、品質測定、Git変更はしていない。ここで示す出力規則は未実装・未評価である。

## 1. 選ぶ一案

**共通target調波格子で再励振し、候補条件付きの音色・noise・event表現は、sourceだけから選んだ一貫した枝を編集区間で固定して使う。候補波形を混ぜない。**

これを選ぶ理由は、sourceの調波番号をそのままtargetへ運ぶ契約を外すと、sourceの100/200 Hz解釈がtargetの440/220 Hzへ直接分岐することを避けられるからである。WORLDの公式合成APIには、この再励振の実装上の先例がある。ただし、本提案の候補保持・枝固定・event経路・合意検査までを実装した既存APIがあるという意味ではない。

引き受ける変更は明確にする。

- sourceの各partialが「同じ調波番号のまま移動する」ことは保証しない。
- target-Hzは、周期枝の新しい励振格子と基準位相を指定する。
- 音色は選択枝の固定Hz軸の包絡等で与える。sourceの候補差は、包絡、周期成分の量、noise-AM、event帰属の違いとして残る。
- 解析分布は保持する。復号時の一枝選択は「真の生理的F0が分かった」という認定ではなく、一音声を出すための決定である。
- 全波形の最小周期や知覚pitchまで無条件にtargetへ一致するとは言わない。周期枝について何を検証できるかを別の結果として返す。

この契約は、既知clockのclock/event実験と両立する。確率F0/VUVの研究を止める提案でも、実装開始前に大規模な確率trackerを完成させる提案でもない。

**再励振自体は現PML/WORLDと同じ系統で、新しい品質改善原理ではない。** 今回の差分は候補条件付き解析の保存、source側の一枝決定の来歴、targetで何が候補間一致／不一致になるかの契約である。分布を追加保存するだけで出音が良くなるとは予想しない。

## 2. 一次実装から借りられる部分、借りられない部分

### 2.1 WORLD：source番号を持たないtarget再励振の先例

公式`Synthesis`はF0列、spectrogram、aperiodicity等を受け取り、渡されたF0から積算位相とpulse列を作る。source F0、sourceの調波番号、sourceの各partial位相を別入力として受け取らない。spectral envelopeから応答を作り、新しいpulse時刻へ載せる構造である。従って、F0だけをtarget列へ替えたときの意味は、source partial identityを保った輸送ではなく、新しい励振への再適用になる。[WORLD公式合成本体][WORLD-SYN]

しかし、包絡の候補依存は残る。CheapTrickは入力F0から窓や平滑化等を定めるため、同じ波形でも候補100/200で同じ包絡になる保証はない。[CheapTrick公式source][WORLD-CT]

WORLDの既存APIに、複数F0仮説の保存・統合、候補区間の固定、独立eventの原時刻保持はない。また、区間ごとに独立した合成呼出しをすると、位相状態の引継ぎを別途扱う必要がある。公式のstateful APIは位相等の継続に参考になるが、候補固定やevent保存を追加するものではない。[継続合成API][WORLD-STATE] 本提案はWORLDを丸ごと次方式として採用するものではない。

さらに通常合成には低F0の扱いがあり、`f0 < fs/fft_size + 1`は無声扱いになる。周期応答はVUVやAPの条件で全ゼロにもなる。従って、任意の正のtargetを既存APIへ入れれば常に同じ制御契約が成立するとはしない。targetの有効範囲と、周期枝の強度／不在をclockとは別に定義する。無声を含む全frameのF0を正のtargetへ上書きするだけの実装を、本提案の完成形とはしない。[公式合成本体][WORLD-SYN]

### 2.2 SMS-tools：別の契約であることを示す対照

SMS-toolsのharmonic frequency scalingは、保存されたpartialの実測Hzへ倍率を掛ける。timbre preservationは元Hz軸の包絡を新しいHzで再評価する。これはpartial移動を明示する実装上の対照になる。[公式transformation][SMS-TRANS]

ただし、harmonic detectionでh番目に割り当てた値が厳密にh×F0へ丸められるわけではない。入力がh×F0＋δなら、倍率target/F0で動かした結果はh×target＋δ×target/F0である。厳密な共通格子へ投影する処理とは異なる。h1欠落時に最初の列をF0そのものと読むこともできない。[公式harmonic model][SMS-HARM]

**今回採るのはWORLD型の再励振契約であり、SMSの番号保持変換と都合よく混ぜない。** SMSの軌跡・位相連続合成は実装上の参考になっても、それだけで曖昧候補を解決しない。

### 2.3 分布の既存足場は合成仕様を持たない

Shiの著者MATLABはF0×次数のfilter PMFを保持するが、通常出力はjoint MAP F0、次数、voicingである。候補別包絡やtarget編集規則は含まない。無音時にbufferが未更新となる例外、localとfilteredの違い、frame marginalからjoint pathを復元できない点を引き継ぐ。[著者class][BAYES]

Al-Radhiらのcontinuous vocoderも無声・creaky・silenceの補間clockを用いるが、その存在は生理的なF0の観測や、複数候補を保持した絶対Hz制御の保証ではなく、今回ここから借りるのは補間時計と観測F0を分ける先例までである。[原著§2.1][CONTINUOUS]

## 3. 入力するものと、保持する不確かさ

これは新しいpayload契約の提案である。候補mは一フレームの数値ではなく、同じ観測支持上で整合した区間の仮説とする。

| 入力 | 内容 | 誤用しないもの |
|---|---|---|
| source仮説群 | F0軌跡、次数・調波番号対応、観測支持、残差、成分帰属 | 音響的基音・声帯周期・知覚pitchの同一視 |
| source側重み | local証拠、明示prior、時間更新後の区別 | frame marginalの積をjoint path確率と呼ぶこと |
| 候補条件付き音色 | 固定Hz軸の周期成分包絡、位相規約、noise包絡 | 候補間で平均すれば真の声道になるという仮定 |
| 候補条件付きclock/event | 周期に結合するAM、結合位相または遅延、単発eventと元時刻 | 残差全体をeventとして原時刻へ戻すこと |
| 外部target | 正のHz軌跡、初期位相、編集区間 | source posteriorから毎frame抽選するF0 |
| 制御結果の種別 | 周期枝あり／なし、格子保証、最小周期の検査範囲、未解決成分 | 「target値を受け取ったからpitch成功」という一つのbool |

保持した集合内の重み、切捨て質量、候補生成前に失った仮説を区別する。「全候補で一致」は保持集合に条件付いた主張で、探索域外を含む数学的な全可能性への保証ではない。scoreしかない推定器ではscoreと記し、確率質量や校正済みconfidenceへ呼び替えない。

## 4. 波形平均を使わない、具体的な復号規則

### 4.1 sourceだけで一枝を決め、target変更で選び直さない

1. 同一source区間について、候補生成・共通観測支持・priorを固定する。
2. 明示モデルのsource joint weightがある場合は、その最大の**区間仮説**を代表枝m*にする。局所likelihoodと時間priorの寄与を保存する。校正済みかどうかは別表示にする。
3. 同率なら、source側の接続済み枝を維持する。開始時にも同率で決まらない場合は、同じ時間支持における次数Kの時間平均が小さい枝、さらに同率なら事前固定した候補IDの昇順で決定する。tie-breakと数値上の同率判定精度を記録する。低次数を使う規則は簡潔さの選好であり、生理的真値の証明ではない。
4. target-Hz、targetの変更履歴、出力の移動距離ではm*を選び直さない。同じsourceと同じ設定へ戻れば同じ枝を得る。
5. 枝は宣言した編集区間で固定する。区間境界はsourceのevent・モデル適用域などで先に定め、targetを滑らかに動かしただけで作り直さない。

full joint pathが得られずframe marginalだけがある場合は、上の「最大区間仮説」を取得できたとしない。小例では既知の候補軌跡を入力し、自然音への拡張時に必要なjoint仮説の構築を別課題にする。疑似scoreの場合も同じ決定順を設計できるが、Bayesian最適決定とは呼ばない。

**これは遅い一枝選択である。** 不確かさを最後まで一切決定しない方式ではない。価値があるとすれば、候補条件付き解析を潰さず保持し、選択の変更やモデル訂正後に再解析せず再復号できること、そして不一致を可視化できることにある。自然さの改善は未測定である。

標準出力に手選択や複数音色の同時出力を入れない。候補ごとの音声を別々に作る診断は可能だが、それは一音声を返す上の契約と区別する。

### 4.2 新しい周期格子を一つだけ作る

外部targetをF_T(t)とし、共通位相を

`θ_T(t) = θ_0 + 2π ∫ F_T(u) du`

とする。各source候補のF0へtarget比を掛けるのではなく、この位相から新しい周期キャリアを作る。位相の初期値と連続性はsource枝の決定とは別に固定し、区間処理のために無条件にゼロへ戻さない。

概念的な周期枝は

`p_T(t) = Σ_j A_m*(t, j F_T(t)) cos[j θ_T(t) + φ_m*(t, j F_T(t))]`

と書ける。Aとφは、選択枝の固定Hz軸の音色表現を、宣言した補間・位相規約で評価する。sourceのh_src番号をjにそのまま同一視する操作ではない。最小位相化等を使う場合は、それも編集規約であって元phaseの復元ではない。

48 kHzではNyquist未満のjだけを使い、上端処理・補間支持・解析支流の遅延を明示する。targetを上げた際の調波削除は不可避になり得るため、全帯域の音色保存を保証しない。入力全帯域を低rateへ落とす必要はなく、F0専用低rate支流と48 kHzの音色/event表現を分けられる。

有効なtarget-Hz範囲をdecoder仕様に持たせ、範囲外で無断に別clockへ置換しない。範囲外は編集未対応として返す。WORLDの既定低F0処理や無声用clockを、この外部契約と同一視しない。

### 4.3 noiseとeventは選択枝の別規則で一度だけ出す

- 周期に結合したnoise-AMは、選択枝が指定した結合次数・位相または遅延でtarget位相へ接続する。位相差固定と秒単位遅延固定は別の規約なので混ぜない。
- 非反復eventは、選択枝に保存された絶対時刻・支持を保つ。波形全体の残差をeventとみなす迂回路にはしない。
- ゆっくりした強度変化・noiseの帯域包絡は、その表現の時間軸で保持する。
- 同じ成分を周期枝とevent枝へ二重計上しない。帰属が候補間で違う場合も、選択枝の整合した分解を一式使う。
- noise振幅・帯域電力・AM深さへF0 entropyやP(voiced)を直接掛けない。これらは候補条件付きの信号量として別に与える。

出力は一つの枝からの`p_T + n_T + e`である。`Σ_m w_m y_m`でも、候補ごとの独立voiceを重ねるものでもない。noiseの乱数seedも固定し、候補不確かさを音響的なjitterやchorusへ変換しない。

WORLD全体をそのまま使えばこのevent契約が満たされるわけではない。noise生成もpulse構造と結び付く実装であり、別event経路と継続位相状態は本提案で追加する仕様になる。

## 5. 候補間で一致するもの、不一致なもの

**同じ入力ピークを説明することと、同じ編集を指示することは違う。** 一致判定の単位は少なくとも「同じ成分の支持・役割・出力先・位相／遅延規約」を含む。

| 分類 | 一致と呼べる条件 | 実際の出力規則 |
|---|---|---|
| 共通の周期格子 | どの枝でも同じ外部θ_Tとjを使う | 格子を一つだけ生成 |
| 共通の音色情報 | 対象のtarget-Hzで候補別A・φが所定許容差内 | m*の値を一回使う。平均は不要 |
| 共通の非反復event | 時刻・支持・波形／パラメータ・帰属が一致 | m*に含まれる一個だけを出す |
| 共通のAM移動 | 結合次数、位相固定／遅延固定、係数が一致 | 同じtarget位相への写像を一回使う |
| 不一致の音色 | target格子は同じだがA・φが異なる | m*の一式を使用し、不一致範囲を記録 |
| 不一致の帰属 | ある枝では周期、別枝ではevent/noise | 成分ごとの多数決をせずm*の整合した分解を使う |
| 表現範囲外 | targetで必要な包絡値・位相・AM結合が未規定 | 規定済みの補間/外挿範囲を超えたと表示。保証済み編集としない |

合意のannotationは保証範囲を示すために使う。近似一致した各部品を別々の候補から寄せ集めて、どのモデルにも対応しないsource–filter分解を作るためには使わない。共通部分にもm*の値を使うので、不一致部分との位相・利得・残差の整合を壊しにくい設計になる。ただし「壊しにくい」は設計意図であり、品質結果ではない。

## 6. 反例で契約を確かめる

### 6.1 200 Hz単音を100/200 Hzで説明する場合

`x(t)=cos(2π·200t)`の数学的基本周波数は200 Hzである。latent clock=100 Hz、第2調波だけ、という生成モデルも同じ観測を説明する。

source番号を保持する変換なら、target=220で440 Hzと220 Hzへ分かれる。今回の契約ではその番号保持を使わず、どちらの枝でも220、440、660… Hzの新しい格子へ同じ種類の包絡表現を適用する。

**これで一致するのは格子であり、音色ではない。** 200 Hzの一観測だけでは、包絡の220 Hz、440 Hzでの値は決まらない。包絡推定・平滑化・補間が追加仮定になる。選択した作者実装と固定設定から得た値を使えば出力は一意に計算できるが、その値が唯一正しい音色だとは言えない。

従って「100/200問題を解決した」ではなく、「source partialのidentity保存を外し、target再励振という別の編集規約を選んだ」と記録する。この区別が、真値選択不能という結論の先へ進める部分である。

### 6.2 最小移動で枝を選ぶと、targetだけでoctaveが跳ぶ

番号保持の二枝で、source 200 Hzからのlog周波数移動量を最小にする例を考える。出力候補はF_Tと2F_Tである。両者の移動距離が等しくなる境界は`F_T=200/√2 ≈141.4 Hz`。targetを滑らかに跨がせるだけで選択が切り替わる。

これは測定結果ではなく二候補の算術反例である。最小変化は「元の音に近い出力」を好む決定規則としては有用でも、sourceの真のclockを推定する観測ではない。今回の規則ではtarget依存の最小移動を枝選択に用いない。

### 6.3 gcd正規化は厳密な例には効くが、標準規則にしない

定常周期枝の有効調波集合が`{2,4,6}`なら、その番号のgcdは2。source側のclockを2倍、番号を半分にすることで同じ波形のprimitiveな表現へ直せる。200 Hz単音のlatent100/h2もこの方法で200/h1へ直せる。

しかし、任意に小さい第1調波を加えるだけで集合が`{1,2,4,6}`となりgcdは1へ変わる。自然音のnoise、推定誤差、AM側帯波、弱い奇数調波に閾値を掛けてgcdを求めると、閾値依存のoctave切替が入る。生体clockと数学的最小周期のどちらを保存するかも変わる。

そのためgcdは**合成した周期枝の条件付き検査**に使い、自然音からの自動canonicalizationや真値選択には使わない。

### 6.4 時間連続性は曖昧性を除去することも、誤りを延長することもある

前後に奇数調波が明瞭な区間があれば、それは追加のsource情報である。反対に、全区間が偶数次だけなら100/200の双方に滑らかな軌跡を作れる。時間priorだけで同定不能が解けたとは言えない。

今回の枝固定は、出力のswitchを減らす代わりに、誤った枝が区間内に持続する可能性を引き受ける。sourceで実際に声区・周期交替構造が変わる場合、固定区間を長く取り過ぎてはいけない。境界を増やすほど自由度が増えるので、音質に合わせた事後的な切り直しはしない。

## 7. target=220 Hzについて、保証できることの強さ

| 強さ | 保証／検査 | 条件と限界 |
|---|---|---|
| 1. 制御clock | θ_Tの微分が2π·220 | decoder状態を継続し、実装数値誤差・sample時刻を検査する |
| 2. 周期キャリア | j番目のキャリアがj·220 Hz | 時変包絡・位相補正前のキャリアの主張 |
| 3. 定常周期枝の最小反復 | 正確に非ゼロな調波番号のgcdが1なら、理想的連続時間・定常枝の基本周波数は220 Hz | 周期枝が非零、aliasingなし、係数・filterが定常。gcd>1なら基本周波数はgcd倍 |
| 4. 全出力の周期 | 原則として保証しない | noise、event、AM、時変filter、jitterで厳密周期は失われる |
| 5. 知覚pitch | clock式だけでは保証しない | harmonic強度、帯域、聴覚条件、周期交替等に依存。独立した評価が必要 |

「基音成分が存在する」は3の十分条件だが必要条件ではない。第2・第3調波だけでもgcdは1である。逆に第2・第4だけなら、内部clockが220でも定常周期枝の基本周波数は440になる。

振幅閾値で「有効調波」を決めた場合、3はその閾値で作った近似モデルの性質までである。元波形、有限長レンダリングの端部、noiseを足した全波形についての証明ではない。微小成分を0と判定する感度を併記する。

時間変化するφやfilterを入れると、出力瞬時位相の微分にはその変化分も加わる。従って2から「全ての瞬間的spectral ridgeが厳密にj·target」を導かない。これは不確かなF0とは別の、時変音色とFMの問題である。

この一案の返り値は、音声に加え少なくとも「target格子を適用した」「周期枝の存在」「定常条件下のprimitive検査の適用可否／結果」「音色・帰属の候補不一致」を持つ。3が必要な利用先で条件を満たさない場合、成功扱いにしない。弱い基音の強制付加、周期交替の除去、再有声化は別の編集要求とし、ここで黙って実行しない。

## 8. VUV・ささやき・creakyでの出力規則

- **無音:** clock状態は継続できるがenergyを追加しない。
- **周期枝を持たないささやき・純摩擦:** noise/eventを出す。target指定だけで新しい周期成分を作らない。この区間で「220 Hzの知覚pitch」を返したとはしない。
- **周期枝は弱いが存在する:** 選択枝の信号量で鳴らす。P(voiced)を周期振幅へ直結しない。
- **voiced/nullの帰属が候補間で競合:** posteriorを保存したまま代表枝を選ぶ決定と、物理的なmixed excitation量を区別する。この設計だけでVUVのhard decisionが全て不要になったとは宣言しない。
- **creaky・周期交替:** targetは宣言した基準clockへ作用する。交替patternを保持すれば全体の最低反復がtargetと違う場合がある。patternを消す操作は声質変更として別指定する。

候補間の不一致をnoiseへ逃がせば一音声にまとめやすくなるが、それはこの契約では禁止する。entropyが増えても、録音された息や摩擦の電力が増えたことにはならない。

## 9. どの選好が、どの仮定を追加するか

| 規則 | 追加する選好／仮定 | 今回の採否 |
|---|---|---|
| sourceモデル内の最大重み | 指定モデル・priorに最も支持された一枝を出す | 採用。校正や真値の保証とは分ける |
| 時間連続性 | sourceの状態は急に変わりにくい | source priorと同率時の継続に限定。二重に掛けない |
| 低次数prior | 少ないharmonic自由度で説明できるものを好む | モデル内で明示。tie-breakで使う場合も別記録 |
| targetに対する最小移動 | 編集前に近い周波数配置を好む | 枝選択には不採用。target依存のbranch jumpを避ける |
| 最小音色変化 | 選んだ距離尺度でsourceへ近い音色を好む | decoder補間規約の動機に留める。未知の知覚最適性を主張しない |
| 自動gcd正規化 | 弱い成分の有無でprimitiveなclockを選ぶ | 標準の推論・編集規則には不採用 |
| 候補平均／posterior sample | 不確かさを平均音または確率的変動として鳴らす | 不採用 |

frameごとの多数決・帯域ごとの最良候補選択は、各部品が同一のsource–filter仮説に属する保証を失うため使わない。局所部品だけを独立化するには、別途その因子分解が妥当だという根拠が要る。

## 10. 分布保持が何を変えうるか、変えないか

### 10.1 同じ枝なら出音は同じ

同じdecoderに、同じ代表枝のparam、target、境界state、乱数seedを与えるなら、残りの候補分布を保存したか否かで出力は変わらない。これは本契約の構造上の性質である。確率を鳴らす量へ直結しない以上、分布保存そのものの音質向上を主張できない。

現PMLや既存のoffline trackerがすでに十分な文脈を使っているなら、「後で決める」という名前だけで新しい情報が増えるわけでもない。

### 10.2 改善仮説になり得る、限定された経路

1. **候補条件付き解析の取り返し可能性:** 最初のF0で包絡・AP・event帰属まで確定せず、代替枝のparamを保持する。後に追加のsource文脈・明示モデル・観測支持の見直しで枝が変わったとき、その枝に対応する解析から復号できる。旧枝の包絡だけ残してF0だけ替える場合と異なる。
2. **source推論の別モデルを比較できる:** F0×Kだけでなく、候補条件付きの包絡・残差・eventの説明を含むモデルが妥当なら、source joint evidenceの比較が変わり得る。ただし、これは観測モデルを改善する別仮説であって、posteriorの配列を保存するだけの効果ではない。柔軟化・過適合・同一データの二重計上に注意する。
3. **保証できない編集を検出できる:** nativeでは区別しにくい候補がtargetで音色／帰属を大きく変える領域を示せる。これは誤った保証を避ける利益であり、それだけで音を改善した結果ではない。

この一案では、合意が弱いからnoiseを増やす、確信度が低いからeventを薄める、あるtargetで都合のよい枝へ自動移動する、といった別経路を入れない。

priorやsource証拠の更新で代表枝そのものを替えれば、その枝のnoise/eventパラメータも変わり得る。これは異なる成分帰属仮説を選んだ結果であり、「録音の物理noise量が変わった」ことではない。entropyだけの効果を調べる対照では、代表枝とその信号パラメータを固定する。

### 10.3 比較するときの切り分け

候補を保存するが代表枝を同じに固定した条件は、出音が同じであるべき負の対照になる。枝や音色paramが変わる条件では、変更が「追加source証拠」「観測モデル」「prior」「tie-break」のどこから生じたかを分ける。これが説明できなければ、改善があっても確率保存の効果と帰属しない。現在、いずれの品質差も測っていない。

## 11. 最小の判別と、ここで止める条件

次は将来の小実験の仕様候補であり、今回は実施していない。既知clockの実験を確率tracker完成待ちにしない。

1. **同一観測の二解:** 200 Hz単音のlatent100/h2とlatent200/h1で、格子は同じになり、音色側の依存だけが残ることを確認する。補間による違いを真のF0判定としない。
2. **target連続掃引:** sourceと選択枝を固定し、targetを動かす。枝ID・event時刻・seedがtarget値だけで切り替わらないかを見る。
3. **弱い奇数調波:** ε→0の系列で自動gcd切替を起こしていないか、primitive検査の閾値依存を表示できるかを見る。
4. **共通event＋候補依存AM:** 同じ単発eventが一回だけ出て、AMだけが宣言したtarget位相へ移るかを確認する。event枝からsource周期を持ち戻したら失敗とする。
5. **null/whisper:** target変更だけで周期energyが新規発生しないかを見る。代表枝と信号paramを固定したまま候補重みのentropyだけを変える対照で、noise量が変わらないことを確認する。

**見切り:** 共通格子へ再励振しても候補別包絡の差が大きく、native fidelityやedited構造の選定を左右するなら、確率保存だけで解決したとはしない。候補平均で隠さず、source–filter/位相/成分帰属の表現不足へ戻る。eventを保持するためにsource周期ごと戻す必要があるなら、clock/event分離の仮説を弱める。格子保証しか成立していないのに、必要なprimitive/知覚契約を満たしたと扱わない。

候補集合の全保存は解析側の費用を増やすが、復号で鳴らすのは一枝なので、候補数だけvoiceを重ねる計算やbeatingは導入しない。包絡・eventの候補条件付き保存が主要費用であり、低次元のF0重みだけを残せば十分とはしない。

## 12. 結論の限界

この提案で確定したのは、**sourceの真のF0を選べなくても、どの情報を保存し、何を編集規約として捨て、どの一音声を出すかを決められる**という設計上の道筋である。

代償はsource partial identityの放棄と、候補条件付き包絡・位相規約への依存である。分布が鋭くなる、品質が上がる、自然さが保たれるという測定結果はない。現PMLを置き換える採用判断でもない。候補を保持した解析と絶対target-Hz制御をつなぐ、一つの具体的・反証可能な契約として提案する。

## 一次資料・公式source

[WORLD-SYN]: https://github.com/mmorise/World/blob/c794856b537758a3d300757db2e5e31685a822c2/src/synthesis.cpp
[WORLD-CT]: https://github.com/mmorise/World/blob/c794856b537758a3d300757db2e5e31685a822c2/src/cheaptrick.cpp
[WORLD-STATE]: https://github.com/mmorise/World/blob/c794856b537758a3d300757db2e5e31685a822c2/src/world/synthesisrealtime.h
[SMS-TRANS]: https://github.com/MTG/sms-tools/blob/8b685e68172be2e7a067ba351f9ee04af3042e60/smstools/transformations/harmonicTransformations.py
[SMS-HARM]: https://github.com/MTG/sms-tools/blob/8b685e68172be2e7a067ba351f9ee04af3042e60/smstools/models/harmonicModel.py
[BAYES]: https://github.com/LimingShi/Bayesian-Pitch-Tracking-Using-Harmonic-model/blob/ad9a3fcfe60d2e97a635a92c2076ff1978ae3697/BF0NLS_MATLAB/BayesianfastF0NLS.m
[CONTINUOUS]: https://www.isca-archive.org/interspeech_2017/alradhi17_interspeech.pdf
