English / Japanese

# MIDITrail Ver.2.0.0 for macOS User Manual

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

## 0. Contents

1. Introduction
2. System requirement
3. How to install and execute
4. Usage
5. Restriction
6. FAQ
7. How to customize
8. Copyright and license
9. Appendix
10. History

## 1. Introduction

"MIDITrail" is a MIDI player which provides 3D visualization of MIDI datasets.
You can enjoy not only listening but also viewing.
MIDITrail supports SMF format 0/1, and multiple MIDI ports.
MIDITrail is available for Windows, macOS and iOS.

Screenshot: PianoRoll3D
Screenshot: PianoRollRain

## 2. System requirement

OS: macOS 10.12(Sierra), 10.13(High Sierra), 10.14(Mojave), 10.15(Catalina), 11(Big Sur), 12(Monterey)

It is recommended that your Mac has high performance graphics for smooth animation.
If the MIDI datasets contains a lot of notes, the software needs more performance graphics.
As long as the performance of your Mac allows, please enjoy MIDITrail with large window.

## 3. How to install and execute

### (1) How to setup

Extract ZIP file, and open "MIDITrail".

### (2) First setup

At first, you must setup the MIDI OUT port.
Select "MIDI OUT..." from "Option" menu, then "MIDI OUT configuration" dialog will appear.

[Port A]
At least, you must select the MIDI OUT device of "Port A". Ordinary MIDI datasets is sent to "Port A".
If you select "Internal Wavetable Synthesizer", you have to select a wavetable file.

[Port B,C,D,E,F]
If you want to play the MIDI datasets which uses multiple ports, you must select the MIDI OUT device of port B, C, and so on.
To play the MIDI datasets which uses multiple ports, it is necessary to prepare MIDI interface and MIDI module which supports multiple ports.

[Wavetable file path]
If you want to use "Internal Wavetable Synthesizer", you have to select the wavetable file.
The extension of the wavetable file must be ".dls" or ".sf2".
MIDITrail assigns channel No.10 for percussion.
MIDITrail's internal synthesizer is implemented very simply and has poor performance.
Depending on the wavetable file, the sound may not be output correctly.

### (3) How to uninstall

Delete "MIDITrail" application.

## 4. Usage

### (1) How to open a MIDI file

Select "Open File..." from "File" menu, the Open File dialog will appear. And choose a Standard MIDI File (*.mid).
Or you can drag and drop a MIDI file into the window of MIDITrail.

### (2) How to play/pause/resume/stop

Push the following keys, or use "Playback" menu.

Key | Action
--- | ---
`SPACE` | Play / Pause / Resume
`ESC` | Stop
`1` `2` | Skip Back / Skip Forward
`4` `5` | Playback Speed Down / Up
`F2` | Double speed playback

### (3) Folder Playback

MIDITrail can open MIDI data files stored in folder in sequence. MIDITrail opens the files in ascending order by filename.

#### 1. Folder selection

When you select "Open Folder..." from "File" menu, the folder selection dialog will appear.
Here you have to select the folder that contains the Standard MIDI File (*.mid).
You can also drag and drop the forlder into the window of MIDITrail.

#### 2. File switching

You can switch the MIDI data file by selecting "Previous File" and "Next File" from "File" menu.
You can also use the following keyboard shortcut.

Key | Action
--- | ---
`COMMAND` + `B` `COMMAND` + `P` | Open previous file.
`COMMAND` + `N` | Open next file.

#### 3. Folder Playback

When you select "Folder Playback" from "Playback" menu, MIDITrail playback the next file after end of playback automatically.

### (4) How to move viewpoint in 3D space

You can move freely in 3D space, and look at MIDI datasets from all directions by operation of keyboard and mouse, like FPS (First Person Shooter) game.
Although there is sense of incongruity in the beginning, it will be very comfortable as experience is gained.

#### Mouse operation

