Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Ver3.6.0 #27

Merged
merged 51 commits into from
Dec 22, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
51 commits
Select commit Hold shift + click to select a range
8f5a94b
add Aeolian 176-note tracker bar prototype
nai-kon Nov 9, 2024
6b4dbc0
add Aeolian176-note control holes
nai-kon Nov 9, 2024
41f314a
update Duo-Art Organ tracker bar
nai-kon Nov 9, 2024
56ea755
seto tempo lower limit to 30
nai-kon Nov 10, 2024
6c8a2fd
add stop control
nai-kon Nov 13, 2024
ce13d3a
add expression shade control
nai-kon Nov 15, 2024
c7c16ef
update expression shade control
nai-kon Nov 15, 2024
a9fa74b
refactoring
nai-kon Nov 16, 2024
faaddca
fix pedal error etc
nai-kon Nov 16, 2024
1bbeaa7
update Aeolian 176-note config file
nai-kon Nov 16, 2024
765bcf1
refactoring
nai-kon Nov 17, 2024
fdb9ad1
update expression shade volume value
nai-kon Nov 22, 2024
2311c1f
fix toggle switch chattering
nai-kon Nov 23, 2024
e8d4745
fix spool diameter of Aeolian 176-note and change config name
nai-kon Nov 24, 2024
70304a0
fix pedal note and extension operation
nai-kon Nov 24, 2024
64303a6
add shade perforation error correction, refactoring
nai-kon Nov 24, 2024
82c3c74
change directory name of tracker bar source
nai-kon Nov 26, 2024
7235f66
change stop controls to use control change event
nai-kon Nov 27, 2024
424e455
fix pedal/note extension, etc
nai-kon Nov 29, 2024
1c45127
WIP, add Aeolian 176-note stop indicator
nai-kon Dec 3, 2024
c361864
WIP add Aeolian 176-note stop indicator
nai-kon Dec 4, 2024
67159a1
WIP add Aeolian 176-note stop indicator
nai-kon Dec 4, 2024
0d3ca7c
WIP add Aeolian 176-note stop indicator
nai-kon Dec 5, 2024
3ce9212
WIP add Aeolian 176-note stop indicator
nai-kon Dec 8, 2024
e7a0b48
WIP add midi output assignment document
nai-kon Dec 11, 2024
bd4c3d7
refactoring
nai-kon Dec 13, 2024
d98d861
change start/end padding of CIS
nai-kon Dec 13, 2024
15a8a09
refactoring
nai-kon Dec 13, 2024
81e9aa6
update url of Aeolian 176note MIDI assignment page
nai-kon Dec 14, 2024
afd7447
update README
nai-kon Dec 14, 2024
42a0792
refactoring
nai-kon Dec 14, 2024
8d74874
fix adjust cis dialog sometime protrudes the screen
nai-kon Dec 14, 2024
aaa6e4e
hide manual expression panel with Aeolian 176note
nai-kon Dec 14, 2024
00f9e87
refactoring
nai-kon Dec 17, 2024
ee745dc
fix segfault when decoding broken CIS
nai-kon Dec 17, 2024
6f0adcf
update README image
nai-kon Dec 17, 2024
25cb48b
refactoring
nai-kon Dec 17, 2024
947543e
refactoring
nai-kon Dec 20, 2024
2637a66
Fix Welte Mignon sforzando etc
nai-kon Dec 20, 2024
924a54e
delete unused files
nai-kon Dec 20, 2024
5c02f15
Merge commit 'e9810768d494ac312ea4a847866649887f43c2cb' into Aeolian_…
nai-kon Dec 20, 2024
3cfe9f7
update version, refactoring
nai-kon Dec 21, 2024
a41ebb4
refactoring
nai-kon Dec 21, 2024
dff2652
add unittest of Welte Licensee and Themodist e-valve
nai-kon Dec 21, 2024
8698a4b
add save cis as png image button
nai-kon Dec 21, 2024
df863d9
update sample scans
nai-kon Dec 21, 2024
723e9aa
update MIDI out assignment page
nai-kon Dec 21, 2024
80e7ef5
refactoring
nai-kon Dec 21, 2024
8f07e43
update README and sample scan
nai-kon Dec 22, 2024
dfbe653
update year of version info
nai-kon Dec 22, 2024
4a28ab2
add busy cursor on CIS to PNG conversion
nai-kon Dec 22, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
{
"cSpell.ignoreWords": [
"Colour",
"mido"
"mido",
"curtime"
],
"python.testing.pytestArgs": [
"test"
Expand Down
29 changes: 15 additions & 14 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,18 +1,17 @@
# PlaySK Piano Roll Reader Ver3.5
# PlaySK Piano Roll Reader Ver3.6

Optically reading a piano roll image, emulates expression and output midi signal in real-time.

![Overall System](./assets/Overall_System.webp)

The "virtual tracker bar" optically picks up roll holes then emulates note, pedal and expression code. The expression code is decoded to vacuum level (in inches of water) in real-time, then convert to MIDI velocity.
The "Virtual Tracker Bar" optically picks up roll holes then emulates note, pedal and expression code. The expression code is decoded to vacuum level (in inches of water) in real-time, then convert to MIDI velocity.

Currently, 9 virtual tracker bars are available.
- Aeolian 176-note Duo-Art Pipe Organ ([MIDI output assignment](https://playsk-aeolian176note-midi-assignment.pages.dev/))
- Standard 88-note
- Ampico B
- Duo-Art
- Welte-Mignon Licensee
- Welte-Mignon T-98 (Green)
- Welte-Mignon T-100 (Red)
- Welte-Mignon T-100 (Red) / T-98 (Green) / Licensee
- Philipps Duca (no expression. experimental)
- Recordo version A / B
- Artecho
Expand All @@ -21,9 +20,7 @@ Currently, 9 virtual tracker bars are available.

In the future, Ampico A will be supported.

Support image formats are `.cis`, `.jpg`, `.tif`, `.png`, `.bmp`.

`.cis` supports various scanners such as stepper, wheel/shaft encoder, bi-color, twin-array.
Support image formats are `.CIS`, `.jpg`, `.tif`, `.png`, `.bmp`. The `.CIS` supports various scanners such as stepper, wheel/shaft encoder, bi-color, twin-array.

## Demo

Expand All @@ -33,6 +30,9 @@ Support image formats are `.cis`, `.jpg`, `.tif`, `.png`, `.bmp`.
- Reading a Red Welte T-100 roll with Software Synthesizer
https://www.youtube.com/watch?v=WMEPW-UWhSU

- Reading an Aeolian 176-note Pipe Organ roll with Hauptwerk virtual organ
https://www.youtube.com/watch?v=N0Gm2g1ADjk

## Donation

I personally pay near $100 a year to codesign and notarize software for distribution. Your support greatly contributes to the continuous development and improvement of the Software. Please consider donating.
Expand All @@ -57,12 +57,13 @@ If you check `☑ Manual Expression`, you can express dynamics using the keyboar

## Tips
* The program picks up lighted holes of image.
* Automatically set the tempo if the input filename has the tempo keyword (except .cis)
* e.g.) `Ampico 52305 Clair de Lune tempo90.jpg` -> set the tempo to 90 automatically.
* If no keyword is given, the default tempo is set. 98 for the Welte T-100 and 80 for the others.
* Associate the program with .cis on right-click menu, you can run app by double-clicking .cis file.
* The roll acceleration emulating is done by spool diameter and roll thickness.
* The roll scrolling direction is downward. So the Welte T-100 image should be inverted.
* The vacuum level is emulated in inches of water and later converted to MIDI velocity.
* The roll acceleration is emulated by spool diameter and roll thickness.
* The roll tempo is automatically set.
* CIS images... from CIS header.
* Other images... from .ANN file if exists. Or from filename such as `Ampico 52305 Clair de Lune tempoXX.jpg`.
* Associate the program with .CIS on right-click menu, you can run app by double-clicking .CIS file.
* The roll scrolling direction is always downward. So the Welte T-100 image should be inverted.

# For developers

Expand Down
274 changes: 274 additions & 0 deletions assets/Aeolian_176note_MIDI_setting.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,274 @@
<html>
<style type="text/css">
td,th {border: 1px solid #cccccc;}
th {background-color: rgb(226,232,240);}
table {border-collapse: collapse;}
</style>

<p>PlaySK Piano Roll Reader</p>
<h1>Aeolian 176-note tracker bar<br>
MIDI Output Assignment</h1>

<table>
<tr>
<th>Control</th>
<th>MIDI<br>channel</th>
<th>MIDI<br>note number</th>
<th>MIDI<br>control change</th>
<th>MIDI<br>value</th>
<th>supplement</th>
</tr>
<tr>
<td>Swell Notes</td>
<td>1</td>
<td>36-96</td>
<td>-</td>
<td>-</td>
<td>61 notes</td>
</tr>
<tr>
<td>Great Notes</td>
<td>2</td>
<td>36-96</td>
<td>-</td>
<td>-</td>
<td>61 notes</td>
</tr>
<tr>
<td>Pedal Notes</td>
<td>3</td>
<td>36-67</td>
<td>-</td>
<td>-</td>
<td>32 notes</td>
</tr>
<tr>
<td>Swell Expression Shade</td>
<td rowspan="37" colspan="1">4</td>
<td>-</td>
<td>14</td>
<td>30-127</td>
<td rowspan="2" colspan="1">30 is fully closed.<br>127 is fully opened.</td>
</tr>
<tr>
<td>Great Expression Shade</td>
<td>-</td>
<td>15</td>
<td>30-127</td>
</tr>
<tr>
<td>Echo</td>
<td>-</td>
<td rowspan="35" colspan="1">20:ON<br>110:OFF<br><br>For Hauptwerk virtual organ, corresponds to<br>"Notation stop or hold-piston; CC20=on, CC110=off"</td>
<td>0</td>
<td>Echo couples the Ehco division to upper holes and releases Swell. This is not implemented yet.</td>
</tr>
<tr>
<td>Swell Chimes</td>
<td>-</td>
<td>1</td>
<td></td>
</tr>
<tr>
<td>Swell Tremolo</td>
<td>-</td>
<td>2</td>
<td></td>
</tr>
<tr>
<td>Swell Harp</td>
<td>-</td>
<td>3</td>
<td></td>
</tr>
<tr>
<td>Swell Trumpet</td>
<td>-</td>
<td>4</td>
<td></td>
</tr>
<tr>
<td>Swell Oboe</td>
<td>-</td>
<td>5</td>
<td></td>
</tr>
<tr>
<td>Swell Vox Humana</td>
<td>-</td>
<td>6</td>
<td></td>
</tr>
<tr>
<td>Swell Diapason mf</td>
<td>-</td>
<td>7</td>
<td></td>
</tr>
<tr>
<td>Swell Flute 16</td>
<td>-</td>
<td>8</td>
<td></td>
</tr>
<tr>
<td>Swell Flute 4</td>
<td>-</td>
<td>9</td>
<td></td>
</tr>
<tr>
<td>Swell Flute p</td>
<td>-</td>
<td>10</td>
<td></td>
</tr>
<tr>
<td>Swell String Vibrato f</td>
<td>-</td>
<td>11</td>
<td></td>
</tr>
<tr>
<td>Swell String f</td>
<td>-</td>
<td>12</td>
<td></td>
</tr>
<tr>
<td>Swell String mf</td>
<td>-</td>
<td>13</td>
<td></td>
</tr>
<tr>
<td>Swell String p</td>
<td>-</td>
<td>14</td>
<td></td>
</tr>
<tr>
<td>Swell String pp</td>
<td>-</td>
<td>15</td>
<td></td>
</tr>
<tr>
<td>Swell Soft Chimes</td>
<td>-</td>
<td>17</td>
<td></td>
</tr>
<tr>
<td>Great Tremolo</td>
<td>-</td>
<td>18</td>
<td></td>
</tr>
<tr>
<td>Tonal</td>
<td>-</td>
<td>19</td>
<td>Tonal turns on most stops. This is not implemented yet.</td>
</tr>
<tr>
<td>Great Harp</td>
<td>-</td>
<td>20</td>
<td></td>
</tr>
<tr>
<td>Pedal Bassoon 16</td>
<td>-</td>
<td>24</td>
<td></td>
</tr>
<tr>
<td>Pedal String 16</td>
<td>-</td>
<td>25</td>
<td></td>
</tr>
<tr>
<td>Pedal Flute f16</td>
<td>-</td>
<td>26</td>
<td></td>
</tr>
<tr>
<td>Pedal Flute p16</td>
<td>-</td>
<td>27</td>
<td></td>
</tr>
<tr>
<td>Great String pp</td>
<td>-</td>
<td>28</td>
<td></td>
</tr>
<tr>
<td>Great String p</td>
<td>-</td>
<td>29</td>
<td></td>
</tr>
<tr>
<td>Great String f</td>
<td>-</td>
<td>30</td>
<td></td>
</tr>
<tr>
<td>Great Flute p</td>
<td>-</td>
<td>31</td>
<td></td>
</tr>
<tr>
<td>Great Flute f</td>
<td>-</td>
<td>32</td>
<td></td>
</tr>
<tr>
<td>Great Flute 4</td>
<td>-</td>
<td>33</td>
<td></td>
</tr>
<tr>
<td>Great Diapason f</td>
<td>-</td>
<td>34</td>
<td></td>
</tr>
<tr>
<td>Great Piccolo</td>
<td>-</td>
<td>35</td>
<td></td>
</tr>
<tr>
<td>Great Clarinet</td>
<td>-</td>
<td>36</td>
<td></td>
</tr>
<tr>
<td>Great Trumpet</td>
<td>-</td>
<td>37</td>
<td></td>
</tr>
<tr>
<td>Great Chime Damper</td>
<td>-</td>
<td>38</td>
<td></td>
</tr>
</table>

<p>Katz Sasaki<br>14 Dec 2024</p>
<a href="https://github.com/nai-kon/PlaySK-Piano-Roll-Reader">PlaySK Piano Roll Reader</a>
</html>
Binary file modified assets/How to use Mac.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file removed assets/Overall_System.jpg
Binary file not shown.
Binary file modified assets/Overall_System.webp
Binary file not shown.
Binary file removed assets/dmg-bg.png
Binary file not shown.
Binary file removed assets/dmg-bgx2.png
Binary file not shown.
3 changes: 2 additions & 1 deletion build_mac.sh
Original file line number Diff line number Diff line change
Expand Up @@ -18,4 +18,5 @@ pip-licenses --format=plain-vertical --with-license-file --no-license-path --out
# copy files
cp -p "3rd-party-license.txt" dist/
cp -p "assets/How to use Mac.png" dist/
cp -pr src/playsk_config/ dist/playsk_config/
cp -pr src/playsk_config/ dist/playsk_config/
cp -p "assets/Aeolian_176note_MIDI_setting.html" dist/
2 changes: 1 addition & 1 deletion build_mac.spec
Original file line number Diff line number Diff line change
Expand Up @@ -46,5 +46,5 @@ app = BUNDLE(
name='PlaySK Piano Roll Reader.app',
icon='src/playsk_config/PlaySK_icon.ico',
bundle_identifier=None,
version='3.5.2'
version='3.6.0'
)
3 changes: 2 additions & 1 deletion build_win.bat
Original file line number Diff line number Diff line change
Expand Up @@ -18,4 +18,5 @@ pip-licenses --format=plain-vertical --with-license-file --no-license-path --out
rem copy files
xcopy /i /y "3rd-party-license.txt" ".\dist\PlaySK Piano Roll Reader\"
xcopy /i /y ".\assets\How to use.png" ".\dist\PlaySK Piano Roll Reader\"
xcopy /s /i /y ".\src\playsk_config\" ".\dist\PlaySK Piano Roll Reader\playsk_config\"
xcopy /s /i /y ".\src\playsk_config\" ".\dist\PlaySK Piano Roll Reader\playsk_config\"
xcopy /i /y ".\assets\Aeolian_176note_MIDI_setting.html" ".\dist\PlaySK Piano Roll Reader\"
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[tool.poetry]
name = "PlaySK-Piano-Roll-Reader"
version = "3.5.2"
version = "3.6.0"
description = "Optically reading a piano roll image, emulates expression and output midi signal in real-time."
authors = ["nai-kon <fxtch686@yahoo.co.jp>"]
readme = "README.md"
Expand Down
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file removed sample_scans/Ampico B 68711 To Spring tempo100.png
Binary file not shown.
Binary file not shown.
Loading