最近、私は haskell ALSA インターフェースをいじっていて、テンポと PPQ の概念をよく理解していないことに気が付きました。
以前に ALSA への Swig-Python インターフェイスを作成しましたが、そこに次のコードが見つかりました (おそらく別の場所からコピーされたものです)。
1 void AlsaMidiIfc::setTempo (int bpm) {
2 int queue = this->getOutQueue();
3 snd_seq_queue_tempo_t *tempo;
4 snd_seq_queue_tempo_alloca (&tempo);
5 snd_seq_queue_tempo_set_tempo(tempo, 60 * 1000000 / bpm);
6 snd_seq_queue_tempo_set_ppq(tempo, PPQ);
7 snd_seq_set_queue_tempo (mySeq, queue, tempo);
8 }
イベントをキューに入れると、時間は常にティック単位で指定されますよね? したがって、答えるべき唯一のタイミングの質問は、「ティックの長さは?」です。
tempo と PPQという 2 つの値を指定する意味は何ですか?
PPQ をそのままにしてテンポを変更すると、どのような影響がありますか?
PPQ をまったく設定せずにテンポのみを設定すると、結果はどうなりますか?