2024/12/30

FDN の結合

FDN の結合を読む (github.io)

2 つ以上のフィードバックディレイネットワーク (FDN) を結合する方法について調べました。今回は元となる小さいフィードバック行列を組み合わせて、より大きいフィードバック行列を構築するというアプローチをとっています。

FDN をフィードバック行列によって結合するときは、元となる小さいフィードバック行列の大きさはすべて等しくなければならないという制約があることがわかりました。また「0 を含む形」の結果も良くなかったので、このアプローチはリアルタイムでのドラムの合成には向いていない気がします。

画像は FDN の結合に使う係数を求める連立方程式です。 y と h_ij が変数、 I は単位行列、 n は元となるフィードバック行列の数です。

2024/12/28

MaybeCrash

Try MaybeCrash (github.io)
Source code (github.com)

MaybeCrash is a crash cymbal synthesizer using feedback delay network (FDN).

It sounds more like splash cymbal rather than a crash. Also, the gently struck sound is not good because the tuning is not quite right. To render the gently struck sound, set `Slicer -> nRegion` to 2 or more.

It is known that the sound of a crash cymbal can be approximated using von Karman equation (sound demo, paper). However, it is also known that the method is a bit too slow for real-time (another paper, mentioned in §1). There's also a method described by Dan Stowell, which is not based on physics but it runs on real-time and sounds good. The core insight of Dan Stowell's method is the tuning of input signal. It feeds low-passed white noise into a bunch of resonators. The magic is to change the cutoff of low-pass filter over time using an envelope. MaybeCrash is using a method similar to Dan Stowell's, however the difference is using FDN instead of resonators.

---

MaybeCrash を試す (github.io)
ソースコード (github.com)

MaybeCrash はフィードバックディレイネットワーク (FDN) を使ったクラッシュシンバルのシンセサイザです。

どちらかと言えばスプラッシュシンバルのような音が出ます。また、チューニングが足りていないので弱く叩いたときの音は苦手です。 `Slicer -> nRegion` を 2 以上にすると異なる強さで叩いた音を聞くことができます。

クラッシュシンバルの音は von Karman 方程式で近似できる (音のデモ, 論文) ことが知られています。しかし、リアルタイムで動かすことは難しい (論文, §1 で言及) ことも知られています。物理モデルではないですが、リアルタイムで動く手法としては Dan Stowell さんによるレゾネーターを使った方法があります。 Dan Stowell さんの手法の肝はレゾネーターに入力する信号のチューニングです。ローパスをかけたホワイトノイズなのですが、時間とともにローパスのカットオフを変えることで雰囲気を出しています。 MaybeCrash は Dan Stowell さんの手法と似たような仕組みですが、レゾネーターの代わりに FDN を使っている点が異なります。

2024/11/30

CoupledSnare

Try CoupledSnare (github.io)
Source code (github.com)

CoupledSnare is a modified version of RoughlySnare. It sounds quite nice.

In RoughlySnare, 2 feedback delay networks (FDNs) are serially connected. In CoupledSnare, 2 FDNs are combined into a single bigger network. 

To shrink the size of snare drum, try raising `Delay -> Frequency` to 600 Hz, and `Tone Shaping -> Lowpass` to 10000 Hz.

---

CoupledSnare を試す (github.io)
ソースコード (github.com)

CoupledSnare は RoughlySnare の改変版です。なかなかいい音が出ます。

RoughlySnare では 2 つのフィードバック・ディレイ・ネットワーク (FDN) を直列に接続していました。 CoupledSnare では 2 つの FDN を 1 つの大きな FDN に結合して相互にフィードバックがかかるようになっています。

`Delay -> Frequency` を 600 Hz 、 `Tone Shaping -> Lowpass` を 10000 Hz あたりに上げるとスネアドラムの径が小さくなったような音が出ます。

2024/11/07

"Uhhyou Plugins" on Discord / Discord の "Uhhyou Plugins" サーバー

"Uhhyou Plugins" server is now set up on Discord. It might be more convenient than email. Feel free to post anything about the plugins or related topics.

---

