使用 C 中的按键进行每分钟节拍计数器
Beats per minute counter using key presses in C
我正在构建一个 C 程序来确定一个键在一分钟内被按下的次数(想想 "beats per minute"),以便稍后在我正在构建的节拍器中使用它。
我想在 C 中构建类似 this 的东西。我如何在按键发生时读取它们?
使用 fgetc()
读取 ENTER 键的按键。
使用gettimeofday()
以微秒为单位测量时间,计算从上次按键开始经过的时间,然后用它除以 60s。
#include <sys/time.h>
#include <stdio.h>
#include <string.h>
int main(void)
{
struct timeval t0, t1;
float elapsed;
gettimeofday(&t0, 0);
while(1) {
fgetc(stdin);
gettimeofday(&t1, 0);
elapsed = (t1.tv_sec - t0.tv_sec) * 1000.0f + (t1.tv_usec - t0.tv_usec) / 1000.0f;
memcpy(&t0, &t1, sizeof(struct timeval));
printf("%f\n", 60000./elapsed);
}
return 0;
}
您可能希望对显示值取平均值(例如保持 运行 平均值)以减少方差。
我正在构建一个 C 程序来确定一个键在一分钟内被按下的次数(想想 "beats per minute"),以便稍后在我正在构建的节拍器中使用它。
我想在 C 中构建类似 this 的东西。我如何在按键发生时读取它们?
使用 fgetc()
读取 ENTER 键的按键。
使用gettimeofday()
以微秒为单位测量时间,计算从上次按键开始经过的时间,然后用它除以 60s。
#include <sys/time.h>
#include <stdio.h>
#include <string.h>
int main(void)
{
struct timeval t0, t1;
float elapsed;
gettimeofday(&t0, 0);
while(1) {
fgetc(stdin);
gettimeofday(&t1, 0);
elapsed = (t1.tv_sec - t0.tv_sec) * 1000.0f + (t1.tv_usec - t0.tv_usec) / 1000.0f;
memcpy(&t0, &t1, sizeof(struct timeval));
printf("%f\n", 60000./elapsed);
}
return 0;
}
您可能希望对显示值取平均值(例如保持 运行 平均值)以减少方差。