When you click the window, it will become the view control mode by the mouse, and mouse cursor will disappear.
The eye direction synchronizes movement of your mouse.
If you click once again, view control mode will be canceled.
And you can rotate piano roll using mouse wheel.

#### Keyboard operation

Put your index finger on `D`, middle finger on `W`, third finger on `A`.

Key | Action
--- | ---
`W` `S` | It moves forward and backward.
`A` `D` | It moves left and right.
`Q` `E` | It goes up and down.
`Z` `C` | It moves along the direction of MIDI datasets. (In PinoRollRain, it moves along the piano keyboard.)
`SHIFT` + [`W` `S`] `SHIFT` + [`A` `D`] `SHIFT` + [`Q` `E`] `SHIFT` + [`Z` `C`] | When you push move key with `SHIFT` key, you can move at high speed.
`CTRL` + [`W` `S`] `CTRL` + [`A` `D`] | You can control the eye direction.

#### For a left-handed person

You can also use a cursor key. If you use a mouse with your left hand, this one may be convenience.

Key | Action
--- | ---
`↑``↓` | It moves forward and backward.
`←``→` | It moves left and right.
`PgUp` `PgDn` | It goes up and down.
`,``.` | It moves along the direction of MIDI datasets. (In PinoRollRain, it moves along the piano keyboard.)
`SHIFT` + [`↑``↓`] `SHIFT` + [`←``→`] `SHIFT` + [`PgUp` `PgDn`] `SHIFT` + [`,``.`] | When you push move key with `SHIFT` key, you can move at high speed.
`CTRL` + [`↑``↓`] `CTRL` + [`←``→`] | You can control the eye direction.

### (5) Selection of the viewpoint

When you select "Viewpoint 1 / 2 / 3" from "View" menu, or when you push following key, you can move to a standard viewpoint.

Key | Action
--- | ---
`7` | Move to standard viewpoint 1
`8` | Move to standard viewpoint 2
`9` | Move to standard viewpoint 3

When you select "My Viewpoint 1 / 2 / 3" from "View" menu, or when you push following key, you can move to a viewpoint saved by the user in advance.
If you want to save current viewpoint, select "Save My Viewpoint 1 / 2 / 3" from "View" menu or push following key.

Key | Action
--- | ---
`COMMAND` + `7` | Move to my viewpoint 1
`COMMAND` + `8` | Move to my viewpoint 2
`COMMAND` + `9` | Move to my viewpoint 3
`OPTION` + `COMMAND` + `7` | Save my viewpoint 1
`OPTION` + `COMMAND` + `8` | Save my viewpoint 2
`OPTION` + `COMMAND` + `9` | Save my viewpoint 3

### (6) Change of window size

When you select "Window size..." from "View" menu, the Window size configuration dialog will appear.
Select your favorite window size, and push the OK button.
You can not change window size while playing or pausing.

The window size you can select is depends on your Mac.
If you want to specify any window size, fill in "Width" "Height".
If you want to apply that size to the view area, check "Apply to the view area".

### (7) Full Screen

When you select "Full Screen" from "View" menu, you can switch between window mode and full screen mode.
By [Control] + [Command] + [F] key, you can switch the mode too.

### (8) Display counters

Counter | Details
--- | ---
FPS | Frame Per Second.
TITLE | Title of music.
TIME | Elapsed time.
BPM | Tempo (Beats Per Minute).
BEAT | Time signature.
BAR | Number of bars.
NOTES | Number of notes.
SPEED | Playback speed.

### (9) View mode select

You can select the view mode from "View" menu. You can not change the view mode while playing or pausing.

### (10) Display/Effect switch

You can switch the display/effect at "View" menu.

The piano roll bar will move up/down or right/left with change of pitch bend.
Some MIDI animation works are using pitch bend to shift the piano roll bars without change keys. If the MIDI animation is not displayed correctly, please disable the pitch bend effect to fix the piano roll bars.

