KQ MiniSynthでのウインドシンセサイザー利用

2023年2月5日、KQ MiniSynthをバージョン3.1にアップデートしました。エアロフォンやEWI、エレフエなどのウインドシンセサイザーをKQ MiniSynthで利用する際のポイントについて書きます。

まず、カスタムコントローラを追加してBreath Controllerを入力できるようにします。
エレフエなど息の量がCC#2ではなくCC#11で送信される場合、設定から「ブレス受信元」を「CC#11/#43/#2/#34」にします。そうするとCC#11をCC#2に内部で変換するようになります。

バージョン3.1の新機能に、カーブ関数があります。これを使用すれば、ブレス感度が調整できます。

ブレス信号にVCFのカットオフ周波数が20HzほどのLPFをかけると、信号が滑らかになります。

ウインドシンセにはオシレーターシンクがお勧めです。やり方は、オシレーターを2つ用意し、片方にI/OパネルのV/Octを、もう片方にはV/Octをブレスで変調した音程を入力し、前者の出力から後者のSYNCにつなぐと、クワーといった音になります。パッチング例では変調にV/Octビブラータを使っています。

VCFのLPFでレゾナンスを少し上げ、ブレス信号でSTRを変調させるのもお勧めです。LPFの場合、STRはカットオフの逆となりますので、Invertを間にかませます。

下記のパッチング例では、Gate/Veloの信号がある場合のみブレス信号を処理するよう、Orを使用しています。

音色はここをクリック!(KQ MiniSynthが必要です)

https://www.youtube.com/embed/ZYBy2bkTvGw



拙作アプリでのウインドシンセサイザー使用のガイド

11月28日、KQ Dixie、KQ Unotone、KQ Sampeiをアップデートしました。この日のアップデートでは、ブレスコントローラーでの挙動を改善しています。
私の入手したウインドシンセは、RolandのAerophone AE-10です。KQ Dixieでブレスコントローラー対応の音ならそのままで大丈夫かと思いきや、あまりうまくいかなかったのでアプリの更新をしました。
以下、3アプリでのウインドシンセを使うポイントを記します。

KQ Dixie

ブレスコントローラーに対応した音色なら、本来はfunction parameterのbreath controlでEG biasをオンにすれば、ブレスによるコントロールができるはずなのですが、私の持っているエアロフォンでは標準でベロシティーがとても小さいのでうまくいきません。
また、ブレスコントロールに対応した音色は数が少ないので、別の解決策を実装しました。ブレスコントロールをベロシティーに変換する機能を付けたのです。これならベロシティー対応音源でブレスコントロールができます。この機能を有効にすると、通常と異なり発音後にも継続してベロシティーを適用します。

設定方法:



「param」画面で、「misc」を押す。(iPhoneでは右の方にありますので、スワイプで移動してください。)
「breath to velocity」を「type 1」か「type 2」にする。
タイプ1は、ブレスのアタックを少し強調します。タイプ2はしません。
ブレスコントローラーに対応した音色では、右のbreath controlのEG biasをオンにしてください。

KQ Unotone