メール以外のコンタクト方法の要望があったので、 Discord 上に "Uhhyou Plugins" という名前のサーバーを用意しました。何かあればプラグインや関連する話題について、お気軽に投稿してください。

2024/10/24

SpectralPhaser

Download SpectralPhaser (github.io)
Source code (github.com)

SpectralPhaser is an effect that produces a phaser-like sound by applying a mask in the frequency domain. In addition to FFT, fast Walsh-Hadamard transform (FWHT) and Haar transform are available.

Discrete Fourier transform turns the input signal into a series of sine and cosine. Similarly, FWHT and Haar transform turn the signal into a series of square waves, which tend to sound rough to the human ear.

---

SpectralPhaser のダウンロードとマニュアル (github.io)
ソースコード (github.com)

SpectralPhaser は周波数領域でマスクをかけることでフェイザのような音が出るエフェクタです。 FFT に加えて、高速 Walsh-Hadamard 変換 (FWHT) 、 Haar 変換といった変換が使えます。 

FFT の計算している離散フーリエ変換は、入力信号を sin と cos の足し合わせに変換します。 FWHT と Haar 変換は sin, cos の代わりに矩形波の足し合わせに変換するので、人間の耳にはざらざらとした音になりがちです。

2024/10/16

RoughlySnare

Try RoughlySnare (github.io)
Source code (github.com)

RoughlySnare is a snare drum synthesizer based on mymembrane~ PureData patch by MikeMorenoDSP.

The drum membrane texture of mymembrane~ comes from a schroeder allpass placed on the feedback path of a comb filter. It's pretty fun to change the allpass parameters to add some expressions. Snare wire is a bandpassed noise following the amplitude of comb filter output, which is simple but sounds good.

RoughlySnare puts the cascade of (delay) -> (allpass) -> (snare wire) into a feedback delay network (FDN). There's also a second FDN to add tones. Delay times are set according to preferred modes of timpani.

---

RoughlySnare で遊ぶ (github.io)
ソースコードを見る (github.com)

RoughlySnare はスネアドラムのシンセサイザです。 MikeMorenoDSP さんの mymembrane~ という PureData のパッチを基にしています。

mymembrane~ はコムフィルタのフィードバック経路に Schroeder オールパスを置いて、ドラムの膜のような質感を出しています。オールパスに関するパラメータで音に表情をつけられるのが面白いです。スナッピーはコムフィルタの出力振幅にあわせてノイズを上げ下げしているだけなのですが、いい音がします。

RoughlySnare では、ディレイ -> オールパス -> スナッピーの接続を取り出して、フィードバックディレイネットワーク (FDN) に投げ込んでいます。また 2 つめの FDN によってトーンを追加できるようにしています。ディレイ時間の設定にはティンパニーの preferred modes を使っています。

2024/10/12

DoubleLoopCymbal

Download DoubleLoopCymbal (github.io)
Source Code (github.com)

DoubleLoopCymbal is a synthesizer that produces a sound somewhere between hi-hat and triangle. Metallic texture comes from 2 all-pass loops.

Block diagram is available on the manual page.

It is making some metallic noise, however it sounds synthetic when listening closer. Different tunings are tried, but I couldn't manage to add a better closing texture, and the crash texture which appears on a real cymbal when hit hard. It seems like closing of hi-hat can't be made from allpass loops. To stop sound, the feeds of allpasses should be moved to 0. However changing the feeds adds a texture similar to a phaser. On the crash texture, I found a better method described by henry bracey (link, description is on a comment). This method is not implement in this time since I wanted to make DoubleLoopCymbal lighter than ClangCymbal.

There are also a bug fix for GlitchSprinkler and a new parameter for GenericDrum. Both could be downloaded from the release page on GitHub.

---

DoubleLoopCymbal のダウンロードとマニュアル (github.io)
ソースコード (github.com)

DoubleLoopCymbal はハイハットとトライアングルの間のような音が出るシンセサイザです。オールパスループというディレイのつなぎ方を使って金属的な質感を出しています。

マニュアルに大まかなブロック線図を掲載しています。

