その特定の楽器は、おそらく方形波または FM に基づいて、リバーブ フィルターが追加された、かなり単純な合成モジュールのように聞こえます。だから私はそれが人工的に生成された音だと推測しています。これらのインストゥルメントの 1 つを自分で作成する場合は、必要に応じてサンプル セットをベースとして使用できます。以下の方法について言及する別の可能性があります。
息の入力の処理: 息の入力は、通常、入力マイクの空気圧を表す値に変換されます。これは、入力オーディオ信号の小さなチャンクを取得し、各チャンクのピークまたは RMS を計算することで実行できます。私は、次のような方法で計算される RMS を好みます。
int BUFFER_SIZE = 1024; // just for purposes of this example
float buffer[BUFFER_SIZE]; // 1 channel of float samples between -1.0 and 1.0
float rms = 0.0f;
for (int i=0; i<BUFFER_SIZE; ++i) {
rms += buffer[i]*buffer[i];
}
rms = sqrt(rms/BUFFER_SIZE);
MIDI では、この値は通常、チャネル CC2 で 0 ~ 127 の値として送信されます。この値は、出力サウンドの音量を継続的に制御するために使用されます。(iPhoneでは、MIDIは内部で使用されている場合と使用されていない場合がありますが、概念は同じです。以降、この値は関係なくCC2と呼びます。)
キーの押下の処理:この場合のキーの押下は、対応する音符に直接マッピングされている可能性があります。これらは、新しいノート イベントとしてインストゥルメントに送信されます。そこには派手なモデリングはないと思います。
その他の制御方法:オカリナ楽器は、iPhone の傾きを使用してビブラートの周波数と音量を制御します。これは通常、低周波オシレーター (LFO) によって単純にモデル化されます。LFO は、スケールされ、オフセットされ、楽器の残りの出力と乗算されて、フラッター ボリューム エフェクトを生成します。また、楽器のピッチを制御するために使用することもできます。これにより、ピッチが変動します。(サンプルを使用している場合、これを正しく行うのは難しい場合がありますが、波形を使用している場合は比較的簡単です。) ファンシーな MIDI 風コントローラーは、指の圧力と噛み付く圧力も追跡し、それらをパラメーターとして公開して、同様にあなたの音を形作ります。
ブレス インストゥルメント 201: ブレスコントローラーでコントロールされたサウンドをより表現力豊かにするために、いくつかのトリックがあります。
- 出力が一度に 1 つのノートだけを再生していることを確認してください。新しいメモに切り替えると、前のメモが自動的に終了します。
- 息の圧力が一定で、キーの押し方がつながっている場合は、古い音から新しい音への音量が滑らかなままであることを確認してください。これにより、レガート演奏と離れた演奏を区別することができます。
息の楽器 301:そして、楽しいものに取り掛かります。実際の管楽器のように、オーバーブロー、音色の変化、部分的な運指などをシミュレートする方法です。ここで私が考えることができるいくつかのアプローチがあります:
- ブレス入力自体のサウンドをミックスし、おそらく何らかの方法でフィルター処理して、サウンドに自然なチフまたはブレス感を与えます。
- ベロシティレイヤー間のクロスフェードを使用して、高速のサウンドをまったく異なるサウンドに変換します。言い換えれば、新しいサウンドをフェードインしている間に、文字通り古いサウンドをフェードアウトします。彼らは同じピッチを演奏していますが、新しい音の新しい音色の特徴が徐々に明らかになります。
- 高周波成分をふんだんに使った複雑な音を使用してください。カットオフ周波数が CC2 によって制御されるローパス フィルターを接続します。CC2 の値が増加するにつれて、カットオフ周波数が増加します。これにより、入力をより強く吹くと、高周波成分が興味深い方法で増加する可能性があります。
- これを行うためのハードコアな方法は、物理モデリングと呼ばれます。エミュレートしようとしている楽器の物理的動作の詳細な数学的モデルを作成する必要があります。これを行うと、非常にリアルなオーバーブロー効果が得られ、息の入力と運指がサウンドを形成する方法の多くの微妙な効果を捉えることができます。プリンストンのサウンド ラボにこのアプローチの簡単な概要と、STK C++ ライブラリにあるサンプル インストゥルメントがあります。