Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

AY/SSGです。 ハードウェアのエンベロープを現在のノートに同期させる作業を簡略化 #111

Open
ultrasound1372 opened this issue May 8, 2021 · 23 comments

Comments

@ultrasound1372
Copy link

ZX SpectrumやAtari STの音楽では、オーディオレートで動作するハードウェアエンベロープを使って、再生中の音を変調し、ベースとなる新しい波形を生成するというトリックがよく使われています。 現在はmml2vgmで実現できていますが、新しい音を再生するたびに、エンベロープ・ジェネレーターの適切な周期を計算して、手動で設定しなければなりません。 ここでnは、エンベロープの周期を導き出すために、現在演奏している音の周波数に加えるべきオクターブの符号付き数です。 もしかしたら、EHSOFでキャンセルできるかもしれません。 このコマンドが有効な間は、ノートが演奏されるたびに、このオクターブオフセットがそのノートのオクターブに加えられ、その後、FNUMテーブルを参照して、ハードウェアエンベロープのための新しい周波数が得られます。 そして、音色のキーオンの直前に自動的に設定されます。 これにより、様々な形状の特徴的なAYベースを作ることができるようになります。

@kuma4649
Copy link
Owner

kuma4649 commented May 8, 2021

その技術を利用した簡単な例などを見ることは可能でしょうか。

@ultrasound1372
Copy link
Author

ultrasound1372 commented May 8, 2021

以下はその一例です。(ファイルへのリンクは削除しました)

@kuma4649
Copy link
Owner

kuma4649 commented May 8, 2021

https://twitter.com/kumakumakumaT_T/status/1390957426749296642?s=20

こういうことでしょうか...?

@ultrasound1372
Copy link
Author

なぜかその映像には音が入っておらず、目の不自由な私にはアニメーションがあったかどうかもわかりません。 それを説明していただけますか?

@ultrasound1372
Copy link
Author

気にしないでください、それは私のブラウザの問題でした。 はい、そういうことです。

@kuma4649
Copy link
Owner

kuma4649 commented May 8, 2021

「大きな改修になりそう」そして「常用するような機能でもない」ので、
できれば対応を遠慮したいのですが...orz

@kuma4649
Copy link
Owner

kuma4649 commented May 8, 2021

コマンドだけでも考えてみるか...

HSON : Hardware envelope Sync mode ON
HSOF : Hardware envelope Sync mode OFf(default)
HSOn : Hardware envelope Sync mode Octave ( n : 1 ~ 5 )(default : 3)
H> : Hardware envelope Sync mode Octave (+1)
H< : Hardware envelope Sync mode Octave (-1)
HSDn : Hardware envelope Sync mode Detune ( n : 0 ~ 255 )(default : 0)
HSTN : Hardware envelope Sync mode Tone override oN(default)
HSTF : Hardware envelope Sync mode Tone override oFf
EHTn : (既存コマンド)エンベロープタイプ選択(default : 8)

こんな感じでしょうか。

@kuma4649
Copy link
Owner

kuma4649 commented May 9, 2021

TAG430 にて対応しました。

@ultrasound1372
Copy link
Author

HTON/HTOFコマンドが何をしているのか説明していただけますか? コマンド表や今回の記事でのあなたの簡単な説明は、私にはあまりわかりませんでした。

@ultrasound1372
Copy link
Author

なるほど、わかったような気がします。 一方では、エンベロープを使って実際に音を鳴らし、一般的にはわずかに音がずれてパルス状の効果が得られますが、もう一方では、何も出力されないチャンネルにエンベロープを流すだけです。 私はそれが機能することを実際には知りませんでした。 実装していただきありがとうございます。 あとは、AY3-8910の2倍のレートで動作するYMチップのSSG部分に対応するテーブルを作成し、そのコマンドをそれらにも動作させ、ページングにリンクさせることです。 プライマリ・チャンネルにドラム、ページにハードウェア・エンベロープ・ベースを配置したとき、ハードウェア・エンベロープはトリガーされないようで、ただの矩形波になってしまいました。

@kuma4649
Copy link
Owner

kuma4649 commented May 9, 2021

ymチップ?
2203?
ページング?

@ultrasound1372
Copy link
Author

YM2203、2608、2610のSSG部分です。 それらは統合されたYM2149Fで、片方のピンを抜いて半分にしないと2倍のクロックスピードで動くという点を除けば、AYのように動作します。 ページングに関しては、mml2vgmのページ機能を参考にしていて、チャンネルのページごとにデータを分割することができます。 現在、ハードウェアエンベロープの状態は保存されていないようです。

@kuma4649
Copy link
Owner

どんなmmlでしょうか?

@ultrasound1372
Copy link
Author

'@ ARP 0, 3, #1, | ,15
'@ E 0, 0, 0, 1, 0, 1, 0, 1,AY10
'@ E 1, 0, 0, 1, 0, 1, 0, 2,AY10
'@ ARP 1, 3, #1, 50,80,110,|,130
'@ CAR 0,P,0, #1, 2, 3, 1, 1, 3, |, 2
'@ CAR 1,w,0,#1,1,3,5
'@ VAR 0,0, #2,0,-1,0,-3,-4,-5,|,-2
'@ VAR 1,0,#1,-1,|,-2
'@ VAR 2,0,#2,|,-1
'%sd VP0 VPON CA0,0 CA1,1 CAON0 CAON1 AP0 APON a16 CAOF0 CAOF1 APOF VPOF P1
'%hc P2 w0 @1 EON c32r32 EOF P1
'%k VP2 VPON AP1 APON c16 APOF VPOF

'A1 v15 l8 o3 [%kr.%sdr.%kr16%hc%hc%sdr.]2
'A1_ v15 HSON HSO3 o2 HSTF l8 [rgrgr16g16rrg]2

@ultrasound1372
Copy link
Author

このテストでは、ハードウェアのエンベロープが2ページ目でアクティブになるはずなのに、アクティブにならないようにしました。 まるで、それらの命令を完全に無視しているかのようです。

@kuma4649
Copy link
Owner

なるほど。
ページ機能では、保持されるパラメータに制限があり、
今回のパラメータは保持されません。

もしこのパラメータをページ機能に対応させるとなると、
自分のページがアクティブになった時にこのパラメータを送信する処理と、
他のページがアクティブになった時にこのパラメータを送信する前の状態に戻す処理が必要になります。
この改修は割と困難でバグもたくさん産みます。

@ultrasound1372
Copy link
Author

ああ。 虫がたくさん出るとは思いませんでした。

@kuma4649
Copy link
Owner

TAG431にて少し対応を入れてみました

@kuma4649
Copy link
Owner

あと、示されたサンプルではエンベロープの種類が宣言されていないので、TAG431でもなりません。

'A1_ v15 EHT10 HSON HSO3 o4 HSTF l8 [rgrgr16g16rrg]2

こんな感じで「EHT10」を追加してください。

@ultrasound1372
Copy link
Author

ああ、おっと。

@ultrasound1372
Copy link
Author

うん、使える。 ありがとうございます。 あとは、SSGのチャンネルに実装するだけです。

@kuma4649
Copy link
Owner

OPN系でも使えるようになりました。いかがでしょうか?

@kuma4649
Copy link
Owner

その後、本件はいかがでしょうか

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants