NTS-1 mk2プログラミング初級講座(我流です) 第3回~複雑な数式作成を理解する
前回は比較的簡単にエフェクトを構成できることを確認しました。まずはlogue sdkプログラミングの入り口としてかなりわかりやすかったのではないかなと思います。
今回は少しだけ複雑なエフェクトを作ることで、処理とはどういうことなのかを体感していこうと思います。そのために前半では、前回のフェーダーにクリップ機能をつける事にチャレンジして、さらに後半ではクラッシャーエフェクトを作ります。
beatnicster-music.hatenablog.com
- 講座の構成
- 前回のおさらい
- Hファイル内の関数を振り返る
- フェーダーエフェクトにおけるクリップ機能をイメージする。
- Fadexを設計する。
- Fadexを実装する。
- 先ほどのFadexエフェクトで持ち帰るべきこと。
- ビットクラッシャーエフェクトをイメージする。
- クラッシャーエフェクトを設計する。
- クラッシャーエフェクトを実装する。
- まとめ
講座の構成
こちらはあくまで、カスタムエフェクトとカスタムオシレーターを作れるようになることを目指すものです。一部、先人の知恵も頂いていますが、基本的には我流ですので、そこはご了承ください。
今のところ全4回で以下のような事を行うつもりでいます。
- 第1回 準備とまず触ってみる(ダミーエフェクト作成)
- 第2回 エフェクト作成を理解する(フェーダー作成)
- 第3回 複雑な数式作成を理解する(フェーダー、クラッシャー作成)
- 第4回 オシレーター作成を理解する(サイン波オシレーター、ノコギリ波オシレーター、8bitオシレーターの作成)
初回のダミーエフェクトから、フェーダー作り、クラッシャー作り、ロービットオシレーター作成をするようなテーマは、このプログラミングを理解する最短距離として考えました。
一部のファイルは完成品とともにシェアできるようにすることも考えています。なお、作っているうちに足りない部分が出てくることも容易に想定できるので、随時加筆をする予定です。
なお、本講座用の資料は以下にありますので、こちらもご参照ください。
前回のおさらい
前回は、フェーダーを作成しました。その中で、使用した関数についてもさらっと説明をしました。今回は改めて関数の意味をどのように掴むのかを解説し、前回作ったフェーダーにクリップをコントロールする機能を追加していこうと思います。そして、クラッシャーエフェクトを作ります。
Hファイル内の関数を振り返る
fast_inline void Process(const float * in, float * out, size_t frames) {
// ここは1に該当(ステレオ入力を1フレームずつ読み込む)
const float * __restrict in_p = in;
float * __restrict out_p = out;
const float * out_e = out_p + (frames << 1);
// ここのfor文が4に該当(ポインタを次のサンプルへ進める)
for (; out_p != out_e; in_p += 2, out_p += 2) {
//ここは3に該当(音処理したものを出力バッファに書き込む)。
//ここでは2がないが通常は処理をしたものを投入する形となる。(左右の入力サンプル=ステレオ入力を使って音処理する。)
out_p[0] = fx_softclipf(0.05f, in_p[0] * vol / 63.f * (1.f - pan / 127.f));
out_p[1] = fx_softclipf(0.05f, in_p[1] * vol / 63.f * (1.f + pan / 127.f));
}
}ここにあったfx_softclipfに関してです。
前回は非常に簡単に「fx_softclipfは、信号が±1を超えないようにするためのものです。マージンとして、0.05を入れています。」と説明していましたが、それがどこから来ているのか説明はしていませんでした。
この説明はこちらにあります。
こちらにてRuntime APIが使用されていたのです。faderエフェクトを作成する際にdummy-modfxからコピーをしてHファイルを改変していましたが、このようにdummyファイルをコピーするとmodfxであればmodfxのRuntime APIが使用できるようになっています。
ここにはFXを作成するのに必要な基本的な機能が揃っています。ですので無理に計算を考える前に、必要に応じて、積極的にこちらにある関数を使う事をお勧めします。
フェーダーエフェクトにおけるクリップ機能をイメージする。
先ほど説明したfx_softclipfを使えば、インプットゲインを過度に上げれば意図的にクリップがされます。それだけならば音量ボリュームを変更している事に過ぎませんが、今回はボリュームの前に意図的にクリップができる機能をつけて、さらに音量ボリュームを通すようなものを考えてみます。
この場合に必要なのは、クリップをどのようにするかという事です。
そこでこのような処理を考えてみます。