金属音は出ていますが、よく聞くと胡散臭い音をしています。チューニングをいろいろと試したのですが、クローズの質感と、強く叩いたときのクラッシュシンバルのような質感は出せなかったです。クローズについてはオールパスループでは無理です。音を止めるにはフィードを下げなければなりませんが、そうするとフェイザをかけたような質感が現れてしまいます。クラッシュについては henry bracey さんによる良さそうな方法 (リンク、コメント欄に解説あり) を見つけたのですが ClangCymbal よりも軽くしたかったので今回は実装を見送りました。

また GlitchSprinkler のバグ修正と GenericDrum の機能追加も行いました。どちらもリリースページからダウンロードできます。

2024/08/29

適応ノッチフィルタの実装

適応ノッチフィルタの実装を読む (github.io)

適応ノッチフィルタの実装について調べました。適応ノッチフィルタはサイン波にノイズが加わった信号から、サイン波だけを消すときに使えます。ただしノイズの種類によってはうまく動かないこともあります。

今回調べた適応ノッチフィルタは内部で位相差のある 2 つの信号を作って振幅変調 (AM) をかけています。入力がサイン波であればカットオフ周波数の周りでの位相差によって AM 信号の直流成分の符号が変わります。この直流の符号の向きが入力のサイン波の周波数へと向かうようにする、というのが適応の仕組みです。直流成分の符号は位相差を φ とすると sgn(-cos(φ)) で計算できます。 sgn は符号関数です。

図は Ishibashi らによる “DSP Implementation of Adaptive Notch Filerts With Overflow Avoidance in Fixed-Point Arithmetic” で紹介されていた CPZ-ANF という名前の適応ノッチフィルタの、内部の 2 つの信号の位相差を示しています。 "Cutoff" の周りで位相差が -π/2 をまたぐので、位相差が -3π/2 を上回る範囲では適応がうまくいきます。位相差が -3π/2 を下回るような高い周波数では適応は失敗しがちです。

2024/08/26

より手軽な LFO のテンポシンク

より手軽な LFO のテンポシンクを読む (github.io)

以前の LFO のテンポシンクよりも手軽な方法を思いついたので試しました。 EMA フィルタによる同期と、蔵本モデルによる同期を紹介しています。以前の方法は状態遷移が煩雑でしたが、今回の方法は状態遷移が不要です。 DAW 上で動くプラグインの LFO であれば、同期先の周波数と位相がどちらも分かっているので EMA フィルタによる同期が適しています。

画像は逆走を防いだ EMA フィルタによる同期の例です。

2024/08/15

Integer Sample Tuning Table / 整数サンプル調律の表

Take a look at integer sample tuning table (github.io)

This is a tuning table used in GlitchSprinkler. They are named as `Discrete` tunings in GlitchSprinkler plugin. Web synth version is always using a tuning that `Min period` in the table parameter is 2 samples.

The errors of pitches are quite bad at higher frequencies, even around 1000 Hz.

---

整数サンプル調律の表を見る (github.io)

この調律は GlitchSprinkler で使われているものです。プラグイン版では Tuning の `Discrete` のいずれかを選べば対応する調律が使えます。 Web シンセ版は表の `Min period` を 2 サンプルに設定したときの調律に固定されています。

ピッチの誤差は高い周波数で悪くなり、 1000 Hz あたりでもかなりずれています。

2024/08/11

Release of GlitchSprinkler Plugin / GlitchSprinkler のプラグイン版を公開

GlitchSprinkler Manual (github.io)

GlitchSprinkler plugin version is ready. Download link is available on the manual page linked above.

GlitchSprinkler is a synthesizer specialized to play fast arpeggio. It is mostly the same as the web synth version, but a resonant low-pass filter is added. It has some character that comes from integer sample period and a bit unusual note stealing.

By making the period an integer sample, it is possible to make it appear as though aliasing is not present to the human ear. This method is faster to calculate than proper anti-aliasing, but has a side effect that makes higher notes to be out of tune. It also can't work well with pitch bend.

The note stealing affects rhythm. A note changes or stops only when the oscillator completes the current cycle. This jitters the rhythm especially when the tempo is fast, or the note is low.

---

GlitchSprinker のマニュアル (github.io)

