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)有什么意义?

  • 改变节奏,但保持 PPQ 不变会有什么影响?

  • 如果我根本不设置PPQ,而只设置节奏,结果会是什么?

4

1 回答 1

2
  • 标准 MIDI 文件使用这两个值(速度和 PPQ)来指定速度。ALSA 定序器只是使用相同的机制。

  • 速度值是每个四分音符的微秒数。增加它会增加刻度的长度,即,使播放速度变慢。

  • PPQ 值为零是无效的。

于 2013-10-31T09:21:19.130 回答