musicLine(iOS)についての進捗。
今回はリピートフレーズやiOSリリースまでの進捗を報告します。

実装状況
| カテゴリ | タイトル | 補足 | |
| View | |||
|
Splash アプリ起動画面
| 背景デザイン | 星の輝き、テキストロゴ | |
| コミュニティボタン | アプリ起動からコミュニティへクイックアクセスするためのボタン | ||
| 画面遷移 | 作曲画面とコミュニティ画面を遷移する役割 | ||
| ファイルから起動 | ファイルマネージャで曲データを選択して、アプリを起動 (iOS独自) | ||
|
Composition UI配置
ガイド表示 | リピートフレーズ | リピートフレーズデザイン・同期解除ボタン、リピートタブ、リピートハンドル (iOS独自) | |
| 再生モード | 追従、リピート、ページ送りへ切り替え | ||
| ナビゲーションパネル | 登録した小節数へジャンプする、適切な音域へジャンプする (iOS独自) | ||
|
Common ダイアログ
| 設定 | 設定項目を表示、グループの開閉 | |
| アカウント | FirebaseAuthとの連携でログインUI表示、プレミアムリング | ||
| トースト表示 | 曲保存時などに画面下に情報を表示 | ||
| Composition | |||
| PhraseTool フレーズツール
フレーズの編集 | リピートフレーズ | データ構造、リピート変更時のフレーズの同期、上書きフレーズの把握 | |
| フレーズ同期解除 | 同期解除でフレーズを複製・配置(iOS独自) | ||
| リピート回数設定 | フレーズダイアログから指定、サブ編集エリアからドラッグで変更(iOS独自)、状況によって回数制限 | ||
| リピートフレーズ移動 | リピートフレーズ移動する時は、リピートフレーズに乗っている上書きフレーズも一緒に移動 | ||
| Commnity | |||
|
Service サービスモデル
| 通知 | いいねやコメントもらった時の通知バナー表示、通知権限許可 | |
| Common | |||
|
Manager 管理シングルトン
| アカウント | いいねやお気に入りの同期、プレミアムユーザーの管理 | |
| プレミアム機能 | プレミアムユーザーかプレミアムスターを使用時にプレミアム機能の有効を管理 | ||
| 多言語対応 | 日本語、韓国語、中国語(繁体語)、英語に対応 | ||
| 広告 | バナー広告、レクタングル広告、全画面広告 | ||
全進捗マップを表示
| カテゴリ | タイトル | 補足 | |
| View | |||
|
Splash アプリ起動画面
| 背景デザイン | 星の輝き、テキストロゴ | |
| コミュニティボタン | アプリ起動からコミュニティへクイックアクセスするためのボタン | ||
| 画面遷移 | 作曲画面とコミュニティ画面を遷移する役割 | ||
| ファイルから起動 | ファイルマネージャで曲データを選択して、アプリを起動 (iOS独自) | ||
|
Composition UI配置
ガイド表示 | ピアノ | ||
| スクロールエリア | |||
| 小節番号 | |||
| 小節線 | |||
| 分割線 | 拡大率によって間隔を変化 | ||
| フレーズ | フレーズがないところはフレーズ作成ボタンを表示 | ||
| ツールボタン | 選択中のツールはツール色にハイライトする | ||
| メロディーライン | ペンツールでの音符作成時の入力線 | ||
| メロディー音符 | 音符の先頭にチョボをつける | ||
| リズム音符 | ベース音符のみ下に表示 | ||
| サンプルデータ | 手入力したサンプルデータの音符を配置 | ||
| 連符 | 連符は数字で表示、拡大率によって省略 | ||
| ペンツールガイド | 長さ編集しているリズム音符、伸ばした時の削る範囲 (ドラム) 左にスワイプしている時、削除する範囲 | ||
| 指ツールガイド | 移動中の音符影、矩形選択の枠 (ドラム) 長さ編集している時、伸ばし線(iOS独自)。矩形選択の範囲 | ||
| 消しゴムツールガイド | 削除範囲、和音のみの削除範囲 (ドラム) 削除範囲 | ||
| フレーズツールガイド | フレーズ移動・伸縮のバー、選択範囲テキスト(iOS独自) | ||
| フレーズボタン | フレーズボタンとサブボタンを配置、ツールに応じてアイコンを変更、画面拡大率に応じて縮小 | ||
| フレーズタブ | ツールに応じてアイコンを変更、拡大率に応じて縮小、スクロール状態に応じて移動 | ||
| 音符描画の高速化 | 音符が多くても描画できる速さへ最適化 | ||
| 音符の編集状態 | 選択や変更した時に枠線の色変更 | ||
| 音符音階 | メロディ音符に音階表示 | ||
| 再生バー | 曲を再生している時に、再生位置をバーで表示 | ||
| 再生ボタン | 曲を再生/停止を監視して、状態を変更、再生準備が遅い時はインジケーターを表示 | ||
| 再生速度の表示 | 曲の再生速度を表示(iOS独自) | ||
| テスト音のガイド | 鳴っている音階に色をつける | ||
| ドラム音符 | 音符と連符の表示。分割線に乗っていない音符は細く表示(iOS独自) | ||
| ドラム盤 | ピアノ鍵盤の位置にドラムセットを表示 | ||
| 伴奏音符 | 音符/休符と連符の表示。細かい連符は省略して表示 | ||
| ペンツールガイド | (伴奏) 移動してる時、移動影。左にスワイプしている時、削除する範囲。長さ編集している時、伸ばし線 | ||
| 指ツールガイド | (伴奏) 移動してる時、移動影と上書き音符に光。長さ編集している時、伸ばし線。矩形選択の範囲 | ||
| 消しゴムツールガイド | (伴奏) 削除範囲 | ||
| リピートフレーズ | リピートフレーズデザイン・同期解除ボタン、リピートタブ、リピートハンドル (iOS独自) | ||
| 再生モード | 追従、リピート、ページ送りへ切り替え | ||
| ナビゲーションパネル | 登録した小節数へジャンプする、適切な音域へジャンプする (iOS独自) | ||
|
Composition ダイアログ
| フレーズ | フレーズの作成・設定・挿入、フレーズの長さやリピート回数の設定 | |
| 曲設定 | タイトル・テンポ、キー等の曲の設定 | ||
| トラック選択 | 編集トラックの変更・追加/削除、ボリュームやミュート等の設定 | ||
| 楽器選択 | トラックの使用楽器変更、楽器のランダム選択・選択リセット(iOS独自) | ||
| ドラム楽器一覧 | 使用ドラム楽器をリスト表示。使用楽器の編集や並び替え(iOS独自) | ||
| ドラム楽器設定 | ドラム楽器の音量調整・ミュート、削除・複製 | ||
| ドラム楽器選択 | トラックの使用ドラム楽器変更、楽器のランダム選択・選択リセット(iOS独自) | ||
| スライドメニュー | アイコンタップで作曲画面を右にスライドしてメニューを表示 | ||
| 設定 | 設定項目を表示 | ||
| 曲の読み込み | DB参照して曲の一覧を表示。検索と 並び替え(iOS独自) | ||
| 曲の概要 | 曲の概要を表示 | ||
| バックアップ一覧 | フォルダ内のファイル確認して、曲のバックアップと定期バックアップの一覧を表示。検索と並び替え(iOS独自) | ||
| ハーモニー音符 | 和音の位置と長さ、ディグリーやボイシングNo等の情報を表示 | ||
| ハーモニーガイド | 和音を編集する時、必要な情報を表示 | ||
|
Community (共通) UI配置
| コミュニティ | ディスプレイとコントローラーを表示。縦持ちと横持ちのレイアウト。どのディスプレイ、コントローラーを使用するかは各コミュニティ画面で派生 | |
| カテゴリーリスト群 | カテゴリー選択、カテゴリーリストを表示。どのカテゴリーリストを表示するかは各コミュニティ画面で派生 | ||
| ページスクロール | リストを表示。スワイプでリスト項目を取得。どのリスト項目を使用するかは各カテゴリーで派生 | ||
| 曲リスト項目 | 各コミュニティ画面で派生系を用意する | ||
| リレー曲リスト項目 | 左右にスワイプで前後走者の曲を表示 | ||
| その他リスト項目 | 曲ID:検索で曲ID一覧を表示、ユーザー:ユーザー検索やいいねリスト等で表示 | ||
| 曲詳細 | 曲の情報と貰ったコメントを表示、送るコメントを編集する | ||
| 曲の情報 | 曲のタイトル、作者、ランキング順位、タグ、ユーザーの反応等を表示 | ||
| 貰ったコメント | テキストとOGP | ||
| ソングビジュア | 曲再生位置の変更と可視化。曲情報でトロフィー変更。リスト/詳細ボタンで切り替え。シンプルのみ実装でリリース後に追加予定。 | ||
| カテゴリー選択 | カテゴリータブ表示。スクロール可能。選択表示。 | ||
| ユーザーアイコン | ユーザー画像、プレミアムリングを表示。タップでユーザーページへ | ||
| プレイヤー | 曲の再生、いいね・お気に入り等のボタン。現在の状況を反映 | ||
| 設定パネル | レイアウト設定、ソングビジュア設定、楽器フィルタ リリース後に実装予定 | ||
|
Community Square コミュニティ広場
UI配置 | ディスプレイ | 状況によりカテゴリー説明/ソングビジュアを切り替え。 | |
| カテゴリー説明 | 広場カテゴリーの説明 | ||
| コントローラー | カテゴリーリスト群/曲詳細を切り替え | ||
| カテゴリーリスト群 | Squareのカテゴリーリストを切り替えるように派生 | ||
| リスト項目 | カテゴリー別にリスト項目を派生(ランキングなら左にランク情報)。コンテスト項目はタップでコンテスト画面へ | ||
| イベント詳細 | コンテストの詳細情報の表示 | ||
| 絞り込み検索 | |||
|
Community UserPage ユーザーページ
UI配置 | ディスプレイ | ユーザープロフィールを表示。下へスワイプした時に隠れてヘッダーが表示されるように | |
| ユーザープロフィール | ユーザー情報、紹介文、アクティビティログ等表示 | ||
| ユーザー情報 | 名前、アイコン、リンクリスト、フォロー欄、紹介文表示 | ||
| リンクリスト | 外部リンク(X等)ボタンを並べる | ||
| フォロー欄 | フォロー、ミュート、通知ボタン | ||
| アクティビティログ | 活動レベル、投稿曲数やいいね数など表示 | ||
| ヘッダー | |||
| コントローラー | ディスプレイに追従 | ||
| カテゴリーリスト群 | UserPageのカテゴリーリストを切り替えるように派生 | ||
| リスト項目 | 開閉するプレイリスト項目を作成。 | ||
|
Community Contest コンテスト結果
UI配置 | ディスプレイ | 状況によりコンテスト概要/ソングビジュアを切り替え。 | |
| コンテスト概要 | コンテストのテーマ、内容、提案者の表示 | ||
| コントローラー | カテゴリーリスト群/曲詳細を切り替え | ||
| カテゴリーリスト群 | Contestのカテゴリーリストを切り替えるように派生 | ||
| リスト項目 | コンテストの順位や自分の投票数を表示するリスト項目に派生 | ||
|
Community ダイアログ | リストダイアログ | いいね・お気に入りをしたユーザーリスト表示、曲を含む再生リストの表示 | |
| メッセージアラート | 通知するテキストを知らせる(DLした時や削除確認など) | ||
| プロフィール編集 | 名前、アイコン、紹介文等を編集 | ||
| プレイリスト詳細 | プレイリストのタイトル、説明、作者、コメント等を表示 | ||
| プレイリスト編集 | タイトル、アイコン、曲リスト等を編集 | ||
| コンテスト投票 | 開催コンテスト曲の視聴と投票 | ||
| MIDI詳細 | 曲のテンポ、音符・トラック数、使用楽器等 | ||
|
Common ダイアログ
| アラートメッセージ | ユーザーに通知するコメント | |
| 数字ピッカー | 数字(範囲制限)をポップアップダイアルで取得 | ||
| 項目ピッカー | 特定の値をポップアップのリスト項目で取得 | ||
| HTMLテキスト | テキストスタイルを部分的に変えるため、HTML形式に対応したText | ||
| 文字制限テキスト編集 | 文字制限付きのTextField、制限文字数を超えは赤文字で閉じる時に切り捨て | ||
| 全画面テキスト編集 | 複数行のテキストを編集する時に、ポップアップ全画面でTextEditorとキーボード表示 | ||
| FitScrollView | 閾値高さで スクロールありorなしを切り替える(画面に収まるときはScrollViewにしない) | ||
| WheelMenuPicker | 値をタップすると選択肢が表示されて値を変更、値をスワイプするとホイールで素早く変更 | ||
| 設定 | 設定項目を表示、グループの開閉 | ||
| アカウント | FirebaseAuthとの連携でログインUI表示、プレミアムリング | ||
| トースト表示 | 曲保存時などに画面下に情報を表示 | ||
| Composition | |||
|
Common 作曲共通
| データ構造 | 座標とサイズ、状態を保持する。レンダラーやコライダー、通知等のロジック | |
| コンバーター | Domainのデータ構造へ変換・逆変換 | ||
| 通知機構 | Modelに変更があった時に、Viewへ通知して再描画。変更状況を監視してキャッシュ | ||
|
Changer 曲設定変更
| テンポ変更 | 送信MIDI信号の変更 | |
| 拍子変更 | フレーズ外音符の削除、横スクロール位置を修正 | ||
| キー変更 | 送信MIDI Noの増減 | ||
| 鍵盤タイプ変更 | 鍵盤Noに応じて全ての音符位置を修正、縦スクロール位置を修正 | ||
| 編集トラック変更 | ピアノ鍵盤のサンプラー変更 | ||
| トラック設定変更 | トラック名・略称、トラック追加・複製・削除 | ||
| IO データの入出力
保存・読み込み | 新規作成 | 現在の編集曲を保存してDBへ登録、新しい曲データに変更 | |
| 保存 | 曲データを書き出しDBへ登録、曲毎のバックアップ | ||
| 曲の読み込み | 現在の編集曲を保存して、DBから選択した曲データに変更 | ||
| 外部への入出力 | アプリ外部のフォルダへ曲のバックアップデータを入出力 | ||
| 定期バックアップ | 指定した分毎にバックアップファイルを出力 | ||
| 曲の複製 | 曲ファイルを複製してDBへ登録 | ||
| 曲の復元 | 曲のバックアップファイルを確認して曲データへ復元 | ||
| メロディーツール | |||
| FingerTool 指ツール
音符の編集 | データ構造 | フレーズの音符を取得、基点と移動ベクトルを保持して移動する | |
| 音符の移動 | 和音や連符は上下のみに制御 | ||
| 音符の影 | 移動中に操作できているかわかりやすいように(iOS独自) | ||
| 内外判定 | 音符の移動をフレーズ内に留める | ||
| 衝突判定 | 移動する音符が他の音符に重なったときの挙動 | ||
| タップ選択 | タップした音符の子音符も選択・解除 | ||
| 矩形選択 | 囲った音符を選択 | ||
| 音符の入れ替え | リズム音符のスライドで重なった音符と入れ替える(iOS独自) | ||
| 和音の削除 | 和音を移動した時に重なる時に削除する | ||
| 連符に切り替え | リズム音符タップで切り替え | ||
| PenTool ペンツール
音符の作成 | データ構造 | 音符を作成・分割・統合、フレーズへ音符を追加する | |
| 音符の作成 | タップで音符を作成。分割線に合わせて長さを決定 | ||
| 音符列の作成 | スワイプに沿って複数の音符を作成。音階変わる時に音符分割 | ||
| 有無判定 | タップやスワイプした縦ラインに既に音符があるか判定 | ||
| 音符の移動 | 音符が既にある場合は、作成ではなく移動。一定距離進むと移動終了 | ||
| 音符の分割 | リズム音符をタップした時、音符を分割、メロディ線に沿ってY位置を動かす | ||
| 音符の統合 | 2つのリズム音符の間をタップした場合、音符を統合 | ||
| 音符の伸縮 | リズム音符を左右にスワイプすることで音符の長さを伸縮、始点で分割なし(仕様変更) | ||
| 音符の消滅 | 音符の伸縮をした時に長さが0になると削除する(iOS独自) | ||
| 領域差演算 | 音符伸縮で他の音符に重なる時は差演算して他の音符長さを削る | ||
| サンプリング補間 | 素早くスワイプしても音符が移動できるようにサンプリング間を補間する | ||
| 細かい音符 | 分割線内の細かな音符を移動する挙動 | ||
| EraserTool 消しゴムツール
音符の削除 | データ構造 | 和音と連符の認識、フレーズから音符を削除する | |
| 音符の削除 | タップで音符を削除 | ||
| 和音・連符の削除 | 和音・連符をタップで和音・連符のみを削除(iOS独自) | ||
| 音符種別判定 | タップした音符が和音・連符・ルート音符なのか判定する | ||
| 音符列の削除 | スワイプで指定する削除範囲内の複数の音符を削除。 | ||
| 和音列の削除 | リズム音符をスワイプで複数の和音のみを削除。(iOS独自) | ||
| 休符に切り替え | リズム音符タップで休符に切り替える | ||
| ドラムツール | |||
| PenTool ペンツール
音符の作成 | データ構造 | ドラム音符を作成、フレーズへ音符を追加・削除する | |
| 音符の作成・削除 | タップでドラム音符を作成。既に音符がある場合は削除 | ||
| 音符列の作成 | スワイプで跨いだ分割線にドラム音符を作成。 | ||
| 音符列の削除 | 左にスワイプした範囲にある複数のドラム音符を削除。(iOS独自) | ||
| FingerTool 指ツール
音符の編集 | データ構造 | フレーズのドラム音符を取得、選択、長さを編集して分割する | |
| 音符長さ編集 | 音符を左右スワイプで長さを変更。長さがある時、連符になり長さ0の時連符解除 | ||
| 連符数の編集 | 音符を上下にスワイプで連符数を変更(iOS独自) | ||
| タップ選択 | タップした音符を選択・解除 | ||
| 矩形選択 | 囲った音符を選択 | ||
| EraserTool 消しゴムツール
音符の削除 | データ構造 | 音符と連符の認識、フレーズから音符を削除する | |
| 音符の削除 | 音符をタップで削除 | ||
| 休符に切り替え | 連符をタップで休符に切り替える | ||
| 音符列の削除 | スワイプで指定する削除範囲内の複数の音符を削除。 | ||
| 伴奏ツール | |||
| PenTool ペンツール
音符の作成 | データ構造 | 伴奏音符を作成、フレーズへ音符を追加・削除、長さの編集、分割・統合する | |
| 音符の作成 | タップで伴奏音符を作成 | ||
| 音符の移動 (回避) | 音符をスワイプして移動。音符があるとこを回避する。 | ||
| 音符長さ編集・削除 | 音符の右ハンドルを左右にスワイプして長さ変更。長さ0の時削除 | ||
| 音符の分割・統合 | 音符をタップで左右に分割・統合 | ||
| 音符列の削除 | 左にスワイプした範囲にある複数の伴奏音符を削除。 | ||
| FingerTool 指ツール
音符の編集 | データ構造 | フレーズの伴奏音符を取得、選択、長さを編集、連符切り替え | |
| 音符の移動 (上書き) | 音符をスワイプして移動。移動した場所の音符は削除。 | ||
| 音符長さ編集・削除 | 音符の右ハンドルを左右にスワイプして長さ変更。長さ0の時削除 | ||
| 連符数の編集 | 音符選択時に表示されるピッカーで連符数を変更 | ||
| タップ選択 | タップした音符を選択・解除 | ||
| 矩形選択 | 囲った音符を選択 | ||
| EraserTool 消しゴムツール
音符の削除 | データ構造 | 音符と連符の認識、フレーズから音符を削除、休符切り替え | |
| 音符の削除 | 音符をタップで削除 | ||
| 休符に切り替え | 連符をタップで休符に切り替え | ||
| 音符列の削除 | スワイプで指定する削除範囲内の複数の音符を削除 | ||
| ハーモニーツール | |||
| PenTool ペンツール
音符の作成 | データ構造 | ハーモニー音符を作成、フレーズへ音符を追加・削除、長さの編集、分割・統合する | |
| FingerTool 指ツール
音符の編集 | データ構造 | フレーズのハーモニー音符を取得、選択、長さを編集 | |
| EraserTool 消しゴムツール
音符の削除 | データ構造 | フレーズからハーモニー音符を削除 | |
| PhraseTool フレーズツール
フレーズの編集 | データ構造 | トラックのフレーズを取得・追加、削除、状態 | |
| フレーズの作成・挿入 | ダイアログで長さとリピートを設定 | ||
| フレーズの選択 | 2点タップで範囲選択、範囲ガイドタップで選択解除(仕様変更) | ||
| フレーズの移動 | 左右スワイプで移動、移動は選択フレーズとスワイプ中のフレーズを含む | ||
| フレーズの伸縮 | サブ編集領域をスワイプした時にフレーズ長さを伸縮、長さ0で削除(iOS独自) | ||
| フレーズの貼り付け | 選択フレーズをコピー・ペースト、サブボタンかフレーズタブタップで挿入、選択解除 | ||
| 周囲有無判定 | 作成する小節の近くにフレーズがあるかの判定、設定できる長さやリピート回数の制御 | ||
| フレーズボタン・タブ | ツールに応じてフレーズボタン、タブの処理を変更 | ||
| フレーズの結合 | 連続する2フレーズの接する小節線をタップで結合(iOS独自) | ||
| フレーズの分割 | フレーズをタップで分割(iOS独自) | ||
| リピートフレーズ | データ構造、リピート変更時のフレーズの同期、上書きフレーズの把握 | ||
| フレーズ同期解除 | 同期解除でフレーズを複製・配置(iOS独自) | ||
| リピート回数設定 | フレーズダイアログから指定、サブ編集エリアからドラッグで変更(iOS独自)、状況によって回数制限 | ||
| リピートフレーズ移動 | リピートフレーズ移動する時は、リピートフレーズに乗っている上書きフレーズも一緒に移動 | ||
| StampTool スタンプツール
モチーフの編集 | |||
| Transform 画面移動
座標変換 | 画面を上下移動 | ピアノのスワイプにより | |
| 画面を左右移動 | スクロールエリアのスワイプにより | ||
| 画面を拡大・縮小 | ピンチアウト・インにより基点を画面中心に設定する | ||
| 画面を拡大・縮小(軸指定) | 長押しからのドラッグ。ピアノでX軸方向、スクロールエリアでY軸方向 | ||
| ドラム座標系 | 新しくドラムの座標系を追加。下へ楽器が追加されるため、メロディーと異なり左上原点 | ||
| MIDI | コンバーター | CompositionからMIDIのデータ構造へ変換 | |
| 曲の再生 | 画面左からMIDI再生、Compositionのデータ構造から曲の再生、再生位置の同期 | ||
| 曲の再生(最初から) | 再生ボタン長押しで最初から再生 | ||
| 曲の再生(位置指定) | スクロール領域をダブルタップでその位置から再生(iOS独自) | ||
| 再生速度の変更 | ドラッグで曲の再生速度を変更(iOS独自) | ||
| 再生処理の最適化 | 曲に変更がない時はキャッシュを使う、変更通知とキャッシュの管理 | ||
| Commnity | |||
|
Common コミュニティ
| データ構造 | カテゴリ等の曲情報、いいねやお気に入り等のリスポンスを保持 | |
| CommunitySongPlayer | コミュニティ用にラップした曲プレイヤー | ||
| CategoryLists | カテゴリーリスト群のモデル。カテゴリー別にフェッチ/キャッシュ | ||
| ListInfo | カテゴリーリストのモデル、リストのスクロール位置、フェッチするページ番号等 | ||
| Context | Community共通のCommonContextと各画面のContextがある | ||
| UserActivityManager | ユーザーのアクティビティ(いいね、ミュートユーザー、再生リスト、モチーフ登録、アクセス履歴等)を管理 | ||
|
Service サービスモデル
| ListItemFetcher | カテゴリーリスト項目のMLサーバーから取得する | |
| MidiRepository | MIDIファイルをサーバーから取得して貯める | ||
| UserActivityFetcher | ユーザーの行動をMLサーバーから取得する(再生数、再生リストに含まれているか、コメント等) | ||
| 通知 | いいねやコメントもらった時の通知バナー表示、通知権限許可 | ||
| MIDI | |||
|
Common MIDI共通
| データ構造 | MIDIフォーマットへ出力できる構造 | |
| コントローラー | 曲の読み込みや再生、再生位置の監視や音源の変更などMIDIの扱いを管理する | ||
| サンプラー | ピアノや音符生成時に単体のMidiイベントから音を鳴らす | ||
|
Service サービスモデル
| MidiPlayer | MIDIを再生する | |
| MidiReader | MIDIファイルの読み込み | ||
| MidiWriter | MIDIファイル出力 | ||
| Account | |||
|
Common アカウント
| データ構造 | ログインできる構造、アカウント情報、ログイン情報、MLユーザー情報 | |
| AccountManager | アカウントの管理、ログイン時にMLサーバーと通信 | ||
|
Service サービスモデル
| UserActivityRepository | ユーザーのアクティビティ(いいね、ミュートユーザー、再生リスト、モチーフ登録、アクセス履歴等)を貯める | |
| ServerCommunication | MLサーバーと通信する処理を集約 | ||
| Domain | |||
|
データ構造 Json形式 | Melody | MelodyTrack, MelodyPhrase, NoteContainer, NoteBlock, Note | |
| Drum | DrumTrack, DrumPhrase, BeatContainer, Beat | ||
| 共通化 | Original, Repeat, Syncの3種のPhraseをジェネリッククラスとプロトコルで抽象化 | ||
|
Service サービスモデル
| SongReder | Jsonファイルを読み込み、Domainのデータへ変換 | |
| SongWriter | DomainのデータからJsonファイルへ書き出し | ||
| Common | |||
|
Service サービスモデル
| リポジトリ | 保存データを管理 | |
|
Manager 管理シングルトン
| アカウント | いいねやお気に入りの同期、プレミアムユーザーの管理 | |
| プレミアム機能 | プレミアムユーザーかプレミアムスターを使用時にプレミアム機能の有効を管理 | ||
| 多言語対応 | 日本語、韓国語、中国語(繁体語)、英語に対応 | ||
| 広告 | バナー広告、レクタングル広告、全画面広告 | ||
実装の詳細
リピートフレーズ

