Slide 1

Slide 1 text

Swiftでメトロノーム作成中
 推しの技術LT


Slide 2

Slide 2 text

What are you like?
 ● ごまなつ(@akrolayer)
 
 
 ● 機器操作のWindowsアプリを作ってます(C#, .NET)
 
 
 ● 趣味:TCG, ボードゲーム, eスポーツ観戦,
 AC音ゲー(メインはDDR)
 


Slide 3

Slide 3 text

今日話すこと
 ● 個人開発しているSwift アプリについて
 ○ 初学者がやってみたこと
 ○ 考えの変遷
 ○ 詰まっていること


Slide 4

Slide 4 text

No content

Slide 5

Slide 5 text

音ゲーやっていて嬉しいこと


Slide 6

Slide 6 text

新曲が追加された!!


Slide 7

Slide 7 text

BPM230


Slide 8

Slide 8 text

・・・どのくらいの速さだっけ?


Slide 9

Slide 9 text

BPMとは
 ● Beat Per Minite(1分間に何拍打てるか)
 ○ BPM60が分かりやすい
 ■ 1分間に60回=1秒の速さ
 
 ● 日常的に聞くのは大体150まで
 ○ 200なんて速すぎて聞かない
 


Slide 10

Slide 10 text

メトロノームを作ってみる
 ● Swiftを使ってみることにした
 
 ● 60÷BPMのタイミングで音を鳴らすことによってメトロノー ムを作成した


Slide 11

Slide 11 text

次に思ったこと
 ● BPM236の12分は4分だとBPMいくつ?
 ○ このような変換がしたいことがある
 
 ● 音ゲーには、12分、24分、48分が存在する
 ○ 計算では3連符を表すことができないため
 ■ BPMで計算する
 ■ ×3/4すれば変換できる


Slide 12

Slide 12 text

次に思ったこと
 ● BPMキープする練習、吹奏楽部のときやったな・・・
 ○ 一小節だけ鳴らして、その後音を消し正しいタイミン グだと思った時にどのくらいずれるか
 
 ● この機能をつけるのが大変だった


Slide 13

Slide 13 text

計算誤差対策
 ● Decimal型にする
 ○ SwiftのDecimalに、floor(), ceil(), Round()がない
 ○ doubleに変換して掛けて割って強制的に丸める


Slide 14

Slide 14 text

テストを書いてみる
 ● UITest
 ○ ボタンの存在確認、Enable・Unable確認
 ○ 計算結果表示ラベル確認
 
 ● UnitTest
 ○ BPM計算部分のテスト、正しいタイミング計算のテスト


Slide 15

Slide 15 text

タイミング計算が合わない・・・
 ● せっかくDecimalにしたのに、doubleに変換する時点で誤 差を許容してしまう
 ○ もっといい方法があるのでは?
 
 ● 処理時間の問題?
 ○ 処理時間はきわめて短いと思われるが、小数点以下 の秒数を表示している
 ■ 小数点以下は1桁表示に変更
 ■ 誤差が0.3秒前後と発覚したので、0.3秒引く


Slide 16

Slide 16 text

C#.NETとSwift
 ● どちらも、GUIを作成するときデザイン画面でボタン・ラベ ルなどのパーツを配置して、そのボタンの処理を書いて いく
 ○ C#.NET経験者としては、似ていてやりやすかった


Slide 17

Slide 17 text

まとめ
 ● 初学者がSwiftでアプリを作成してみた
 ○ 音ゲーマーに役立つものを目指す
 
 ● 計算誤差を解決したい
 ○ つい先ほどNSDecimalNumberHandlerを発見・・・