前回のFader3では機能とさせていなかったAノブの値を使って意図的にクリップさせ(場合によってはクリップさせず)、さらに音量変化も抑えた状態で、Fader3にあったフェーダー機能につなげるものです。先ほどのfx_softclipを使えば出来るであろうとは思えますが、少し複雑なので、その部分を段階を追うようなプログラムを作ってみます。
Fadexを設計する。
前回作ったFader3を改変して、先ほどのクリップ機能を実装するものとします。
今回は、今までのフェーダーの総決算として、FaderではなくかっこよくFadexという名称としました。
さてこの実装ですが、実は前回までの実装を再利用するため、やることはかなり単純です。
- Aノブで得た値を保管する変数と、クリップ処理後の波形データを格納する変数2つを用意(ステレオのため)
- Aノブで得た値を保管する
- Aノブ値を元に、クリップ処理した音を上記の波形データ格納用の変数に格納
- 同変数を前回のFader3での音量処理につなげる。
比較的イメージしやすいと思いますので、早速実装に映ります。
Fadexを実装する。
Fader3をコピーして準備。
フォルダやファイルを用意したうえで名称はFadexとします。
Hファイルを改変する。
幸いな事にその他の準備はここまでで済んでいるため、後はHファイルを直すだけとなります。
では、ここからは順番に処理を進めていきます。
Aノブで得た値を保管する変数と、クリップ処理後の波形データを格納する変数2つを用意(ステレオのため)
実はAノブで得た値を保管する変数は既にあるので、クリップ後の波形データを入れる変数を2つ用意します。
class Modfx {
public:
//A.変数を入れ込み
uint8_t clip = 0;
uint8_t vol = 64;
int8_t pan = 0;
float temp_sound_l =0;
float temp_sound_r =0;
Aノブで得た値を保管する(setParameter関数)
これもまた前回のFader3で実装をしています。
よって作業としては不要ですが、どのようになっていたかだけは確認をしておきます。
inline void setParameter(uint8_t index, int32_t value) {
switch (index) {
//B.変数にノブの値を入れ込み。
case 0:
clip = value;
break;
case 1:
vol = value;
break;
case 2:
pan = value;
break;
default:
break;
}
}
Aノブ値を元に、クリップ処理した音を上記の波形データ格納用の変数に格納(Process関数)
まず前回のProcess関数を見ながら、どの位置にこの処理を入れるのかを確認します。
fast_inline void Process(const float * in, float * out, size_t frames) {
// ここは1に該当(ステレオ入力を1フレームずつ読み込む)
const float * __restrict in_p = in;
float * __restrict out_p = out;
const float * out_e = out_p + (frames << 1);
// ここのfor文が4に該当(ポインタを次のサンプルへ進める)
for (; out_p != out_e; in_p += 2, out_p += 2) {
//ここは3に該当(音処理したものを出力バッファに書き込む)。
//ここでは2がないが通常は処理をしたものを投入する形となる。(左右の入力サンプル=ステレオ入力を使って音処理する。)
out_p[0] = fx_softclipf(0.05f, in_p[0] * vol / 63.f * (1.f - pan / 127.f));
out_p[1] = fx_softclipf(0.05f, in_p[1] * vol / 63.f * (1.f + pan / 127.f));
}
}ここで処理として入れるのはfor文の真下に入れます。具体的に入れる処理は以下です。
//ここは2に該当。(左右の入力サンプル=ステレオ入力を使って音処理する。) //(1)入力音の音量を大きくする。 temp_sound_l = in_p[0] * (((float)clip + 8.f) / 8.f); temp_sound_r = in_p[1] * (((float)clip + 8.f) / 8.f); //(2)意図的にクリップさせる。 temp_sound_l = fx_softclipf(0.05f, temp_sound_l); temp_sound_r = fx_softclipf(0.05f, temp_sound_r); //(3)クリップした音量を元に戻す。 temp_sound_l = temp_sound_l / (((float)clip + 8.f) / 8.f); temp_sound_r = temp_sound_r / (((float)clip + 8.f) / 8.f);
コメントを入れている通り、音量を上げて、クリップをさせて、音量を下げる、という処理をしています。そしてその際に「temp_sound_l」, 「temp_sound_r」を使いまわして処理を進めています。
そして、最後に出た「temp_sound_l」「temp_sound_r」が、in_p[0]、in_p[1]の代わりとなる物になります。
同変数を前回のFader3での音量処理につなげる。(Process関数)
以下の部分のin_p[0]、in_p[1]をそれぞれ、「temp_sound_l」「temp_sound_r」に入れ替えます。
//ここは3に該当(音処理したものを出力バッファに書き込む)。
//ここでは2がないが通常は処理をしたものを投入する形となる。(左右の入力サンプル=ステレオ入力を使って音処理する。)
out_p[0] = fx_softclipf(0.05f, in_p[0] * vol / 63.f * (1.f - pan / 127.f));
out_p[1] = fx_softclipf(0.05f, in_p[1] * vol / 63.f * (1.f + pan / 127.f)); そうすると、以下のようになります。
//ここは3に該当(音処理したものを出力バッファに書き込む)。
out_p[0] = fx_softclipf(0.05f, temp_sound_l * vol / 63.f * (1.f - pan / 127.f));
out_p[1] = fx_softclipf(0.05f, temp_sound_r * vol / 63.f * (1.f + pan / 127.f));
ビルドして確かめる
ここまで来たら確かめてみましょう。具体的に動くことがわかると思います。
先ほどのFadexエフェクトで持ち帰るべきこと。
実は先ほどのHファイルの処理も、半ば強引に2-3行にまとめる事も特に問題はありません。しかし、あえてプロセスに分けていることの意味をここで振り返っておきたいと思います。
あらためて今回の講座のテーマは複雑な数式作成を理解することとしています。当然、数式は作成目的によってかなり異なるわけですが、プロセスごとに処理を少しずつ行う事によって、実装がかなり容易になります。だからこそ、処理を少しずつプロセスに分けていく作業が、複雑なエフェクトやオシレーター作りにおいて大事なのです。
この感覚を理解するために、次は少し難易度を上げてクラッシャーエフェクトを作っていければと思います。
ビットクラッシャーエフェクトをイメージする。
Fadexエフェクトを作ることは比較的簡単な計算式で作ることが出来ました。ただ、他のエフェクトが同様に作れるのかはまだ体感できない気もするので、同様にビットクラッシャーエフェクトを作ることとします。ビットクラッシャーとは何かを説明しておく必要があるので、その説明をします。
よくシンセで見かける〇ビット演算というのは、音をどの粒度で見ているかを示しています。ただこれだとちょっとよくわからないと思うので、もう少しかみ砕くために、一旦イメージを掴むために2進法ではなく10進法で考えてみます。
例えば、1,234という数字があったとします。これを切り捨て・切り上げ・四捨五入などによって、数字を丸めるイメージです。
この場合、約1,230ともいえるし、約1,200とも言えます。
| 元の数字(4桁表現) | 1の位で丸める(3桁表現) | 10の位で丸める(2桁表現) |
|---|---|---|
| 1,234 | 1,230 | 1,200 |
1,230では4桁の数字を上3桁のみで表現していて、1,200では上2桁のみで表現しています。一方元の数字は4桁で表現しています。
この桁数が少なくなればなるほど大まかな数字になるわけです。
このような処理を2進数ベースで行う(2の〇乗の倍数への丸め処理)のがビットクラッシャーです。(実際は10進数での丸め処理でもよいのですが)
ところが、入力データは+1から-1で表現されているという問題があります(今までのプログラムでいうin_p[0]などです)。実際は、これは1/(2の16乗)で分割されているため、いったん整数化(つまり2の16乗をかける等、ただしオーバーフローの問題もあるため工夫が必要)をした後に丸め処理をする必要があります。
ちなみに8ビット化するためには、入力データを2の7乗を掛けたしたうえで、小数点以下を丸めて、その数字を再度2の7乗で割ることによって8ビット化がなされます。
(なぜ8乗ではないのかというと、正負の符号で2の1乗が使われてしまうからです。)
クラッシャーエフェクトを設計する。
クラッシャーエフェクトはかなりシンプルな構成を目指します。
- Fadexで作ったクリップ機能を搭載。Aノブはその機能を制御。
- 8ビットクラッシャーを搭載して、Bノブでそのバランスを取る。
まず、ノブと役割を決めます。
Aノブ:クリップ(音量がクリップすることを想定して、ノブを用意。)
Bノブ:8ビット化した音と、ノーマルの音のバランスをとる。
クラッシャーエフェクトを実装する。
dummy-modfxをコピーして準備。
フォルダやファイルを用意したうえで名称はbitcとします。
Headerファイルでノブを設定する。
ここは上記の設計イメージを元に、以下のように設定してみます。
(なお3ノブは、パンに適したものを設定しています)
| Before | After | 備考 |
|---|---|---|
| {0, 1023, 0, 256, k_unit_param_type_none, 1, 0, 0, {"TIME"}}, | {0, 127, 0, 0, k_unit_param_type_none, 1, 0, 0, {"CLIP"}}, | // A knob 直下 Aノブの数値範囲を0-127として、名称を「CLIP]としています。なお初期値は0としています。 |
| {0, 1023, 0, 256, k_unit_param_type_none, 1, 0, 0, {"DPTH"}}, | {0, 127, 0, 0, k_unit_param_type_none, 1, 0, 0, {"BAL"}},」 | // B knob 直下 Bノブの数値範囲を0-127として、名称を「BAL]としています。初期値は0です。 |
Hファイルで挙動を実装する。
変数を用意
ここは説明を割愛して、必要なプログラムだけ記載します。
class Modfx {
public:
//A.変数を入れ込み
uint8_t clip = 0;
uint8_t bal = 0;
float temp_sound_l =0;
float temp_sound_r =0;
float temp_lowbit_l =0;
float temp_lowbit_r =0;
setParameter関数を設定する。
ここも説明を割愛して、必要なプログラムだけ記載します。
inline void setParameter(uint8_t index, int32_t value) {
switch (index) {
//B.変数にノブの値を入れ込み。
case 0:
clip = value;
break;
case 1:
bal = value;
break;
default:
break;
}
}
Process関数を設定する。
ここでは3段階の処理を入れます。まずひとつ目はクリップ機能です。これはFadexのそのままの処理をfor文以下に入れます。
//クリップ処理 //(1)入力音の音量を大きくする。 temp_sound_l = in_p[0] * (((float)clip + 8.f) / 8.f); temp_sound_r = in_p[1] * (((float)clip + 8.f) / 8.f); //(2)意図的にクリップさせる。 temp_sound_l = fx_softclipf(0.05f, temp_sound_l); temp_sound_r = fx_softclipf(0.05f, temp_sound_r); //(3)クリップした音量を元に戻す。 temp_sound_l = temp_sound_l / (((float)clip + 8.f) / 8.f); temp_sound_r = temp_sound_r / (((float)clip + 8.f) / 8.f);
そのうえで、次にクリップ処理した音を8ビットサウンドに変化させてバランスを取ります。
//クリップ処理後の音を8ビットサウンド処理 //(1)2の7乗=128をtemp_soundにかけてlowbitに入力。 temp_lowbit_l = temp_sound_l * 128; temp_lowbit_r = temp_sound_r * 128; //(2)lowbitを整数化 temp_lowbit_l = (int)temp_lowbit_l; temp_lowbit_r = (int)temp_lowbit_r; //(3)8ビットサウンドとクリップ処理後の音を混ぜる。 temp_sound_l = (temp_lowbit_l * bal + temp_sound_l * (1.f - (bal / 127.f)); temp_sound_r = (temp_lowbit_r * bal + temp_sound_r * (1.f - (bal / 127.f));
最後に、出力バッファに書き込みます。
//ここは3に該当(音処理したものを出力バッファに書き込む)。
out_p[0] = fx_softclipf(0.05f, temp_sound_l);
out_p[1] = fx_softclipf(0.05f, temp_sound_r); そうすると、Process関数は以下のようになります。
fast_inline void Process(const float * in, float * out, size_t frames) {
// ここは1に該当(ステレオ入力を1フレームずつ読み込む)
const float * __restrict in_p = in;
float * __restrict out_p = out;
const float * out_e = out_p + (frames << 1);
// ここのfor文が4に該当(ポインタを次のサンプルへ進める)
for (; out_p != out_e; in_p += 2, out_p += 2) {
//ここは2に該当。(左右の入力サンプル=ステレオ入力を使って音処理する。)
//クリップ処理
//(1)入力音の音量を大きくする。
temp_sound_l = in_p[0] * (((float)clip + 8.f) / 8.f);
temp_sound_r = in_p[1] * (((float)clip + 8.f) / 8.f);
//(2)意図的にクリップさせる。
temp_sound_l = fx_softclipf(0.05f, temp_sound_l);
temp_sound_r = fx_softclipf(0.05f, temp_sound_r);
//(3)クリップした音量を元に戻す。
temp_sound_l = temp_sound_l / (((float)clip + 8.f) / 8.f);
temp_sound_r = temp_sound_r / (((float)clip + 8.f) / 8.f);
//クリップ処理後の音を8ビットサウンド処理
//(1)2の7乗=128をtemp_soundにかけてlowbitに入力。
temp_lowbit_l = temp_sound_l * 128;
temp_lowbit_r = temp_sound_r * 128;
//(2)lowbitを整数化
temp_lowbit_l = (int)temp_lowbit_l;
temp_lowbit_r = (int)temp_lowbit_r;
//(3)8ビットサウンドとクリップ処理後の音を混ぜる。
temp_sound_l = (temp_lowbit_l * bal + temp_sound_l * (1.f - (bal / 127.f));
temp_sound_r = (temp_lowbit_r * bal + temp_sound_r * (1.f - (bal / 127.f));
//ここは3に該当(音処理したものを出力バッファに書き込む)。
out_p[0] = fx_softclipf(0.05f, temp_sound_l);
out_p[1] = fx_softclipf(0.05f, temp_sound_r);
}
}
完成したらビルドして確かめてみる。
しっかり機能している事を確かめます。
NTS-1 mk2プログラミング初級講座(我流です) 第2回~エフェクト作成を理解する
前回から初心者用のKORG loge sdkプログラミング講座(=nts-1 mk2プログラミング講座)を始めてみました。前回は動かないカスタムエフェクトでしたが今回からは動くカスタムエフェクトとして、何かと使う場面がある音量フェーダーを作ります。
前半部分では、前回に作ったダミーエフェクトをを改変してまずは簡易的なフェーダーを作ります。
そして後半部分ではもう少し使いやすいフェーダーを作ります。
ご注意:前回のHeaderファイルの数値を誤って記載しているため、今回の開始前に修正していただければ幸いです。
修正内容はリンク先に記載がありますのでご確認ください。(2026/01/10)
beatnicster-music.hatenablog.com
修正履歴
2026/01/13 学習素材のリンクを付けました。
講座の構成
こちらはあくまで、カスタムエフェクトとカスタムオシレーターを作れるようになることを目指すものです。一部、先人の知恵も頂いていますが、基本的には我流ですので、そこはご了承ください。
今のところ全4回で以下のような事を行うつもりでいます。
- 第1回 準備とまず触ってみる(ダミーエフェクト作成)
- 第2回 エフェクト作成を理解する(フェーダー作成)
- 第3回 複雑な数式作成を理解する(フェーダー、クラッシャー作成)
- 第4回 オシレーター作成を理解する(サイン波オシレーター、ノコギリ波オシレーター、8bitオシレーターの作成)
初回のダミーエフェクトから、フェーダー作り、クラッシャー作り、ロービットオシレーター作成をするようなテーマは、このプログラミングを理解する最短距離として考えました。
一部のファイルは完成品とともにシェアできるようにすることも考えています。なお、作っているうちに足りない部分が出てくることも容易に想定できるので、随時加筆をする予定です。
なお、本講座用の資料は以下にありますので、こちらもご参照ください。
前回のおさらい
前回は、AノブとBノブにLとRという名称がある、ダミーエフェクトを作りました。それを利用してAノブはL側の音量を、BノブはR側の音量をコントロールする簡易的なフェーダーを作ります。
そしてその際にhファイルを修正します。
作業前にhファイルの全体像を掴む
まずはhファイルの全体像を確認しておいて、これからの作業時に今何を行っているのか理解できるようにしておこうと思います。

かなり大雑把な記載としていますがざっくり言うと、getParameterStr関数ではノブ変化時の表示される文字を設定、setParameter関数でノブの値を取得し、音の処理はProcess関数で行われるというものとなります。
前回(Fader1)はノブの名称を変更しましたが、実際の音を扱う部分であるhファイルは何も変更していませんでした。今回は、hファイルを変更することで、実際に音が変化するさまを確認します。
Fader2でのプログラミングの流れの説明
まずはHファイルの中身を変更する以外のことも含めた作業の流れの説明
- Dummy-modfxフォルダをコピペして、別フォルダ作成( \\wsl.localhost\Ubuntu-バージョン\home\ユーザー名\logue-sdk\platform\nts-1_mkii\dummy-modfx)
- フォルダ名修正 ⇒ 「fader1」とします。
- configファイルで対象プロジェクト名⇒fader2
- headerファイルで名称「 .name = "fader2"」に変更(第一回参照)
- Hファイルの名前を修正 ⇒ 「fader2」
- unitファイルで名前を修正 ⇒ 「#include "modfx.h" // Note: Include custom modulation effect code」のように書いている部分を「#include "fader2.h" // Note: Include custom modulation effect code」とします。
- Hファイルを加工 (以下参照)
- ビルド(必要に応じて、ビルド前にユニットのクリーンをかけます)
- 使って確かめる
Hファイルで行おうとする変更
Fader2には以下のような機能を実装します。
- 変数をいくつか用意。
- setParameter関数にてノブの値を変数に入れ込む。
- Process関数にてオーディオインを読み込んだ後、音量を変数を使い変化させて、オーディオを書き込んでオーディオアウトとして出力する。
以降では、ダミーのHファイルをどのように加工していくのかを説明します。
変数をいくつか用意
ノブの値変化を入れる変数はいくつかの関数をまたいで使われることとなり、グローバル変数が適しています。
今回は一旦、Class ModFxのすぐ下に置きます。
(ここでは考え方をシンプルにするためこのような変数の配置を行いますが、細かい挙動を安定させるためには「Struct 」以下に記載をするのが望ましいと思います。これは慣れてきてからトライでよいと考え、本講座では触れずに以降も進みます。)
class Modfx {
public:
//A.変数を入れ込み
uint8_t vol_l = 127;
uint8_t vol_r = 127;
uint8や初期値を127としたのはノブの範囲をheaderにて0-127としていたためであり、型などとの整合性を取ることを目的としています。
setParameter関数にてノブの値を変数に入れ込む。
箱となる変数を用意したら次はノブの値を変数に入れ込みます。上述の通りノブの値はsetParameterという関数によって取得するので、そこから先ほどのvol_l, vol_rにデータを入れる形となります。
inline void setParameter(uint8_t index, int32_t value) {
switch (index) {
//B.変数にノブの値を入れ込み。
case 0:
vol_l = value;
break;
case 1:
vol_r = value;
break;
default:
break;
}
}ここでindexはheaderファイルにあったノブの順番で、valueはそのノブの値です。ここの記述は、どのノブが触られたかを確認したのちにその値をvol_l, vol_rに入れ込むという内容です。ちなみにindexがcase0, case1で分岐している点は注意してください。ノブは0からナンバリングされています。
Process関数にて音量変化処理を行う
ここでの処理は4段階あります。
①ステレオ入力を1フレームずつ読み込む
②左右の入力サンプル=ステレオ入力を使って音処理する。
③音処理したものを出力バッファに書き込む
④ポインタを次のサンプルへ進める
※なお、この①と④の処理は、正直あまり理解しなくても、初心者には問題がありません。
では、まずDummy状態のHファイル内のProcess関数を見てみましょう。
fast_inline void Process(const float * in, float * out, size_t frames) {
// ここは1に該当
const float * __restrict in_p = in;
float * __restrict out_p = out;
const float * out_e = out_p + (frames << 1);
// ここのfor文が4に該当
for (; out_p != out_e; in_p += 2, out_p += 2) {
//ここは3に該当。ここでは2がないが通常は処理をしたものを投入する形となる。
out_p[0] = in_p[0];
out_p[1] = in_p[1];
}
}
そして、今回の処理は3部分のみを以下のように修正します。
out_p[0] = in_p[0] * vol_l / 127.f;
out_p[1] = in_p[1] * vol_r / 127.f; これはどういうことかというと、in_p[0](左側の入力信号)とin_p[1](右側の入力信号)の振れ幅(つまり音量)をvol_l, vol_rで小さくを小さくして、 out_p[0](左側の信号の出力先)とout_p[1](右側の信号の出力先)に出しているものになります。
Fader2をビルドして挙動を考え直す
実はここまででFader2は完成します。これをビルドすると、Aノブで左側の音量を変化させBノブで右側の音量を変化させるエフェクトが完成します。
これはこれで使い先もあるかと思いますが、いくつか気になる部分もあります。
例えば、
- パンはいじることが出来る状態であってほしいが、音量はひとつのノブでコントロールしたい。
- 元の音量から下げることはできるが、上げることが出来ない。
といったことです。
そこで、これを実現する新たなフェーダーを検討します。
Fader3を設計する
まず、ノブと役割を決めます。
Aノブ:クリップ(音量がクリップすることを想定して、ノブを用意。)
Bノブ:音量
3ノブ(Modを押し込んだ際にTYPEノブを回した際にコントロールできる最初のノブ):パン
そのうえで、音に関しての挙動を決めます。
Aノブ:変化は一旦保留(次回さらに詰めます)
Bノブ:音量変化をさせる。具体的にはLR両方の音の振幅をBノブの値で乗算して変化させる。
3ノブ:L側に回し切ったら、L側の振幅は2倍でR側の振幅は0倍。R側に回し切ったら逆の挙動をさせる。
これらの挙動を考えたときに音量変化はFader2で行ったことに近いことなので問題はないと思いますが、3ノブのパンはもう少し精緻に考える必要があるので、後ほどさらに説明をします。
Fader3を実装する
さて、Fader3を実装します。ここからは今まで行ってきた作業をなぞる形で説明を行います。
dummy-modfxをコピーして準備。
フォルダやファイルを用意したうえで名称はFader3とします。
Headerファイルでノブを設定する。
ここは上記の設計イメージを元に、以下のように設定してみます。
(なお3ノブは、パンに適したものを設定しています)
| Before | After | 備考 |
|---|---|---|
| {0, 1023, 0, 256, k_unit_param_type_none, 1, 0, 0, {"TIME"}}, | {0, 127, 0, 0, k_unit_param_type_none, 1, 0, 0, {"CLIP"}}, | // A knob 直下 Aノブの数値範囲を0-127として、名称を「CLIP]としています。なお初期値は0としています。 |
| {0, 1023, 0, 256, k_unit_param_type_none, 1, 0, 0, {"DPTH"}}, | {0, 127, 0, 64, k_unit_param_type_none, 1, 0, 0, {"VOL"}},」 | // B knob 直下 Bノブの数値範囲を0-127として、名称を「VOL]としています。初期値は64です。 |
| {0, 3, 0, 1, k_unit_param_type_strings, 0, 0, 0, {"PARAM3"}}, // Example of a strings type parameter」 | {-127, 127, 0, 0,k_unit_param_type_pan, 2, 1, 0, {"PAN"}}, | // 8 Edit menu parameters 直下 3ノブの数値範囲を-127から+127として、名称を「PAN」としています。初期値は0です。 |
Hファイルで挙動を実装する。
ここも上記の設計イメージを元に、ダミーのHファイルを改変して以下のように実装します。
変数を用意
今回は3つの変数を用意します。
class Modfx {
public:
//A.変数を入れ込み
uint8_t clip = 0;
uint8_t vol = 64;
int8_t pan = 0;
setParameter関数を設定する。
箱となる変数を用意したら次はノブの値を変数に入れ込みます。上述の通りノブの値はsetParameterという関数によって取得するので、そこから先ほどのvol_l, vol_rにデータを入れる形となります。
inline void setParameter(uint8_t index, int32_t value) {
switch (index) {
//B.変数にノブの値を入れ込み。
case 0:
clip = value;
break;
case 1:
vol = value;
break;
case 2:
pan = value;
break;
default:
break;
}
}
Process関数にて音量変化処理を行う
ではHファイル内のProcess関数をどのように変更するか以下に示しますのでご確認ください。
fast_inline void Process(const float * in, float * out, size_t frames) {
// ここは1に該当(ステレオ入力を1フレームずつ読み込む)
const float * __restrict in_p = in;
float * __restrict out_p = out;
const float * out_e = out_p + (frames << 1);
// ここのfor文が4に該当(ポインタを次のサンプルへ進める)
for (; out_p != out_e; in_p += 2, out_p += 2) {
//ここは3に該当(音処理したものを出力バッファに書き込む)。
//ここでは2がないが通常は処理をしたものを投入する形となる。(左右の入力サンプル=ステレオ入力を使って音処理する。)
out_p[0] = fx_softclipf(0.05f, in_p[0] * vol / 63.f * (1.f - pan / 127.f));
out_p[1] = fx_softclipf(0.05f, in_p[1] * vol / 63.f * (1.f + pan / 127.f));
}
}計算式の意味は、以下となります。
- fx_softclipfは、信号が±1を超えないようにするためのものです。マージンとして、0.05を入れています。
- in_pに対して、 vol / 63.fをかけているのは音量を調整するためのものです。
- さらにL側(out_p[0]側)で (1.f - pan / 127.f)をかけているのは、パン調整です。パンを調整するノブがL側に回し切ったら2になるように、R側に振り切ったら0になるようにしています。同様にR側も処理をしています。
※パン調整は非常にシンプルな計算式で作っています。今後発展的にこのフェーダーを改良する上でさらに滑らかな変化などをつける事もできるので、必要に応じ研究ください。
ここまでやったことのまとめ
まず今回はついにフェーダーエフェクトを完成することができました(次回はさらにブラッシュアップしますが)。すぐに実用できるレベルのカスタムエフェクト・カスタムオシレーターが、比較的シンプルなプログラミングで実装できることは体感できたかなと思います。
一方これ以上のことをするための方法は、今回では述べていません。様々なエフェクトを作る方法すべて紹介することは難しいのですが、実際どのように作成していくのか、その足取りを説明できればと考えています。
そのために次回では、フェーダーエフェクトをブラッシュアップしたうえで、もうひとつ別のエフェクトを作っていこうと思います。
では、また。
NTS-1 mk2プログラミング初級講座(我流です) 第1回~準備とまず触ってみる
こんにちわ。
以前から温めていた初心者用のKORG loge sdkプログラミング講座(=nts-1 mk2プログラミング講座)を始める事としました。いくつか理由はありますが、何よりシンプルにプログラミングをする人を増やしてワイワイしたいのと、その人たちの作ったオシレーターを楽しみたいというのが理由です。
師走の間に少し考えていましたが、どのような感じでやればよいのかアイディアもまとまってきたので、まずは書き始めます。
修正履歴
2026/01/04 Hファイルと記載していたものをheaderファイルと修正しました。
2026/01/10 Headerファイルの値を128としていたものを127に変更しました(第2回で使用するため)
2026/01/13 学習素材のリンクを付けました。
講座の構成
こちらはあくまで、カスタムエフェクトとカスタムオシレーターを作れるようになることを目指すものです。一部、先人の知恵も頂いていますが、基本的には我流ですので、そこはご了承ください。
今のところ全4回で以下のような事を行うつもりでいます。
- 第1回 準備とまず触ってみる(ダミーエフェクト作成)
- 第2回 エフェクト作成を理解する(フェーダー作成)
- 第3回 複雑な数式作成を理解する(フェーダー、クラッシャー作成)
- 第4回 オシレーター作成を理解する(サイン波オシレーター、ノコギリ波オシレーター、8bitオシレーターの作成)
初回のダミーエフェクトから、フェーダー作り、クラッシャー作り、ロービットオシレーター作成をするようなテーマは、このプログラミングを理解する最短距離として考えました。
一部のファイルは完成品とともにシェアできるようにすることも考えています。なお、作っているうちに足りない部分が出てくることも容易に想定できるので、随時加筆をする予定です。
なお、本講座用の資料は以下にありますので、こちらもご参照ください。
環境と準備
環境設定
環境構築は、個々のシステムやその環境導入時のトラブル全般も含めて、正直先人たちの知恵に頼らざるを得ないと思っています。ここで語るには僕の知識も、ここの文量にも限界があるため、ネットを見ながら調べてもらえるとありがたいです。(一応参考までに。僕はWindows環境にwslを導入して、dockerで環境構築をしましたが、あまり苦労しませんでした)
ここを乗り越えれば、ソースコードしか置いていないようなカスタムエフェクトやカスタムオシレーターも使えるようになったりします。プログラムをする前段階でも新しい世界が広がるので、是非頑張ってもらえればと思います。
そして環境を構築したら、まずはwavesのコードがあるのでビルド(つまりnts-1で使えるオシレーターやエフェクトの形にする)をしましょう。そのやり方もこちら
logue-sdk/platform/nts-1_mkii/README_ja.md at main · korginc/logue-sdk · GitHub
にあります。
ファイル構造を理解する
ここからはコマンドプロンプトでWSLを起動している前提で会話を進めていきます。
\\wsl.localhost\Ubuntu-バージョン\home\ユーザー名\logue-sdk\platform\nts-1_mkii\
に様々なDummyなどがあって、その中身の説明となります。
こちらにも記載がありますが、もう少しかみ砕いて説明します。
フォルダ内のファイルの役割を見るとこのようになります。(主要な使う部分だけ抜粋して記載)
- config.mkファイル
PROJECT : 最終的な成果物のファイル名。 (Note: nts-1に読み込んだ時に画面に表示される名前ではないのでご注意を)
PROJECT_TYPE : ビルドするプロジェクトの種類を決定。osc, modfx, delfx, revfxのどれかです。
- header.cファイル
dev_id : 開発者を識別するための固有のID(これ申請する必要あるんですよね。フリーで作る分には気にしなくてよいです。)
name : ロード時にデバイスに表示されるユニットの名前。
.num_params : ユニットで見せるパラメーターの数。以下にparamsというのがあるが、ここにあるパラメーターのうち、いくつ見せるかを決定する。
.params : パラメーター情報の詳細。例えばノブにはどのような表示がされたり、どういう数値を渡すかを決める。なお、このパラメーターは合計10個のままにする必要があり、例えば1つ削除するとエラーとなる。
- unit.cc
「#include "modfx.h" // Note: Include custom modulation effect code」のように書いている部分。:"modfx.h"を使ってビルドするという意味。つまりこの"modfx.h"の名称を変えるならば、この記載内容も変更する必要がある。
- modfx.h
Dummy OSCなら、「osc.h」というように名称は異なっているが、プログラムの核となる部分で、これで挙動のほとんどが決まる。詳しくは講座を通して説明予定。
一連のプログラミングの流れ理解
まずはカスタムエフェクトやカスタムオシレーターの基本的な作り方を説明します。
- Dummyからコピペ
- フォルダ名修正
- configファイルで対象プロジェクト名(フォルダ名)と、タイプを修正・確認
- headerファイルでノブの名称やノブが動く値の範囲を設定
- Hファイルの名前を修正(必要に応じ)⇒unitファイルで名前を修正
- Hファイルを加工
- ビルド(必要に応じて、ビルド前にユニットのクリーンをかけます)
- 使って確かめる
- 問題があったら2~5に戻る。
さらにバージョン違いを作成する必要があったりしたら、フォルダを分ける事も必要です。
ちなみに僕はめんどくさがりなのでユニットのクリーンをするよりも、あえてunitファイルで誤った名前を入力してクリーンするような変な技を使っていたりしていますが、、、まあそれはさておき
Faderエフェクトのダミーを作る
さて、ここからが第1回のハイライトです。まずはカスタムエフェクトを作ります。
と言っても、いきなりは作れるわけもないのに無理を押すつもりはありません。まずは「ノブは動くが、音は何も変化しないエフェクト」を作ります。
やることを説明します。(コマンドプロンプトからWSLを起動しているものとして)
- Dummy-modfxフォルダをコピペして、別フォルダ作成(\\wsl.localhost\Ubuntu-バージョン\home\ユーザー名\logue-sdk\platform\nts-1_mkii\dummy-modfx)
- フォルダ名修正 ⇒ 「fader1」とします。
- configファイルで対象プロジェクト名⇒fader1
- headerファイルで名称、ノブの名称やノブが動く値の範囲を設定(以下説明)
- Hファイルの名前を修正 ⇒ 「fader1」
- unitファイルで名前を修正 ⇒ 「#include "modfx.h" // Note: Include custom modulation effect code」のように書いている部分を「#include "fader1.h" // Note: Include custom modulation effect code」とします。
- Hファイルを加工 Hファイルの中身は加工しません。
- ビルド(必要に応じて、ビルド前にユニットのクリーンをかけます)
- 使って確かめる
またHファイルheaderファイル(2026/01/04修正)はDummyから以下のように変更します。
| Before | After | 備考 |
|---|---|---|
| 「 .name = "dummy", // Name for this unit, will be displayed on device」 | 「 .name = "fader1"」(ディスプレイされる名称を変更しています) | |
| {0, 1023, 0, 256, k_unit_param_type_none, 1, 0, 0, {"TIME"}}, | {0, |
// A knob 直下 Aノブの数値範囲を0- |
| {0, 1023, 0, 256, k_unit_param_type_none, 1, 0, 0, {"DPTH"}}, | {0, |
// B knob 直下 Bノブの数値範囲を0- |
| {0, 3, 0, 1, k_unit_param_type_strings, 0, 0, 0, {"PARAM3"}}, // Example of a strings type parameter」 | {0, 100, 0, 100, k_unit_param_type_percent, 2, 1, 0, {"PERC"}}, | // 8 Edit menu parameters 直下 特に意味はありませんが、このノブのパラメーターの挙動を知るためのものです |
ダミーの挙動を確認しましょう
このダミーですが、ノブを回しても音に変化は起こりません。ただエフェクト名やノブの表記はちょっとカスタマイズされています。現時点では全く意味をなさないカスタムエフェクトですが、まずはlogue sdkによるプログラミングの流れは体感できたと思います。
このノブによるデータ入力はカスタムエフェクトやカスタムオシレーターの肝でもあるので、この性質を理解する事は重要です。時間を見て、いろいろカスタマイズを試してみるとよいと思います(宿題)
なお、このダミーは次回フェーダー作りで使うことになります。このダミーがどのように使われていくのか着目する事も、プログラミングの流れをつかむ一助になるのでそのあたりも是非ご期待ください。
Volca Modular を買って今さらレビューする(後編)
普段通りのんびりスタンスで書いていこうと思ったら、前編がとんでもない閲覧者数になってビビってます。みんなVolca Modularに興味あることに驚きとうれしさもありつつ、マイペースにレビューさせて頂きますね。
beatnicster-music.hatenablog.com
音作りを学ぶ方法論をふんわり解説
まあ、僕もこのシンセはよくわからない中から理解していったのですが、闇雲に触っていた訳ではありません。僕が実際に理解するためにやった流れを追うと、このシンセの音作りを理解できると思うので、参考までにその要旨を簡単に説明しておきます。
ケーブルをつながずに基本をまず押さえるのが初手です。
まずケーブルは抜いた状態で、ローパスゲートは右に回し切って、それ以外はすべて左に回し切るのが大事。(当然、ボリュームを回し切ると聞こえません)これはどの音作りでも必要なことで、いわゆるイニシャル状態にしています。
このシンセはセミモジュラーなので、ケーブルを差さなくても音が出る状態なのですよね。だけど、反応しないつまみもあるのでちょっと注意が必要です。(青以外のつまみは初期時点では反応しないですよ)

ここで、何はともあれ、オシレーターで、まずはFMの感覚をつかむのが大事だと思います。他のWavefoldとかAttackとかDecayは触ればわかるので。
そういうわけでFMを触るコツです。最初にMODを真ん中くらいまで回すと、FM変調されたうねった変な音が出ます。その状態で、RATIOをゆっくり回すと、うねりが急に収まるポイント=綺麗な倍音が出るポイントが出ます。そのあたりで変調がちょっときついなと思ったらMODをまた左に回してFM変調を押さえていく、この一連の動作がわかるとかなりつかめるんじゃないかなと思います。
(FM変調は、整数倍のレシオだと綺麗な倍音が出るのですが、何分このシンセはアナログなのでつまみを回しながらアタリを付けていく必要があるんです)
また逆にうねったままの音で遊ぶという事もできます。こういうメカニカルな音が好きな人もいますし、ニーズもあると思います。
あともう一つ。この段階でスプリングリバーブの感触は確かめておいた方がよいと思います。これは一般的なリバーブのイメージではなくて、共鳴を出したり、ホラー的な演出系のリバーブとして使うべきと体感しておいた方がいいです。
(つまり、エフェクトは別掛けする認識もつくと思います)
ケーブルを差してみる
さてケーブルを差したくなると思うのですが、とりあえず差してみると迷路にはまります。そこで、セミモジュラーになっているものを同じようにケーブルでつなぐのがおススメです。つまりこんな感じ。

このように結線をしたら、次は置き換えていくのがポイント。例えば、エンベロープ部分を以下のように置き換えてみたりするように、いろいろ試していくとモジュールごとの動きを把握しやすくなります。モジュールは説明書にて解説されているので、それを実地で試していく感じですね。

ケーブルをつなぐにしても定石があるのです。
volca modularは仕様上何が出来るか明示しづらいプロダクトなのですが、少なくとも以下のことは難なくできます。
・2VCO
・LFO
・リングモジュレーション
これらのやり方は、付属しているリファレンスシートに記載があるので、試しておいた方がよいです(断言)これにより、基本的な音作りの方法を探る手間がなくなるので、音作りのストレスがなくなります。
またこの辺りから、付属のサンプルパッチ例を試して理解できる範囲を増やすのもいいと思います。やっぱり何やっているかわからない状態でケーブルを差しても理解も深まらずつまらないので、わかってから確認することが大切だと思います。
ショートさせるって公式で言ってるけどいいのかな(汗)
そして、volca modularの謎の核心がこれです。
マニュアルには信号のケーブルを差す部分にはインプットとアウトプットがあると言っているんですが、実際作られているパッチでは(公式が出しているものでさえ)逆にしていたり、アウトプットにアウトプットを突っ込んだりしているんです。
どうしたらいいんだよ、これ💦と言いつつ、このショートさせる例をちょっとだけ出します。
まず以下のようなパッチの音を出したいとします。

簡単に言うと、VCOを2つにしたものですね。
さてこれをショートさせる結線となると以下になります。(これは自己責任でどうぞ)

これをすると、僕のvolcaでは少し音が変わりました。回路が何らかの影響を与えているんでしょうね。
また、Splitを逆流させて強引に信号を合わせるパターンもあります。(こちらも自己責任でどうぞ)

こっちは僕のvolcaでは比較的最初の音に近い状態になりました。
これらのショートさせる結線に関してですが、内部回線を想像すると多分壊れないのもわかるんですけど、でもさ、これいいって言われていないじゃん。そこのラインを踏み越えて来いってことなのか?!
(まあここらへんで収めておきますね)
外部エフェクトはあった方がいいです。
さて、ここからは話は変わって。
このシンセはスプリングリバーブはついていますが、それはエフェクトというよりは音作り感が強くて他のシンセと混ぜやすくするようなリバーブとは違い、苦労します。
やっぱりそれは他のユーザーさんを見ても同様の様子で、よくあるのがmonotron delayを使ったりnts-1を使ったりしているみたいです。
もしDAWを使うならDAW内でエフェクトをかければよしですが、DAW外でやりたいなら考えた方がいいと思います。
僕はnts-1 mk2を持っているので、ディレイやリバーブをめちゃくちゃかけてアンビエントっぽく作ったりもしていたりできて、結構便利に感じています。
さらに外部エフェクターとして使えることを知ってましたか?
volca modularって外部の音をさらにモジュレーションができるんですよ。これはKORGさんが紹介していますが、この動画ではもうDJプレイですね。
実際に僕もやってみましたが、すごく面白いんです。
買うのを迷ってた人がこれを見たら、もう背中押されて買っちゃうんじゃないかな。
音作りで参考になる動画たち
いくつも動画を見ましたが、音作りで参考になるのは多分これだなってのを少し紹介しますね。
Cris RodyさんのKick作成動画
冒頭、前に公開していたキックの音はうんぬんかんぬん、、、という謎なコメントから始まる動画。結局、僕がキックを作る際はこれを改良して音を作ることが多いのですが、やはりこのパッチはすごく良いと思います。
KORGさんのPatch of the weekシリーズ
やはり、公式強し。かなりわかりやすいし、使える音があると思います。
TONY HORGANさんとこ
とにかくたくさんのパッチを作っている人です。Expert Guideを作っている関連で動画出してくれています。いずれにせよ、Volca Modularはどういう音が作れるかはこれを見たら大体わかると思います。
まとめ
色々な話をここまで繰り出してきましたが、内容を整理した方がよいと思うので、最後にいろいろまとめます。
音作りの幅
いっぱい音が作れるが、どんな音でも作れるわけではないです。まして、単音シンセなので(結線でなんとかなりますが)ソロ系の音が多いです。例えばレゾナンスが効くような音は作れないけど、癖の強いベースやリードもたくさん作れます。
それともうひとつの特徴として、三角波で笛系(フルート)やFMやWavefoldを使う事でチェロっぽい音が作れるのもポイントです。共鳴をスプリングリバーブでも作れたりもします。
音の存在感
やっぱり音が立ちます。アナログだからピッチが揺れるせいなのか、それともローパスの音響特性なのか不明ですが、存在感はあります。
そして、不思議な揺らぎの気持ちよさ。チェロの音もそうですが、とにかく心地よい揺らぎが出てきます。これは言葉に言い表しづらいのですが、いいです。
ユーティリティ
MIDIがないためちょっと使いづらい部分がありますが、SYNCは使えるので他のVolca等との連携は大丈夫です。それとオーディオエフェクトとして使えるのはそれだけで買いになるくらい良いと思います。
結論
これは近年稀に見る高コスパだと思います。現在(2025/12)の実売2万円で、
・アナログモジュラーシンセ
・音の癖はあるが、作り出した音はシンプルに良すぎる
・エフェクターにも活用可能
という事を考えると、他のシンセはやはり凌駕するとしか言いようがないでしょう。
一方、モジュラーであるが故の、難易度や他のデジタルシンセのように音色保存が出来ないという点は、欠点ではないものの普通のシンセユーザーには受け入れがたい面もあると思います。
(一応、僕は買っても問題なく何とかなったので、心配ないかなとは思いますけど。)
アンビエントをやるにもよし、他のグルボと合わせるでもよし。ちょっと迷うくらいなら買ってゆっくり研究してもいいくらいのおススメ商品です!(まだまだ楽器も値上げするような気もするので買い時=今かもしれないですね)
さて、前編、後編通して、いろいろ語らせてもらいましたが、まずはここまで。
また色々レビューしますー!
beatnicster-music.hatenablog.com
KORG volca modular マイクロモジュラーシンセサイザー
- 価格: 21214 円
- 楽天で詳細を見る
Volca Modular を買って今さらレビューする(前編)
ずっと買ってからレビューはしていなかったのですが、ちょっと前にKORGのVolca Modularを導入しました。Volcaシリーズはかなり息の長い製品でもあるわけで、なぜそれを買ったのか、実際使ってどうなのか等を改めてレビューしていこうと思います。
Volca Modularとは
シンセを購入しようとすると、いくつかの価格帯に分かれます。最低価格帯となる1万円台~3万円台では様々な製品が出回っており、主要なメーカー・ブランドでもRolandによるAIRA Compactシリーズ、BehringerによるSoulシリーズ(これは正式名称なのか謎なのですが)、そして今回のKORGによるVolcaシリーズなどがリリースされています。
この価格レンジでは、各社自由に所有欲をそそられるようなミニシンセを取り揃えており、Volcaならばアナログシンセもたくさん出しているし、AIRA CompactならばTR808/909/303エミュレートとか、はたまたちょっと毛色が異なるBehringerはPro-VSのエミュレートを出したりと、相当にぎわっています。その中で唯一のアナログ・モジュラーシンセとして目立っている存在がVolca Modularです。
モジュラーシンセという名前を知っている人は多いと思いますが簡単に説明すると、シンセサイザーの各部品を自由に結線できるものです。例えば一般的なアナログシンセサイザーはオシレーター、フィルター、アンプ、エンベロープといった部品を内部で(線を)つないでいます。それとは違い、モジュラーシンセはケーブルで自由にシンセの各部品をつなげることが出来ます。さらにVolca Modularは初心者にも使いやすいよう裏である程度結線がされている仕様(セミモジュラーという)になっているため、ケーブルをつながなくても音が鳴る設計となっています。
さらにVolca Modularのユニークな点として、一般的なアナログシンセとは流派が違う音作りの仕方=ウェストコーストスタイルを継承している点も見逃せません。
アナログシンセサイザーの発展において、Moogなどに代表されるEast Coast Style(東海岸スタイル)というような一般的なアナログシンセサイザーで見られるシンセと、 Buchlaなどに代表されるWest Coast Style(西海岸スタイル)と2種類の流れが存在しました。これを私的な独自解釈となることを恐れずに言うならば、「West CoastEast Coastは様々な倍音を含む基礎波形を使ってフィルターで音の周波数を削りアンプで音量を削ることで音を形作る」ものに対して「East CoastWest Coastは三角波のようなシンプルな波形をFM等を使いながら倍音を作り出して、ローパスゲートで音の周波数と音量を削ることで音を形作る」ものではないかなと思います。
その結果、Volca Modularは同じアナログシンセの構造であっても、かなりユニークな音も鳴らせるシンセとなっています。
Volca Modularを購入するに至った理由
色々なシンセでDAWLESSな音楽を作っているうちに、何かひとつインパクトのあるシンセを導入したいなと思い始めたのが、検討のきっかけです。
うちには、Livenシリーズ(8bit warps, Lofi-12)やnts-1 mk2はあるものの、リードとしても弾けてマシンライブに使えて、さらにアンビエントまで対応できると面白いかも、ということで、Volcaの購入検討を始めました。
そこからVolca FM2か Volca Modularに絞ったのですが、
という理由で、Modularにしたわけです。
※nts-1のFMシンセもリリースしてもいいけど、今あるnts-1のプラグインをもっとダウンロードしてくれないと、そもそも需要あるのか?と迷い、やる気が出ない問題がありリリースしていないんですよね。というわけで、無料DLでもいいのでDLして応援してもらいたい・・・と思ってます笑
ダウンロードしてくれ、ください、お願いしますだ _:(´ཀ`」 ∠):_うぅ・・・
というわけで、購入に至った音を聴いてほしいので以下の動画を紹介します。
特に感銘を受けたのが真ん中のチェロの音で、こんなにオーガニックな音が出るなら、モジュラーを買うのはありだなと決定打になりました。しかもこれ、結線していないんですよね。すごいってば。
実際に購入してみての感想
まず、届いて、1,2時間で大体の音作りの感覚は把握できました。一方、シーケンサー等の他の機能が慣れなくて、変に苦戦してました(多分、普通の人と逆)
ウェストコーストってことは、多分オシレーター周辺でまず方向性をしっかり決めるのだろうというイメージがあったのがよかったのだと思います。
機能は他のVolcaと似たり寄ったりなので普通の人は困らないと思いますが、いかんせん初Volcaであるがゆえか、明確にあるやりたい事に対して何をすればよいのかわからず、という事態に直面しました。まあ掴んでいくと、難しいものではないのですが。
アナログシンセの知識があった方がよいです。なくてもいけるけど。
ケーブルをひとつ差すだけで予想外の音が鳴るのは当たり前、何が出てくるか探究するシンセです。でもその前提として、オシレーターで出てきた音を削って、エンベロープでコントロールして、というイメージがあれば、挙動のイメージはある程度つきます。
しかしまあ、通常のアナログシンセを想定していると意外な挙動も多いです。びっくりしたのがローパスゲートで絞ると音量が下がるだけではなく、アタックも甘くなったりもしました。そこまでローパスゲートの挙動知らないもので、、、そういう慣れていない人には予想通りの音を作るの難しいわけと再認識。
またこのシンセはセミモジュラーとして結線されているわけですが、その結線の流れも押さえていないと、音が変化しないという事も起こります。(シンセの表面に薄く結線は印刷されていますが。)
ちなみにシンセの表面ではケーブルの出口、入り口をきちんと示してくれている印刷がされているのですが、音作りのパッチング例ではそれを無視した結線をしてたりしています。それでも音鳴るのもわかるんですけど、、、ええ。
ケーブルピンが小さすぎ問題について
このVolcaのケーブルピンが見えなくて、穴に差せないという話はよく目にしていましたが、まあ確かに、その通りではあるんだけど、、、という微妙なところです。イメージでいうと、シャーペンの芯くらいのケーブルを穴に差すので、老眼で見えないという人もいるのでしょうが、見える見えないは人によると思います。
僕が使う際は、見えないわけではないんだが、複雑な結線をしたりすると見えづらくなったり、やっぱりうっかり刺さっていないこともあります。ストレスがないわけではないですが、実用に負担がかかるかというとそうでもないというレベル感です。
一方、ケーブルをいくつも差すと、ピンが曲がるという事象は起こりました(傘立てに無理やり傘を詰め込むと傘が曲がるようなイメージです)。ピンが曲がっても折れていないのですが、どちらかというとこっちの方が気になります。
地味に単品だとリアルタイム入力がつらい
これはVolcaではあるあるなのかもしれませんが、リアルタイムでシーケンサー録音する際にメトロノームは付いていません。結果、リアルタイム入力は勘で演奏せざるをえなくなります。
Volca Modularはどうしても音作りとフレーズが密接に関わる場面が多いと感じます。そうであればフレーズ製作は少しでも楽だと嬉しいのですが、という感想を持ってしまいました。
音作りの自由度が高いだけに、音楽的な音を作るためには理解が必要。
このシンセ、必要最低限なモジュールであるとかVolcaフォーマットに収めるという以上に、相当練りこまれた思想があると思われます。
もちろん電子音的なシンセ音は、このシンセの立ち位置の第一義として考えられているでしょうが、FMやWavefoldで加工した三角波をローパスゲートで削り、スプリングリバーブで共鳴を作る、というのは、オーガニックなアコースティック楽器に近い音作りも想定しているのでしょう。
またローパスゲートを絞るとアタックが弱まるという話も先ほどしましたが、裏返すと、アタックの強い音を作るためにはフィルター効果は使いづらいという事です。これにより、音を整えることが難しくなります。
これらは総じて行き過ぎると、例えばコード進行に基づくような調和した音楽を壊しかねない音を作り出します。これを繰り返すことで不思議な音を作ることもできる訳で両刃の剣でもあるわけですが、やはり、そのような不思議な音はアンビエントミュージックのような特定ジャンルに結びついてしまいます。
それを避けるために重要なのは、意思を持つ事だけではなく、各セクションの機能をしっかり理解して破綻させない音作りを行う事となります。
やはり音作りにも触れざるを得ないし後編に続きますよ。
ここまで書いてみましたが、やっぱり書き足りませんね。
音作りも含めて、後編に続きます。
beatnicster-music.hatenablog.com
RC10という新しいFMオシレーターのリリース報告
KORG nts-1 mk2用の新しいオシレーターを開発して、リリースしました。
今日はそれについてのあれやこれやを備忘がてら記載しておこうかなというのが、今回の記事の趣旨です。
まずは動画とダウンロード先のご紹介
シーケンス鳴らしていますが、本当に楽しいのですよ、これ。
つまみ回すとギュインギュイン音が変化して、コントロールもしやすくて。
相当エグイ音まで出せるから、これだけでなんでも遊べそう。
そして、このダウンロード先も一旦お伝えしますね↓↓↓
今回のカスタムオシレーターの特徴
ショップの説明とかも足りていない部分があるかと思うので、いろいろ書いていきますね。
2OPのFMオシレーター
オペレーター数が多いFMシンセより、はるかにコントロールしやすく考えやすい設計です。
各オペレーターはサイン波~スクエア波~ノコギリ波に無段階で変化
トラディショナルなFMシンセのようにサイン波だけではないので、このオペレーター波形を変化させるだけでもダイナミックに音を変化させることが出来ます。
(これはABノブでコントロールできます)
FMは過変調するくらいモジュレーション可能
普通のFMならここまでやらないよね、というくらいモジュレーションできるようになっています。(ここはメニュー内を潜って操作です)
アタック~ディケイ~サステインまでエンベロープに沿ってレシオが変化
時系列によってレシオを変化させることができます。これをYouTubeにあったようにノブでいつでも変化させられるので、あるタイミングではノイズっぽくしたり逆に穏やかな音にしたり、音の立ち上がり部分をギューンと非整数倍音の動きによってエグイ感じにさせたりすることが出来ます。
(ここはメニュー内を潜って操作です。Att、Decタイムとその段階のレシオを設定することで変化をさせます。)
作成の経緯
nts-1のオシレーター制作をする中で、FMの面白さに惹かれて研究をしていました。しかしnts-1は音を作って保存することがあまり得意ではなく、その場でのパフォーマンスの使い勝手のよさが出るものの方が楽しく遊べるものです。
その点はFMの緻密な音作りとはうまく方向性が合致しないため、いくつか試行錯誤をしていた中でのオシレーターのひとつがこれになります。
本当は、ここからさらに完成度を詰めていくつもりではあったのですが、このオシレーターのとんがっている部分が丸まってしまって面白くなくなる可能性もあるな、とも思い、一旦この段階でのリリースとしています。
結構エッジが効いた音が出ているのは、そのような背景です。しかしながら試作段階のままのリリースでは申し訳ないので、操作性はきちんとまとめて公開をしています。
近頃のnts-1とかnts-3とかあれこれ。
やっぱり新しいシンセを買うのが躊躇われる物価になって、はや数年。その中で、お値段以上の価値があるnts-1とかnts-3ってありだと思うんですよね。何しろ、カスタムオシレータやカスタムエフェクトを入れられるので、1台で何台分も活躍してくれるわけですし。
このあたりの部分ってあまり巷では知られていない気がして、ちょっともったいないと思っています。例えば、VolcaとかAira Compactだけでグルボを揃えなくても、1台入れておくだけで幅が広がると思うんですけど。
さらにカスタムオシレーターやカスタムエフェクトの自作にも取り組めるから、自己研鑽がてらプログラミングというのもありだとも思います。
とりあえず、今回のRC10リリースで、nts-1 mkiiのカスタムオシレーター群の幅広さは確保できたと思うので、もしよかったら購入検討してもよいかもしれません。
という事でもう一度ダウンロード先を!
いっぱい使ってもらえるとうれしいな、、、という事でまたさらばです!!
beatnicster-music.hatenablog.com
beatnicster-music.hatenablog.com
Roland SH-4dが本気ですごいのでレビュー
つい先日、思わず安売りで出ていた掘り出し物が、とんでもないレベルだったので、思わず購入してしまいました。
それがRoland SH-4dです。実売6万円ちょっとで、他では大体9万円くらいで売っているので、かなりの掘り出し物であることは確かです。
しかし、このSH-4dはあまり人気が出ている機材ではないようです。こんなにすごいのに?という驚きも含めて、改めてその内容をレビューしていきたいと思います。
- シンセじゃないんです。シンセ×グルボなんです。
- SEQTRAKとも迷ったんですけどね。
- 羊の皮をかぶった狼のようなグルボ
- 気にならないけど、弱点もそれなりにはあります。
- 価格以上の対価もあるから絶対おすすめ。
シンセじゃないんです。シンセ×グルボなんです。
さて。まず最初に音を出した時に思ったのが、音が本当にいい!Roland独特のキラキラでスッと入る音と言えばいいんですかね。Rolandの名機と呼ばれるD-50の音を聴いた時の衝撃と同じものを感じました。
と書いているとただのシンセだと思われますが、さらにエフェクトも充実してパターンシーケンサーもついています。
にもかかわらず、SH-4dは、様々なシンセ音源を搭載したサウンドモジュールとして販売されています。グルボ感を押し出さない事情は気にはなりますが、R社ではmc101, mc707といったグルボ, JD-Xiのようなシンセも価格帯としてぶつかってくるので、それを考慮したというのもあるかもしれません。
SEQTRAKとも迷ったんですけどね。
僕がSH-4dを購入する前まで、ライフスタイル上PC外での携帯型の制作環境を考える必要がありそこでSEQTRAKを購入検討していたのですが、細かい部分でしっくりこないこともあり購入に躊躇していました。
SEQTRAKはざっくり言うと、5トラックの可搬性とデザインのよい、PCM+FMシンセ+サンプラーです。PCMシンセも無料で音源も増やしているし、かなり勢いがあるのですが以下の点が引っかかってて、自分には合わないかなと迷っていました。
- 内蔵電池は安全性や将来的な交換を考えると不安。
- すべての機能を操作するためには外部アプリが必要。
- しっかり音作りできるシンセはFMしかなく、サンプラーも貧弱なので、音作りが大変そう。
- 5トラックであるもののそのうち1トラックはサンプラー。
内蔵電池への不安は個人的なこだわり部分なので飛ばすにしても、それ以外は単機で成立するような音楽づくりを志向するにはちょっと足りないというか。
しかし、そこで視界に飛び込んできたこれらの課題をSH-4dはかなり自分の志向と嚙み合ったんですよね。
サンプラーはないものの、シンセは高品質。Zen系のRolandお得意のネットワーク音源とは繋がらないものの、それらのシンセ体系に縛られない整理された操作性のよいシンセサイズフォーマットを用意しているので、それも気になりません。さらに、リズムトラックが1トラック、シンセがフルで4トラック使えるわけです。これが楽曲製作で一番のポイントになると考えています。
例えば、ドラム、ベース、リフ、メロディでそれぞれ1トラックと考えると、4トラック構成だと、左右にパンを振ることが出来ず、ストリングス等でさらなる装飾もできなくなります。しかし、5トラックあれば十分なアレンジができるわけで、使えるか読みづらいサンプラー1トラックよりも融通もよいと考えました。
羊の皮をかぶった狼のようなグルボ
そんなこんなでSH-4dの性能はとにかく圧倒的なのはお伝え出来たと思うのですが、
少し深く見てもさらにその能力が際立ちます。
とりあえず、その一部を出すと、こんな感じ。
(他にもてんこ盛りなので、気になったらサイト見てください、ですが)
- 豊富なオシレーターモデル。要はバーチャルで様々なシンセを選べる。
- フィルターやアンプ、LFOなど基本的なつまみは全部外だしされてる。
- 高品質なエフェクトがめちゃくちゃある。
- リズム含めて、5トラック、64ステップシーケンサー。
- トラックごとのEQ(さらにリズムは音色単位でEQ)さらにマスターにEQとマルチバンドコンプ。
売りのひとつである、圧倒的な13種類ものオシレーターもVer2にアップデート時に追加されてかなり強力です。
要はそれだけ様々なシンセが入っているという理解でもよいですが、普通のプラグインだと「この辺りはまとまっているだろうな」という感覚もあったりするので多少は割り引いて考えていた方がよいかもしれません。それでも、体感5,6台のシンセが入っていると考えてもよいと思います。
では実際どうなのか見てみるとこんな感じです。
- オリジナルVA系(SH-4d、SH-3D、SYNC、RING)
- レガシーVA系(SH-101、JUNO-106)
- サンプルプレイバック系(PCM)
- オルガン系(HARMONIC)
- デジタル系(Cross FM、WAVETABLE、STEP)
- バラエティ系(CHORD、DRAWING)
- リズム音源(RHYTHM)
かなり豪華ですよね。SHやJUNOを持ってきてたり、FMやWavetableもあったり、福袋ですか?と聞きたくもなります。
こんな音源でトラックを作って、音の出口でマスターEQとマルチバンドコンプって、やる気になったらマスタリング済みのトラック作れますよね。
気にならないけど、弱点もそれなりにはあります。
かなり購入前に調べたものの、買ってみて違和感があった部分もそれなりにあります。
結構テキストや動画でレビューも含め確認したんですけどね。
そこまで気にはならないものの、ここは正直にあげておこうと思います。
FMやPCMは期待しすぎちゃダメ。
いろいろオシレーターについての肯定的な声が各種レビューにもありました。
RolandがFM載せてるのめずらしい気がする、PCMあるじゃん、という声ももちろんあって、いい予感しかないと思っていましたが、結論から言うとこの2つはちょっと癖があると思います。
まずFMについて。これは2オペのFMなのですが、レシオの選択できる値は広いが無段階ではないようである数以上になると整数倍に揃えることできないようです(操作を色々しましたが結局ダメでした。)
これだけオシレーターがあるので、FMはキラキラ要員として盛り上げるものだから!という影の意図は透けて見えるし納得もできるけど。。。
次にPCMですが、そもそもバリエーションは少ない上に、音がチープに感じます。
このあたり、オシレーターモデルは「PCM」ではなく「90年代PCM」を狙ったんじゃないかな?と思いました。
そういう風に捉えなおすと、逆に面白くて、「今っぽい豪華なPCMなんてつまんないじゃん!それよりチープなPCMがこのシンセのコンセプトとして正しいから!」というメッセージなんでしょうね。だから、PCMは積極的に音を加工した方がいい結果を産むように思います。
演奏は本当にしやすい?
いくつかの動画などいろいろ参考にした中で「鍵盤のボタンが演奏しやすい」というキーワードをいくつか耳にしました。
ただ、結論から言うと、クリック感があるため決して演奏しやすいという程ではないと感じました。
このボタンは押すときに一定程度の力が加わるとボタンが押し込めるものであるため、シンセ鍵盤と異なり力が足りない場合は打鍵から発音までにギャップが出ることがあります。
クリック感あるのはしっかりした作りに思えるものの、実際の演奏は少し意識する必要があるかと思います。
ボタン系の鍵盤を持つグルボで言うと、SonicwareのLIVENシリーズやKORGのVOLCAシリーズには演奏しやすさで負けるが、SEQTRAKよりは演奏しやすいくらいかなと個人的には思います。
ドラムの音色のアタック時間を過度に長く設定できない
ある程度音色づくりになれてくると、ドラム音色でリバースシンバルとか作りたくなるわけですよ。みんな大好きリバースシンバルを!
そこでまずリバースをする音色ないかなとさがす訳ですが、ない。
ではノイズでアタックタイムを伸ばしてそれっぽく作ってみると、発音時間を長く設定しようにも音が切れるんですよ。
これを探っていると、どうもリリースタイムを伸ばすと音は長く伸びるものの、やっぱりアタックタイムには限界がある。これはピッチを下げたとてダメだったりして、お手上げです。
つまり、シンセパートでこういうSFXは作れってことか?
作れはしますが、パート数減っちゃうのはちょっと嫌なんですよね。まあこういうのも回避しながら曲を作る面白さもあるので、そこまで気にはなりませんが。
64ステップは倍になりませんか?
一部のレビューでは、4小節しかシーケンスが組めないという話も上がっていますが、実際は8小節は組めるんです。(1ステップ=8分音符になりますけどね)
だから、16分音符ではないようなゆったりしたフレーズならやれます。ただ、今どき16分の刻みは必須みたいなものなので、どうしても制約が出るのは事実。
Ver.2アップデートによってパターンをつなげる事が可能になったので、かなりやりやすくはなっていますが、やっぱり128ステップあると便利かなとは思ってます。(これも工夫すればまあやれます)
(番外編)電池ボックスのバネが固いよー。
ほんと、なぜか電池ボックスのバネが固い。
ねえ、なんで?笑
価格以上の対価もあるから絶対おすすめ。
そんなこんなで、もはや買うべき一択ではあるわけです。
というか、少なくとも格安グルボを検討するなら、これもその中に入れた方がよいです。絶対。
ドラムも808/909系を網羅しているからアシッドもできるし、EDM系も強いし。
もしよかったら、検討してみてくださいね!!!


