js 写的节拍器

56 天前
 est

https://lab.est.im/metronome/

主要特色是计时准,操作简单,无广告。

前因后果写了个 blog

欢迎大家使用+吐槽

2460 次点击
所在节点    分享创造
14 条回复
colatin
56 天前
也来一个
https://bpm.blue/
shadowyue
56 天前
点赞。
作为卖点的 计时准 怎么理解?
est
56 天前
@shadowyue 博客里写了一点。

setInterval 是有时间抖动( jitter )的。 这位做过实验 https://meowni.ca/posts/metronomes

要想不抖,得放到 service worker 里。不如我这个版本简单
murmur
56 天前
没有强和次强的区别吗
est
56 天前
@murmur 你说的是。特强 - 强 - 中 这样的对比吗?下次一定 。。。
murmur
56 天前
@est 比如说锦鲤抄 浮夸 这些歌,说是 2/4 ,实际上记谱用 6/8 更简单,而且谱子也是 1 xx 2xx 1xx 2xx 这样的节奏

还有锦鲤抄的速度是 87.5 ,我也不知道为啥带小数,就这个数字特别深刻
est
56 天前
@murmur 我大概明白你的意思。下一步设想是允许用户加减 beat 。然后每个 beat 音色自定义

87.5 这个速度。。。有必要如此精确么。。实在不行我看放个 input 让用户自己输入好了。。。
tyrone2333
56 天前
计时准 这个是怎么实现的, 我用 flutter 写过, 前后改了好几版, 做不到准确
est
56 天前
@tyrone2333 直接不间断给 WebAudio 喂指令~~~~还得在上一个播放完成之前提前喂到嘴里,这样就是最精确的
tyrone2333
56 天前
@est #9 我试过这个方案还是有很大误差, while 也会差几毫秒, 要是挂后台差的更多. 高 bpm 的时候音效没播完就到下一个, 很明显
est
56 天前
@tyrone2333 啊。这么拉垮吗?你怎么测试的呢?我那个 demo 也差么
est
56 天前
@tyrone2333 我大概想到怎么优化了。高 bpm 的时候不能单靠一个 beat 去提前。得把多个 beat 都提前喂给 AudioContext 。
tyrone2333
55 天前
@est #12 看了下我的代码是搞了 3 个实例, 两个用于播放 soundType2,另外一个用于 soundType1
est
55 天前
@tyrone2333 你试试我这个版本嗯?我找了个 200bpm 的视频一起听,没听出来明显卡顿。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1076777

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX