2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

ミニッツリピーターを作る part.1

Last updated at Posted at 2020-12-19

ミニッツリピーターとはなにか

超スーパー高額腕時計に搭載されている機能である(元々は懐中時計に搭載されていた歴史がある)。
内部に仕込まれたゴングの音の回数で現在時刻を知らせてくれる。

(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 をサウンドの再生に換装していきます。

2
1
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?