リピートフレーズはフレーズを繰り返すフレーズで、通常のフレーズ色と少し変えています。
フレーズの音符を変えると、リピートされたフレーズの音符も同期します。
フレーズ左のタグ🏷️に繰り返し回数を表示してます。ちなみに、タグをタップすることでオリジナルフレーズの小節位置にジャンプします。
音符の変更はリピートフレーズからはできないので、音符を変更したい時はタグタップでオリジナルフレーズに移動する必要があります。
リピート回数の設定 (iOS独自)

フレーズ設定からリピート回数を変更できますが、iOSではサブ編集エリアからドラッグすることでもリピート回数を変更できます。

ドラッグする位置でフレーズ長さとリピート回数を直感的に変更できます。
上書きフレーズ (iOS独自)

リピートフレーズ上にフレーズを置くことで上書きして、繰り返しリズムにアクセントを加えます。
また、リピートフレーズの同期解除ボタンを押すことで、フレーズをコピーできるので派生を考えた作り方ができます。

リピートフレーズの移動・長さ変更

リピートフレーズの移動時には上書きフレーズも一緒に移動します。
上書きフレーズはリピートフレーズの外にも自由自在に移動できます。

リピートフレーズの長さを変えると、リピートで同期したフレーズの長さも変わります。
上書きフレーズはリピートに合わせて追従しますが、長さを短くした時にはみ出した場合は削除されます。
iOSはリピートフレーズを、フレーズで上書き
皆様どちらが好みでしょうか?
上書き音符の方がいちいち新たなフレーズを乗せなくていいので楽かもしれませんし、フレーズ単位で考えたい場合は上書きフレーズの方が使いやすいかもしれません。
どちらも一長一短だと思いますが、実装上は断然フレーズ単位で考えた方がデータ構造がシンプルになり、すべてのリピートフレーズの音符で上書きされていないか確認しなくていいのでパフォーマンス面でもメリットが多く、今回は仕様変更となりました。