### (11) MIDI IN Monitor

You can view data sets received from MIDI IN device in realtime.
Select "MIDI IN..." from "Option" menu, then "MIDI IN configuration" dialog will appear.

Select the MIDI IN device for monitoring.
If you check the MIDITHRU, MIDITrail will send data sets received from MIDI IN to MIDI OUT.
When you select "Start Monitoring" from "Playback" menu, MIDI IN monitoring will start.
NOTE: MIDITrail can not record data sets received from MIDI IN.

### (12) Graphic configuration

Select "Graphic..." from "Option" menu, the graphic configuration dialog will appear.
You can not change graphic configuration while playing or pausing.

[Anti-aliasing]
If anti-aliasing is enabled, a notch (jaggy) will decrease and a more beautiful picture will be displayed.
However, since processing of anti-aliasing is heavy, performance may be poor when you select a upper level.
If your Mac does not support anti-aliasing, it is displayed as "Not supported".

[Background image file path]
If you want to display the background image, specify the file path of the image.
The extension of the image file must be ".jpg" or ".png".
MIDITrail supports a bitmap file that pixel format is 8bit RGB or 8bit RGBA.

[Quarter note length]
You can change a quarter note length of piano roll. You can specify a value from 0% to 1000%. The default value is 100%.

### (13) Color Configuration

You can customize the colors displayed on the screen.
When you select "Color..." from "Option" menu, the color configuration dialog will appear.
You can select the color palette and change it to your favorite color scheme.
You can not change the color while playing or pausing.

When you click "Edit..." button, the color palette configuration dialog will appear.
You can cutomaize the color palette.
You can not edit the default color palette.

Gradation Tool
[Set Gradation Colors] You can assign gradation colors for channels that you selected.

Parameter Setup Tool
[Set Default Colors] Sets the default color for all items.
[Export Color Parameters...] You can edit the exported parameters with a text editor.
[Import Color Parameters...] You can import the parameters that you edited with a text editor. It is possible to enter part of the parameters.

### (14) MIDITrail command line interface

If you want to start MIDITrail by command line in Terminal, you can use following arguments.

    open ./MIDITrail.app --args [-p] [-q] [path/to/file]

argument | detail
--- | ---
-p | Play MIDI file after startup of MIDITrail. If you did not specify "path/to/file", this option will be ignored.
-q | End MIDITrail after end of playback. If option "-p" was not specified, this option will be ignored.
path/to/file | MIDI file path. When you specify a path including a space character, please use escape code. ex."file\ name.mid"

If you drop a MIDI file to the shortcut of MIDITrail, MIDITrail open the file on startup.

### (15) Game Controller

You can operate by the game controller for Mac.

Button / Stick | Action
--- | ---
Pause button | Play / Pause / Resume
A button | Play / Pause / Resume
B button | Stop
X button | Viewpoint: down
Y button | Viewpoint: up
L1/R1 shoulder button | Change viewpoint
L2/R2 trigger button | Skip back/forward
Directional pad | Viewpoint movement: front and back, right and left
Left thumbstick | Viewpoint movement: front and back, right and left
Right thumbstick | Eye direction

NOTE: MIDITrail does not support game controller for Windows.

## 5. Restriction

### (1) Synchronization of MIDI sound and display

If you use the MIDI module which delays sound (such as software sound modules), the MIDI sound and display may not synchronize.

### (2) Performance of graphics

MIDITrail renders all notes of the MIDI file in real time.
Therefore if MIDI file has a large number of notes, the load of rendering becomes high.
In order to enjoy MIDI file which contains tens of thousands of notes comfortably, you have to use Mac which has high performance graphics.

### (3) Multiple ports

In specification of SMF (Standard MIDI File), a method to select port is not defined.
However there is the unofficial method (*1) to select port. MIDITrail supports that method, but may be unable to play the MIDI file. It depends on the MIDI file.
(*1) Meta event (FF 21 01 pp) is the command to select port.

