2

这是一个在 Bash 中使用 ASCII bell 的简单节拍器脚本。

#!/bin/bash

read -s tempo
interval=$(bc -l <<< "scale=4; 60/$tempo")

echo -n "tempo is $tempo  interval is $interval seconds"

while true
do
        echo -en "\a"
        sleep $interval
done

我遇到的错误:

当速度设置为超过 60 时,节拍器脚本最初将始终以 120BPM 启动,并且只有在我通过按随机键中断它后才快速或慢速更新到正确的速度。

我也在Java中尝试过,遇到了同样的问题。

import java.util.Scanner;
import java.lang.Runtime;
import java.io.*;

public class Metronome {

  public static void main(String[] args) throws InterruptedException { 

    Scanner in = new Scanner(System.in);

    double tempo = in.nextDouble();
    double interval = (60 / tempo) *1000;


    while (true) {
        System.out.println("\u0007");
        Thread.sleep((long) interval);
    }

  }

}

钟声之间是否设置了系统默认间隔时间?我中断线程/作业后它如何改变速度?

4

1 回答 1

0

我认为两次哔声之间没有强制的最小间隔,但每次哔声本身都有一定的持续时间,小于一秒,但至少足够长,以至于您听到哔哔声而不是咔嗒声。如果您按顺序发送两次哔声,并且发送间隔小于哔声持续时间,则\0007字符只是在缓冲区中排队并按顺序处理。效果就像您将文本发送到终端的速度比显示的速度快。

于 2020-05-11T06:13:15.633 回答