Introduction
Introduction
“Minute Repeater” is a complication of mechanical watches and one of the most fascinating accomplishments of of Haute Horlogerie. At the press of a button, a minute repeater watch would chime out the hour, followed by the quarter hour and minutes. For example, if the time is 3:34am then the minute repeater will sound 3 low tones representing 3 hours, 2 sequence of dual-tones representing 2×15=30 minutes, and 4 high tones representing 4 minutes: “ding, ding, ding; ding+dong, ding+dong; ding, ding, ding, ding”. Here’s a clip illustrating it.
Such watches originated before night illumination became widely available and it was invaluable for the visually impaired. In the current day, while minute repeater watches have lost their practical utility, they are still highly sought after by watch enthusiasts due to their intricacy and novelty.
The mechanisms underlying minute repeater watches are ingenious and require both technical facility as well as musicality on the part of the watchmaker to listen to and confirm the harmony of the striking sounds. Furthermore, the pinnacle of achievement for minute repeater movements is their ability to fit into a small watch case. As a tribute to this mechanism, here I've utilized the computational "gears" of Wolfram Language to provide 2 implementations. At the press of "evaluate", this minute repeater watch tells time in a manner that harkens back to an earlier age but relies on modern computation.
The mechanisms underlying minute repeater watches are ingenious and require both technical facility as well as musicality on the part of the watchmaker to listen to and confirm the harmony of the striking sounds. Furthermore, the pinnacle of achievement for minute repeater movements is their ability to fit into a small watch case. As a tribute to this mechanism, here I've utilized the computational "gears" of Wolfram Language to provide 2 implementations. At the press of "evaluate", this minute repeater watch tells time in a manner that harkens back to an earlier age but relies on modern computation.
Analysis
Analysis
Here’s link to a video clip of a minute repeater in action: we first import it, and get the audio track,
In[]:=
clip=Import["https://www.watkinsr.id.au/RepeaterVideos/repminute.mp4"];audio=Audio[%];
Let’s examine the audio track:
In[]:=
{Spectrogram[#,ImageSize600],AudioPlot[#,ImageSize600]}&@audio//List//Transpose//Grid
Out[]=
What does it actually sound like? Let’s ask the algorithm, feeding it with a few seconds of the audio clip:
In[]:=
AudioIdentify[AudioTrim[audio,{6,10}]]
Out[]=
Which is a pretty good answer! In a minute repeater, the components that are being struck are circular rods that encircle the watch movement - which is not all that dissimilar from a bell.
Hour chimes
Hour chimes
Let’s try to analyze the temporal spacings between strikes during the chimes announcing the hours. This takes only a few lines of code:
In[]:=
audioTrim=AudioTrim[audio,{4,12}];hourIntervals=AudioIntervals[%,#Power>0.001&,PartitionGranularity0.1]AudioPlot[%%,Epilog{RGBColor[1,0,0,.5],Rectangle[{#[[1]],-1},{#[[2]],1}]&/@%}]
Out[]=
{{0.775,1.125},{1.425,1.675},{2.125,2.325},{2.775,2.975},{3.475,3.575},{4.225,4.375},{4.925,5.125},{5.575,5.725},{6.275,6.475}}
Out[]=
Let’s check the difference in time values between the strikes:
In[]:=
Differences[First/@hourIntervals]Median@%
Out[]=
{0.65,0.7,0.65,0.7,0.75,0.7,0.65,0.7}
Out[]=
0.7
This helps us determine the duration we’ll be using in our Wolfram Language implementation. Estimating the pitches of the gongs during of high intensity strikes, we get:
In[]:=
PitchRecognize[AudioTrim[audioTrim,#],"SoundNotePitch"]["Values"]&/@hourIntervalsMedian/@(%/.Missing[]->Nothing)
Out[]=
{{Missing[],3,-9,-4,3,3,3,8,3,3,9,8,8,8,8,8},{8,9,3,3,-4,3,3,3,8,3,3},{8,Missing[],3,3,3,3,3,3,8},{Missing[],3,3,3,3,3,3,3,3},{Missing[],Missing[],3,3,3},{Missing[],3,3,3,3,3,3},{Missing[],-6,3,3,3,3,3,3,3},{8,8,Missing[],Missing[],3,3,3},{8,Missing[],3,3,3,3,3,3,3}}
Out[]=
{3,3,3,3,3,3,3,3,3}
We’ll use this later as the pitch.
Minute chimes
Minute chimes
These chimes come at the very end, so we look at the following interval:
In[]:=
audioTrim=AudioTrim[audio,{16.5,19}];minuteIntervals=AudioIntervals[%,#Power>0.0001&,PartitionGranularity0.015]AudioPlot[%%,Epilog{RGBColor[1,0,0,.5],Rectangle[{#[[1]],-1},{#[[2]],1}]&/@%}]
Out[]=
{{0.34875,0.51375},{0.96375,1.09125},{1.61625,1.77375},{2.18625,2.20875}}
Out[]=
The time in between the strikes are:
In[]:=
Differences[First/@minuteIntervals]Median@%
Out[]=
{0.615,0.6525,0.57}
Out[]=
0.615
which is quite close to that for the hourly chimes.
It’s harder to estimate the pitch of the minute chimes, but we can give it a try:
In[]:=
PitchRecognize[AudioTrim[audioTrim,#],"SoundNotePitch"]["Values"]&/@minuteIntervalsMedian/@(%/.Missing[]->Nothing)
Out[]=
{{Missing[],Missing[],-1,-1,3,3,3,Missing[]},{Missing[],-1,-1,-1,4,4},{Missing[],Missing[],-1,-1,-1,11,-1},{Missing[],5,Missing[]}}
Out[]=
{3,-1,-1,5}
Quarter chimes
Quarter chimes
Let’s calculate the delay between the end of the hour chimes and the start of the lower note of the quarter chimes:
In[]:=
audioTrim=AudioTrim[audio,{10,14}];quarterIntervals=AudioIntervals[%,#Power>0.001&,PartitionGranularity0.1];AudioPlot[%%,Epilog{RGBColor[1,0,0,.5],Rectangle[{#[[1]],-1},{#[[2]],1}]&/@%}]loudQuarterIntervals=Differences[First/@quarterIntervals][[1]]
Out[]=
Out[]=
2.95
Recall that the hour chimes last around 0.7s, so we’ll aim for a 2.1s rest between the hour and quarter chimes. Let’s now look the time between the lower and higher tones within the quarter chimes:
This is the estimated duration of first and second strikes of the quarter chimes:
Synthesis
Synthesis
We will now use Wolfram Language to synthesize two minute repeater versions:
(1) Model UltraTerse: this “no-frill” version has a character count of 122, which fits into the 128 constraint for the “one-liner” competition.
(2) Model Traditionelle: this version aims for reproducing the sound of traditional mechanical minute repeaters. It has a character count of 196.
(1) Model UltraTerse: this “no-frill” version has a character count of 122, which fits into the 128 constraint for the “one-liner” competition.
(2) Model Traditionelle: this version aims for reproducing the sound of traditional mechanical minute repeaters. It has a character count of 196.
Model: Computa UltraTerse
Model: Computa UltraTerse
In this minimalistic version, the quarter chimes are carried out at the same time:
Model: Traditionelle
Model: Traditionelle
Having analyzed the duration and frequencies of the chimes, we now have to choose a tone for our Minute Repeater. Quite a few types of sounds are offered by Wolfram Language, here is a sampling of them:
Visually, it looks like Glockenspiel is a good choice that matches quite well with the spectrum from the minute repeater we analyzed earlier. This is not surprising, since both are sounds made from “hammers” striking metals. We’ll go with this choice.
The following is an implementation consisting of 196 characters:
Could this be further shortened? Your suggestions and attempts are welcome!
Final thoughts
Final thoughts
It’s a testament to the capability of the existing functionalities of Wolfram Language that we can do a pretty extensive analysis of a Minute Repeater clip and recreate an implementation that lives in the digital realm. Is it time to add this “complication” to your smart watch? The Swiss watchmakers need not worry, as there’ll always be connoisseurs of this marvel of mechanical achievement.