### (4) Time format of standard MIDI file

MIDITrail can't open the MIDI file whose delta time represents actual time.

## 6. FAQ

### (1) Q. The animation is not smooth.

Please try to change window size to small, and turn off anti-aliasing. Then the load of rendering becomes low.
Check FPS value in window title. If the FPS value is under 60, the performance of graphics is insufficient.
When MIDI file has a large number of notes, the load of rendering becomes high.
To confirm the performance of your Mac, please try to open MIDI file which contains few notes. If the animation does not improve, please use Mac which has high performance graphics.

### (2) Q. I want to customize the window size and position.

You can customize the window size and position. Please open following file by Property List Editor.
Property List Editor is a utility application of Xcode.
If you want to customize the window size, edit "Width" and "Height".
If you want to customize the window position, add "WindowPosition", "X" and "Y".

    ~/Library/Preferences/jp.sourceforge.users.yknk.MIDITrail.plist

    View
        WindowSize
            Height=600 (Type:String)
            Width=800 (Type:String)
        WindowPosition
            X=100 (Type:String)
            Y=200 (Type:String)

### (3) Q. I want to change the ripple more showily.

You can change size of the ripple by editing configration file.
Please Check "7. Customize - (2) Piano roll".
Change the value of "RippleHeight" and "RippleWidth" larger.

## 7. How to customize

You can customize MIDITrail as your like, by editing the configuration files that were included in resources of MIDITrail.

File | contents
--- | ---
MIDITrail.app/Contents/Resources/conf/Player.ini | Player configuration
MIDITrail.app/Contents/Resources/conf/PianoRoll3D.ini | View mode configuration: Piano Roll 3D
MIDITrail.app/Contents/Resources/conf/PianoRoll2D.ini | View mode configuration: Piano Roll 2D
MIDITrail.app/Contents/Resources/conf/PianoRollRain.ini | View mode configuration: Piano Roll Rain
MIDITrail.app/Contents/Resources/conf/PianoRollRain2D.ini | View mode configuration: Piano Roll Rain 2D
MIDITrail.app/Contents/Resources/conf/PianoRollRing.ini | View mode configuration: Piano Roll Ring
MIDITrail.app/Contents/Resources/conf/PianoRoll3DLive.ini | View mode configuration: Piano Roll 3D (MIDI IN Monitor)
MIDITrail.app/Contents/Resources/conf/PianoRoll2DLive.ini | View mode configuration: Piano Roll 2D (MIDI IN Monitor)
MIDITrail.app/Contents/Resources/conf/PianoRollRainLive.ini | View mode configuration: Piano Roll Rain (MIDI IN Monitor)
MIDITrail.app/Contents/Resources/conf/PianoRollRain2DLive.ini | View mode configuration: Piano Roll Rain 2D (MIDI IN Monitor)
MIDITrail.app/Contents/Resources/conf/PianoRollRingLive.ini | View mode configuration: Piano Roll Ring (MIDI IN Monitor)

If you want to open the resource files, right click MIDITrail icon, and select "Show Package Contents".

### (1) Player Configuration

#### (a) Player Control

Edit [PlayerControl] section.

Name | Details
--- | ---
AutoPlaybackAfterOpenFile | Playback automatically after opening file (0:disable / 1:enable)

#### (b) View Control

Edit [ViewControl] section.

Name | Details
--- | ---
ShowFileName | Show the file name insted of the title (0:disable / 1:enable)

#### (c) Skip Control

Edit [SkipControl] section.

Name | Details
--- | ---
SkipBackTimeSpanInMsec | Skip back time span (msec)
SkipForwardTimeSpanInMsec | Skip forward time span (msec)
MovingTimeSpanInMsec | Skip animation time span (msec)

#### (d) Playback Speed Control

Edit [PlaybackSpeedControl] section.

