摘要:事情的起因是 11 月的一天,看到了@熊小默 老师的一期视频,里面介绍了钟表三问报时的原理,以及一百多年以来,无数匠人为之付出的努力,这些背后的故事让我着迷。更重要的是,它让我产生了一个想法——如果我想亲手试试三问报时,该怎么做?买一块拥有三问报时的手表当然可
事情的起因是 11 月的一天,看到了@熊小默 老师的一期视频,里面介绍了钟表三问报时的原理,以及一百多年以来,无数匠人为之付出的努力,这些背后的故事让我着迷。更重要的是,它让我产生了一个想法——如果我想亲手试试三问报时,该怎么做?买一块拥有三问报时的手表当然可以,但我有点囊中羞涩,家附近有百达斐丽的店,可是店里的复杂腕表不让普通顾客上手体验,想到这里,我把眼睛瞟向了手里的 iPhone。
我用快捷指令做过不少有意思的项目,即使不懂编程,只要逻辑清晰,就可以使用快捷指令 完成一些原本更难实现的功能,并且还很容易和朋友们分享,一起享受快乐,于是我这次还是选择了快捷指令作为这个想法的落地基础。▍原理
在开始之前,先要了解一下三问报时的逻辑:三问报时是一种复杂的机械功能,通过不同音调的敲击声分别报出小时、刻钟和分钟,让佩戴者无需看表盘即可知晓当前时间。
小时鸣报:当三问报时功能被激活时,首先敲击一个低音音簧若干次,以报时。例如,敲响 3 次代表当前时间为 3 点。
刻钟鸣报:第二音簧以高低音结合方式,每 15 分钟报一次刻钟。例如,如果是 45 分钟时,可能会听到三组高低音的组合。
分钟鸣报:最后,另一个音簧以高音敲击,报出刻钟之后的分钟数。比如,如果时间是 3 点 52 分,小时和刻钟报完后,再敲 7 次高音,表示 52 分(刻钟报 3 个 15 分钟后还剩 7 分钟)。
▍实现逻辑
整体逻辑会分为两大部分,时间计算和响铃。时间计算这一步会算出每种铃声需要重复的次数,然后在响铃这一步依次发出对应的声音。
时间计算
基础时间
首先要获取基础分钟数,也就是截止目前,当天过去的总分钟数,这是后续计算逻辑的原始数据来源。这里我用的方法是获取当前时间后,计算当前时间距离当天 0 点的时长。
刻度时间
然后要计算的就是每个报时声音需要重复的次数,逻辑也很简单。
小时鸣报:使用基础分钟数除以 60,得到的数字向下取整,就是小时鸣报的次数。刻钟鸣报:取小时鸣报计算的余数,除以 15,得到的数字向下取整,就是刻钟鸣报的次数。分钟鸣报:最后取刻钟鸣报计算的余数,就是分钟鸣报的次数。响铃
响铃的过程需要先获取铃声,将铃声变为文本编码,置入规则内,然后在播放时通过声码器解码进行播放,这样才能保证快捷指令被分享后依然可以正常使用。
声音编码
因为我的灵感来自熊小默老师的视频,所以这里直接选取了视频中录下的爱彼手表三问报时声音作为内录铃声。
在截取好想要的视频片段、并从中抽取音轨后,我使用了一个简单的快捷指令对声音进行编码:
随后把这段编码录入这次的项目,增加为变量,前期工作就算彻底完成了。
报时
最后一步是读取前面计算出的小时、刻钟、分钟数,然后依次播放录入的铃声,这样就算完成了整个流程。
▍其他
拓展玩法:因为铃声是内置的,也就是说可以换成任意一种声音,只要做简单的替换就可以听到不同钟表的三问报时声,也可以把不同钟表的声音进行混搭,如果你愿意的话,还能换成蛤蟆叫之类的声音。
声音处理:内置的铃声戴着耳机可以听到一些「杂音」,我猜测是音簧被敲击后的震动余音,考虑到声音的还原性,所以保留了下来。
版权说明:文中提到的音效均已得到录制人熊小默老师的使用授权。
来源:晓晨科技论