GlitchSprinkler のプラグイン版を公開しました。ダウンロードは上にリンクしたマニュアルページからできます。

GlitchSprinkler は速いアルペジオに特化したシンセサイザです。 Web シンセ版とほとんど同じですが、ローパスフィルタが追加されています。音については、周期が必ず整数サンプルになることと、変なノートスティーリングによる独特の癖があります。

周期を整数サンプルにすることにより、人間の耳にはエイリアシングが聞き取れないようにごまかすことができます。この方法はまともなアンチエイリアシングに比べると計算が速いのですが、高い音程ほどピッチがずれるという副作用があります。また、ピッチベンドとの相性も悪いです。

ノートスティーリングはリズムに影響を与えています。ノートの変更や停止は、オシレーターが現在のサイクルを完了したときにのみ行われます。これにより、テンポが速い場合やノートが低い場合に特にリズムが揺れます。

2024/08/06

Dark Color Scheme for Uhhyou Web Synthesizers / Uhhyou Web Synthesizers のダークモード

Dark color scheme is added for Uhhyou Web Synthesizers.

This dark color scheme is just an invert of light color scheme. It's not 100% invert, but 87.4% (≈ 1 - (0x20 / 0xff)) to make background color to be #202020.

Currently, the color scheme only respects the setting provided by operating system. The pages are using `prefers-color-scheme`, however there's no easy way to change it within web pages. I was hoping that calling something like `window.setColorScheme("dark")` to change the color scheme, but it seems like there's no way to toggle `prefers-color-scheme` from JavaScript.

---

ダークモードを Uhhyou Web Synthesizers に追加しました。

このダークモードの配色はライトモードの単なる反転です。ただし、背景色を #202020 にするために 100% ではなく 87.4% (≈ 1 - (0x20 / 0xff)) の反転になっています。

配色は OS の設定によってのみ変更できます。 `prefers-color-scheme` を使っているのですが、このメディア特性 (media feature) をページ内から変更する方法が無いようです。今後、 `window.setColorScheme("dark")` のような形で簡単に変更できるようになって欲しいところです。


2024/07/28

sin, cos を反復的に計算するアルゴリズムのレシピ

 「sin, cos を反復的に計算するアルゴリズムのレシピ」 を読む (github.io)

Martin Vicanek による “A New Recursive Quadrature Oscillator” をもとにして sin, cos を反復的に計算するアルゴリズムの実装についてまとめました。ほとんどの用途では標準ライブラリの sin, cos で十分ですが、加算合成シンセサイザでは計算量を節約するために反復的に計算するアルゴリズムを使いたいときがあります。

画像は各アルゴリズムの周波数を変えたときの振幅の変化を示した図です。

2024/07/26

「n dB/oct のスロープを持つフィルタ」の改訂

n dB/octのスロープを持つフィルタ」の内容が怪しかった、というよりも物足りなかったので改訂しました。主な追加点は「IIR のハイシェルフフィルタを使う方法」の節で、この方法が最もまともに任意の傾きを設定できます。 以前に実装した Slope Filter では 1 次の整合ハイシェルフフィルタを使っていたのですが、バイリニア変換した 1 次ローパスにバイパスを足し合わせたハイシェルフフィルタのほうが適していたことが分かりました。 

FIR では -6 dB/oct より緩やかなスロープであればピンクノイズフィルタが使えます。 Exponential 窓による FIR フィルタは -12 dB/oct のスロープだけであれば近似できるようです。

2024/07/23

GlitchSprinkler Plugin is under Development

Plugin version of GlitchSprinkler is in progress. It will take more time for testing, making presets, and writing manual. Source code is already available on `develop` branch on the git repository. For now, It's better not to use for productions.

Original Web Synth: https://ryukau.github.io/UhhyouWebSynthesizers/GlitchSprinkler/synth.html

---

プラグイン版の GlitchSprinkler を制作中です。テスト、プリセットの作成、マニュアルの作成にまだ時間がかかります。ソースコードは GitHub リポジトリの `develop` ブランチから入手できます。互換性のない変更を加えるかもしれないので、まだ本番には使わないことをお勧めします。