Name | Details
--- | ---
SpeedStepInPercent | Playback speed step (%)
MaxSpeedInPercent | Playback speed max ratio (%)

#### (e) Playback Control

Edit [Playback] section.

Name | Details
--- | ---
DelayBetweenSongsInMsec | Delay between songs (msec)（0 - 10000）

### (2) View Mode Configuration

#### (a) Moving speed of viewpoint

Edit [FirstPersonCam] section.

Name | PR-3D/2D | PR-Rain/2D | PR-Ring | Details
--- | --- | --- | --- | ---
VelocityFB | yes | yes | yes | Velocity of forward and backward. (m/s)
VelocityLR | yes | yes | yes | Velocity of left and right. (m/s)
VelocityUD | yes | yes | yes | Velocity of up and down. (m/s)
VelocityPT | yes | yes | yes | Angular velocity of look. (degree/s)
AcceleRate | yes | yes | yes | The rate of acceleration when push SHIFT key. (n times)
VelocityAutoRoll | yes | yes | yes | Angular velocity of auto rotation of piano roll (degree/s)
VelocityManualRoll | yes | yes | yes | Angular velocity of manual rotation of piano roll (degree/s)

#### (b) Display of piano roll

Edit [Scale] section.

Name | PR-3D/2D | PR-Rain/2D | PR-Ring | Details
--- | --- | --- | --- | ---
QuarterNoteLength | yes | yes | yes | Length of quarter note (m)
NoteBoxHeight | yes | no | yes | Height of note box (m)
NoteBoxWidth | yes | no | yes | Width of note box (m)
NoteStep | yes | no | no | Interval length of notes in a channel (m)
ChStep | yes | no | yes | Interval length of channels (m)
RippleHeight | yes | no | yes | Height of ripple (m)
RippleWidth | yes | no | yes | Width of ripple (m)
PictBoardRelativePos | yes | no | yes | The relative position which crosses perpendicularly the board and the playback section. 0.0 - The left edge of board crosses playback section 0.5 - The center of board crosses playback section 1.0 - The right edge of board crosses playback section
LiveNoteLengthPerSecond | yes | yes | yes | Note length for 1 second in monitor (m)
LiveMonitorDisplayDuration | yes | yes | yes | Display duration in monitor (msec)
RingRadius | no | no | yes | Radius of ring (m)

If you set small value to QuarterNoteLength, you can enjoy MIDI datasets like miniature garden.

#### (c) Color

Edit [Color] section. "A" of "RGBA" means alpha value.

Name | PR-3D/2D | PR-Rain/2D | PR-Ring | Details
--- | --- | --- | --- | ---
NoteColorType | yes | yes | yes | Note color type CHANNEL: Assign the channel color to the piano roll bar. (Ch-XX-NoteRGBA) SCALE: Assign the scale color to the piano roll bar. (Scale-XX-NoteRGBA)
Ch-01-NoteRGBA Ch-02-NoteRGBA : Ch-16-NoteRGBA | yes | yes | yes | Color of the piano roll bar at each channel.(RGBA)
Scale-01-NoteRGBA Scale-02-NoteRGBA : Scale-12-NoteRGBA | yes | yes | yes | Color of the piano roll bar at each sacle.(RGBA) 01=C,02=C#,03=D,04=D#,05=E,06=F,07=F#,08=G,F09=G#,10=A,11=A#,12=B
GridLineRGBA | yes | no | yes | Color of the grid line and bar line. (RGBA) If A of RGBA is 00 then the grid line will disappear.
PlaybackSectionRGBA | yes | no | no | Color of the playback section. (RGBA)
CaptionRGBA | yes | yes | yes | Color of the caption/counter string.(RGBA)
BackGroundRGBA | yes | yes | yes | Back ground color(RGBA)

#### (d) Active note effect

Edit [ActiveNote] section.

