2

最近、私は 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 をまったく設定せずにテンポのみを設定すると、結果はどうなりますか?

4

1 に答える 1

2
  • 標準 MIDI ファイルは、これら 2 つの値 (tempo と PPQ) を使用してテンポを指定します。ALSA シーケンサーは同じメカニズムを使用しています。

  • テンポ値は、4 分音符あたりのマイクロ秒数です。これを大きくすると、ティックの長さが長くなります。つまり、再生が遅くなります。

  • ゼロの PPQ 値は無効です。

于 2013-10-31T09:21:19.130 に答える