最近我一直在使用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 }
当我将一个事件放入队列时,时间始终以刻度表示,对吧?所以唯一要回答的时间问题是“嘀嗒多久?”。
指定两个值,即速度和PPQ有什么意义?
改变速度会有什么影响,但保留PPQ 是什么?
如果我根本没有设置PPQ,只有节奏,那会是什么 导致
答案 0 :(得分:2)
标准MIDI文件使用这两个值(tempo和PPQ)来指定速度。 ALSA测序仪使用相同的机制。
速度值是每季度音符的微秒数。 增加它会增加刻度的长度,即使播放速度变慢。
PPQ值为零无效。