Name | PR-3D/2D | PR-Rain/2D | PR-Ring | Details
--- | --- | --- | --- | ---
Duration | yes | no | yes | Duration of active note flash.(msec)
WhiteRate | yes | no | yes | White rate at "NOTE ON". 0.0 Same color as piano roll bar. It means no flash. 0.5 Neutral color of piano roll bar and white. 1.0 White.
EmissiveRGBA | yes | no | no | Emissive color of active note. (RGBA) The parameter will be ignored on PianoRoll2D. The parameter has been deprecated since Ver.2.0.0.
SizeRatio | yes | no | yes | Size magnification ratio of active note. The parameter will be ignored on MIDI IN Monitor.

#### (e) Ripple

Edit [Ripple] section.

Name | PR-3D/2D | PR-Rain/2D | PR-Ring | Details
--- | --- | --- | --- | ---
Duration | yes | no | yes | Duration of a ripple.(msec)

#### (f) Stars

Edit [Stars] section.

Name | PR-3D/2D | PR-Rain/2D | PR-Ring | Details
--- | --- | --- | --- | ---
NumberOfStars | yes | yes | yes | The number of stars to draw.

#### (g) Bitmap

Edit [Bitmap] section.
Place your bitmap file to "data" folder which exists under the MIDITrail folder. And write the bitmap file name to INI file.
If the height or width of bitmap is too big, your Mac may be unable to draw the bitmap.
In Mac OS X 10.5, if you use the image which size is not (2^n)*m, the texture may be broken.

Name | PR-3D/2D | PR-Rain/2D | PR-Ring | Details
--- | --- | --- | --- | ---
Board | yes | no | yes | Bitmap file name of the picture board.(ex. "data\Board.bmp") Instead of piano keyboard, you can display your favorite wallpaper. The aspect ratio of bitmap is arbitrary. To adjust the relative position which crosses perpendicularly the board and the playback section, please edit "[Scale] / PictBoardRelativePos".
Ripple | yes | no | yes | Bitmap file name of the ripple.(ex. "data\Ripple.bmp") You can change ripple which is displayed on "NOTE ON". The aspect ratio of bitmap is arbitrary. To adjust ripple display size, please edit "[Scale] / RippleHeight, RippleWidth".
Keyboard | no | yes | no | Bitmap file name of piano keyboard.(ex. "data\Keyboard.bmp") Texture image of Piano keyboard. You can not change the aspect ratio of this bitmap.

#### (h) Piano keyboard

Edit [PianoKeyboard] section.

Name | PR-3D/2D | PR-Rain/2D | PR-Ring | Details
--- | --- | --- | --- | ---
KeyDownDuration | no | yes | no | Duration of key down (msec)
KeyUpDuration | no | yes | no | Duration of key up (msec)
KeyboardStepY | no | yes | no | Keyboard step interval: Horizontal direction (m)
KeyboardStepZ | no | yes | no | Keyboard step interval: Vertical direction (m)
KeyboardMaxDispNum | no | yes | no | The number of the maximum keyboards (0-16)
WhiteKeyColor | no | yes | no | Color of white key. (RGBA)
BlackKeyColor | no | yes | no | Color of black key. (RGBA)
ActiveKeyColorType | no | yes | no | Active key color type STANDARD: Standard color (ActiveKeyColor) NOTE: Note color (Ch-XX-NoteRGBA or Scale-XX-NoteRGBA)
ActiveKeyColor | no | yes | no | Color of active key. (RGBA)
ActiveKeyColorDuration | no | yes | no | Duration of change from the color of note ON to the last neutral color. (msec)
ActiveKeyColorTailRate | no | yes | no | Definition of the last neutral color. Color ratio of the color of note ON (red) and the color of key (white/black) (0.0-1.0)
KeyDispRangeStart | no | yes | no | Key display range: start position (0-127) In typical 88-key piano, start position is 21(A0).
KeyDispRangeEnd | no | yes | no | Key display range: end position (0-127) In typical 88-key piano, end position is 108(C8).