元になった Web シンセ: https://ryukau.github.io/UhhyouWebSynthesizers/GlitchSprinkler/synth.html

「お手軽なFIRフィルタのレシピ」の改訂

お手軽なFIRフィルタのレシピ」の記事の内容がかなり怪しかったので改訂しました。「n dB/octのスロープを持つフィルタ」も近々改訂します。

2024/07/02

FL Studio 2024 の Spreader

I got curious about the new Spreader plugin added into FL Studio 2024, so I attempted to recreate it in Patcher. It went surprisingly well. The resulting flp was posted on Image-Line forum with a title of "Spreader recreated in Patcher" (the link requires Image-Line account).

The image is a block diagram of recreated patch that resembles Spreader.

Edit on 2024/10/03: Fixed the image to correct one. Previous image was wrong.

---

FL Studio 2024 で増えた Spreader の仕組みが気になったので Patcher で再現を試みたところ、うまくいきました。 Image-Line フォーラム (要アカウント) に "Spreader recreated in Patcher" というトピックで結果の flp を投稿しています。

画像は再現したパッチをブロック線図にしたものです。

2024/10/03 の変更: 画像を正しいブロック線図のものに修正。

2024/05/08

CollidingComb

Try CollidingComb (github.io)
Read source code (github.com)

CollidingComb is another drum synthesizer based on delays. This one is basically a lightweight version of GenericDrum.

The sound is okay even when the number of comb filters are reduced to 2. The number of comb filters can be changed with `nComb` parameter. It also kind of resembles the texture of WireWireCollision.

It is using feedback comb filters connected in parallel, instead of a feedback delay network. The internal connection is similar to KSCymbal and CollidingCombSynth. Oscillator is a mixture of white noise (uniform distribution) and multiple sines. The multiple sine part is similar to EnvelopedSine.

---

CollidingComb を試す (github.io)
ソースコードを読む (github.com)

CollidingComb はディレイを使ったドラムシンセサイザです。 GenericDrum の軽量版です。

内部のコムフィルタの数を 2 まで減らしても、それほど悪くない音が出ます。コムフィルタの数は `nComb` パラメータで変更できます。音の質感は WireWireCollision とやや似ています。

GenericDrum との違いは FDN のかわりに、並列につないだコムフィルタを使っていることです。内部の接続は KSCymbalCollidingCombSynth と似ています。オシレータはホワイトノイズと複数のサイン波の組み合わせです。サイン波の部分のオシレータは EnvelopedSine と似たような形を使っています。

2024/04/26

SquareMorph

Try SquareMorph (github.io)
Read source code (github.com)

SquareMorph is a synthesizer that morphs 2 waveform using Walsh-Hadamard, or Haar transform. Some of the waveform are based on CZ oscillators.

It's possible to use arbitrary orthogonal matrix to perform similar morphing. However, it's not implemented because the computation time was too long.

---

SquareMorph を試す (github.io)
ソースコードを読む (github.com)

SquareMorph は CZ オシレータで生成した 2 つの波形を Walsh-Hadamard あるいは Haar 変換を使ってモーフィングするシンセサイザです。

任意の直行行列でも似たようなモーフィングができるはずですが、行列の大きさが 2048 になるあたりで計算時間が実用的でない長さになったので諦めました。

2024/04/24

IntegerChord

Try IntegerChord (github.io)
Read source code (github.com)

IntegerChord is a subtractive synthesizer which plays random chord. As same as IntegerArpeggio, the period of a waveform is set to an integer samples which makes aliasing less perceivable to human ears.

Half of the reason this synth was made is to test resonant filters. It's not obvious due to amplitude normalization, but output gain of the resonant filters aren't well tuned. Below are links related to the resonant filters used in this time.

Resonant filters are also added to IntegerArpeggio. However, slicer might not work well when the filters are applied.

On a different topic, there's a proposal to add masonry layout to CSS (MDN, WebKit). On UhhyouWebSynthesizers, the layout is trying to fix the width of a column, while also trying to make the number of columns variable. Current implementation is displaying `inline-block` sections into a text that is oriented from top-to-bottom, then left-to-right. Probably because of this strange layout, the layout slightly differs on different browsers. I tried column layout, but it changed the width of a column when the width of browser is changed. It might take more time, but I'd like to try masonry layout when it's implemented in Firefox, Safari, and Chrome.

