gndless_oscillator
Periodic waveform and noise oscillators for Veryl.
| Version | 0.4.0 |
|---|---|
| Repository | https://github.com/AkiyukiOkayasu/gndless-oscillator-veryl |
| License | MIT OR Apache-2.0 |
Modules
| MultiWaveCore | マルチ波形生成コアモジュール |
|---|---|
| MultiWaveOscillator | 波形選択式オシレーター |
| PinkNoise | ピンクノイズジェネレーター (Voss-McCartney Algorithm + Xorshift32) |
| PwmSquareOscillator | PWM変調可能な矩形波オシレーター |
| SawOscillator | ノコギリ波オシレーター |
| SawWaveCore | ノコギリ波生成コアモジュール |
| SineOscillator | サイン波オシレーター (LUTのみ) |
| SineOscillatorLerp | サイン波オシレーター (LUT + 線形補間) |
| SineWaveCore | サイン波生成コアモジュール (LUTのみ) |
| SineWaveLerpCore | サイン波生成コアモジュール (LUT + 線形補間) |
| SquareWaveCore | 矩形波生成コアモジュール |
| TriangleOscillator | 三角波オシレーター |
| TriangleWaveCore | 三角波生成コアモジュール |
| WhiteNoise | ホワイトノイズジェネレーター (Xorshift32 Algorithm) |
Packages
| WaveTypes | 波形タイプを定義するパッケージ |
|---|
Modules
| MultiWaveCore | マルチ波形生成コアモジュール |
|---|---|
| MultiWaveOscillator | 波形選択式オシレーター |
| PinkNoise | ピンクノイズジェネレーター (Voss-McCartney Algorithm + Xorshift32) |
| PwmSquareOscillator | PWM変調可能な矩形波オシレーター |
| SawOscillator | ノコギリ波オシレーター |
| SawWaveCore | ノコギリ波生成コアモジュール |
| SineOscillator | サイン波オシレーター (LUTのみ) |
| SineOscillatorLerp | サイン波オシレーター (LUT + 線形補間) |
| SineWaveCore | サイン波生成コアモジュール (LUTのみ) |
| SineWaveLerpCore | サイン波生成コアモジュール (LUT + 線形補間) |
| SquareWaveCore | 矩形波生成コアモジュール |
| TriangleOscillator | 三角波オシレーター |
| TriangleWaveCore | 三角波生成コアモジュール |
| WhiteNoise | ホワイトノイズジェネレーター (Xorshift32 Algorithm) |
MultiWaveCore
マルチ波形生成コアモジュール 位相入力から4種類の波形(Sine, Triangle, Saw, Pwm)を生成し、選択出力 各波形は自然なレイテンシーのまま出力される: Sine (線形補間): 3クロック、Triangle/Saw/Pwm: 0クロック (組み合わせ) 波形切替は組み合わせmuxで即時反映される。 Sineは他波形より3クロック遅れて出力される (定数遅延)。 この差は楽器用途では音色に影響しないため、遅延整列は行わない。 可聴性の分析はREADME「レイテンシー契約」を参照。
Ports
| clk | input | clock | クロック |
|---|---|---|---|
| phase | input | gndless_nco Phase phase_t | 位相入力 (0 ~ 2^32-1) |
| wave_type | input | WaveType | 波形タイプ選択 |
| duty_cycle | input | gndless_nco Phase phase_t | PWMデューティ比 (Pwm以外では無視) |
| audio | modport | gndless_fixedpoint __FixedPointValue__gndless_fixedpoint_Q4_23 output_port | 出力波形 (Q4.23形式) |
MultiWaveOscillator
波形選択式オシレーター 4種類の波形(Sine, Triangle, Saw, Pwm)を切り替え可能 波形切替は組み合わせmuxで即時反映される (Sineのみ3クロックのレイテンシー)
Ports
| clk | input | clock | クロック |
|---|---|---|---|
| phase_rst | input | bbool | 位相ゼロリセット (同期) |
| phase_step | input | gndless_nco Phase step_t | 1クロックあたりの位相ステップ量 |
| wave_type | input | WaveType | 波形タイプ選択 |
| duty_cycle | input | gndless_nco Phase phase_t | PWMデューティ比 (Pwm以外では無視) |
| audio | modport | gndless_fixedpoint __FixedPointValue__gndless_fixedpoint_Q4_23 output_port | 出力波形 (Q4.23形式) |
PinkNoise
ピンクノイズジェネレーター (Voss-McCartney Algorithm + Xorshift32)
1/f特性を持つピンクノイズを生成する。 単一のXorshift32 RNGがフリーランし、サンプルカウンタの各ビット立ち上がりでラッチされることで1/fスペクトルを形成する。
24段構成: 行kは2^kサンプルごとに更新される 最低更新レート = sample_rate / 2^24 例: サンプルレート250kHz (50MHz/200分周) で最低更新レート約0.015Hz = サブオーディオ帯域までカバー
出力スケーリング: 各行をQ1.31として8bit算術右シフトした値 (±1.0) を32bit幅で24行加算する。 ÷8 (>>>3) で27bitへ縮小する (Q4.23の±8.0内に収まり、ピーク±3.0)。 RMS ≈ √(24/3)/8 ≈ 0.35 (-9 dBFS、WhiteNoise比 -4.2dB)
レイテンシー: 0クロック (行更新と同時に出力が更新される)
Parameters
| DIV | u16 | クロック分周比 |
|---|
Ports
| clk | input | clock | クロック |
|---|---|---|---|
| audio | modport | gndless_fixedpoint __FixedPointValue__gndless_fixedpoint_Q4_23 output_port | 出力波形 (Q4.23形式) |
PwmSquareOscillator
PWM変調可能な矩形波オシレーター レイテンシー: 0クロック (wave coreは組み合わせ)
Ports
| clk | input | clock | クロック |
|---|---|---|---|
| phase_rst | input | bbool | 位相ゼロリセット (同期) |
| phase_step | input | gndless_nco Phase step_t | 1クロックあたりの位相ステップ量: step = (ターゲット周波数 * 2^48) / システムクロック周波数 |
| duty_cycle | input | gndless_nco Phase phase_t | デューティ比 位相のどこまで High にするか (0 ~ 2^32-1) |
| audio | modport | gndless_fixedpoint __FixedPointValue__gndless_fixedpoint_Q4_23 output_port | 波形出力 (Q4.23形式) |
SawOscillator
ノコギリ波オシレーター レイテンシー: 0クロック (wave coreは組み合わせ)
Ports
| clk | input | clock | クロック |
|---|---|---|---|
| phase_rst | input | bbool | 位相ゼロリセット (同期) |
| phase_step | input | gndless_nco Phase step_t | 1クロックあたりの位相ステップ量: step = (ターゲット周波数 * 2^48) / システムクロック周波数 |
| audio | modport | gndless_fixedpoint __FixedPointValue__gndless_fixedpoint_Q4_23 output_port | 出力波形 (Q4.23形式) |
SawWaveCore
ノコギリ波生成コアモジュール 位相入力から波形を生成する純粋な変換モジュール Q4.23の値をbit sliceで直接生成する (中間のQ1.31変換を介さない) レイテンシー: 0クロック (組み合わせ)
Ports
| phase | input | gndless_nco Phase phase_t | 位相入力 |
|---|---|---|---|
| audio | modport | gndless_fixedpoint __FixedPointValue__gndless_fixedpoint_Q4_23 output_port | 出力波形 (Q4.23形式) |
SineOscillator
サイン波オシレーター (LUTのみ) テーブル引きのサイン波 第一象限(0~90度)の波形データ10bit分をROMに持っているので、実質的な分解能は12bit相当 レイテンシー: 1クロック (BRAM読み出し分)
Ports
| clk | input | clock | クロック |
|---|---|---|---|
| phase_rst | input | bbool | 位相ゼロリセット (同期) |
| phase_step | input | gndless_nco Phase step_t | 1クロックあたりの位相ステップ量: step = (ターゲット周波数 * 2^48) / システムクロック周波数 |
| audio | modport | gndless_fixedpoint __FixedPointValue__gndless_fixedpoint_Q4_23 output_port | 出力波形 (Q4.23形式) |
SineOscillatorLerp
サイン波オシレーター (LUT + 線形補間) 実質12bit相当のテーブル引きに線形補間を追加することで、高精細なサイン波を生成 レイテンシー: 3クロック (ROM読み出し | diff+係数 | 乗算。加算・符号は乗算後の組み合わせ)
Ports
| clk | input | clock | クロック |
|---|---|---|---|
| phase_rst | input | bbool | 位相ゼロリセット (同期) |
| phase_step | input | gndless_nco Phase step_t | 1クロックあたりの位相ステップ量: step = (ターゲット周波数 * 2^48) / システムクロック周波数 |
| audio | modport | gndless_fixedpoint __FixedPointValue__gndless_fixedpoint_Q4_23 output_port | 出力波形 (Q4.23形式) |
SineWaveCore
サイン波生成コアモジュール (LUTのみ) 位相入力から波形を生成する純粋な変換モジュール 第一象限(0~90度)の波形データ10bit分をROMに持っているので、実質的な分解能は12bit相当 レイテンシー: 1クロック (BRAM読み出し分)
Ports
| clk | input | clock | クロック |
|---|---|---|---|
| phase | input | gndless_nco Phase phase_t | 位相入力 (0 ~ 2^32-1) |
| audio | modport | gndless_fixedpoint __FixedPointValue__gndless_fixedpoint_Q4_23 output_port | 出力波形 (Q4.23形式) |
SineWaveLerpCore
サイン波生成コアモジュール (LUT + 線形補間) 位相入力から波形を生成する純粋な変換モジュール 実質12bit相当のテーブル引きに線形補間を追加することで、高精細なサイン波を生成 補間は27bit × 18bit (Q1.17係数) の乗算を使う レイテンシー: 3クロック (ROM読み出し | diff+係数 | 乗算。加算・符号は乗算後の組み合わせ)
Ports
| clk | input | clock | クロック |
|---|---|---|---|
| phase | input | gndless_nco Phase phase_t | 位相入力 (0 ~ 2^32-1) |
| audio | modport | gndless_fixedpoint __FixedPointValue__gndless_fixedpoint_Q4_23 output_port | 出力波形 (Q4.23形式) |
SquareWaveCore
矩形波生成コアモジュール 位相入力から波形を生成する純粋な変換モジュール レイテンシー: 0クロック (組み合わせ)
Ports
| phase | input | gndless_nco Phase phase_t | 位相入力 (0 ~ 2^32-1) |
|---|---|---|---|
| duty_cycle | input | gndless_nco Phase phase_t | デューティ比 位相のどこまで High にするか (0 ~ 2^32-1) |
| audio | modport | gndless_fixedpoint __FixedPointValue__gndless_fixedpoint_Q4_23 output_port | 出力波形 (Q4.23形式) |
TriangleOscillator
三角波オシレーター レイテンシー: 0クロック (wave coreは組み合わせ)
Ports
| clk | input | clock | クロック |
|---|---|---|---|
| phase_rst | input | bbool | 位相ゼロリセット (同期) |
| phase_step | input | gndless_nco Phase step_t | 1クロックあたりの位相ステップ量: step = (ターゲット周波数 * 2^48) / システムクロック周波数 |
| audio | modport | gndless_fixedpoint __FixedPointValue__gndless_fixedpoint_Q4_23 output_port | 出力波形 (Q4.23形式) |
TriangleWaveCore
三角波生成コアモジュール 位相入力から波形を生成する純粋な変換モジュール Q4.23の値をbit sliceで直接生成する (中間のQ1.31変換を介さない) レイテンシー: 0クロック (組み合わせ)
Ports
| phase | input | gndless_nco Phase phase_t | 位相入力 (0 ~ 2^32-1) |
|---|---|---|---|
| audio | modport | gndless_fixedpoint __FixedPointValue__gndless_fixedpoint_Q4_23 output_port | 出力波形 (Q4.23形式) |
WhiteNoise
ホワイトノイズジェネレーター (Xorshift32 Algorithm)
オーディオ用の高品質な疑似乱数ノイズを生成する。 リセット信号は不要で、起動後に非ゼロのシードで初期化される。
出力スケーリング: rng_state をQ1.31として解釈した値の8bit算術右シフトを直接Q4.23へ変換 RMS ≈ 1/√3 ≈ 0.577 (-4.8dBFS)
レイテンシー: 0クロック (rng_stateの更新と同時に出力が更新される)
Parameters
| DIV | u16 | クロック分周比 |
|---|
Ports
| clk | input | clock | クロック |
|---|---|---|---|
| audio | modport | gndless_fixedpoint __FixedPointValue__gndless_fixedpoint_Q4_23 output_port | 出力波形 (Q4.23形式) |
Module Prototypes
Interfaces
Packages
| WaveTypes | 波形タイプを定義するパッケージ |
|---|
WaveTypes
波形タイプを定義するパッケージ