English / Japanese

# MIDITrail Ver.2.0.0 for iOS

Copyright (c) 2010-2022, WADA Masashi All rights reserved.
Web: https://osdn.jp/projects/miditrail/
Mail: yknk@users.osdn.me

## 目次

1. はじめに
2. 動作環境
3. 導入方法
4. 使用方法
5. 設定
6. 制限事項
7. FAQ
8. 補遺
9. 著作権とライセンス
10. 履歴

## 1. はじめに

MIDITrailは、MIDIデータを三次元可視化するMIDIプレーヤーです。
空間を移動することにより、演奏を聴くだけでなく、見て楽しむことができます。
標準MIDIファイルFormat0/1、および複数ポート出力に対応しています。
MIDITrailは、Windows、macOS、iOSに対応しています。

オプション機能:
スマートフォン用の安価なVRグラスと、iPhone用のゲームパッドを利用して、VR(バーチャルリアリティ)体験を楽しむこともできます。

スクリーンショット：ピアノロール3D
スクリーンショット：ピアノロールレイン
iPhoneでVR体験

## 2. 動作環境

デバイス：iPad, iPhone, iPod touch
OS：iOS 12.0 以降

MIDIデータに含まれるノート（音符）の数が多くなるほど、より高いグラフィック性能が必要になります。

## 3. 導入方法

### (1) MIDIファイルの準備

MIDITrailは、標準MIDIファイル(Format0/1)に対応しています。
MIDITrailで再生するMIDIファイルは、事前にMacまたはPCからiOSデバイスに転送しておく必要があります。
iOSデバイスをMacまたはPCに接続してからiTunesを起動してください。ファイル共有機能を用いてMIDIファイルを転送することができます。
またiOSの「ファイル」アプリを利用して、MIDIファイルをMIDITrailに追加することができます。

### (2) 音源の準備

Core MIDIに対応した音源を別途用意するか、内部ウェーブテーブルシンセサイザを利用してください。
音源を用意する方法は三つあります。

一つめは、Core MIDIに対応したMIDIインターフェースと外部MIDI音源を接続する方法です。
（MIDIインターフェース：iRig MIDI, i-MX1 など）

二つめは、Virtual MIDIポートとバックグラウンド演奏に対応したシンセアプリを利用する方法です。
（シンセアプリ：KQ Sampei, bs-16i, Sound Canvas for iOS など）

三つめは、内部ウェーブテーブルシンセサイザを利用する方法です。
利用するウェーブテーブル(DLS/SF2)を、あらかじめiOSデバイスに転送しておく必要があります。

音源の準備ができたらMIDITrailを起動して、MIDI出力先を選択してください。

## 4. 使用方法

### (1) MIDIファイルの選択

「MIDI Files」タブを選択すると、デバイスに保存されているMIDIファイルの一覧が表示されます。
MIDIファイルは、iTunesのファイル共有を用いてあらかじめデバイスにコピーしておいてください。
iOSの「ファイル」アプリを利用して、MIDIファイルをMIDITrailに追加することもできます。
MIDIファイルをタップすると、MIDITrailはファイルを読み込んで、メイン画面を表示します。
MIDITrailはファイルの拡張子が.txt .doc .hed のいずれかの場合、それをテキストファイルと判断します。
テキストファイルをタップすると、ファイルの内容を参照することができます。

### (2) メイン画面

ボタン操作により、演奏の開始や停止ができます。

[Folder Playback] ボタン
MIDITrailは、フォルダ内のMIDIファイルをファイル名順で順番に演奏します。

[Repeat] ボタン
MIDITrailは、MIDIファイルを繰り返し演奏します。
Folder Playbackボタンが有効の場合、フォルダ内の最後の曲の演奏が終わると、先頭の曲を演奏します。

[View] ボタン
画面表示に関するメニューを選択できます。

メニュー | 説明
--- | ---
Viewpoint 1 Viewpoint 2 Viewpoint 3 | 標準の視点に移動します。
My Viewpoint 1 My Viewpoint 2 My Viewpoint 3 | 私の視点に移動します。
Save My Viewpoint 1 Save My Viewpoint 2 Save My Viewpoint 3 | 私の視点を保存します。
Switch Rotation Mode | ピアノロールの回転モードを切り替えます。
Standard View VR View (Single lens) VR View (Dual lens) | ビュースタイルを選択します。 VR Viewを選択すると、デバイスの向きに応じて視線方向が変化します。
Lock | スクリーン上のスワイプ操作とゲームパッドをロックします。