---

IntegerChord を試す (github.io)
ソースコードを読む (github.com)

IntegerChord はランダムにコードを生成する減算式シンセサイザです。 IntegerArpeggio と同様に、波形の周期を整数サンプルとすることで、エイリアシングが聞き取りにくくなっていることが特徴です。

このシンセの半分くらいはレゾナンスをつけられるフィルタ (レゾナントフィルタ) をテストする目的で作られました。 IntegerChord ではレンダリング後に振幅を正規化しているのでわかりづらいですが、どのフィルタも出力ゲインの調整が適当です。以下は今回使ったフィルタに関連するリンクです。

ついでに IntegerArpeggio にもレゾナントフィルタを追加しています。ただしフィルタをかけるとスライサでうまく切れなくなるときがあります。

話は変わりますが、 masonry layout という CSS の新機能が提案されているそうです (MDN, WebKit) 。 UhhyouWebSynthesizers では列の幅を固定、列の数を可変とするようにトップレベルのレイアウトを行っています。今の実装では、縦書きの左から右に向かうテキストの中に、各セクションが inline-block として表示されるようになっています。この変なレイアウトのせいなのか、現状ではブラウザによってレイアウトが微妙に異なってしまっています。 Column layout も試してみたのですが、列の幅を固定できなかったので使っていません。まだ時間がかかるかもしれませんが、 masonry layout が Firefox, Safari, Chrome に実装されたら試してみたいところです。

2024/04/08

多項式オシレータ

Read 多項式オシレータ (Polynomial Oscillator) at github.io

An article was written to document the polynomial oscillator used in GlitchSprinkler and IntegerArpeggio. It's written in Japanese, so I'd recommend to use machine translation if you are interested in. The content is an application of matrix calculation. There's also a section about various method to compute oscillator phase.

The sound is not so good because it tends to lack higher overtones. It's usually better with FM or some other ways to add higher overtones, then pass the output to a low-pass filter.

The image is the interface of polynomial oscillator used in web synthesizers.

---

多項式オシレータを読む (github.io)

Web シンセの GlitchSprinklerIntegerArpeggio で使った多項式オシレータについてまとめました。内容はごく基礎的な行列計算の応用です。ついでに位相の計算についても様々なパターンを紹介しています。

音の傾向としては高い倍音が出ないので、そのままでは物足りないです。 FM などで高い倍音を加えた上でローパスフィルタを使うなどの工夫が必要です。

画像は web シンセに組み込んだ多項式オシレータのインターフェイスです。

2024/03/24

Glitch Sprinkler

Glitch Sprinkler is an album characterized by fast, high, and slightly out-of-tune synthesizer phrases. Throughout the album, a high-pitched alarm-clock-like sound keeps ringing, but for some reason I find myself feeling sleepy while listening to it.

The track titles are either cut up from random web pages, or some random terms that came up on my head. Below is a copy of lengthy flavor text on Bandcamp page.

---

This album mainly uses web synthesizers GlitchSprinkler and IntegerArpeggio. The characteristic of these two synthesizers is integer sample period, that is the length of a waveform doesn't have fractional part when represented in samples. A nice thing about this integer sample period is that the aliasing overtones added by some distortions will overlap to the frequencies of a original waveform. For example, the melody that starts at 0:15 in Sendung is mostly happened by aliasing of an overdrive.

That said, most of the tracks in this album aren't using integer sample period because of the use of pitch correction ("Stretch" option in FL Studio Sampler) to compose some chords. Also, integer sample period has a huge downside: it becomes increasingly out-of-tune at higher pitches. This out-of-tune effect is quite noticeable, so it's not that useful unless you are making strange music like this album. You can listen how out-of-tune it is in the track Undefined.

Below is a list of other subtle experimentations:

