reaper-osc
Version:
Controls Cockos Reaper using OSC
177 lines • 6.19 kB
JavaScript
"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
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;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.LastRegion = exports.Region = void 0;
/**
* Contains classes for Reaper regions
* @module
*/
const Notify_1 = require("./Notify");
const Commands_1 = require("./Client/Commands");
/** A region in the current device region bank */
let Region = class Region {
/**
* @param slotIndex The 1-based slot index within the current device region bank
* @param send A callback used to send typed commands to Reaper
*/
constructor(slotIndex, _send) {
this.slotIndex = slotIndex;
this._send = _send;
this._name = '';
/** The user-assigned region number (as shown in Reaper's UI), or empty string if not yet populated */
this._number = '';
this._time = 0;
this._length = 0;
}
/** The region's name */
get name() { return this._name; }
/**
* The user-assigned region number (as shown in Reaper's UI).
* This is a string because Reaper sends it as a string (e.g. "1", "2").
* Empty string if not yet populated.
*/
get number() { return this._number; }
/** The region's start time in seconds */
get time() { return this._time; }
/** The region's length in seconds */
get length() { return this._length; }
/**
* Handle a typed incoming event
* @param event The event to handle
*/
handleEvent(event) {
switch (event.type) {
case 'region:name':
if (event.slotIndex === this.slotIndex)
this._name = event.name;
break;
case 'region:number':
if (event.slotIndex === this.slotIndex)
this._number = event.number;
break;
case 'region:time':
if (event.slotIndex === this.slotIndex)
this._time = event.time;
break;
case 'region:length':
if (event.slotIndex === this.slotIndex)
this._length = event.length;
break;
}
}
// eslint-disable-next-line @typescript-eslint/no-unused-vars
onPropertyChanged(property, callback) {
throw new Error('not implemented');
}
/**
* Rename this region. Uses write-by-ID: the user-assigned region number from {@link number}.
* @param name The new name for the region
*/
rename(name) {
this._send(Commands_1.SetRegionName(parseInt(this._number), name));
}
/**
* Move this region to a new start time. Uses write-by-ID.
* Note: moving a region may change its bank slot index on the next sync.
* @param time The new start time in seconds
*/
setTime(time) {
this._send(Commands_1.SetRegionTime(parseInt(this._number), time));
}
/**
* Set the length of this region. Uses write-by-ID.
* @param length The new length in seconds
*/
setLength(length) {
this._send(Commands_1.SetRegionLength(parseInt(this._number), length));
}
/**
* Change the user-assigned number of this region. Uses write-by-ID.
* @param number The new user-assigned region number
*/
setNumber(number) {
this._send(Commands_1.SetRegionNumber(parseInt(this._number), number));
}
};
__decorate([
Notify_1.notify('name')
], Region.prototype, "_name", void 0);
__decorate([
Notify_1.notify('number')
], Region.prototype, "_number", void 0);
__decorate([
Notify_1.notify('time')
], Region.prototype, "_time", void 0);
__decorate([
Notify_1.notify('length')
], Region.prototype, "_length", void 0);
Region = __decorate([
Notify_1.notifyOnPropertyChanged
], Region);
exports.Region = Region;
/** The most recently entered region during playback */
let LastRegion = class LastRegion {
constructor() {
this._name = '';
this._number = '';
this._time = 0;
this._length = 0;
}
/** The region's name */
get name() { return this._name; }
/**
* The user-assigned region number (as shown in Reaper's UI).
* Empty string if no region has been entered yet.
*/
get number() { return this._number; }
/** The region's start time in seconds */
get time() { return this._time; }
/** The region's length in seconds */
get length() { return this._length; }
/**
* Handle a typed incoming event
* @param event The event to handle
*/
handleEvent(event) {
switch (event.type) {
case 'lastRegion:name':
this._name = event.name;
break;
case 'lastRegion:number':
this._number = event.number;
break;
case 'lastRegion:time':
this._time = event.time;
break;
case 'lastRegion:length':
this._length = event.length;
break;
}
}
// eslint-disable-next-line @typescript-eslint/no-unused-vars
onPropertyChanged(property, callback) {
throw new Error('not implemented');
}
};
__decorate([
Notify_1.notify('name')
], LastRegion.prototype, "_name", void 0);
__decorate([
Notify_1.notify('number')
], LastRegion.prototype, "_number", void 0);
__decorate([
Notify_1.notify('time')
], LastRegion.prototype, "_time", void 0);
__decorate([
Notify_1.notify('length')
], LastRegion.prototype, "_length", void 0);
LastRegion = __decorate([
Notify_1.notifyOnPropertyChanged
], LastRegion);
exports.LastRegion = LastRegion;
//# sourceMappingURL=Region.js.map