ミニッツリピーターとはなにか
超スーパー高額腕時計に搭載されている機能である(元々は懐中時計に搭載されていた歴史がある)。
内部に仕込まれたゴングの音の回数で現在時刻を知らせてくれる。
(1)時単位の数(アワー):低音の単音で、1回=1時から12回=12時。
(2)60分を15分単位に分割した数(クォーター):高音と低音を交互に組み合わせて鳴らし、高音→低音の1セット=15分、2セット繰り返し=30分、3セット繰り返し=45分。
(3)15分に満たない残り分数(ミニッツ):高音の単音で、1回=1分から14回=14分まで。
ストライク音の回数が最も多くなり、よくデモンストレーションにも使われる12時59分の例ではこうなる。
●まず低音が12回鳴って12時。
●続いて59分を15分単位で割ると(15分×3回)+14分だから、高音と低音との組み合わせによるクォーターを3セット打って45分。
●最後に残った14分を高音で14回打つ。
これを実装していく。
アルゴリズムを組む
ボタンを押したら発動する想定。
時間を数値で取得する方法は前回の記事で書いた。
@IBAction func actionButton(_ sender: UIButton) {
// 時間を数値で取得する
let now = Date()
let time = Calendar.current.dateComponents([.hour, .minute], from: now)
// 時単位の数
var hour = time.hour!
// 24時間で取得するため、13時以降の場合は -12 する
if hour > 12 {
hour -= 12
}
// 60分を15分単位に分割した数
let quarter = time.minute! / 15
// 15分に満たない残り分数
let minute = time.minute! % 15
// whileで使うための変数
var hourCount = 0
var quarterCount = 0
var minuteCount = 0
// 第一ゴング
while hourCount < hour {
print("dong")
hourCount += 1
}
// 第二ゴング
while quarterCount < quarter {
print("ding-dong")
quarterCount += 1
}
// 第三ゴング
while minuteCount < minute {
print("ding")
minuteCount += 1
}
}
どんくさいアルゴリズムかもしれないです。
次回は print
をサウンドの再生に換装していきます。