kuma4649 / mml2vgm

GNU General Public License v3.0
106 stars 10 forks source link

arpeggios #71

Closed musicalman closed 3 years ago

musicalman commented 3 years ago

ウェーブテーブルサウンドチップ(HuC6280およびK051649)の新機能のアイデアがあります。 説明するのは少し難しいです。 言語翻訳がそれを台無しにしないことを願っています。 基本的に、私の考えは、ノートの演奏に合わせてウェーブテーブルを変更することです。 @hコマンドを使用してウェーブテーブルを通常どおりに定義しますが、パターンを使用して、時間の経過とともにウェーブテーブルを変更できます。 パターンの各ステップには、ウェーブインデックスとクロックティック単位の長さが含まれます。 さらに、ループポイントをパターンに含めることができます。 アルペジオコマンドに似ています。 これにより、パルス幅変調、フィルタースイープなどの興味深い効果が可能になります。 楽しみのために、手動でこれを実行して、どのように聞こえるかを確認しました。 これが私が使用したgwiデータであり、私が考えている種類の効果を見ることができます。 http://www.fileconvoy.com/dfl.php?id=g48cdcde7c49bc30d10002960193773bb8c34bab718 どう思いますか?

musicalman commented 3 years ago

はい、すべてがスムーズに機能しています。

kuma4649 commented 3 years ago

ボリュームのアルペジオ→未対応

kuma4649 commented 3 years ago

LFOじゃだめかなぁ。。。

musicalman commented 3 years ago

返事が遅くなってごめん。 あなたの言っていることがよくわかりませんでした。 しかし、ボリュームコマンドアルペジオのアイデアは興味深いと思います。

ultrasound1372 commented 3 years ago

はい、LFOが適切な形状を提供できない場合には必要です。他のいくつかのコマンドと組み合わせることで、チップチューンスネアを作るために使用することができます。特に、ボリュームコマンドがノイズジェネレータを制御する限り、AYで便利です。また、レジスタ書き込み、ノイズ周波数などのより多くのパラメータを操作することができれば、実際には多くのパッチで町に行くことができました。直接音色出力を変更するすべてのコマンドは、これらのコマンドアルペジオに動作することはできませんか?

kuma4649 commented 3 years ago

あなたの言っていることがよくわかりませんでした LFOがボリュームのアルペジオの代わりにはなりませんか という意味です(^^;

kuma4649 commented 3 years ago

全てのコマンドというのはかなり大変ですわ。。。 ソースを見ていただくとわかると思うのですが、 ひとつひとつコマンド毎、チップごとにコードを書く必要があり、 そう簡単な作業ではないです。

とりあえずボリュームのアルペジオはそのうち対応したいと考えてますが。。。うーむ。

musicalman commented 3 years ago

ああ、わかりました。 ボリュームアルペジオを実装する予定がある場合は、試してみます。 ボリュームアルペジオは私にアイデアを与えました。 ノートのサステイン中に1つのアルペジオを使用し、ノートがリリースされたら、別のアルペジオに切り替えるのがクールです。 リリースは、rコマンドが検出されたとき、またはqまたはQコマンドによって音符が短縮されたときに発生します。 理想的には、サステインとリリースの部分は、/または同様の文字で区切られた同じアルペジオにある可能性があります。 /に遭遇したら、サステインループから抜け出し、リリース部分に切り替えます。 しかし、サステイン用とリリース用の2つのアルペジオを使用する方が簡単な場合は、それも機能します。 うまくいけば、それは理にかなっています。

kuma4649 commented 3 years ago

Eコマンドのように、キーオフしたらリリース専用のアルペジオに移行できるかんじですね? ループとかはどうなるのかしら

musicalman commented 3 years ago

はい、Eコマンドのリリースセグメントのように。 リリースに切り替えるときは、前のシーケンスループから抜け出します。 おそらく、サステインとリリースの両方が、独自のループを持つ別々のアルペジオとして扱われる可能性があります。 または、リリースは追加の同期モードである可能性があります。 別の問題:Eとボリュームアルペジオを一緒に使用するとどうなりますか?

kuma4649 commented 3 years ago

Eとアルペジオは加算するべきでしょうね。。。

kuma4649 commented 3 years ago

音程向けは既存のARPコマンドを使用する 例) '@ ARP 0 , 1 , q1 , #12 , 0 , | , 3 , -3 定義番号0に以下を定義する。  > タイモードを有効にする。  > gatetimeを1  > clock数を12に設定する。  > シフト無しで12clock発音。  > 3つ半音を上げて12clock発音  > 3つ半音を下げて(元の音程に戻して)12clock発音  > 1個目のループポイントに戻る