#### (i) Picture board

Edit [Board] section.
If you want to draw the part of the image that specified at "Board" of [Bitmap] section, set the rectangle parameters here.

Name | PR-3D/2D | PR-Rain/2D | PR-Ring | Details
--- | --- | --- | --- | ---
ClipImage | yes | no | yes | Clip image (0:no/1:yes)
ClipAreaX1 | yes | no | yes | Clipping area X1
ClipAreaY1 | yes | no | yes | Clipping area Y1
ClipAreaX2 | yes | no | yes | Clipping area X2
ClipAreaY2 | yes | no | yes | Clipping area Y2

#### (j) Standard viewpoint

Edit [Viewpoint-2],[Viewpoint-3] section. You can not edit viewpoint 1.

Name | PR-3D/2D | PR-Rain/2D | PR-Ring | Details
--- | --- | --- | --- | ---
no | yes | yes | yes | X-coordinate
Y | yes | yes | yes | Y-coordinate
Z | yes | yes | yes | Z-coordinate
Phi | yes | yes | yes | Azimuth angle (degree)
Theta | yes | yes | yes | Zenith angle (degree)
ManualRollAngle | yes | yes | yes | Manual rotation angle (degree)
AutoRollVelocity | yes | yes | yes | Automatic rotation velocity (degree/second)

## 8. Appendix

### (1) Structure of 3D piano roll visualization

(a) The structure of "Piano roll 3D" visualization

When MIDITrail open the MIDI datasets uses multiple ports, unused port will be not displayed.
For example, if the MIDI datasets uses port A, C and E, MIDITrail displays port A, C and E side by side, and omits port B and D.

(b) The structure of "Piano Roll Rain" visualization

When MIDITrail open the MIDI datasets uses multiple ports, only piano keyboards of port A will be displayed.
However piano roll bars of all ports will be displayed.

## 9. Copyright and license

WADA Masashi holds the copyright of MIDITrail.
MIDITrail is released under the BSD license.

    Copyright (c) 2010-2022, WADA Masashi <>
    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. History

