2

誰かが楽器エミュレーターのプログラミングに関する情報を提供してくれませんか? 例として、こちら(iPhone 用の Smule の Ocarina アプリ) を参照してください。

このトピックに関する十分な情報を見つける必要があります。例としてオカリナ アプリで実行すると、個々の音はどのように生成されますか? 結果は息の強さと押し下げられた「穴」に基づいているため、その一部はプログラムで処理する必要がありますが、プログラムで生成されたサウンド全体であるか、バックエンドでサウンド サンプルを使用してそれを変更します (またはそれら、複数のサンプルが使用されている場合)?

このトピックに関するリソースはありますか? 私の検索はすべて、音楽の再生方法 (標準オーディオのみ) や音楽の作成方法 (音楽編集ソフトウェアで) に関する情報に出くわしますが、そのビデオに示されていることを行う方法に関する情報はありません。

応答は、オカリナに厳密に関連している必要はありませんが、関連していても構いません。

4

2 に答える 2

3

その特定の楽器は、おそらく方形波または 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++ ライブラリにあるサンプル インストゥルメントがあります。
于 2010-07-11T23:57:48.897 に答える
0

まず、ご質問の内容がよくわかりません。

音声合成にはかなりの種類があります。私が知っているいくつかは次のとおりです。

  • 周波数変調
  • 振動波
  • 表(サンプルベース)

発振は非常に単純で、おそらく開始する場所です。440Hz の方形波を生成すると、「A」という音、具体的には中央の A という音になります。

このような単純な合成は、非常に楽しく簡単に行うことができます。PCスピーカー用の簡単なシンセを作り始めることができるかもしれません。ああ、でもすべての OS でアクセスできるかどうかはわかりません。LADSPA にはいくつかの良い例があります。開始するためのドキュメントを含む Linux 用のライブラリがたくさんあります。手始めに Csound をご覧になることをお勧めします: http://www.csounds.com/chapter1/index.html

私はそれを少しいじって、いくつかの陳腐なシンセが進行中です...

于 2010-07-09T17:29:31.057 に答える