ARPはKeyOff時の特別な動作無し。

kuma4649 commented 3 years ago

音量向けに新規コマンド(VAR)を追加する

例) '@ VAR 0 , 0 , #12 , 0 , | , 3 , -3 , | , 3 , -4 定義番号0に以下を定義する。  > 音量モード0にする。(dummy)  > clock数を12に設定する。  > シフト無しで12clock発音。  > 3つ音量を上げて12clock発音  > 3つ音量を下げて(元の音程に戻して)12clock発音  > 1個目のループポイントに戻る KeyOffしたら  > 3つ半音を上げて12clock発音  > 4つ半音を下げて(元の音程に戻して)12clock発音  > 2個目のループポイントに戻る

'@ VAR 0 , 0 , #12 , 0 , | , 3 , -3 , / , 3 , -4 KeyOffしたら  > 一旦変化量を0に戻す  > 3つ半音を上げて12clock発音  > 4つ半音を下げて(元の音程に戻して)12clock発音  > 2個目のループポイントに戻る

kuma4649 commented 3 years ago

音程はARPコマンドにて定義。 音量はVARコマンドにて定義。 他のコマンドはCARコマンドにて定義。

ARPコマンドの時。  |と/の効果の違いは無い。  |と/は合計1個まで定義可能。  eは使用できない。

VARコマンドの時。  /を指定すると変化量をリセットする。  |と/は合計2個まで定義可能。  eを指定するとアルペジオ終了。(変化量リセット含む)

CARコマンドの時。  |と/の効果の違いは無い。  |と/は合計2個まで定義可能。  eを指定するとアルペジオ終了。(変化量リセット含む)

musicalman commented 3 years ago

私はそれが好きです。 したがって、varコマンドはEコマンドの代替です。 これを実装できれば、より複雑なボリュームエンベロープを作成すると非常に便利です。 それほど重要ではありませんが、arpコマンド内で[]ループを使用する方法を追加できるかどうかも疑問に思いました。 これにより、何かを複数回繰り返すのが簡単になる可能性があります。 したがって、-2、-2、-2、-2、-2 ...と入力する必要はありませんが、代わりに[-2、] 10などを使用できます。 しかし、それは私がタイプしているときに思いついたランダムな考えだったので、それほど重要ではありません。

kuma4649 commented 3 years ago

実装しました eは未実装

musicalman commented 3 years ago

ありがとう、うまくいっているようです! しかし、私はバグがあると思いますか? テストとして、testArpeggio_2.gwiのこの部分を試しました。 '@ VAR 1 0 '@#6 0 | 3 -3 /#2 -6 アルペジオの最初の部分は問題ありませんが、キーオフしようとすると音が途切れます。 したがって、/の前の部分だけが聞こえます。 おそらく私は何か間違ったことをしていますか?

musicalman commented 3 years ago

また、@ arpコマンドを使用すると、モード2と3が機能しないようです。 コマンドメモに記載されていますが、まだ実装されていないと思います。

kuma4649 commented 3 years ago

testArpeggio_2.gwiであれば、56行目の 'F1 VP0 [c4r4c4r4] を 'F1 VP1 [c4r4c4r4] に変更すると、VAR 1 ~の定義が試せます。 そのままだとVAR 0 ~の定義が使用されます。

後、「|」,「/」を使用するとループしますので、キーオフした際に「#2 -6」を繰り返すことになります。 (これを任意のタイミングでやめさせるために「e」を考えてますが、未実装です)

ARPのほうは、まだ未実装ですw(忘れてた) CARも手を付けていません。

kuma4649 commented 3 years ago

あと [と]で繰り返しができるようにする機能は今のところ実装する気はありません。 やるとしても、もう少し作りこみができてからかな。。。 実装したくない理由は、処理がいきなり複雑になってしまって混乱しそうだからです。 また、 [と]の中に、|と/を挟んだときどうする とか決める必要がでてきます。

musicalman commented 3 years ago