その他作曲機能
再生モード

通常は曲を再生しても画面や再生位置が移動しませんが、再生モードを変更すると曲再生時の挙動が変化します。
- ループ:画面右端まで再生されると、左端へ再生位置が戻ります。
- 追従:再生位置が画面の途中まで再生されると、その位置に固定して画面が自動スクロールになります。(再生固定位置は設定で変更可)
- ページ送り:画面右端まで再生されると、左端が再生位置となるように画面が移動します。
ナビゲーションパネル

本来ツールバーの下には保存した小節へジャンプするボタンが並ぶようなナビゲーションパネルがありますが、まだ未実装です。
その代わり、編集中の適切な音域へ自動スクロールするiOS独自の機能をつけてみました。

編集位置縦ジャンプボタンをタップすると、音符のある音域の中心へ移動します。
トラックにより使用音域が異なることがあり、トラック変更時に瞬時に編集位置に移動したい場合に便利な機能だと思います。
アプリ機能
設定

定期バックアップの間隔やフォルダを指定したり、ピアノ位置や追従再生モードの再生バー固定位置まで様々な設定があります。
中でも触感フィードバックは作曲時に振動を返す設定になります。

音符を置いたときや、長押しで画面の拡大縮小するタイミングで振動して触覚でも知らせてくれます。
例えば小さい音符を移動する時なんかは、指で隠れてしまうことがあるので、振動で移動したことがわかると編集しやすいかもしれません。
アカウント

