Java サウンド API を使用して midi を使用しています。基本的には、異なるノート間をスライドできるポルタメント効果を実現しようとしています。私が得た最も近いものは、MidiChannel で setPitchBend() メソッドを使用することです。ただし、これは、開始した音符から 2 半音の範囲しか許可されません。このポルタメント効果を実現する別の方法、またはピッチベンド範囲を変更する方法はありますか?
JFugueでこれを達成する方法があれば、それも受け入れられます。
JFugueはマイクロトーンをサポートしています。(JavaSound API と多くの数学を組み合わせて実行します)
あなたが探しているものを正確に実行できるかどうかは別の問題です。あなたが遭遇する問題は、あなたが演奏するそれぞれの新しい音は、一緒に結び付けられた音の束とは対照的に、新しい音のように聞こえる. これは、ノートのアタック値とディケイ値が 0 以外の場合、またはインストゥルメントがノートの開始時と終了時に本質的に異なるサウンドを持っている場合に特に顕著です。
JFugue では、ノートの後に 'a' と 'd' を追加し、その後に
C5wa0d0
0 ~ 128 の値を追加することで、ノートのアタックとディケイを設定できます。減衰=0。
現在書かれているように、マイクロトーン ヘルパーを使用すると、文字列に単一の周波数を定義できます。たとえば、400 を「A400」にマップできます。player.play("[A400]w")
次に、これを使用するには、 (括弧に注意してください)と言うでしょう。
探しているものを得る 1 つの方法は、必要な数のマイクロトーンの周波数と文字列を定義してから、for ループを使用してパターンを作成することです...Pattern p = new Pattern("[A400]wa0d0 [A410]wa0d0 [A420]wa0d0"...);
おそらく、各音符に 1 ヘルツより大きいステップを使用できます。耳はそのようなわずかな周波数の違いを区別できません。
もっとエレガントなソリューションがあればいいのに!しかし、それが役立つかどうかを確認してください。
MIDI には、ピッチ スライド用のポルタメント コントロールがあります。呼び出しcontrolChange(65,127)
て portametno コントロールをオンにしてから、2 つのノートを演奏してみてください。controlChange(5, xxx)
ピッチスライドの速度を変更する必要があります。controlChange(65,0)
ポルタメントをオフにします。
これは時代遅れかもしれません - 私が MIDI をあきらめてフレットレスベースに切り替えてから 20 年近く経ちます - しかし、長いスライドの場合、以前は 1 つのノートを演奏し、そのピッチを次のノートの途中まで曲げる必要がありました。次に、次の音符を半分下に曲げて演奏し、同じピッチで合わせてから、このプロセスを繰り返します。
ピッチ ベンド コントロールは単に範囲を定義します。それをどのように解釈するかは、受信側 (シンセサイザーなど) 次第です。受信側が 2 つの半音をサポートしている場合、再構成できない限り、2 つの半音が得られます。ほとんどのシンセサイザーでは、ピッチベンド範囲を再構成できます。あなたのターゲットデバイスは何ですか?
(私はJフーガに詳しくありません。)
推測ですが、ピッチが連続する 2 つのノートを再生し、一方をフェードインさせてもう一方をフェードアウトさせることはできますか?