方向ボタンの操作やスクリーンのスワイプにより、空間移動と視線方向を変更できます。

iOSデバイス用のゲームパッドを用いて操作することができます。

ボタン / スティック | 操作
--- | ---
Pause ボタン | 再生/一時停止
A ボタン | 再生/一時停止
B ボタン | 停止
X ボタン | 視点移動：下降
Y ボタン | 視点移動：上昇
L1/R1 ショルダーボタン | 視点切り替え
L2/R2 トリガーボタン | 再生スキップ
十字キー | 視点移動：前後左右
左スティック | 視点移動：前後左右
右スティック | 視線方向

### (3) MIDI IN モニタ

「MIDI IN Monitor」タブを選択してから「Start Monitoring」ボタンを押すと、MIDITrailはメイン画面を表示します。
このメイン画面で、MIDI INデバイスで受信したデータをリアルタイムで参照することができます。
あらかじめSettingタブで、モニタリングするMIDI INデバイスを選択してください。
モニタリング中に、MIDI INで受信したデータをMIDI OUTに出力する場合は、MIDI THRUを有効にしてください。
注意：MIDITrailは、MIDI INで受信したデータを保存することはできません。

### (4) VR(バーチャルリアリティ)体験の楽しみ方

iPhoneを利用している場合、スマートフォン用の安価なVRグラスと、iPhone用のゲームパッドを利用して、 VR(バーチャルリアリティ)体験を楽しむことができます。
アンチエリアシングを有効にしておくことをお勧めします。
1. iPhoneにゲームパッドを接続します。
2. iPhoneでMIDITrailを起動し、MIDIファイルを選択します。
3. メイン画面でViewボタンをタップして、"VR View (Dual Lens)"メニューを選択します。
4. iPhoneをVRグラスにセットして、頭に装着します。
5. ゲームパッドを用いて、視点移動や再生の操作を行います。

## 5. 設定

「Setting」タブを選択すると、設定項目が表示されます。

### (1) View Mode

ビューモードを選択します。

### (2) Display Item

メイン画面で表示する項目を選択します。

### (3) MIDI OUT Device

[Port A,B,C,D,E,F] ポートA,B,C,D,E,F
MIDI出力デバイスを選択します。
ポートAの出力先は必ず設定してください。通常のMIDIデータはポートAを使って演奏されます。
複数ポートを利用するMIDIデータを再生する場合は、ポートB以降の出力先を設定してください。
複数ポートを利用するMIDIデータを再生しない場合は、ポートB以降の出力先を設定する必要はありません。
複数ポートを利用するMIDIデータを再生するには、 複数の音源を用意する必要があります。
出力先に内部シンセサイザ(Internal Wavetable Synthesizer)を選択した場合は、 必ずウェーブテーブルファイルを選択してください。

### (4) Internal Wavetable Synthesizer

[Wavetable File] ウェーブテーブルファイル
内部シンセサイザを利用する場合は、ウェーブテーブルファイル(DLS/SF2)を選択してください。
ウェーブテーブルファイルはiTunesのファイル共有機能を用いて、MacまたはPCからiOSデバイスに転送してください。
iOSの「ファイル」アプリを利用して、ウェーブテーブルファイルをMIDITrailに追加することもできます。
ウェーブテーブルファイルの拡張子は、".dls"または".sf2"としてください。
MIDITrailはチャンネル番号10をパーカッション用として割り当てます。
MIDITrailの内部シンセサイザは非常に簡易的に実装されており、性能はよくありません。
ウェーブテーブルファイルによっては、音が正しく出力されないことがあります。

### (5) MIDI IN Device

[Port A] ポートA
モニタ対象のMIDI入力デバイスを選択します。

[MIDI THRU]
MIDI INで受信したデータをそのままMIDI OUTに出力する場合は、MIDI THRUを有効にしてください。

### (6) MIDI File

[Character Encoding] 文字エンコード
MIDIファイルの文字エンコードを選択してください。MIDIファイルの曲タイトルを表示する際に利用します。
この設定は、ファイル一覧画面でテキストファイルを表示する際にも利用されます。

### (7) Playback

[Delay Between Songs] 曲間待機時間
リピートやフォルダ演奏で次曲を演奏開始するまでの待機時間を指定します。

### (8) Graphic