キーオフについてもう少し調べました。 これが私のgwiファイルです: '@VAR0,0,|,#6,-1,-1,1,1,/,|,#3,-1 'A1 T120 v15 l4 o4 VP0 crergr

音が切れているようですので、/以降は何も聞こえません しかし、Ay3チップ(上記のファイルで使用)では、キーオフ中にパチパチという音が聞こえます。 このパチパチという音は、アルペジオの内容によって変化します。 ですから、キーオフ部分は認識されていると思いますが、音が切れすぎてしまいます。

kuma4649 commented 3 years ago

とりあえず。。。  |と/は合計2個まで です。

'@var0,0,|,#6,-1,-1,1,1,/,|,#3,-1 は、3個つかっています。

今 外出中で動作確認できないのですが とりあえずopnで確認してください… おそらく リリースを出力できる音源である必要があると思います ソフトエンベロープを有効にするとAYでもいけるかもしれないですが。

musicalman commented 3 years ago

FM音源では、RRに低い値を使用して、KeeyOff後の音を維持することができます。 次に、ボリュームアルペジオを使用すると、/の後のセクションが聞こえます。 しかし、RRに高い値を使用すると、KeyOff後もサウンドが十分に長く持続しません。 また、他の音源は瞬時にカットされるため、/以降の部分は聞こえません。 したがって、ボリュームアルペジオで/を使用する場合は、新しい音が鳴るまで音源のKeyOffを遅らせたいと思います。 @Eコマンドを使用した場合のKeyOffの遅延と同様です。

kuma4649 commented 3 years ago

FMの場合は現状の実装のままで良いかなーと思ってます RRはユーザーが自分で設定するでしょうし。

問題はAYのようなソフトエンベロープを必要とする音源でしょうねぇ

musicalman commented 3 years ago

そうですね。 ただし、Eコマンドはこの問題を回避します。 そしてそれはまた柔らかい封筒です。 それで、おそらく同じメカニズムをvarで使用できますか? そうでない場合、ボリュームアルペジオの/部分は制限されます...

kuma4649 commented 3 years ago

と思ったんですが、いじってみたらmusicalmanさんの方法で十分のようですので それでいこうと思います。;-P

kuma4649 commented 3 years ago

https://www.dropbox.com/s/1cnrwha53buc8u4/bin.zip?dl=0

kuma4649 commented 3 years ago

↑ちょっとためしてみてくださいませ e も実装しました。

musicalman commented 3 years ago

おかげで、私はそれをテストしました。 私は2つのバグを見つけたと思います。 SN76489は、キーオフ後に続行されません。 音が途切れる。 K053260は、ボリュームアルペジオがアクティブな間は楽器を切り替えることができません。 例はここにあります:http://www.fileconvoy.com/dfl.php?id = ga8cb5a9715d798201000308368bc324bca73430261 これまでのところ他の問題はありません。

kuma4649 commented 3 years ago

レポートありがとうございます。 TAG329 で修正しました。

kuma4649 commented 3 years ago

test k053260.gwiですが、 '@VAR0,0,#4,-2,3,5,4,|,0,|,#2,-1 'S1 r1 T120 l2 v5 VP0 o3 c d e f g r e r に修正して確認しました。 元のままだと、 ・開始音量が大きいため、だんだん大きくなる変化がなくなってしまう。 ・RR時のコマンドが「/」の為、変化量が0に戻り、減衰がわかりにくい。 ためです。

musicalman commented 3 years ago

ありがとう、修正されました! 今、私はいくつかの楽しみを持って、あなたを気にしないでしょう。

kuma4649 commented 3 years ago

とじます

musicalman commented 3 years ago

2つ、おそらく3つのアルペジオバグを見つけました。

  1. K053260では、ボリュームアルペジオがアクティブな場合、サンプルはキーオンされません。
  2. rf5c164では、ノートアルペジオ同期モードが0または2の場合、ボリュームアルペジオもアクティブであれば、アルペジオ内のノートはキーオンされません。 3.これまでにテストしたすべてのサウンドチップで、コマンドアルペジオとボリュームアルペジオはノートアルペジオの同期モードを無視しているようです。 つまり、同期モードが0または2の場合、アルペジオのトーンは期待どおりにキーオンされますが、コマンド/ボリュームアルペジオはキーオンされません。 サンプルのgwiデータはここにあります:https://ln2.sync.com/dl/a1b2da750/z4uededs-mdsc36rq-wkwspjg2-5243ekc4
