Swiftでメトロノーム作成中 推しの技術LT
View Slide
What are you like? ● ごまなつ(@akrolayer) ● 機器操作のWindowsアプリを作ってます(C#, .NET) ● 趣味:TCG, ボードゲーム, eスポーツ観戦, AC音ゲー(メインはDDR)
今日話すこと ● 個人開発しているSwift アプリについて ○ 初学者がやってみたこと ○ 考えの変遷 ○ 詰まっていること
音ゲーやっていて嬉しいこと
新曲が追加された!!
BPM230
・・・どのくらいの速さだっけ?
BPMとは ● Beat Per Minite(1分間に何拍打てるか) ○ BPM60が分かりやすい ■ 1分間に60回=1秒の速さ ● 日常的に聞くのは大体150まで ○ 200なんて速すぎて聞かない
メトロノームを作ってみる ● Swiftを使ってみることにした ● 60÷BPMのタイミングで音を鳴らすことによってメトロノームを作成した
次に思ったこと ● BPM236の12分は4分だとBPMいくつ? ○ このような変換がしたいことがある ● 音ゲーには、12分、24分、48分が存在する ○ 計算では3連符を表すことができないため ■ BPMで計算する ■ ×3/4すれば変換できる
次に思ったこと ● BPMキープする練習、吹奏楽部のときやったな・・・ ○ 一小節だけ鳴らして、その後音を消し正しいタイミングだと思った時にどのくらいずれるか ● この機能をつけるのが大変だった
計算誤差対策 ● Decimal型にする ○ SwiftのDecimalに、floor(), ceil(), Round()がない ○ doubleに変換して掛けて割って強制的に丸める
テストを書いてみる ● UITest ○ ボタンの存在確認、Enable・Unable確認 ○ 計算結果表示ラベル確認 ● UnitTest ○ BPM計算部分のテスト、正しいタイミング計算のテスト
タイミング計算が合わない・・・ ● せっかくDecimalにしたのに、doubleに変換する時点で誤差を許容してしまう ○ もっといい方法があるのでは? ● 処理時間の問題? ○ 処理時間はきわめて短いと思われるが、小数点以下の秒数を表示している ■ 小数点以下は1桁表示に変更 ■ 誤差が0.3秒前後と発覚したので、0.3秒引く
C#.NETとSwift ● どちらも、GUIを作成するときデザイン画面でボタン・ラベルなどのパーツを配置して、そのボタンの処理を書いていく ○ C#.NET経験者としては、似ていてやりやすかった
まとめ ● 初学者がSwiftでアプリを作成してみた ○ 音ゲーマーに役立つものを目指す ● 計算誤差を解決したい ○ つい先ほどNSDecimalNumberHandlerを発見・・・