アカウントログインでコミュニティ曲にいいねやコメントを送れます。
また、ログインすることでいいねやお気に入りの数等のユーザーデータが同期されます。
Androidでプレミアムユーザー加入中の方はプレミアム機能が利用でき、プレミアムリングが付きます。
プレミアム機能

プレミアム機能使用時にノーマルユーザーでもプレミアムスターを使用すると使える機能があります。
スター使用でプレミアム機能の使用期間が決まる場合は時間を管理して終了時間になるとプレミアム機能が解除されます。

なお、只今早期特典としてプレミアム機能は使い放題となっています!
トラック数制限、ドラム楽器の追加、連符の指定などの機能がスターなしでしばらく使えるようにしてますので是非ご使用ください🙏
なお、最初は機能不足で動作不安定かもしれませんがご容赦ください😂
アプリ起動画面

コミュニティへクイックアクセスするためのボタンを表示します。 Androidと同様で星々の背景です。iOSの方がアニメーションで輝いている感が出ているかも?
ファイルからアプリ起動 (iOS独自)

作曲データファイルからアプリを起動できるようにしました。
共同作曲するときにバックアップファイルを送りあうユーザーを見かけたので、ファイルからアプリ開けると便利かなと思いつけました。
Androidはファイルを共有して、バックアップフォルダへ追加してから、アプリを開いて曲の読み込みから曲を選択する必要があるので地味に面倒かもしれません。
将来的にはワンタッチで曲データに名前をつけて共有できると便利ですかね。
もっと言うとコミュニティの公開範囲を設定できた方が共同作曲をしやすくなりそうですね。共同作曲ユーザー同士で限定公開して、出来上がった時に全体公開。この使い方がスマートでいいかも?
通知
Firebaseと連携して通知を送れるようにしました。
コミュニティを開いた時に、通知を送っていいかの権限許可をとります。