kuma4649 commented 3 years ago

ありがとうございます。 調査しまーす

kuma4649 commented 3 years ago

音量アルペジオは同期モードは、存在しません。 (将来のために0として用意だけはしています) また、音程アルペジオのモードを他のアルペジオが参照することはありません。

コマンドアルペジオにはSyncという同期モードがありますが、 これもコマンドアルペジオのみの話であって、他のアルペジオがそれを参照することはありません

よって bug2とbug3は仕様通りの動きであってバグではありません。。。 。。。のですがちょっと動きとしてどうなのというかんじなので、 音程アルペジオのタイモードが無効の場合は、 通常のエンベロープと音量アルペジオをリセットするようにします。

なおbug1はバグでしたので修正します。

musicalman commented 3 years ago

説明をありがとう。 あなたが説明するように物事は今行動しているようです!

musicalman commented 3 years ago

@arpコマンドを使用しているときに何か他のものを見つけました。 アルペジオデータでqnまたはQnを使用すると、ノートは以前のようにキーオフされません。 FMトーンはコマンドに従ってキーオフするように見えますが、@ Eまたはボリュームアルペジオはキーオフしません。 少なくとも私が使ったサウンドチップでは。

例: '@ARP0,0,#24,q6,0,|,2,2,1,2,2,2,1,-12 '@VAR0,0,#5,0,|,-1,/,#1,-3,-2,-2,-2,-2,-2 '@E1,14,0,5,8,1,1,1,Ay3 'A1 T120 v14 l1 AP0 VP0 o4 c VPOF @E1 c1 EOF

この例では、エンベロープは早期にキーオフされませんが、古いバージョンではキーオフされました。 どのバージョンが変更を導入したかはまだ調査していません。 バグですか?

kuma4649 commented 3 years ago

バージョンの番号はわかりますか?

musicalman commented 3 years ago

まだですが、後で古いバージョンに戻ります。

musicalman commented 3 years ago

アルペジオの振る舞いが変わったところを見つけました! TAG 352では、ノートは期待どおりにリリースされますが、TAG353ではリリースされません。 その時、あなたは私の以前の報告に応えて、新しいノートでエンベロープとボリュームアルペジオをリセットしました。 ただし、qnコマンドとQnコマンドはアルペジオ内で機能しなくなりました。

kuma4649 commented 3 years ago

ありがとうございます!助かります!

kuma4649 commented 3 years ago

TAG361で修正しました。ご確認ください。

musicalman commented 3 years ago

いいですね、今のところ問題は発生していません。

musicalman commented 3 years ago

いいですね、今のところ問題は発生していません。

musicalman commented 3 years ago

ボリュームアルペジオでもう1つ見つけました。 多分それはバグです。 徐々に音がフェードアウトするボリュームアルペジオを作ろうとしていますが、key offで止めることができます。 おそらく私はそれを正しくやっていないのですか? 問題は、key offが遅すぎるか、まったく発生しない場合があることです。 #で指定されたクロック数が経過するまで、key offは発生しないようです。 gwiデータ:

'@VAR0,0,#3,15,-2,-2,#20,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,/,0 e 'S1 T120 l4 o3 v0 bug: 'S1 VP0 Q5 c d e f g a b >c

また、これがバグである場合は、@ arpコマンドを確認することを忘れないでください。

kuma4649 commented 3 years ago

keyoffのタイミングでアルペジオの処理は '/' の位置に移動します。 そこで変化量0のまま、アルペジオは終了するので 音が出続ける状態になります。

musicalman commented 3 years ago

申し訳ありませんが、理解できないと思います... 奇妙なことを説明させてください。 gwiファイルのQ5をQ4に変更したところ、期待どおりに音符がカットされました。 しかし、Q5を使用すると、音符が切れません。 アルペジオを変更した場合、たとえば#20を#18に変更した場合、音符はカットされますが、遅れます。

kuma4649 commented 3 years ago

うーん、、、わからないのでmmlを提示してもらえませんでしょうか

musicalman commented 3 years ago

ここからダウンロード: https://cp.sync.com/dl/a2ae279b0/rg25wye9-jur89xc4-6tbw5qpz-kxkj2d7j mmlデータを調整したので、動作は明らかです。