- 187.5 BPM is used as the tempo of many tracks. `(sampling rate in Hz) / (arbitrary period in samples) -> 48000 / 256 = 187.5`.
- 768000Hz is a track featuring GenericDrum.
- The bass at the middle of 4x oversampling is made from high-passed impulse, which I think suitable for fast 16 beat.
- Cumulonimbus is an improvisation, but the rhythm is quantized.
- No vocals is featuring 5 equal temperament.
- Recobbled, Rethieved, and Sad time aren't using GlitchSprinkler nor IntegerArpeggio. Their textures are different because of this.

---

Glitch Sprinkler は、速く、高く、ややチューニングの狂ったシンセサイザのフレーズが特徴的なアルバムです。アルバムを通して目覚まし時計のような高い音が鳴り続けるのですが、聞いているとなぜか眠くなってきます。

曲名は適当な web ページからのカットアップか、頭に浮かんだ適当な単語です。以下は Bandcamp に掲載している長々としたフレーバーテキストです。

---

このアルバムでは web シンセサイザの GlitchSprinkler と IntegerArpeggio を主に使っています。この 2 つのシンセサイザは波形の周期が常に整数サンプルになることが特徴で、歪みなどで倍音が付加されてもエイリアシングした成分が元の周波数成分と重なることで独特の響きが出ます。例えば Sendung の 0:15 から入るメロディーはほとんどオーバードライブのエイリアシングによるものです。

とは言ったものの、フレーズを平行移動するためにピッチ補正 (FL の Sampler の Stretch) を使ったことで、周期が整数サンプルになっていない曲がほとんどです。また、周期を整数サンプルにそろえると高い音程のチューニングが大きくずれてしまうという欠点があります。このチューニングのずれは Undefined で聞くことができます。

以下、その他の細かい点です。

- テンポが 187.5 の曲が多数あります。 187.5 という値は、サンプリング周波数の 48000 Hz を 256 サンプルで割った値です。
- 768000Hz のドラムは、サブベース以外 web シンセ版の GenericDrum を使っています。
- 4x oversampling の序盤のベースは、速い 16 ビートを強調するためにインパルスにハイパスをかけた音を使っています。
- Cumulonimbus は即興をクオンタイズしただけの曲です。
- No vocals の冒頭は 5 平均律です。
- Recobbled, Rethieved, Sad time は GlitchSprinkler と IntegerArpeggio を使っていないので、他の曲とは質感が異なっています。

2024/02/25

Release of UhhyouPluginsJuce / UhhyouPluginsJuce のリリース

Plugins in UhhyouPluginsJuce repository are now available on Release page. On Linux, it's probably better to build from source code, because some library versions may differ from the ones on GitHub Actions runner.

---

前 2 回の投稿でリンクした UhhyouPluginsJuce のプラグインを Release ページからダウンロードできるようにしました。 Linux 環境では動的リンクを行うライブラリのバージョンが一致しなければ動かないので、ソースコードからビルドすることを推奨します。

2024/02/24

TwoBandStereo

TwoBandStereo is a plugin to narrow down stereo spread.

This plugin is made to test FIR Linkwitz-Riley filter implementation linked in "クロスオーバーフィルタの実装". Currently only available as source code. Another reason this plugin was made is that it felt cumbersome to use Frequency Splitter in FL Studio just to narrow down the stereo spread of lower band.

---

TwoBandStereo は 2 バンドのステレオの狭さを調整するプラグインです。

クロスオーバーフィルタの実装」で紹介している FIR の Linkwitz-Riley フィルタのテスト用に作った簡易なプラグインなのでソースコードのみで公開しています。個人的な話ですが、低域だけステレオを狭めたいときに FL Studio の Frequency Splitter を使うのが手間だったので独立したプラグインにしました。

2024/02/17

AM のアンチエイリアシング

Read "AM のアンチエイリアシング" (github.io)

The above link is an article about anti-aliasing of amplitude modulation (AM). It's written in Japanese, so I'd recommend to use machine translation if you are interested in. The content is some basic application of multi-rate processing and frequency shift.

The image shows a block diagram of anti-aliasing of double side-band AM.

A tip is that it's better to set higher stop-band gain (-60 dB) for elliptic high-pass filter, which is used for lower side-band (LSB) anti-aliasing. For musical application, I'd like to set -145 dB as a stop-band gain. However higher stop-band gain makes the transition band narrower, and it prevents to remove too much contents from lower frequencies.

