今まで、質問のあった内容をまとめています。
是非、ご参照下さい。
音量エンベロープが無効な場合、キーオフ後の音量はRvコマンドで指定した値が適用されます。
Rvコマンドの初期値は2であるため、音量が2となります。
解決策としては、音量エンベロープを使う、Rvコマンドで設定する、もしくはr(休符)コマンドに臨時記号`-'を付けてください。
音量エンベロープで、リリースのパターンを定義していない可能性があります。
各系統のエンベロープにおいてリリースのパターンを指定しない場合、そのままエンベロープが継続されます。
解決策としては、音量エンベロープにはリリースのパターンを定義する、もしくはr(休符)コマンドに臨時記号`-'か`+'を付けてください。
なお、`q',`u'(ゲートタイム)コマンドによってキーオフされた後の挙動は、Rmコマンドで設定します。
NSD.libの周波数エンベロープは、現在の音階(ドレミ)を基準とした値で指定します。
また、NSD.libは6.25[cent]単位で音程を制御する設計であり、音源・音階による変化量の差はほとんどありません。
(但し、6.25[cent]単位の制御ができない音源(ノイズ、⊿PCM)や、音域(APUの高音域等)もあります。)
デフォルトでは、MIDIのトラック10(パーカッショントラック)と同様に、キーオフしない設計となっております。
Rmコマンドにて0を指定することで、キーオフされます。
デフォルトでは、発音時に初期ボリュームを0に設定しているため、前回の⊿PCM終了時点のボリュームとの差が大きい時にプチノイズが発生します。
回避策としては、⊿PCM定義ブロックにて初期ボリュームを`-1'にすることで、
⊿PCMの初期ボリュームを設定せず、プチノイズが軽減されます。
別途、n106/n163の使い方をご参照ください。
オプションとファイル名の間にスペースが入っている場合、ファイル名を認識しません。
スペースを開けずにファイル名を記述して下さい。
これはC言語で書かれたアプリケーションの一般的な仕様で、スペースは次のオプションへの区切りになります。
本音源ドライバーは、実機での動作を正確に再現するNSFプレイヤー(最新版のVirtuaNSFなど)や、
実機で動作するNSFプレイヤー(TNS-HFCシリーズなど)のご使用を強く推奨します。
音源ドライバーの制御用変数をアクセスする事で可能です。
尚、シーケンス中で再設定された場合は、その値に書き換わりますので注意して下さい。
(シーケンス上は、相対系のコマンドを使うなどで対処して下さい。)
以下、テンポの取得・設定の例(`ca65.exe'のアセンブリ言語ソース)を示します。
.include "nsd.inc"
.proc _get_tempo
lda __Tempo
rts
.endproc
.proc _set_tempo
sta __Tempo
rts
.endproc
可ですが、ライセンス条文を遵守した上でお願い致します。