以前のバージョンでは、フィルターのパラメーターを急激に変化させるとノイズが発生していました。新しいバージョンで「Slow LPF」を有効(標準で有効)にすることで、これを回避できます。ただし、PEAKが高い値だとやはりノイズは出てしまいます。
ブレスコントローラー(CC#2)をCUTOFFに割り当ててみるのはいかがでしょうか。

設定方法


MIDI Learnを押し、CUTOFFを選択します。
CC#を2に設定し、Doneを押します。
MIDI Learnを再び押し、MIDI割り当てモードを終了します。
これでブレスコントローラーがCUTOFFに割り当てられました。
PEAKを0にしても音を止めた際に低音のノイズが出るときは、SettingsからSlow LPFが有効かどうか、確認してください。

KQ Sampei

KQ Unotoneと同様に、以前はフィルターのパラメーターを急激に変化させるとノイズが発生していました。新しいバージョンで「遅いLPF」を有効(標準で有効)にすることで、これを回避できます。
エアロフォンのようにベロシティーが小さすぎる場合、ベロシティーを無視する設定をします。また、ブレスコントローラーをNRPNのCutoff Frequencyに割り当てます。

ベロシティーを無視する設定


「Param」「その他のパラメーター」を開き、設定したいパートを選択します。
「Vel Sens Depth」を0にし、「Vel Sens Offset」を96にします。これで、どんなベロシティーが来ても64で処理します。

ブレスコントローラーをCutoffに割り当てる設定


「MIDI」「リマップテーブルの編集」を開きます。
左ペインから、一番下の「項目を追加」を押します。
変換元のタイプを「Continuous Controller」「Breath Controller (#2)」にします。
変換先のタイプを「NRPN」「Cutoff Frequency (#1/32)」にします。
「適用」を押し、画面を閉じます。




Disable a 3-finger tap gesture in iOS16 (for Developers)

On iOS/iPadOS 16, a toolbar appears when you tap with three fingers. There is a workaround, which is described here.
This behavior was fixed on iOS/iPadOS 16.1. The information on this page is old.

Edited on 2022/10/7: A glitch occurs when you override UIWindow.

To put it simply, you can use a ViewController or similar to return .none in the editingInteractionConfiguration, and make that ViewController the firstResponder.
If not ViewController, AppDelegate or UIView may also work.
FirstResponder is an object that first receives events other than touch, so if there is an object inheriting from UIResponder that handles keyboard input, make it the firstResponder and editingInteractionConfiguration should be implemented.

An example in Objective-C is shown below; Swift users can draw an analogy from here.

Translated with www.DeepL.com/Translator (free version)

ViewController

// becomeFirstResponder returns "NO" in "viewDidLoad".
- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];
    [self becomeFirstResponder];
}

- (BOOL)canBecomeFirstResponder
{
    return YES;
}

- (UIEditingInteractionConfiguration)editingInteractionConfiguration
{
    return UIEditingInteractionConfigurationNone;
}



iOS16での3本指ジェスチャーを無効にする方法 (開発者向け)

iOS/iPadOS 16から、3本指でタップするとツールバーが出るようになりました。回避方法がありましたので、ここに記します。
この挙動は、iOS/iPadOS 16.1で修正され、ツールバーが出なくなりました。ここに書いてあるのは古い情報です。

2022年10月7日編集: UIWindowのカテゴリをオーバーライドすると、不具合が起きるので注意してください。

端的に言うと、ViewControllerなどでeditingInteractionConfiguration.noneを返すようにし、そのViewControllerfirstResponderにします。
ViewControllerでなくても、AppDelegateとかUIViewでも大丈夫かもしれません。
firstResponderとは、タッチ以外のイベントを最初に受け取るオブジェクトらしいので、キーボード入力の処理をしているUIResponderを継承したオブジェクトがあれば、それをfirstResponderにしてeditingInteractionConfigurationを実装すればいいと思います。

Objective-Cでの例を以下に示します。Swift使いの方はここから類推してください。
注意するべきなのは、UITextFieldなどがfirstResponderになると、再び3本指ジェスチャーが有効になるので、フォーカスが外れた時に再度becomeFirstResponderを呼び出す必要があります。
2022年9月25日編集: becomeFirstResponderYESを返したときは、再び有効になることはありません。
以前の投稿はUIViewfirstResponderにしていましたが、変更しました。

ViewController

// viewDidLoadだとbecomeFirstResponderがNOを返す
- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];
    [self becomeFirstResponder];
}

- (BOOL)canBecomeFirstResponder
{
    return YES;
}

- (UIEditingInteractionConfiguration)editingInteractionConfiguration
{
    return UIEditingInteractionConfigurationNone;
}



文字化け

プラグインをインストールするために環境をいじったら、全ての日本語の文字が化けてしまいました。
バックアップを取っておけば良かったです・・・。

とりあえずGoogleキャッシュからある程度は復旧しました。

ブログの投稿はキャッシュに無かったので、全て削除しました。