iOSは普段使いしてないのであまり詳しくないのですが、通知が来ると毎回上に通知ポップアップされるのかな?
そうだったら通知が多いと画面が騒がしくなるので、もう少し考えた方が良さそうですね。。
トースト表示

曲の保存等で画面下に情報バナーを表示するトースト機能を実装しました。
iOSリリース
iOSのリリースは8月を予定してましたが、実はもうリリースしちゃいました☆
聞くところによるとAppleのアプリ審査は厳しいとのことだったので、リジェクトされることを前提に早めに一回目の審査を申し込んだところ。。
一発で審査を通過 (๑⊙д⊙๑)
既にApple StroeでmusicLineが並ぶこととなりました ⌯' ꇴ '⌯ಣ
3分作曲-musicLine-アプリ - App Store

皆様、今まで開発ブログの閲覧ありがとうございました!
思い返せば「iOS版はいつ出るの?」と声を掛けてもらう機会が増え、5年ほど前からiOSの開発がスタートしました。
正直AndroidもありiOSの開発はあまり進んでいなかったのですが、「iOS版も開発してます」と返事して進んでない状況でした _ (:3 」∠) _
でも軽視しているわけではなく、古参のユーザーがコミュニティからいなくなる度にiOSの必要性を感じていました。
もちろんPCで曲作ることになってスマホ作曲しなくなったとかもあると思います。ボカロPや新たなステージで活躍したいと旅立つことは素晴らしいことで応援してます (*p'∀'q)
ただiOSへ機種変してmusicLineがないからできないという理由だと悲しいことです。
いつでも、どこでも、手軽に作曲!
それがmusicLineのモットーです。
そして3年半前に一念発起し、ブログを始めたタイミングでmusicLineの開発に専念することにしました。
Xの新機能告知とかでいいねやコメントを送っていただいたML民の方とても励みになっています!
このペースをずっと維持できるかは分かりませんが、生涯をかけてmusicLineを少しずつ大切に育てていきたいと思っています。
これからも長く付き合っていただけるアプリになれば嬉しいです (*>U<*)
今後ともどうぞよろしくお願いします!
おわりに
なんか開発ブログが終わるかのような締め方になっちゃいましたが、まだまだ続きます!
というか開発しないといけないこと山積みですねー (ʘᗩʘ’)
すみません長々と思い出話を書いちゃいましたが、
今後直近の開発作業は
- 曲のコミュニティ投稿
- ユーザーページ
- 作曲編集のUndo/Redo
を予定してます。
この二つの機能はmusicLineに特になくてはならない機能だと思います。
というか既に曲の投稿について質問が来ていて、もう待たせている状態です (ꈍ罒ꈍ﹡)
iOSリリースの告知もしてないのに!?
既にストアからDLしてて、、
曲を仕上げている!?
まさか??
なるべく早く実装します!8月中には。いや9月中には。。気長に待っていただけると。。。
でもその前にSwitch2を買いたいです!
(いや勝手に買えばいい)
思い返せば1年前にiOSリリース延期して以来、iOSリリースしたら買おうと思ってました
(今回は何度か思い返す回になっております)
ただタイミング悪く値上げしたのが悔しい (ꈍ罒ꈍ﹡)
このタイミングでドンキーコングバナンザ?☺️
では、また (๑˃̵ᴗ˂̵)و




















































































































