学習プロジェクトとしてアセンブリで簡単なシンセを作成しています。最新のシンセに見られるいくつかの高度な機能、つまり正弦波を使用した ADSR エンベロープとパルス幅変調を実装したいと考えています。現時点では、基本的にサンプルを手動で生成し、オーディオ出力にプッシュしています。オーディオ出力には、サンプル バッファーと、バッファーが空に近づくと生成される割り込みがあります。
私がこだわっているのは、「連続した」波形を生成する方法です。現時点では、波の 1 つのインスタンス (のこぎりであれパルスであれ) のサンプルを生成し、その 1 つの波を単純にループして連続出力を生成します。ご想像のとおり、これは PWM と ADSR エンベロープにうまく対応できません。したがって、パルス幅やピッチ(レガートなど)のモジュレーションなど、オンザフライで潜在的な調整を加えて、オンデマンドで波を生成する必要がありますが、それをメモリで効率的に表現する方法について困惑しています、バッファがいっぱいになったときに波形生成を「一時停止」し、割り込みが発生したときに「再開」する方法。
私は解決策を求めているのではなく、正しい方向へのナッジを考えています:-)
ありがとう!