reaper-osc 0.2.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -21
- package/README.md +31 -35
- package/dist/Fx.d.ts +72 -72
- package/dist/Fx.js +136 -136
- package/dist/Handlers.d.ts +62 -62
- package/dist/Handlers.js +156 -156
- package/dist/Messages.d.ts +70 -70
- package/dist/Messages.js +115 -115
- package/dist/Notify.d.ts +29 -28
- package/dist/Notify.js +63 -63
- package/dist/Notify.js.map +1 -1
- package/dist/Reaper.d.ts +95 -93
- package/dist/Reaper.js +246 -216
- package/dist/Reaper.js.map +1 -1
- package/dist/Tracks.d.ts +136 -136
- package/dist/Tracks.js +293 -293
- package/dist/Transport.d.ts +57 -57
- package/dist/Transport.js +137 -137
- package/dist/index.d.ts +15 -14
- package/dist/index.js +26 -26
- package/package.json +54 -53
package/dist/Reaper.js
CHANGED
|
@@ -1,217 +1,247 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
5
|
-
}) : (function(o, m, k, k2) {
|
|
6
|
-
if (k2 === undefined) k2 = k;
|
|
7
|
-
o[k2] = m[k];
|
|
8
|
-
}));
|
|
9
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
10
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
11
|
-
}) : function(o, v) {
|
|
12
|
-
o["default"] = v;
|
|
13
|
-
});
|
|
14
|
-
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
15
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
16
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
17
|
-
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
18
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
19
|
-
};
|
|
20
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
21
|
-
if (mod && mod.__esModule) return mod;
|
|
22
|
-
var result = {};
|
|
23
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
24
|
-
__setModuleDefault(result, mod);
|
|
25
|
-
return result;
|
|
26
|
-
};
|
|
27
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
28
|
-
exports.ReaperConfiguration = exports.Reaper = void 0;
|
|
29
|
-
/**
|
|
30
|
-
* Contains classes for controlling Reaper via OSC
|
|
31
|
-
* @module
|
|
32
|
-
*/
|
|
33
|
-
const Messages_1 = require("./Messages");
|
|
34
|
-
const Tracks_1 = require("./Tracks");
|
|
35
|
-
const Transport_1 = require("./Transport");
|
|
36
|
-
const osc = __importStar(require("osc"));
|
|
37
|
-
const Handlers_1 = require("./Handlers");
|
|
38
|
-
const Notify_1 = require("./Notify");
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
*
|
|
42
|
-
*
|
|
43
|
-
*
|
|
44
|
-
*
|
|
45
|
-
*
|
|
46
|
-
*
|
|
47
|
-
*
|
|
48
|
-
*
|
|
49
|
-
*
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
this.
|
|
56
|
-
this.
|
|
57
|
-
this.
|
|
58
|
-
this.
|
|
59
|
-
this.
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
this.
|
|
70
|
-
this.
|
|
71
|
-
this.
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
this.
|
|
97
|
-
}
|
|
98
|
-
/**
|
|
99
|
-
*
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
this._osc.
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
}
|
|
169
|
-
this.
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
this.
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
5
|
+
}) : (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
o[k2] = m[k];
|
|
8
|
+
}));
|
|
9
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
10
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
11
|
+
}) : function(o, v) {
|
|
12
|
+
o["default"] = v;
|
|
13
|
+
});
|
|
14
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
15
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
16
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
17
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
18
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
19
|
+
};
|
|
20
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
21
|
+
if (mod && mod.__esModule) return mod;
|
|
22
|
+
var result = {};
|
|
23
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
24
|
+
__setModuleDefault(result, mod);
|
|
25
|
+
return result;
|
|
26
|
+
};
|
|
27
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
28
|
+
exports.ReaperConfiguration = exports.Reaper = void 0;
|
|
29
|
+
/**
|
|
30
|
+
* Contains classes for controlling Reaper via OSC
|
|
31
|
+
* @module
|
|
32
|
+
*/
|
|
33
|
+
const Messages_1 = require("./Messages");
|
|
34
|
+
const Tracks_1 = require("./Tracks");
|
|
35
|
+
const Transport_1 = require("./Transport");
|
|
36
|
+
const osc = __importStar(require("osc"));
|
|
37
|
+
const Handlers_1 = require("./Handlers");
|
|
38
|
+
const Notify_1 = require("./Notify");
|
|
39
|
+
/**
|
|
40
|
+
* Allows control of an instance of Reaper via OSC.
|
|
41
|
+
*
|
|
42
|
+
* @example
|
|
43
|
+
* ```typescript
|
|
44
|
+
* // Create an instance of Reaper using default settings
|
|
45
|
+
* const reaper = new Reaper();
|
|
46
|
+
* // Start OSC
|
|
47
|
+
* reaper.startOsc();
|
|
48
|
+
* // Give the port a chance to open, then tell Reaper to start playback
|
|
49
|
+
* setTimeout(() => {reaper.transport.play();}, 100);
|
|
50
|
+
*```
|
|
51
|
+
*/
|
|
52
|
+
let Reaper = class Reaper {
|
|
53
|
+
constructor(config = new ReaperConfiguration()) {
|
|
54
|
+
this._isMetronomeEnabled = false;
|
|
55
|
+
this._handlers = [];
|
|
56
|
+
this._isReady = false;
|
|
57
|
+
this._tracks = [];
|
|
58
|
+
this._transport = new Transport_1.Transport(message => this.sendOscMessage(message));
|
|
59
|
+
this._osc = new osc.UDPPort({
|
|
60
|
+
localAddress: config.localAddress,
|
|
61
|
+
localPort: config.localPort,
|
|
62
|
+
remoteAddress: config.remoteAddress,
|
|
63
|
+
remotePort: config.remotePort,
|
|
64
|
+
broadcast: true,
|
|
65
|
+
metadata: true,
|
|
66
|
+
});
|
|
67
|
+
this._afterMessageReceived = config.afterMessageReceived;
|
|
68
|
+
this._log = config.log;
|
|
69
|
+
this.initOsc();
|
|
70
|
+
this.initHandlers();
|
|
71
|
+
this._masterTrack = new Tracks_1.Track(0, config.numberOfFx, message => this.sendOscMessage(message));
|
|
72
|
+
for (let i = 0; i < config.numberOfTracks; i++) {
|
|
73
|
+
this._tracks[i] = new Tracks_1.Track(i + 1, config.numberOfFx, message => this.sendOscMessage(message));
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
/** Indicates whether the metronome is enabled */
|
|
77
|
+
get isMetronomeEnabled() {
|
|
78
|
+
return this._isMetronomeEnabled;
|
|
79
|
+
}
|
|
80
|
+
/** Indicates whether OSC is ready to send and receive messages */
|
|
81
|
+
get isReady() {
|
|
82
|
+
return this._isReady;
|
|
83
|
+
}
|
|
84
|
+
/** The master track */
|
|
85
|
+
get master() {
|
|
86
|
+
return this._masterTrack;
|
|
87
|
+
}
|
|
88
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
89
|
+
onPropertyChanged(property, callback) {
|
|
90
|
+
throw new Error('not implemented');
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Triggers the action `Control surface: Refresh all surfaces` (Command ID: 41743)
|
|
94
|
+
*/
|
|
95
|
+
refreshControlSurfaces() {
|
|
96
|
+
this.triggerAction(41743);
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Send a message to Reaper via OSC. Messages may not be sent while {@link Reaper.isReady} is false.
|
|
100
|
+
* @param message The OSC message to be sent
|
|
101
|
+
*/
|
|
102
|
+
sendOscMessage(message) {
|
|
103
|
+
if (!this._isReady) {
|
|
104
|
+
throw new Error("Can't send while OSC is not ready");
|
|
105
|
+
}
|
|
106
|
+
this._osc.send(message);
|
|
107
|
+
this._log('debug', 'OSC Message sent', message);
|
|
108
|
+
}
|
|
109
|
+
/** Open the OSC port and start listening for messages */
|
|
110
|
+
async start() {
|
|
111
|
+
if (this.isReady) {
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
const promise = new Promise(resolve => {
|
|
115
|
+
this._osc.once('ready', () => {
|
|
116
|
+
this._log('debug', 'OSC listener ready');
|
|
117
|
+
this._isReady = true;
|
|
118
|
+
resolve();
|
|
119
|
+
});
|
|
120
|
+
});
|
|
121
|
+
this._osc.open();
|
|
122
|
+
return promise;
|
|
123
|
+
}
|
|
124
|
+
/** Stop listening for OSC messages */
|
|
125
|
+
async stop() {
|
|
126
|
+
if (!this._isReady) {
|
|
127
|
+
return;
|
|
128
|
+
}
|
|
129
|
+
const promise = new Promise(resolve => {
|
|
130
|
+
this._osc.once('close', () => {
|
|
131
|
+
this._log('debug', 'OSC listener stopped');
|
|
132
|
+
resolve();
|
|
133
|
+
});
|
|
134
|
+
});
|
|
135
|
+
this._isReady = false;
|
|
136
|
+
this._osc.close();
|
|
137
|
+
return promise;
|
|
138
|
+
}
|
|
139
|
+
/** Toggle the metronome on or off */
|
|
140
|
+
toggleMetronome() {
|
|
141
|
+
this.sendOscMessage(new Messages_1.OscMessage('/click'));
|
|
142
|
+
}
|
|
143
|
+
/** The current bank of tracks */
|
|
144
|
+
get tracks() {
|
|
145
|
+
return this._tracks;
|
|
146
|
+
}
|
|
147
|
+
/** Transport controls */
|
|
148
|
+
get transport() {
|
|
149
|
+
return this._transport;
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Trigger a Reaper action
|
|
153
|
+
* @param commandId The Command ID of the action to be triggered.
|
|
154
|
+
* @param value The value to send for the action. Note that some actions expect the CC value (0-127) while others expect a decimal value between 0 and 1.
|
|
155
|
+
* @example
|
|
156
|
+
* ```typescript
|
|
157
|
+
* // Trigger action 'Track: Toggle mute for master track'
|
|
158
|
+
* reaper.triggerAction(14);
|
|
159
|
+
* // Trigger SWS Extension action 'SWS/S&M: Live Config #1 - Apply config (MIDI/OSC only)' with a CC value of 3, selects config #3
|
|
160
|
+
* reaper.triggerAction('_S&M_LIVECFG_APPLY1', 3);
|
|
161
|
+
* // Trigger action 'Track: Set volume for track 01 (MIDI CC/OSC only)' with a value of 0.75, sets volume of track 1 to +0.0dB
|
|
162
|
+
* reaper.triggerAction(20, 0.7156)
|
|
163
|
+
* ```
|
|
164
|
+
*/
|
|
165
|
+
triggerAction(commandId, value = null) {
|
|
166
|
+
if (value !== null && (value < 0 || value > 127)) {
|
|
167
|
+
throw new RangeError('Values must be between 0 and 127 inclusive');
|
|
168
|
+
}
|
|
169
|
+
this.sendOscMessage(new Messages_1.ActionMessage(commandId, value));
|
|
170
|
+
}
|
|
171
|
+
initHandlers() {
|
|
172
|
+
this._handlers.push(new Handlers_1.TrackMessageHandler(trackNumber => {
|
|
173
|
+
if (trackNumber == 0) {
|
|
174
|
+
return this._masterTrack;
|
|
175
|
+
}
|
|
176
|
+
return this._tracks[trackNumber - 1] !== undefined ? this._tracks[trackNumber - 1] : null;
|
|
177
|
+
}), new Handlers_1.TransportMessageHandler(this._transport), new Handlers_1.BooleanMessageHandler('/click', value => (this._isMetronomeEnabled = value)));
|
|
178
|
+
}
|
|
179
|
+
initOsc() {
|
|
180
|
+
this._osc.on('error', (err) => {
|
|
181
|
+
this._log('error', 'OSC error received', err);
|
|
182
|
+
});
|
|
183
|
+
this._osc.on('message', (message) => {
|
|
184
|
+
// TODO: Figure out a better way to handle this
|
|
185
|
+
message = new Messages_1.OscMessage(message.address, message.args);
|
|
186
|
+
let handled = false;
|
|
187
|
+
for (const handler of this._handlers) {
|
|
188
|
+
if (handler.handle(message)) {
|
|
189
|
+
handled = true;
|
|
190
|
+
break;
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
if (this._afterMessageReceived !== null) {
|
|
194
|
+
this._afterMessageReceived(message, handled);
|
|
195
|
+
}
|
|
196
|
+
});
|
|
197
|
+
}
|
|
198
|
+
};
|
|
199
|
+
__decorate([
|
|
200
|
+
Notify_1.notify('isMetronomeEnabled')
|
|
201
|
+
], Reaper.prototype, "_isMetronomeEnabled", void 0);
|
|
202
|
+
Reaper = __decorate([
|
|
203
|
+
Notify_1.notifyOnPropertyChanged
|
|
204
|
+
], Reaper);
|
|
205
|
+
exports.Reaper = Reaper;
|
|
206
|
+
class ReaperConfiguration {
|
|
207
|
+
constructor() {
|
|
208
|
+
this.afterMessageReceived = null;
|
|
209
|
+
/** The address to listen for Reaper OSC messages on */
|
|
210
|
+
this.localAddress = '127.0.0.1';
|
|
211
|
+
/** The port to listen for Reaper OSC messages on */
|
|
212
|
+
this.localPort = 9000;
|
|
213
|
+
/** Function for logging messages. Defaults to logging to console */
|
|
214
|
+
this.log = ConsoleLogger;
|
|
215
|
+
/** Number of FX per track */
|
|
216
|
+
this.numberOfFx = 8;
|
|
217
|
+
/** Number of tracks per bank */
|
|
218
|
+
this.numberOfTracks = 8;
|
|
219
|
+
/** The address to send Reaper OSC messages to */
|
|
220
|
+
this.remoteAddress = '127.0.0.1';
|
|
221
|
+
/** The port to send Reaper OSC messages to */
|
|
222
|
+
this.remotePort = 8000;
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
exports.ReaperConfiguration = ReaperConfiguration;
|
|
226
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
227
|
+
function ConsoleLogger(level, message, ...optionalParams) {
|
|
228
|
+
switch (level) {
|
|
229
|
+
case 'debug': {
|
|
230
|
+
console.debug(message, optionalParams);
|
|
231
|
+
break;
|
|
232
|
+
}
|
|
233
|
+
case 'info': {
|
|
234
|
+
console.log(message, optionalParams);
|
|
235
|
+
break;
|
|
236
|
+
}
|
|
237
|
+
case 'warn': {
|
|
238
|
+
console.warn(message, optionalParams);
|
|
239
|
+
break;
|
|
240
|
+
}
|
|
241
|
+
case 'error': {
|
|
242
|
+
console.error(message, optionalParams);
|
|
243
|
+
break;
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
}
|
|
217
247
|
//# sourceMappingURL=Reaper.js.map
|
package/dist/Reaper.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Reaper.js","sourceRoot":"","sources":["../src/Reaper.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;GAGG;AACH,yCAAqD;AACrD,qCAA+B;AAC/B,2CAAsC;AACtC,yCAA2B;AAC3B,yCAAgH;AAChH,qCAAiF;
|
|
1
|
+
{"version":3,"file":"Reaper.js","sourceRoot":"","sources":["../src/Reaper.ts"],"names":[],"mappings":"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"}
|