From 4d758ff5be8caa8ee0f148cbd7983609331def1e Mon Sep 17 00:00:00 2001 From: Florian Streibelt Date: Mon, 1 Mar 2021 19:28:07 +0100 Subject: [PATCH 01/14] fixing the automap color values for upper row of LEDs --- launchpad_py/launchpad.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/launchpad_py/launchpad.py b/launchpad_py/launchpad.py index dd8abed..2da2104 100644 --- a/launchpad_py/launchpad.py +++ b/launchpad_py/launchpad.py @@ -511,12 +511,12 @@ def LedCtrlAutomap( self, number, red, green ): if number < 0 or number > 7: return - red = min( 0, red ) - red = max( 7, red ) - green = min( 0, green ) - green = max( 7, green ) + red = max( 0, red ) + red = min( 3, red ) + green = max( 0, green ) + green = min( 3, green ) led = self.LedGetColor( red, green ) - + self.midi.RawWrite( 176, 104 + number, led ) From b569c226c52eeadad3f8cd49cb4bbe161096551a Mon Sep 17 00:00:00 2001 From: FMMT666 Date: Fri, 23 Apr 2021 23:53:15 +0200 Subject: [PATCH 02/14] added Mk1 link to driver --- README.md | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 5ef62d2..33c48af 100644 --- a/README.md +++ b/README.md @@ -28,7 +28,7 @@ Now with full [Midi Fighter 64][23] support (8/2020). Finally! Hehe, say hello to the [Mk3 Pro][24] (8/2020) --- -## STATUS 2021/01/xx: +## STATUS 2021/04/xx: ### Devices @@ -86,6 +86,9 @@ Successfully tested with Ubuntu 18.04-LTS+. Requires compiling your own PyGame t --- ## NEWS +### CHANGES 2021/04/XX: + - added link to driver for Mk1 Launchpad and Mini + ### CHANGES 2021/01/XX: - fix for Python 3.9 - updated documentation for raw LED and button codes (top row had wrong values) @@ -755,6 +758,11 @@ name it once shipped the first red/green LED with! ### For Launchpad Mk1 users (the original "Classic" Launchpad): + Also valid for the Mk1 Mini. + + (Most likely still) requires an USB driver for Windoze (7/10/...). + Look out for the Novation [USB Driver 2.xx][26]. + USE CLASS "Launchpad": lp = launchpad.Launchpad() @@ -3175,3 +3183,4 @@ FMMT666(ASkr) [23]: https://twitter.com/FMMT666/status/1299842680533463043 [24]: https://twitter.com/FMMT666/status/1299478117497688073 [25]: https://www.midifighter.com/ +[26]: https://customer.novationmusic.com/en/support/downloads?brand=Novation&product_by_type=510&download_type=all From 33c2f497afa161887a6cc0440307411fcf2beff4 Mon Sep 17 00:00:00 2001 From: FMMT666 Date: Sun, 25 Apr 2021 01:55:05 +0200 Subject: [PATCH 03/14] added fix note --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 33c48af..cbda67e 100644 --- a/README.md +++ b/README.md @@ -88,6 +88,7 @@ Successfully tested with Ubuntu 18.04-LTS+. Requires compiling your own PyGame t ### CHANGES 2021/04/XX: - added link to driver for Mk1 Launchpad and Mini + - fixed Mk1 Automap buttons always yellow; thx to mutax and Ferada ### CHANGES 2021/01/XX: - fix for Python 3.9 From 1f51f5db0df2bb9dc4a0ab3eccd8a3f006eb1a2c Mon Sep 17 00:00:00 2001 From: Jean-Marie Favreau Date: Sun, 2 May 2021 19:37:31 +0200 Subject: [PATCH 04/14] Fix a script in case using a Luanchpad midi --- examples/buttons_raw.py | 1 + 1 file changed, 1 insertion(+) diff --git a/examples/buttons_raw.py b/examples/buttons_raw.py index 346d2d4..2602836 100644 --- a/examples/buttons_raw.py +++ b/examples/buttons_raw.py @@ -81,6 +81,7 @@ def main(): mode = "F64" else: + lp = launchpad.Launchpad() if lp.Open(): print("Launchpad Mk1/S/Mini") mode = "Mk1" From f497ff2dacdf9099b675c3dd2453f0932a89c342 Mon Sep 17 00:00:00 2001 From: FMMT666 Date: Thu, 6 May 2021 23:59:49 +0200 Subject: [PATCH 05/14] added Midi Fighter 3D snippets --- README.md | 6 ++ examples/buttons_raw.py | 10 ++- launchpad_py/launchpad.py | 130 +++++++++++++++++++++++++++++++++++++- 3 files changed, 143 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index cbda67e..21a6631 100644 --- a/README.md +++ b/README.md @@ -56,6 +56,8 @@ Finally! Hehe, say hello to the [Mk3 Pro][24] (8/2020) Midi Fighter 64 - class "MidiFighter64" LEDs and buttons + Midi Fighter 3D - class "MidiFighter63D IN WORK + > PRO MK3 USERS: > You need to disable the Launchpad's "Transmit Clock" in the MIDI settings! @@ -86,6 +88,10 @@ Successfully tested with Ubuntu 18.04-LTS+. Requires compiling your own PyGame t --- ## NEWS +### CHANGES 2021/05/XX: + - fixed Launchpad Mk1 code in buttons_raw.py demo; thx to jmtrivial + - added first Midi Mighter 3D code + ### CHANGES 2021/04/XX: - added link to driver for Mk1 Launchpad and Mini - fixed Mk1 Automap buttons always yellow; thx to mutax and Ferada diff --git a/examples/buttons_raw.py b/examples/buttons_raw.py index 2602836..e17b81d 100644 --- a/examples/buttons_raw.py +++ b/examples/buttons_raw.py @@ -2,10 +2,10 @@ # # Quick button test. # Works with these Launchpads: Mk1, Mk2, Mini Mk3, S/Mini, Pro, Pro Mk3 -# And these: Midi Figther 64 +# And these: Midi Fighter 64, Mifi Fighter 3D # # -# FMMT666(ASkr) 7/2013..8/2020 +# FMMT666(ASkr) 7/2013..5/2021 # www.askrprojects.net # @@ -80,6 +80,12 @@ def main(): print("Midi Fighter 64") mode = "F64" + elif launchpad.MidiFighter3D().Check( 0 ): + lp = launchpad.MidiFighter3D() + if lp.Open( 0 ): + print("Midi Fighter 3D") + mode = "F3D" + else: lp = launchpad.Launchpad() if lp.Open(): diff --git a/launchpad_py/launchpad.py b/launchpad_py/launchpad.py index 2da2104..af42ae1 100644 --- a/launchpad_py/launchpad.py +++ b/launchpad_py/launchpad.py @@ -4,7 +4,7 @@ # # https://github.com/FMMT666/launchpad.py # -# FMMT666(ASkr) 01/2013..09/2019..08/2020..01/2021 +# FMMT666(ASkr) 01/2013..09/2019..08/2020..05/2021 # www.askrprojects.net # # @@ -3096,6 +3096,134 @@ def Reset( self ): +######################################################################################## +### CLASS MidiFighter3D +### +### For Midi Fighter 3D Gedöns +######################################################################################## +class MidiFighter3D( LaunchpadBase ): + + # + # LED AND BUTTON NUMBERS IN RAW MODE + # + # +---+---+---+---+ + # | XX| | | XX| + # +---+ +---+---+---+---+ +---+ + # | XX| | XX| | | XX| |XX | + # | XX| +---+---+---+---+ |XX | + # | XX| | XX| | | XX| |XX | + # +---+ +---+---+---+---+ +---+ + # | XX| | | XX| + # +---+---+---+---+ + # +---+---+---+---+ + # | XX| | | XX| + # +---+---+---+---+ + # + # + # LED AND BUTTON NUMBERS IN XY MODE (X/Y) + # + # +---+---+---+---+ + # | XX| | | XX| + # +---+ +---+---+---+---+ +---+ + # | XX| | XX| | | XX| |XX | + # | XX| +---+---+---+---+ |XX | + # | XX| | XX| | | XX| |XX | + # +---+ +---+---+---+---+ +---+ + # | XX| | | XX| + # +---+---+---+---+ + # +---+---+---+---+ + # | XX| | | XX| + # +---+---+---+---+ + + + #------------------------------------------------------------------------------------- + #-- Add some LED mode "constants" for better usability. + #------------------------------------------------------------------------------------- + def __init__( self ): + + # TODO TODO TODO + + self.MODE_BRIGHT = [ i+18 for i in range(16) ] + self.MODE_TOGGLE = [ i+34 for i in range(8) ] + self.MODE_PULSE = [ i+42 for i in range(8) ] + self.MODE_ANIM_SQUARE = 50 + self.MODE_ANIM_CIRCLE = 51 + self.MODE_ANIM_STAR = 52 + self.MODE_ANIM_TRIANGLE = 53 + + super( MidiFighter3D, self ).__init__( ) + + + + #------------------------------------------------------------------------------------- + #-- Opens one of the attached Launchpad MIDI devices. + #-- Uses search string "Fighter 3D", by default. + #------------------------------------------------------------------------------------- + # Overrides "LaunchpadBase" method + def Open( self, number = 0, name = "Fighter 3D" ): + return super( MidiFighter3D, self ).Open( number = number, name = name ) + + + #------------------------------------------------------------------------------------- + #-- Checks if a device exists, but does not open it. + #-- Does not check whether a device is in use or other, strange things... + #-- Uses search string "Fighter 3D64", by default. + #------------------------------------------------------------------------------------- + # Overrides "LaunchpadBase" method + def Check( self, number = 0, name = "Fighter 3D" ): + return super( MidiFighter3D, self ).Check( number = number, name = name ) + + + #------------------------------------------------------------------------------------- + #-- Returns the raw value of the last button change (pressed/unpressed) as a list + #-- [