-
Notifications
You must be signed in to change notification settings - Fork 3
/
__init__.py
75 lines (56 loc) · 3.65 KB
/
__init__.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
# MIT License
# Copyright (c) 2024 Pablo Peral
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
# The above copyright notice and this permission notice shall be included in all
# copies or substantial portions of the Software.
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.
"""
Python package for the FL Studio MIDI API to take advantage of the MIDI mode of the Native Instruments Host
Integration Agent protocol and use the DAW integration mode of Komplete Kontrol keyboards.
"""
# List of submodules
__all__ = ["buttons", "mixer"]
import device
###########################################################################################################################################
# Dictionaries and constants
###########################################################################################################################################
# List of bytes that every SysEx message for the keyboard begins with
SYSEX_HEADER = [240, 0, 33, 9, 0, 0, 68, 67, 1, 0]
###########################################################################################################################################
# Methods and functions
###########################################################################################################################################
# Method to make talking to the device less annoying
# All the messages the device is expecting have a structure of "BF XX XX"
# The STATUS byte always stays the same and only the DATA1 and DATA2 vary
def dataOut(data1: int or hex, data2: int or hex):
""" Function for easing the communication with the device. By just entering the DATA1 and DATA2 bytes of the MIDI message that has to be sent to the device, it
composes the full message in order to satisfy the syntax required by the midiOutSysex method,
as well as setting the STATUS of the message to BF as expected and sends the message.
data1, data2 -- Corresponding bytes of the MIDI message."""
# Composes the MIDI message and sends it
device.midiOutMsg(191, 0, data1, data2)
# Method to enable the deep integration features on the device
def handShake():
""" Acknowledges the device that a compatible host has been launched, wakes it up from MIDI mode and activates the deep
integration features of the device. TODO: Then waits for the answer of the device in order to confirm if the handshake
was successful and returns True if affirmative."""
# Sends the MIDI message that initiates the handshake: BF 01 01
dataOut(1, 3)
# TODO: Waits and reads the handshake confirmation message
# Method to deactivate the deep integration mode. Intended to be executed on close.
def goodBye():
""" Sends the goodbye message to the device and exits it from deep integration mode.
Intended to be executed before FL Studio closes."""
# Sends the goodbye message: BF 02 01
dataOut(2, 1)