Date | Version | Changelog
--- | --- | ---
2010/10/21 | Ver.0.0.0 | Development start It based on the source code of MIDITrail Ver.1.1.1 for Windows
2010/12/26 | Ver.1.1.2 | First formal release for Mac OS X #23973 MIDITrail for Mac OS X development
2011/12/25 | Ver.1.1.3 | #25454 Added grid line display control #26985 Added Mac OS X 10.7 (Lion) support #26987 Added playback speed control #26988 Added skip control #26989 Added stars and counter display control #27005 Added figure of player operations guide to "How to view dialog" #26990 Fixed bug (Typographical errors on the license)
2012/02/12 | Ver.1.2.0 | #27458 Added MIDI IN monitoring #27459 Added MIDI OUT auto configuration #27457 Fixed bug (Screen flickers on skip forwad when repeat ON)
2014/01/02 | Ver.1.2.1 | #32544 Merged features of MIDITrail Ver.1.2.1 for Windows #30545 Added key display range control #30546 Added back ground color control #30547 Added scale color assignment to the piano roll bar #30549 Added improvement of font error message #32543 Added window position control #30550 Added support of virtual MIDI port #30551 Added support of new line character LF in INI file #32360 Added menu item "Auto save viewpoint" #32361 Added ability to save viewpoint in MIDI IN monitoring #32362 Added ability to playback automatically after opening file #32363 Added ability to open the file while playing #32366 Added ability to display the file name #32367 Added view mode "Piano Roll Rain 2D" #32427 Added note color assignment to active key #32606 Added support of app sandbox #32365 Changed title caption ("TITLE:" string was removed) #32730 Changed development environment to Xcode 4 #30548 Fixed bug (At the start of playback, MIDI data transmission is blocked) #32359 Fixed bug (MIDITrail does not send some CC events at skip processing) #32542 Fixed bug (MIDITrail fails to get the offline property of MIDI device) #32779 Fixed bug (MIDI OUT device "none" does not take effect)
2015/11/23 | Ver.1.2.2 | #35749 Fixed bug. (MIDITrail does not work in El Capitan) #35750 Changed development environment to Xcode 7 (OS X Ver.) #35751 Changed display of the security message for the sandbox #35775 Changed URL and mail address in user's manual
2017/07/23 | Ver.1.2.3 | #37373 Added supports window size customization #37374 Added supports background image customization #37375 Added increase of the size of active note #37371 Changed architecture to 64bit #37372 Changed development environment to Xcode 8 #37376 Changed brightness the ripple color #37377 Changed OS name to macOS on user manual #37378 Fixed bug (Erased the item "Enter Full Screen" of "View" menu) #37379 Fixed bug (Disable key input for main window while displaying setting dialog)
2019/04/14 | Ver.1.2.4 | #39113 Added viewpoint selection menu #39114 Fixed bug (Piano roll bar flickers in Piano Roll 2D mode) #39115 Fixed bug (Time indicator becomes opaque in Piano Roll 3D mode) #39116 Changed development environment to Xcode 9
2019/05/03 | Ver.1.2.5 | #39188 Added internal wavetable synthesizer #39189 Added quarter note length configuration #39190 fixed bug (memory leak of background image processing) #39191 Changed appendix of user's manual
2019/06/02 | Ver.1.2.6 | #39276 Added full screen mode #39277 Added support for game controller #39282 Fixed bug (Code analysis found some mistakes) #39284 Fixed bug (Line feed code is not LF in some source files)
2019/11/06 | Ver.1.3.1 | #39718 Added view mode "Piano Roll Ring" #39719 Added supports dark mode #39720 Changed development environment to Xcode 10 #39721 Changed rendering loop to display link #39722 Fixed bug (Error dialog must be displayed by main thread) #39723 Fixed bug (Japanese is not detected) #39726 Fixed bug ("Unsupported bitmap format" error displayed on launch)
2021/04/02 | Ver.1.3.2 | #41895 Added support for macOS 11 Big Sur (Core MIDI new API) #41896 Added support for Retina display #41894 Changed development environment to Xcode 12 (Support M1 Mac) #41903 Changed MIDI device identification rule #41897 Fixed bug (The color of the ripples becomes dark in Piano Roll 3D) #41898 Fixed bug (The character encoding of some source files is Shift-JIS)
2021/05/23 | Ver.1.3.3 | #42364 Added Folder Playback feature #42365 Added support for Standard MIDI File with illegal chunk size #42366 Added support for RIFF-based MIDI File #42367 Added sending "All Sound Off" message when pause/stop/skip #42368 Fixed bug ("WARNING ITMS-90788" is displayed when uploading the app to App Store) #42369 Fixed bug (MIDITrail does not start in virtual machine environment)
2021/09/08 | Ver.1.3.4 | #42830 Added setting of delay between songs #42831 Fixed bug (Sending System Exclusive causes crash when data size is zero)
2022/02/13 | Ver.1.3.5 | #43853 Fixed bug (File Open Panel freezes)
2022/07/18 | Ver.1.3.6 | #45144 Added feature of saving my viewpoint #45145 Added display switch of grid line and time indicator #45146 Added feature of saving display switch status #45147 Added 2nd light for Piano Roll 3D #45148 Added MIDI system message parsing
2022/09/27 | Ver.2.0.0 | #45695 Added feature of color configuration #45696 Added bar ring for Piano Roll Ring #45697 Changed key color of Piano Roll Rain #45698 Changed development environment to Xcode 13 #45699 Changed graphics API from OpenGL to Metal #45732 Changed app name animation in startup screen