Open ultrasound1372 opened 3 years ago
その技術を利用した簡単な例などを見ることは可能でしょうか。
以下はその一例です。(ファイルへのリンクは削除しました)
なぜかその映像には音が入っておらず、目の不自由な私にはアニメーションがあったかどうかもわかりません。 それを説明していただけますか?
気にしないでください、それは私のブラウザの問題でした。 はい、そういうことです。
「大きな改修になりそう」そして「常用するような機能でもない」ので、 できれば対応を遠慮したいのですが...orz
コマンドだけでも考えてみるか...
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)
こんな感じでしょうか。
TAG430 にて対応しました。
HTON/HTOFコマンドが何をしているのか説明していただけますか? コマンド表や今回の記事でのあなたの簡単な説明は、私にはあまりわかりませんでした。
なるほど、わかったような気がします。 一方では、エンベロープを使って実際に音を鳴らし、一般的にはわずかに音がずれてパルス状の効果が得られますが、もう一方では、何も出力されないチャンネルにエンベロープを流すだけです。 私はそれが機能することを実際には知りませんでした。 実装していただきありがとうございます。 あとは、AY3-8910の2倍のレートで動作するYMチップのSSG部分に対応するテーブルを作成し、そのコマンドをそれらにも動作させ、ページングにリンクさせることです。 プライマリ・チャンネルにドラム、ページにハードウェア・エンベロープ・ベースを配置したとき、ハードウェア・エンベロープはトリガーされないようで、ただの矩形波になってしまいました。
ymチップ? 2203? ページング?
YM2203、2608、2610のSSG部分です。 それらは統合されたYM2149Fで、片方のピンを抜いて半分にしないと2倍のクロックスピードで動くという点を除けば、AYのように動作します。 ページングに関しては、mml2vgmのページ機能を参考にしていて、チャンネルのページごとにデータを分割することができます。 現在、ハードウェアエンベロープの状態は保存されていないようです。
どんなmmlでしょうか?
'@ 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
このテストでは、ハードウェアのエンベロープが2ページ目でアクティブになるはずなのに、アクティブにならないようにしました。 まるで、それらの命令を完全に無視しているかのようです。
なるほど。 ページ機能では、保持されるパラメータに制限があり、 今回のパラメータは保持されません。
もしこのパラメータをページ機能に対応させるとなると、 自分のページがアクティブになった時にこのパラメータを送信する処理と、 他のページがアクティブになった時にこのパラメータを送信する前の状態に戻す処理が必要になります。 この改修は割と困難でバグもたくさん産みます。
ああ。 虫がたくさん出るとは思いませんでした。
TAG431にて少し対応を入れてみました
あと、示されたサンプルではエンベロープの種類が宣言されていないので、TAG431でもなりません。
'A1_ v15 EHT10 HSON HSO3 o4 HSTF l8 [rgrgr16g16rrg]2
こんな感じで「EHT10」を追加してください。
ああ、おっと。
うん、使える。 ありがとうございます。 あとは、SSGのチャンネルに実装するだけです。
OPN系でも使えるようになりました。いかがでしょうか?
その後、本件はいかがでしょうか
ZX SpectrumやAtari STの音楽では、オーディオレートで動作するハードウェアエンベロープを使って、再生中の音を変調し、ベースとなる新しい波形を生成するというトリックがよく使われています。 現在はmml2vgmで実現できていますが、新しい音を再生するたびに、エンベロープ・ジェネレーターの適切な周期を計算して、手動で設定しなければなりません。 ここでnは、エンベロープの周期を導き出すために、現在演奏している音の周波数に加えるべきオクターブの符号付き数です。 もしかしたら、EHSOFでキャンセルできるかもしれません。 このコマンドが有効な間は、ノートが演奏されるたびに、このオクターブオフセットがそのノートのオクターブに加えられ、その後、FNUMテーブルを参照して、ハードウェアエンベロープのための新しい周波数が得られます。 そして、音色のキーオンの直前に自動的に設定されます。 これにより、様々な形状の特徴的なAYベースを作ることができるようになります。