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

2023/10/09

GenericDrum VST 3

Download GenericDrum Plugin (github.io)
Source Code (github.com)

VST 3 version of GenericDrum is now ready. I guess this one is easier to use than previous plugins because I did some musical tuning instead of exploring parameters.

GenericDrum is a generic drum synthesizer using delays. This one can make convincing snare and bass drum sounds. Cymbal sounds can be made, but it’s not good as good as more lower drum sounds.

For more information, the manual has a lengthy "Mechanism Overview" section.

---

GenericDrum プラグイン版をダウンロード (github.io)
ソースコード (github.com)

VST 3 版の GenericDrum が準備できました。このシンセではパラメータの探索をやめて音楽的なチューニングを心掛けたので今までのプラグインよりは使いやすいかと思います。

GenericDrum はディレイを使った汎用ドラムシンセサイザです。バスドラムやスネアドラムについては良い音が出ます。シンバルの音も出せますが、低いドラムの音ほど良くはありません。

マニュアルの「仕組み」の節で大まかな動作を解説しています。

2023/10/02

Preview of GenericDrum Plugin


This video shows VST 3 version of GenericDrum. It's work in progress.

---

この動画は GenericDrum の VST 3 版のプレビューです。まだ作りかけです。