这是Bash中使用ASCII铃声的简单节拍器脚本。
#!/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);
}
}
}
是否在铃声之间设置了系统默认间隔时间?我中断线程/作业后如何改变速度?
我不认为有一个强制的最小间隔between]两个蜂鸣声,但是每个蜂鸣声本身都有一个特定的[[duration,小于一秒,但至少足够长,您可以听到发出哔声,而不是单击。如果您依次发送两次哔声,并且发送间隔短于哔声持续时间,则\0007
字符只是在缓冲区中排队,并按顺序处理。效果就像您将文本发送到终端的速度快于其显示的速度。