[Anti-aliasing] アンチエイリアシング
アンチエイリアシングを有効にすると、ギザギザ（ジャギー）が低減し、より綺麗な画像が表示されます。
しかしアンチエイリアシングの処理は重いため、描画速度が落ちる可能性があります。
設定を反映するにはMIDITrailを再起動する必要があります。

[Background Image] 背景画像ファイル
背景画像を表示する場合は、画像ファイルを選択してください。
画像ファイルはiTunesのファイル共有機能を用いて、MacまたはPCからiOSデバイスに転送してください。
iOSの「ファイル」アプリを利用して、画像ファイルをMIDITrailに追加することもできます。
画像ファイルの拡張子は、".jpg"または".png"としてください。
読み込み可能な画像の最大サイズは4096x4096ピクセルです。

[Quarter Note Length] 四分音符の長さ
ピアノロールの四分音符の長さを指定します。0%から1000%を指定できます。デフォルトは100%です。

[Color] カラー (iOS 14以降)
カラーパレットを選択して好みの配色に変更することができます。カラーパレットを編集することもできます。
* [Set Gradation Colors] ユーザが指定した開始チャンネルから終了チャンネルに対して、グラデーションカラーを設定することができます。
* [Set Default Colors] デフォルトカラーを設定します。
* [Export Color Parameters] カラーパラメータを出力します。出力されたパラメータをテキストエディタで編集することができます。
* [Import Color Parameters] カラーパラメータを入力します。テキストエディタで編集したパラメータを入力することができます。一部のパラメータだけを入力することも可能です。

### (9) Controller

[Gamepad] ゲームパッド
接続済みのゲームパッドを確認できます。新しいゲームパッドの検索を開始するときは、この項目をタップしてください。

[Touch: Invert X and Y Axis] X軸とY軸を反転
スクリーンのスワイプによる視線方向の操作について、X軸とY軸を反転します。

## 6. 制限事項

### (1) 演奏と画面表示の同期について

アプリケーションが発音を指示してから実際に音が鳴るまでに遅延が生じる音源を利用する場合、 演奏と画面表示がずれる可能性があります。

### (2) グラフィックチップの性能について

MIDITrailは、MIDIデータに含まれるすべてのノートをリアルタイムレンダリングします。
このため、ノート数が多いMIDIデータほど画面描画処理の負荷が高くなります。
ノート数が数万個に達するMIDIデータを快適に鑑賞するには、 高性能なグラフィックチップを搭載したiOSデバイスを使用してください。

### (3) 複数ポート出力について

標準MIDIファイルの仕様には、複数ポート出力への対応方法は定義されていません。
しかし特定のパラメータを用いて複数ポート出力に対応する方式(*1)が存在します。
MIDITrailは、この方式に沿って複数ポート出力対応を行っていますが、 MIDIデータによってはうまく再生できない可能性があります。
(*1) メタイベント(FF 21 01 pp)を出力先ポート番号の切替とみなします。

### (4) 標準MIDIファイル対応について

デルタタイムが実時間タイムコードで表現されているMIDIデータには対応していません。

## 7. FAQ

### (1) MIDITrailの動画を作成したいのですが、録画機能はありますか？

MIDITrailには録画機能がありませんが、iOSでは画面収録の機能を利用して動画ファイルを作成することができます。
(1) 「設定」->「コントロールセンター」を選択して、「画面収録」の横にある追加ボタン(+)をタップします。
(2) iPhone または iPad でコントロールセンターを開きます。
(3) 録画ボタンをタップします。

    iPhone、iPad、iPod touch で画面を録画する
    https://support.apple.com/ja-jp/HT207935

### (2) プレイリストは作成できますか？

現在、MIDITrailにはプレイリストの機能がありませんが、フォルダ演奏の機能を利用できます。
詳しくは、「4.使用方法」の「(2) メイン画面」を参照してください。

## 8. 補遺

### (1) ピアノロール表示の構造

(a) ピアノロール3Dの三次元可視化方式

複数ポートを使用するMIDIデータを読み込んだ場合、未出力ポートを省略して表示します。
例えばポートA,C,Eに出力するMIDIデータの場合、ポートA,C,Eを隣接させて表示し、ポートB,Dは省略します。

(b) ピアノロールレインの三次元可視化方式

複数ポートを使用するMIDIデータを読み込んだ場合、現状はポートAのキーボードのみが表示されます。
ピアノロールバーは全ポート分が表示されます。

