节拍器
音视频所有处理都在浏览器本地完成,数据不上传服务器
⚠️ 拍点是**提前排**在音频时钟上的(不是「到点响一声」),所以主线程忙的时候拍子也不会漂;切到别的标签页也照样准。
⚠️ 这个节拍器与大多数在线节拍器的区别在一件看不见的事上:拍点是提前排在音频时钟上的,而不是「用定时器到点响一声」。 后者有三个必然的毛病:定时器会漂(回调被主线程挡住就晚一点,而这一点点延迟会累积,一分钟下来能差几十毫秒,耳朵对节拍器的抖动极其敏感);声音要在未来的某个精确时刻开始,而不是「现在就响」;切到别的标签页时定时器会被降到每秒一次,拍子直接崩掉。所以这里的做法是:一个每 25 毫秒跑一次的定时器只负责把接下来 100 毫秒的拍点排进音频时钟,真正发声的时刻由音频设备定死 —— 定时器偶尔晚一点也照样准。 另外三件事:点按测速(跟着音乐点几下,自动算出 BPM);拍号与重音(4/4 的第一拍重音、3/4 的圆舞曲感);速度术语(庄板 40、行板 76、快板 120……直接点,不用记数字)。全部在浏览器本地完成,不联网。
功能
- ⚠️ 拍点提前排在音频时钟上,主线程忙或切到后台标签都不会漂
- 30–300 BPM,滑杆与数字框双向同步
- 拍号 2/4、3/4、4/4、6/4,重音可指定落在第几拍(也可关掉)
- ⚠️ 重音高一个八度(1200 Hz 对 800 Hz),小节的第一拍听得出来
- 点按测速:跟着节奏点几下就得到 BPM;超过 2 秒不点自动重开一轮
- 点按的不稳定程度会提示出来 —— 你点得晃的时候读数本来就不该信
- 速度术语一键切换(庄板 / 慢板 / 行板 / 中板 / 快板 / 急板 / 最急板)
- 键盘:空格开始与停止
- 全部在浏览器本地合成声音,不加载音频文件、不联网
使用方法
- 选一个速度术语,或拖滑杆 / 直接填 BPM
- 按需要设拍号与重音落在第几拍
- 点「开始」或按空格;跟着点「跟着点」可以让它测出你想要的 BPM
- 再按一次空格停止
常见问题
- 为什么不用 setInterval 直接响?
- 因为那样一定会漂。`setInterval` 只保证「至少隔这么久」,回调被主线程别的活挡住就晚一点,而延迟会累积 —— 一分钟下来差几十毫秒,鼓手当场就能听出来。正确做法是让定时器只负责「提前把拍点排进音频时钟」,发声时刻由音频设备定死。定时器偶尔晚几十毫秒也没关系,因为它排的是 100 毫秒之后的拍点。
- 切到别的标签页还准吗?
- 准。因为发声的时刻已经交给音频时钟了,而浏览器对后台标签的限制主要落在定时器与渲染上。⚠️ 但要注意:后台标签里的声音不会停 —— 这是浏览器的行为(音频播放会让标签页保持活跃),不是这个工具能控制的。不想听就按空格停掉。
- 重音为什么听起来是「嘀」和「嗒」?
- 重音用的是 1200 Hz、其余拍用 800 Hz,音高不同而不是音量不同 —— 音量差在小音箱上几乎听不出来,而音高差在任何设备上都清楚。想听小节的第一拍就把重音设在「1」,想更平均就选「不加重音」。
- 点按测速的读数怎么会飘?
- 因为它量的是你。读数取的是首尾两次敲击的平均间隔(不是相邻间隔的平均 —— 那个会把每一次抖动都算进去),所以点得越均匀越准。少于三次敲击时不会给「不稳定」的提示,因为样本太少说明不了问题。⚠️ 超过 2 秒没点会自动重开一轮,否则「点两下、想一会儿、再点两下」会被算成一段很慢的拍子。
相关工具
音调发生器
音视频在线音调发生器:正弦、方波、三角、锯齿四种波形,可填频率或音符名(如 A4),支持左右声道、指数扫频与自动停止。本地合成,不加载音频文件。
在线秒表
生成器带计次的在线秒表:空格开始或暂停、L 键计次、R 键重置,自动标出最快与最慢的一圈,切到别的标签页也不停表。
倒计时
生成器倒计时与正计时:输入时长或点预设,读数每帧更新、到点发声;暂停继续不丢时间,走的是单调时钟。
视频转 GIF
音视频把视频的某一段转成 GIF,可调帧率、宽度、颜色数与循环。看着预览选范围,带进度条。视频不上传,浏览器本地完成。
视频截帧
音视频导出视频某一刻的画面,按视频自身分辨率输出 PNG、JPEG 或 WebP。比播放器截图清晰:没有控件、没有屏幕缩放。文件不上传。
音频转 WAV
音视频把 MP3 / M4A / FLAC 等音频转成 WAV,可改采样率(16k 语音、48k 视频)、转单声道、做峰值归一化。全部在浏览器里完成。