aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/APIdoc.md4
-rw-r--r--doc/channeldialog.html12
-rw-r--r--doc/channeleditor.html20
-rw-r--r--doc/cmdargs.html16
-rw-r--r--doc/efxdialog.html2
-rw-r--r--doc/mainwindow.html31
-rw-r--r--doc/miscellaneous.html32
-rw-r--r--doc/optionsdialog.html24
-rw-r--r--doc/plistdialog.html2
-rw-r--r--doc/troubleshooting.html32
-rw-r--r--doc/version.html2
-rw-r--r--doc/visualization.html5
-rw-r--r--img/chanw.pngbin64046 -> 210163 bytes
-rw-r--r--img/chparaw.pngbin34388 -> 78643 bytes
-rw-r--r--img/effectw.pngbin32874 -> 73030 bytes
-rw-r--r--img/mainw.pngbin33481 -> 71750 bytes
-rw-r--r--img/options1.pngbin32867 -> 70666 bytes
-rw-r--r--img/options2.pngbin44719 -> 87054 bytes
-rw-r--r--img/options3.pngbin33196 -> 124949 bytes
-rw-r--r--img/options4.pngbin30369 -> 92889 bytes
-rw-r--r--img/options5.pngbin22614 -> 84886 bytes
-rw-r--r--img/playlistw.pngbin19877 -> 173553 bytes
-rw-r--r--qmidiplayer-desktop/CMakeLists.txt3
23 files changed, 108 insertions, 77 deletions
diff --git a/doc/APIdoc.md b/doc/APIdoc.md
index 968aa97..8e3a181 100644
--- a/doc/APIdoc.md
+++ b/doc/APIdoc.md
@@ -74,7 +74,7 @@ Hooks use the universal `ICallBack` interface. Some of those also accept a point
When you register a hook, you provide the core with a instance of your class that implements the `ICallBack` interface
and your `userdata` to be used when the core is calling the callback. When the callback is called, it will be fed with
proper `callerdata` generated by the core and the `userdata` you provided. Type of `callerdata` varies by hooks. Event
-reader and handler hooks have `SEventCallBackData*` as their `callerdata`. All other callbacks at this time have `NULL`
+reader and handler hooks have `SEventCallBackData*` as their `callerdata`. All other callbacks at this time have `nullptr`
as their `callerdata`. **Don't try directly modifying the members of callerdata!**
# 4. Functionalities
@@ -152,7 +152,7 @@ type of the event together with the channel this event goes to.
Contains the raw data for string-like events.
- default constructor: `SEvent()`
sets everything to zero or empty.
-- constructor with parameters: `SEvent(uint32_t _iid,uint32_t _t,char _tp,uint32_t _p1,uint32_t _p2,const char* s=NULL)`
+- constructor with parameters: `SEvent(uint32_t _iid,uint32_t _t,char _tp,uint32_t _p1,uint32_t _p2,const char* s=nullptr)`
fills the event with the parameters given.
- `friend bool operator <(const SEvent& a,const SEvent& b)`
compares events by their timestamps. Ties are broken by comparing precedence in file.
diff --git a/doc/channeldialog.html b/doc/channeldialog.html
index c1674a1..6b722f6 100644
--- a/doc/channeldialog.html
+++ b/doc/channeldialog.html
@@ -24,22 +24,22 @@
</div>
<div id="content">
<h1>Channel Dialog</h1>
- <img src="../img/chanw.png"><br>
+ <img src="../img/chanw.png" width="560"><br>
<h2>Columns in the channel table</h2>
<ul>
<li>A(Activity): Shows the activity of the corresponding channel.</li>
<li>M(Mute): Tick this to mute the corresponding channel.</li>
<li>S(Solo): Tick this to solo the corresponding channel.</li>
- <li>Device: The player sends midi messages from this channel to the device selected here.</li>
+ <li>Device: Midi messages from this channel will be sent to the device selected here.</li>
<li>Preset: Displays the current preset of the corresponding channel.<br>
Preset can be changed by double clicking the cells from this column.</li>
- <li>...: Brings up the channel parameter editor dialog.</li>
+ <li>...: Clicking a cell in this column brings up the channel parameter editor dialog for the channel.</li>
</ul>
<h2>Buttons</h2>
<ul>
- <li>Save/Load: not yet implemented.</li>
- <li>Unmute All: Remove tick mark from all mute checkboxes.</li>
- <li>Unsolo All: Remove tick mark from all solo checkboxes.</li>
+ <li>Save/Load: not yet implemented. Likely will never be implemented.</li>
+ <li>Unmute All: Remove tick marks from all mute checkboxes.</li>
+ <li>Unsolo All: Remove tick marks from all solo checkboxes.</li>
</ul>
<br><a href="index.html">Return</a>
</div>
diff --git a/doc/channeleditor.html b/doc/channeleditor.html
index 0c38d54..55b5378 100644
--- a/doc/channeleditor.html
+++ b/doc/channeleditor.html
@@ -24,26 +24,26 @@
</div>
<div id="content">
<h1>Channel Editor</h1>
- <img src="../img/chparaw.png"><br>
+ <img src="../img/chparaw.png" width="420"><br>
<h2>Controllers Explained</h2>
<ul>
- <li>Cut.: Cut Off (cc#74, defined in GM2). Not supported by vanilla fluidsynth.</li>
- <li>Res.: Resonance (cc#71, defined in GM2). Not supported by vanilla fluidsynth</li>
+ <li>Cut.: Cut Off (cc#74, defined in GM2).</li>
+ <li>Res.: Resonance (cc#71, defined in GM2).</li>
<li>Rev.: Reverb (cc#91, defined in GM1).</li>
<li>Chr.: Chorus (cc#93, defined in GM1).</li>
<li>Vol.: Volume (cc#07, defined in GM1).</li>
<li>Pan.: Panorama (cc#10, defined in GM1).</li>
- <li>Atk.: Envelope attack (cc#73, defined in GM2). Not supported by vanilla fluidsynth.</li>
- <li>Dec.: Envelope decay (cc#75, defined in GM2). Not supported by vanilla fluidsynth.</li>
- <li>Rel.: Envelope release (cc#72, defined in GM2). Not supported by vanilla fluidsynth.</li>
- <li>Rate: Vibrato rate (cc#76, defined in GM2). Not supported by vanilla fluidsynth.</li>
- <li>Dep.: Vibrato depth (cc#77, defined in GM2). Not supported by vanilla fluidsynth.</li>
- <li>Del.: Vibrato delay (cc#78, defined in GM2). Not supported by vanilla fluidsynth.</li>
+ <li>Atk.: Envelope attack (cc#73, defined in GM2).</li>
+ <li>Dec.: Envelope decay (cc#75, defined in GM2).</li>
+ <li>Rel.: Envelope release (cc#72, defined in GM2).</li>
+ <li>Rate: Vibrato rate (cc#76, defined in GM2).</li>
+ <li>Dep.: Vibrato depth (cc#77, defined in GM2).</li>
+ <li>Del.: Vibrato delay (cc#78, defined in GM2).</li>
</ul>
<h2>Notes</h2>
<ul>
<li>Changes in this page are applied immediately.</li>
- <li>Vanilla fluidsynth does not support GM2 controls.</li>
+ <li>If you are using fluidsynth, the actual effect of a control change depends on the soundfont you use.</li>
</ul>
<br><a href="index.html">Return</a>
</div>
diff --git a/doc/cmdargs.html b/doc/cmdargs.html
index afc770d..dbce315 100644
--- a/doc/cmdargs.html
+++ b/doc/cmdargs.html
@@ -24,11 +24,17 @@
</div>
<div id="content">
<pre>
-Usage: qmidiplayer [Options] [Midi Files]
-Possible options are:
- -l, --load-all-files Load all files from the same folder.
- --help Show this help and exit.
- --version Show this version information and exit.
+Usage: ./qmidiplayer [options] [files...]
+A cross-platform MIDI player.
+
+Options:
+ -h, --help Displays this help.
+ -v, --version Displays version information.
+ --plugin &lt;plugin library&gt; Load a plugin from &lt;plugin library&gt;.
+ -l, --load-all-files Load all files from the same folder.
+
+Arguments:
+ file midi files to play (optional).
</pre>
<br><a href="index.html">Return</a>
</div>
diff --git a/doc/efxdialog.html b/doc/efxdialog.html
index 1706fc7..e1612e4 100644
--- a/doc/efxdialog.html
+++ b/doc/efxdialog.html
@@ -24,7 +24,7 @@
</div>
<div id="content">
<h1>Effects Dialog</h1>
- <img src="../img/effectw.png"><br>
+ <img src="../img/effectw.png" width="600"><br>
Adjest effect parameters of the internal fluidsynth here.
<ul>
<li>Changes in this dialog will be applied immediately.</li>
diff --git a/doc/mainwindow.html b/doc/mainwindow.html
index e576e7b..7928c9f 100644
--- a/doc/mainwindow.html
+++ b/doc/mainwindow.html
@@ -24,18 +24,22 @@
</div>
<div id="content">
<h1>Main Window</h1>
- <img src="../img/mainw.png"><br>
- <ul>
- <li>1. Now playing. Right clicking here will bring up the <a href="#fileop"> file operation menu</a>.</li>
- <li>2. Playing control slider. The total playing time is estimated and isn't 100% accurate.</li>
- <li>3. Playing control buttons. Self-explanatory.</li>
- <li>4. Settings button. Read the Settings section for details.</li>
- <li>5. Dialog toggle buttons.</li>
- <li>6. Master gain slider.</li>
- <li>7. Polyphone indicator.</li>
- <li>8. <s>It's me!</s></li>
- </ul>
+ <img src="../img/mainw.png" width="480"><br>
+ <ol>
+ <li>Now playing. Right clicking here will bring up the <a href="#fileop">action menu</a>.</li>
+ <li>Seeking slider. Song length is estimated and may not be 100% accurate.</li>
+ <li>Playback control buttons. Self-explanatory.</li>
+ <li>Open file.</li>
+ <li>Settings button. Refer to the <a href="optionsdialog.html">Settings section</a> for details.</li>
+ <li>Dialog buttons. You can configure this section in settings.</li>
+ <li>FluidSynth master gain slider.</li>
+ <li>FluidSynth polyphony indicator.</li>
+ <li>A dumb button.</li>
+ </ol>
<h3><a name="fileop">File operation menu</a></h3>
+ <p>
+ Note that actual actions in this menu can be configured in settings.
+ </p>
<ul>
<li>File Information.<br>
Click an item in this dialog to copy its content.
@@ -48,9 +52,8 @@
<li>Panic.<br>
If somehow the player messed up, use this action to turn off all the notes.
<li>Restart fluidsynth.<br>
- It's not possible to use this action unless the player is stopped.<br>
- Applies settings and restart the internel fluidsynth engine when "single fluidsynth instance"
- is enabled.
+ This action can only be used when no file is being played.<br>
+ Applies settings and restart the internel fluidsynth engine.
</li>
</ul>
<br><a href="index.html">Return</a>
diff --git a/doc/miscellaneous.html b/doc/miscellaneous.html
index 7f46d33..481e1a6 100644
--- a/doc/miscellaneous.html
+++ b/doc/miscellaneous.html
@@ -30,14 +30,7 @@
<li><a href="#contact">Contact the author</a></li>
</ul>
<h3 id="build">Building QMidiPlayer from source</h3>
- Building QMidiPlayer from source is as easy as any other qmake projects.<br>
- 1. Get the dependencies.<br>
- Currently QMidiPlayer depends on these libraries:<br>
- <pre style="background-color:#eee;padding:0.2em;">qt5, libfluidsynth(FluidSynth), librtmidi(RtMidi)</pre>
- If you want to build the lite version as well, you need several QML core modules.<br>
- Get the libraries for your platform, open the project with Qt Creator, configure and hit Build!
- (You may also use the qmake-make way).<br>
- Please note that QMidiPlayer <i>requires</i> C++11 to build.
+ Checkout <code>INSTALL.md</code> in the project root directory.
<h3 id="ms">Roadmap/Milestones</h3>
<ul>
<li>0.5.x Basic functionality</li>
@@ -46,6 +39,7 @@
<li>0.7.8 Plugin interface, UI refactoring</li>
<li>0.8.x Visualization (the default visualization plugin).</li>
<li>0.8.5+ File reader plugin API, event filter/modifier API. </li>
+ <li>0.8.7 Better external MIDI device support. Simple visualization. </li>
<li>0.9.x API Stablization. Revive lite version.</li>
<li>1.x+ Translation, documentation, Maintaince only.</li>
</ul>
@@ -56,7 +50,7 @@
Visual Studio 2015 Runtime Library</a>.
</p>
<p>
- Nighly builds are compiled with MSVC2017 (using Qt MSVC2015 x86, though). So you need two runtime libraries
+ (Older) Nighly builds are compiled with MSVC2017 (using Qt MSVC2015 x86, though). So you need two runtime libraries
to run it. Damn.
</p>
<p>
@@ -75,19 +69,23 @@
<h4>3. On what platform(s) do you develop this project?</h4>
<p>
Major platforms used:
- <ul>
- <li>Debian GNU/Linux unstable(sid) amd64 on custom machine (i7-2960XM, 16GB RAM, GTX960, X9SCV-QV4)</li>
- <li>Arch Linux amd64 on a Lenovo ThinkPad X1 yoga 1st Gen. (i7-6600U, 16GB RAM, HD520)</li>
- </ul>
- Platforms for building the Windows version:
- <ul>
- <li>Windows 10 Insider Pro on the ThinkPad X1 yoga mentioned above.</li>
- </ul>
+ <ul>
+ <li>Debian GNU/Linux unstable(sid) amd64 on custom machine (i7-2960XM, 16GB RAM, GTX960, X9SCV-QV4)</li>
+ <li>Arch Linux amd64 on a Lenovo ThinkPad X1 yoga 1st Gen. (i7-6600U, 16GB RAM, HD520)</li>
+ </ul>
+ Platforms for building the Windows version:
+ <ul>
+ <li>Windows 10 Insider Pro on the ThinkPad X1 yoga mentioned above.</li>
+ </ul>
</p>
<h4>4. The code is full of shit and has no comment at all!</h4>
<p>
I know. I got pissed off for that everytime.
</p>
+ <h4>5. Do you have any plan to release binaries for macOS?</h4>
+ <p>
+ No.
+ </p>
<h3 id="contact">Contact the author</h3>
<p>
E-mail: chirs241097 'at' gmail 'dot' com<br>
diff --git a/doc/optionsdialog.html b/doc/optionsdialog.html
index 8bbf79b..24a6ca7 100644
--- a/doc/optionsdialog.html
+++ b/doc/optionsdialog.html
@@ -24,15 +24,11 @@
</div>
<div id="content">
<h1>Settings Dialog</h1>
- Settings are stored in $HOME/.config/qmprc<br>
- For Windows users, $HOME refers to X:\Users\&lt;your user name&gt;\.config, where X is the system drive of your
- Windows installation.<br>
- Options with one asterisk will be applied after restarting QMidiPlayer.<br>
+ Options with one asterisk will be applied after QMidiPlayer is restarted.<br>
Options with two asterisks will be applied after the internal fluidsynth is restarted.<br>
Other options are applied immediately.<br>
- <img src="../img/options1.png"><br>
+ <img src="../img/options1.png" width="440"><br>
<ul>
- <li>Default Output Device*: specify the default midi device to use.</li>
<li>Disable Midi Mapping*: only use the default output device.</li>
<li>Send SysEx: whether to send system exclusive messages or not.</li>
<li>Wait for remaining voices before stopping:<br>
@@ -40,8 +36,13 @@
Otherwise it will stop immediately after the last event is sent.
</li>
<li>Text encoding: text encoding used in the midi file.</li>
+ <li>Select MIDI output devices*: Choose the MIDI devices to use for default device selection.<br>
+ When QMidiPlayer starts, selected devices will be examined from top to bottom, the first connected
+ one will be chosen as the default output device.
+ </li>
+ <li>External MIDI output device setup*: set initialzation file for external MIDI devices.</li>
</ul>
- <img src="../img/options2.png"><br>
+ <img src="../img/options2.png" width="440"><br>
<ul>
<li>Audio Driver**: specify the audio backend used by the internal synthesizer.</li>
<li>Audio Buffer Size**: Size per buffer used by the fluidsynth engine. Increase if experiencing audio interruption, decrease if audio is laggy or messed up.</li>
@@ -58,11 +59,12 @@
</li>
<li>(Fallback) Bank Select Mode: the default bank select mode.</li>
</ul>
- <img src="../img/options3.png"><br>
- You can manage soundfont used by the internal fluidsynth engine here.<br>
+ <img src="../img/options3.png" width="440"><br>
+ You can manage a list of soundfonts used by the internal fluidsynth engine here. Unchecked
+ soundfonts will not be used.<br>
If multiple soundfonts provide instruments with the same bank numbers and preset numbers,
the preset provided by the top most soundfont will be used.<br>
- <img src="../img/options4.png"><br>
+ <img src="../img/options4.png" width="440"><br>
<ul>
<li>Restore last playlist on startup*: If checked and QMidiPlayer is started without files
to open, the playlist from the last session will be used instead of an empty playlist.</li>
@@ -77,7 +79,7 @@
<li>Customize toolbar: customize the functionalities shown in the main window.</li>
<li>Customize actions: customize the functionalities shown in the file action menu.</li>
</ul>
- <img src="../img/options5.png"><br>
+ <img src="../img/options5.png" width="440"><br>
Plugin manager. View details of plugins, enable or disable them here.<br>
Enabled plugin list is applied after a restart.<br>
Plugin scanning follows the order below:
diff --git a/doc/plistdialog.html b/doc/plistdialog.html
index 40ef542..3dafcc2 100644
--- a/doc/plistdialog.html
+++ b/doc/plistdialog.html
@@ -24,7 +24,7 @@
</div>
<div id="content">
<h1>Playlist Dialog</h1>
- <img src="../img/playlistw.png"><br>
+ <img src="../img/playlistw.png" width="560"><br>
<h2>Notes</h2>
<ul>
<li>Drag &amp; drop to sort.</li>
diff --git a/doc/troubleshooting.html b/doc/troubleshooting.html
index 184f702..d77e45b 100644
--- a/doc/troubleshooting.html
+++ b/doc/troubleshooting.html
@@ -41,7 +41,12 @@
<h3>3. MIDI timing is messed up.</h3>
<p>
This is a known issue under Windows. Try decreasing audio buffer size and
- increasing audio buffer count.
+ increasing audio buffer count. Also make sure you are not using shitty cabling
+ if you are using external synthesizers.
+ </p>
+ <p>
+ Also also, if you overload your computer (fluidsynth) or synthesizer too much,
+ don't expect the timing would still keep up!
</p>
<h3>4. Some files cannot be played.</h3>
<h3>5. Some soundfonts cannot be loaded.</h3>
@@ -59,7 +64,7 @@
</p>
<h3>8. Bank selecting is incorrect for external devices.</h3>
<p>
- Bank selecting to external devices is sent in raw format. The midi
+ Bank selecting messages are sent to external devices directly. The midi
file may be incompatible with your device.
</p>
<h3>9. 3D visualization is upsidedown/rotated/black/blinking.</h3>
@@ -73,10 +78,29 @@
Devices/drivers reported to have this issue:
<ul>
<li>Intel HD 5500 found in i5-5200U / official Windows driver</li>
- <li>Unknown low-end AMD card / official Windows driver</li>
- <li>Raspberry Pi 2 VC4 / Full KMS OpenGL (GLX)</li>
+ <li>Unknown low-end AMD Oland GPU / official Windows driver</li>
+ <li>Raspberry Pi 2 &amp; 3 VC4 / Full KMS OpenGL (GLX)</li>
</ul>
</p>
+ <h3>10. External devices connected but does not show up.</h3>
+ <p>
+ Always connect your device <b>before</b> launching QMidiPlayer and make
+ sure it is not used by another application.
+ If it still refuses to work, make sure your device is working within
+ some other MIDI applications. If it doesn't, try reinstalling the driver,
+ checking the cables ... even turning it off and on again?
+ </p>
+ <p>
+ If it works in programs other than QMidiPlayer however, you're probably
+ facing a new bug in QMidiPlayer.
+ </p>
+ <h3>11. Tweaking the values in channel editor does nothing.</h3>
+ <p>
+ It depends. Sound modules from different vendors accept different sets
+ of controller messages. As for fluidsynth, it relies on the modulation
+ matrix of the soundfont. Sadly most of the soundfonts floating around
+ on the Internet do not have modulation matrix declared.
+ </p>
</div>
</body>
</html>
diff --git a/doc/version.html b/doc/version.html
index d3b3218..790cedf 100644
--- a/doc/version.html
+++ b/doc/version.html
@@ -26,7 +26,7 @@
<h1>Version information</h1>
<div style="text-align:center;">
<img src="../img/qmidiplyr.png"><br>
- QMidiPlayer documentation for version 0.8.5<br>
+ QMidiPlayer documentation for version 0.8.7<br>
An MIDI player based on fluidsynth and Qt.<br>
Written by Chris Xiong.<br>
</div><br>
diff --git a/doc/visualization.html b/doc/visualization.html
index f482744..3507985 100644
--- a/doc/visualization.html
+++ b/doc/visualization.html
@@ -42,11 +42,6 @@ left | right ← → │ │
| Seek left/right └─────┘
backward (Hold shift to seek 5% instead of 1%)
</pre>
- <h3>Known problems</h3>
- <p>
- In some systems closing and reopening the visualization results in a crash. This is
- due to a dbus-related conflict in SDL and Qt.
- </p>
<h3>Options</h3>
The options listed here are applied after closing and reopening the visualization.
<ul>
diff --git a/img/chanw.png b/img/chanw.png
index 02c7960..71b07e5 100644
--- a/img/chanw.png
+++ b/img/chanw.png
Binary files differ
diff --git a/img/chparaw.png b/img/chparaw.png
index f36a8ca..30d9f8d 100644
--- a/img/chparaw.png
+++ b/img/chparaw.png
Binary files differ
diff --git a/img/effectw.png b/img/effectw.png
index 2f5a419..de7370f 100644
--- a/img/effectw.png
+++ b/img/effectw.png
Binary files differ
diff --git a/img/mainw.png b/img/mainw.png
index 6d88937..1ffc4c9 100644
--- a/img/mainw.png
+++ b/img/mainw.png
Binary files differ
diff --git a/img/options1.png b/img/options1.png
index aa9304a..69f4dad 100644
--- a/img/options1.png
+++ b/img/options1.png
Binary files differ
diff --git a/img/options2.png b/img/options2.png
index 339416e..b11a92a 100644
--- a/img/options2.png
+++ b/img/options2.png
Binary files differ
diff --git a/img/options3.png b/img/options3.png
index b8fc3ba..0619b1f 100644
--- a/img/options3.png
+++ b/img/options3.png
Binary files differ
diff --git a/img/options4.png b/img/options4.png
index 1cf39c8..5a5f96d 100644
--- a/img/options4.png
+++ b/img/options4.png
Binary files differ
diff --git a/img/options5.png b/img/options5.png
index 2ae303f..e8eb3d0 100644
--- a/img/options5.png
+++ b/img/options5.png
Binary files differ
diff --git a/img/playlistw.png b/img/playlistw.png
index 668318c..222b0bf 100644
--- a/img/playlistw.png
+++ b/img/playlistw.png
Binary files differ
diff --git a/qmidiplayer-desktop/CMakeLists.txt b/qmidiplayer-desktop/CMakeLists.txt
index 9b488e2..a9b6bf1 100644
--- a/qmidiplayer-desktop/CMakeLists.txt
+++ b/qmidiplayer-desktop/CMakeLists.txt
@@ -51,6 +51,9 @@ include_directories(${fluidsynth_INCLUDE_DIRS})
include_directories(${rtmidi_INCLUDE_DIRS})
include_directories(${PROJECT_SOURCE_DIR}/include/)
+cmake_host_system_information(RESULT build_host QUERY HOSTNAME)
+add_definitions(-DBUILD_MACHINE=${build_host})
+
add_executable(qmidiplayer
${qmpdesktop_SOURCES}
)