### (2) ピッチベンドについて

発音中のピアノロールバーは、ピッチベンドの変化に合わせて上下または左右に移動します。
MIDIアニメ作品の中には、ピッチベンドを用いて、 音の高さを変えずにバーの表示位置を意図的にずらしているものがあります。
MIDIアニメ作品が正常に表示されない場合は、バーの表示位置を固定するために、 設定でピッチベンド表現(Pitch Bend Motion)を無効にしてください。

## 9. 著作権とライセンス

MIDITrailの著作権は和田雅志が保有しています。 MIDITrailは修正BSDライセンスを適用して公開しています。

Copyright (c) 2010-2022, WADA Masashi <yknk@users.osdn.me> All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
* Neither the name of the author nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

## 10. 履歴

日付 | バージョン | 変更内容
--- | --- | ---
2012/03/17 | Ver.0.0.0 | MIDITrail Ver.1.2.0 for Mac OS XをベースにしてiOS版の開発を開始
2012/08/05 | Ver.1.0.0 | iOS版 初回正式リリース #29179 MIDITrail for iOS 開発
2014/01/19 | Ver.1.0.1 | #32933 マージ：MIDITrail Ver.1.2.1 for Mac OS X 追加機能 #32367 機能追加：ビューモード「ピアノロールレイン2D」追加 #32427 機能追加：押下状態のキーにノートの色を反映する #32915 機能追加：iPhone5対応 #32916 機能追加：他アプリからのMIDIファイル受け取り対応 #32941 仕様変更：Base SDKをiOS6.1に変更 #30548 バグ修正：再生開始直後の演奏が引っかかる
2017/02/12 | Ver.1.1.0 | #35775 仕様変更：SourceForge.JPサイト名称変更に伴うユーザマニュアル修正 #36981 仕様変更：iOS版 64bit対応 #36982 機能追加：iPhone6,iPhone6 Plus,iPad Pro対応 #36983 機能追加：画面操作ロック機能追加 #36984 機能追加：背景画像表示機能追加 #36985 機能追加：複数ポート出力対応 #36986 仕様変更：起動画面のストーリーボード化 #36987 バグ修正：日本語環境のロケール判定に失敗する
2017/02/20 | Ver.1.1.1 | #37007 バグ修正：カウンタの数値が正しく表示されない
2018/01/15 | Ver.1.1.2 | #37881 機能追加：ファイル一覧にファイル削除とファイル名変更の機能を追加 #37882 機能追加：発音中ノートボックスを大きく描画する #37883 仕様変更：波紋の色を明るくする #37884 仕様変更：iPhone 6以降のカウンタ文字列にラベルを追加 #37885 仕様変更：開発環境をXcode 9に移行 #37616 バグ修正：Piano Roll 2Dでピアノロールバーがちらつく #37860 バグ修正：メインスクリーンでタッチしてもボタンが表示されない
2018/2/20 | Ver.1.2.0 | #37955 機能追加：内部シンセサイザ追加 #37971 機能追加：背景画像ファイル一覧にファイル削除とファイル名変更の機能を追加
2018/09/30 | Ver.1.2.1 | #38649 機能追加：iPhone X,XS,XS Max,XR / iPad Pro 10.5 inch 対応
2019/01/31 | Ver.1.2.2 | #38898 機能追加：VRビュー対応 #38899 機能追加：視点選択対応 #38900 機能追加：アンチエイリアシング描画対応 #38901 機能追加：FPS表示対応 #38902 機能追加：iPad Pro 2018 (11 inch, 12.9 inch) 対応 #38903 バグ修正：iPadを縦向きにするとメイン画面がスクリーンからはみ出す #38904 仕様変更：Xcode 10移行
2019/03/31 | Ver.1.2.3 | #39085 機能追加：ゲームコントローラー対応 #39086 仕様変更：設定画面のチェックマークをスイッチに変更 #39087 仕様変更：VRビューでのカメラ上方向の更新
2019/05/05 | Ver.1.2.4 | #39213 機能追加：四分音符長設定機能追加 #39214 バグ修正：iPhone XシリーズでVR Viewの立体視ができない #39215 バグ修正：背景画像描画メモリリーク修正 #39216 仕様変更：設定ビューのセクション構成変更 #39217 仕様変更：開発環境をXcode 10.2に移行
2019/11/30 | Ver.1.3.1 | #39796 機能追加：ビューモード「ピアノロールリング」追加 #39797 機能追加：ファイル検索機能追加 #39798 機能追加：「ファイル」アプリ対応 #39799 機能追加：バックグラウンド演奏対応 #39800 機能追加：ダークモード対応 #39808 機能追加：自動回転機能追加 #39801 仕様変更：開発環境をXcode 11に移行 #39802 仕様変更：ゲームコントローラー対応の再実装 #39803 仕様変更：UIWebViewからWKWebViewに移行 #39804 仕様変更：設定ビューの四分音符長設定にマークを追加 #39805 仕様変更：MIDIデバイスの識別方法を変更 #39806 バグ修正：コード分析対応 #39807 バグ修正：エラーダイアログをメインスレッドで表示
2020/04/15 | Ver.1.3.2 | #40322 機能追加：ファイル一覧でフォルダ表示をサポート #40325 機能追加：メイン画面でファイル名表示をサポート #40323 バグ修正：iOS 9においてヘルプ表示でクラッシュする
2021/04/12 | Ver.1.3.3 | #41978 機能追加：iOS 14対応（Core MIDI 新API対応） #41979 機能追加：iPhone 12シリーズ, iPad(7th,8th), iPad Air(4th) 対応 #41980 機能追加：フォルダ演奏機能追加 #41981 機能追加：ロック画面演奏情報表示対応 #41982 機能追加：リモートコントロール対応 #41983 機能追加：ファイル一覧にフォルダ作成機能とファイル移動機能を追加 #41984 機能追加：背景画像ファイル選択画面にファイル移動機能追加 #41985 機能追加：背景画像ファイル選択画面のサブディレクトリ検索対応 #41986 機能追加：Wavetableファイル選択画面にファイル移動機能追加 #41987 機能追加：Wavetableファイル選択画面のサブディレクトリ検索対応 #41988 仕様変更：開発環境をXcode 12に移行 #41989 バグ修正：バックグラウンドスレッドからのUI API呼び出し
2021/06/01 | Ver.1.3.4 | #42423 機能追加：ファイル一覧にファイル取り込みボタンを追加 #42424 機能追加：チャンクサイズ不正の標準MIDIファイル読み込み対応 #42425 機能追加：RIFF形式MIDIデータファイルの読み込み対応 #42426 機能追加：演奏一時停止時にサウンドオフメッセージを送信
2021/09/07 | Ver.1.3.5 | #42794 機能追加：曲間待機時間の設定を追加 #42795 バグ修正：データサイズゼロのシステムエクスクルーシブ送信でクラッシュする #42797 バグ修正：フォルダ演奏中にアクションシートまたはヘルプビューを表示した状態で演奏終了するとクラッシュする
2022/07/31 | Ver.1.3.6 | #45282 機能追加：スクリーンゲームパッドを追加 #45283 機能追加：視点保存機能を追加 #45284 機能追加：グリッドラインとタイムインジケータの表示切替対応 #45285 機能追加：Piano Roll 3Dにライトを追加 #45286 機能追加：iOS 9.0以降をサポート対象とする #45287 機能追加：iPad mini(6th)対応 #45288 機能追加：システムメッセージの解析処理を追加 #45289 仕様変更：Viewボタン押下後のアクションシートをポップオーバービューに変更 #45290 仕様変更：アラート表示処理の改善 #45291 仕様変更：開発環境をXcode 13に移行 #45292 バグ修正：設定画面の表示項目のスイッチを押すとちらつく
| 2022/12/11 | Ver.2.0.0 | #46245 機能追加：カラー設定機能を追加 #46246 機能追加：Piano Roll Ringで小節リングを描画 #46247 機能追加：一時停止時と停止時にノートオフを送信、再開時にノートオンを送信 #46248 機能追加：iPhone 14 Pro, 14 Pro Max 対応 #46249 機能追加：テキストファイルビューア追加 #46250 仕様変更：Piano Roll Rainでキー押下時の色をノート色に変更 #46251 仕様変更：開発環境をXcode 14に移行 #46252 仕様変更：3DグラフィックスAPIをOpenGLからMetalに移行 #46253 仕様変更：ボタンデザイン変更 #46254 仕様変更：アプリロゴ表示処理の修正 #46255 バグ修正：MIDIファイルからテンポが正しく読み取れていない #46256 バグ修正：検索キャンセルでフォルダボタンが消えたままになる #46257 バグ修正：ゲームコントローラを接続／切断するとクラッシュする