These anti-aliasing techniques are implemented as a plugin AmplitudeModulator. The sound is not interesting, so the plugin is currently only available as source code in the link below.

UhhyouPluginsJuce (github.com)

Edit on 2024-02-18: Fixed the image to the correct one. Previous image was anti-aliasing of lower side-band.

---

AM のアンチエイリアシングを読む (github.io)

GrowlSynth の音の改善のために AM のアンチエイリアシングについて試したことをまとめました。内容はマルチレート処理と周波数シフトの応用です。

記事のトップの画像は両側波帯が出る AM (DSB-AM) のアンチエイリアシングの処理を示したブロック線図です。

リンク先の記事で軽く触れていますが、コツは下側波帯のエイリアシングを抑える楕円ハイパスフィルタのストップバンドゲインを、音楽向けとしては高めの -60 dB に設定することです。 -145 dB に設定することが理想ですが、遷移帯の幅が広くなりすぎてエイリアシングか低域の低減が避けられなくなります。

AmplitudeModulator というプラグインとしても実装しました。音は面白くないので今のところソースコードのみを下のリンク先で配布しています。 

UhhyouPluginsJuce (github.com)

2024/02/18 変更: 画像を正しいブロック線図に修正。以前のものは下側帯波のアンチエイリアシングのブロック線図だった。

2024/01/24

Randomization Lock / ランダマイズのロック

Randomization lock is now available on UhhyouWebSynthesizers. Clicking a label next to a parameter enables a lock. The label becomes gray when the lock is enabled.

---

UhhyouWebSynthesizers のランダマイズをパラメータごとに有効、無効にできるロック機能を追加しました。パラメータの隣にあるラベルをクリックするとロックの切り替えができます。ロック有効時はラベルが灰色に変わります。

2024/01/23

Import/Export Is Now Available on UhhyouWebSynthesizers / インポート・エクスポートを UhhyouWebSynthesizers に追加

Import/Export functionality is added on UhhyouWebSynthesizers. They can be used to save the parameter state as a JSON file. The new buttons are added under Random button, which is placed on top-left part of the interface.

  • Export button opens a dialog to save parameters to a file.
  • Import button opens a dialog to load parameters from a file (.json).
  • Push button temporarily saves current parameters to the pull-down menu right next to Random button.
The temporary saves have names like `tmp - <timestamp>`. <timestamp> part will be replaced to an ISO 8601 time which looks like "2024-01-01T012345.678+0900" for example. Note that reloading the page clears the temporary saves.

---

UhhyouWebSynthesizers のパラメータの状態を JSON 形式でインポート・エクスポートできるようになりました。画面左上の Random ボタンの下に Push, Export, Import ボタンが増えています。

  • Export ボタンでパラメータをファイルに保存するダイアログを表示。
  • Import ボタンで保存したパラメータを読み込むダイアログを表示。
  • Push ボタンで一時的に現在のパラメータを保存。
Push ボタンで一時的に保存されたパラメータは Random ボタンの隣のメニューに `tmp - <タイムスタンプ>` という名前で追加されます。 <タイムスタンプ> の部分には "2024-01-01T012345.678+0900" のような ISO 8601 形式の時間が入ります。ブラウザの画面を更新すると Push ボタンの一時保存データは失われるので注意してください

2024/01/02

FV1Reverb

Try FV1Reverb (github.io)
Read Source Code (github.com)

FV1Reverb is a reverb using the loop structure described in a page of Spin Semiconductor (Reverberation section).

Metallic texture can be obtained by lowering `Time Multiplier`. There's no multi-tap delay before inputting the loop, so it might be better to use with other short reverb.

---

FV1Reverb を試す (github.io)
ソースコードを読む (github.com)

FV1Reverb は Spin Semiconductor のページ (Reverberation の節) で紹介されていたループ構造を使ったリバーブです。

`Time Multiplier` を下げると金属音が出せます。ループの前のマルチタップディレイはついていないので、別の短いリバーブと組み合わせるといいかもしれません。