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/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
- const ste_signals_1 = require("ste-signals");
40
- /**
41
- * Allows control of an instance of Reaper via OSC.
42
- *
43
- * @example
44
- * ```typescript
45
- * // Create an instance of Reaper using default settings
46
- * const reaper = new Reaper();
47
- * // Start OSC
48
- * reaper.startOsc();
49
- * // Give the port a chance to open, then tell Reaper to start playback
50
- * setTimeout(() => {reaper.transport.play();}, 100);
51
- *```
52
- */
53
- let Reaper = class Reaper {
54
- constructor(config = new ReaperConfiguration()) {
55
- this._isMetronomeEnabled = false;
56
- this._handlers = [];
57
- this._isReady = false;
58
- this._readyDispatcher = new ste_signals_1.SignalDispatcher();
59
- this._tracks = [];
60
- this._transport = new Transport_1.Transport(message => this.sendOscMessage(message));
61
- this._osc = new osc.UDPPort({
62
- localAddress: config.localAddress,
63
- localPort: config.localPort,
64
- remoteAddress: config.remoteAddress,
65
- remotePort: config.remotePort,
66
- broadcast: true,
67
- metadata: true,
68
- });
69
- this._afterMessageReceived = config.afterMessageReceived;
70
- this.initOsc();
71
- this.initHandlers();
72
- this._masterTrack = new Tracks_1.Track(0, config.numberOfFx, message => this.sendOscMessage(message));
73
- for (let i = 0; i < config.numberOfTracks; i++) {
74
- this._tracks[i] = new Tracks_1.Track(i + 1, config.numberOfFx, message => this.sendOscMessage(message));
75
- }
76
- }
77
- /** Indicates whether the metronome is enabled */
78
- get isMetronomeEnabled() {
79
- return this._isMetronomeEnabled;
80
- }
81
- /** Indicates whether OSC is ready to send and receive messages */
82
- get isReady() {
83
- return this._isReady;
84
- }
85
- /** The master track */
86
- get master() {
87
- return this._masterTrack;
88
- }
89
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
90
- onPropertyChanged(property, callback) {
91
- throw new Error('not implemented');
92
- }
93
- /** An event that can be subscribed to for notification when OSC is ready */
94
- onReady(callback) {
95
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
96
- this._readyDispatcher.sub(() => callback());
97
- }
98
- /**
99
- * Triggers the action `Control surface: Refresh all surfaces` (Command ID: 41743)
100
- */
101
- refreshControlSurfaces() {
102
- this.triggerAction(41743);
103
- }
104
- /**
105
- * Send a message to Reaper via OSC. Messages may not be sent while {@link Reaper.isReady} is false.
106
- * @param message The OSC message to be sent
107
- */
108
- sendOscMessage(message) {
109
- if (!this._isReady) {
110
- throw new Error("Can't send while OSC is not ready");
111
- }
112
- this._osc.send(message);
113
- console.debug('OSC message sent', message);
114
- }
115
- /** Open the OSC port and start listening for messages */
116
- startOsc() {
117
- this._osc.open();
118
- }
119
- /** Stop listening for OSC messages */
120
- stopOsc() {
121
- this._osc.close();
122
- }
123
- /** Toggle the metronome on or off */
124
- toggleMetronome() {
125
- this.sendOscMessage(new Messages_1.OscMessage('/click'));
126
- }
127
- /** The current bank of tracks */
128
- get tracks() {
129
- return this._tracks;
130
- }
131
- /** Transport controls */
132
- get transport() {
133
- return this._transport;
134
- }
135
- /**
136
- * Trigger a Reaper action
137
- * @param commandId The Command ID of the action to be triggered.
138
- * @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.
139
- * @example
140
- * ```typescript
141
- * // Trigger action 'Track: Toggle mute for master track'
142
- * reaper.triggerAction(14);
143
- * // Trigger SWS Extension action 'SWS/S&M: Live Config #1 - Apply config (MIDI/OSC only)' with a CC value of 3, selects config #3
144
- * reaper.triggerAction('_S&M_LIVECFG_APPLY1', 3);
145
- * // 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
146
- * reaper.triggerAction(20, 0.7156)
147
- * ```
148
- */
149
- triggerAction(commandId, value = null) {
150
- if (value !== null && (value < 0 || value > 127)) {
151
- throw new RangeError('Values must be between 0 and 127 inclusive');
152
- }
153
- this.sendOscMessage(new Messages_1.ActionMessage(commandId, value));
154
- }
155
- initHandlers() {
156
- this._handlers.push(new Handlers_1.TrackMessageHandler(trackNumber => {
157
- if (trackNumber == 0) {
158
- return this._masterTrack;
159
- }
160
- return this._tracks[trackNumber - 1] !== undefined ? this._tracks[trackNumber - 1] : null;
161
- }), new Handlers_1.TransportMessageHandler(this._transport), new Handlers_1.BooleanMessageHandler('/click', value => (this._isMetronomeEnabled = value)));
162
- }
163
- initOsc() {
164
- this._osc.on('ready', () => {
165
- this._isReady = true;
166
- console.debug('OSC ready');
167
- this._readyDispatcher.dispatch();
168
- });
169
- this._osc.on('error', (err) => {
170
- console.error('OSC error received', err);
171
- });
172
- this._osc.on('message', (message) => {
173
- //console.log('osc', message);
174
- // TODO: Figure out a better way to handle this
175
- message = new Messages_1.OscMessage(message.address, message.args);
176
- let handled = false;
177
- for (const handler of this._handlers) {
178
- if (handler.handle(message)) {
179
- handled = true;
180
- break;
181
- }
182
- }
183
- if (this._afterMessageReceived !== null) {
184
- this._afterMessageReceived(message, handled);
185
- }
186
- });
187
- this._osc.on('close', () => {
188
- console.debug('OSC stopped');
189
- });
190
- }
191
- };
192
- __decorate([
193
- Notify_1.notify('isMetronomeEnabled')
194
- ], Reaper.prototype, "_isMetronomeEnabled", void 0);
195
- Reaper = __decorate([
196
- Notify_1.notifyOnPropertyChanged
197
- ], Reaper);
198
- exports.Reaper = Reaper;
199
- class ReaperConfiguration {
200
- constructor() {
201
- this.afterMessageReceived = null;
202
- /** The address to listen for Reaper OSC messages on */
203
- this.localAddress = '127.0.0.1';
204
- /** The port to listen for Reaper OSC messages on */
205
- this.localPort = 9000;
206
- /** Number of FX per track */
207
- this.numberOfFx = 8;
208
- /** Number of tracks per bank */
209
- this.numberOfTracks = 8;
210
- /** The address to send Reaper OSC messages to */
211
- this.remoteAddress = '127.0.0.1';
212
- /** The port to send Reaper OSC messages to */
213
- this.remotePort = 8000;
214
- }
215
- }
216
- exports.ReaperConfiguration = ReaperConfiguration;
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
@@ -1 +1 @@
1
- {"version":3,"file":"Reaper.js","sourceRoot":"","sources":["../src/Reaper.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Reaper.js","sourceRoot":"","sources":["../src/Reaper.ts"],"names":[],"mappings":"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"}