Interim commit for COnvolutionReverb

This commit is contained in:
Robin Davies
2023-03-21 06:55:48 -04:00
parent 7741533254
commit 3ab431779a
34 changed files with 3369 additions and 1550 deletions
+72 -5
View File
@@ -17,7 +17,7 @@
// 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.
import { UiPlugin, UiControl, PluginType } from './Lv2Plugin';
import { UiPlugin, UiControl, PluginType, PiPedalFileProperty } from './Lv2Plugin';
import { PiPedalArgumentError, PiPedalStateError } from './PiPedalError';
@@ -50,6 +50,7 @@ export enum State {
};
export type ControlValueChangedHandler = (key: string, value: number) => void;
export type PropertyValueChangedHandler = (properyUri: string, value: number) => void;
export type PluginPresetsChangedHandler = (pluginUri: string) => void;
@@ -94,6 +95,18 @@ interface ControlValueChangeItem {
};
export interface PropertyValueChangedHandle {
_PropertyValueChangedHandle: number;
};
interface PropertyValueChangeItem {
handle: number;
instanceId: number;
onValueChanged: PropertyValueChangedHandler;
};
class MidiEventListener {
constructor(handle: number, callback: (isNote: boolean, noteOrControl: number) => void) {
this.handle = handle;
@@ -354,9 +367,9 @@ export interface PiPedalModel {
loadPedalBoardPlugin(itemId: number, selectedUri: string): number;
setPedalBoardControlValue(instanceId: number, key: string, value: number): void;
setPedalBoardPropertyValue(instanceId: number, propertyUri: string, value: any): void;
setPedalBoardItemEnabled(instanceId: number, value: boolean): void;
previewPedalBoardValue(instanceId: number, key: string, value: number): void;
setPedalBoardControlValue(instanceId: number, key: string, value: number): void;
deletePedalBoardPedal(instanceId: number): number | null;
movePedalBoardItem(fromInstanceId: number, toInstanceId: number): void;
@@ -456,6 +469,8 @@ export interface PiPedalModel {
chooseNewDevice(): void;
hasConfiguration(): boolean;
requestFileList(piPedalFileProperty: PiPedalFileProperty): Promise<string[]>;
};
class PiPedalModelImpl implements PiPedalModel {
@@ -722,6 +737,7 @@ class PiPedalModelImpl implements PiPedalModel {
}
}
requestPluginClasses(): Promise<boolean> {
const myRequest = new Request(this.varRequest('plugin_classes.json'));
return fetch(myRequest)
@@ -892,6 +908,10 @@ class PiPedalModelImpl implements PiPedalModel {
);
return this.webSocket.connect();
})
.catch((error) => {
this.setError("Failed to connect to server.");
return false;
})
.then(() => {
const isoRequest = new Request('iso_codes.json');
return fetch(isoRequest);
@@ -1171,7 +1191,7 @@ class PiPedalModelImpl implements PiPedalModel {
}
_controlValueChangeItems: ControlValueChangeItem[] = [];
private _controlValueChangeItems: ControlValueChangeItem[] = [];
addControlValueChangeListener(instanceId: number, onValueChanged: ControlValueChangedHandler): ControlValueChangedHandle {
let handle = ++this.nextListenHandle;
@@ -1186,6 +1206,21 @@ class PiPedalModelImpl implements PiPedalModel {
}
}
}
private _propertyValueChangeItems: PropertyValueChangeItem[] = [];
addPropertyValueChangeListener(instanceId: number, onValueChanged: PropertyValueChangedHandler): PropertyValueChangedHandle {
let handle = ++this.nextListenHandle;
this._propertyValueChangeItems.push({ handle: handle, instanceId: instanceId, onValueChanged: onValueChanged });
return { _PropertyValueChangedHandle: handle };
}
removePropertyValueChangeListener(handle: PropertyValueChangedHandle) {
for (let i = 0; i < this._propertyValueChangeItems.length; ++i) {
if (this._propertyValueChangeItems[i].handle === handle._PropertyValueChangedHandle) {
this._propertyValueChangeItems.splice(i, 1);
return;
}
}
}
_pluginPresetsChangedHandles: PluginPresetsChangedHandle[] = [];
@@ -1217,7 +1252,27 @@ class PiPedalModelImpl implements PiPedalModel {
}
_setPedalBoardPropertyValue(instanceId: number, propertyUri: string, value: any, notifyServer: boolean): void {
let pedalBoard = this.pedalBoard.get();
if (pedalBoard === undefined) throw new PiPedalStateError("Pedalboard not ready.");
let newPedalBoard = pedalBoard.clone();
let item = newPedalBoard.getItem(instanceId);
let changed = item.setPropertyValue(propertyUri, value);
if (changed) {
this.pedalBoard.set(newPedalBoard);
if (notifyServer) {
// FIX ME!: this._setServerProperty("setProperty", instanceId, propertyUri, value);
}
for (let i = 0; i < this._propertyValueChangeItems.length; ++i) {
let item = this._propertyValueChangeItems[i];
if (instanceId === item.instanceId) {
item.onValueChanged(propertyUri, value);
}
}
}
}
_setPedalBoardControlValue(instanceId: number, key: string, value: number, notifyServer: boolean): void {
let pedalBoard = this.pedalBoard.get();
if (pedalBoard === undefined) throw new PiPedalStateError("Pedalboard not ready.");
@@ -1262,14 +1317,17 @@ class PiPedalModelImpl implements PiPedalModel {
}
}
setPedalBoardPropertyValue(instanceId: number, propertyUri: string, value: any): void
{
this._setPedalBoardPropertyValue(instanceId, propertyUri, value, true);
}
setPedalBoardControlValue(instanceId: number, key: string, value: number): void {
this._setPedalBoardControlValue(instanceId, key, value, true);
}
setPedalBoardItemEnabled(instanceId: number, value: boolean): void {
this._setPedalBoardItemEnabled(instanceId, value, true);
}
_setPedalBoardItemEnabled(instanceId: number, value: boolean, notifyServer: boolean): void {
private _setPedalBoardItemEnabled(instanceId: number, value: boolean, notifyServer: boolean): void {
let pedalBoard = this.pedalBoard.get();
if (pedalBoard === undefined) throw new PiPedalStateError("Pedalboard not ready.");
let newPedalBoard = pedalBoard.clone();
@@ -1544,6 +1602,13 @@ class PiPedalModelImpl implements PiPedalModel {
return newPresetId;
});
}
requestFileList(piPedalFileProperty: PiPedalFileProperty): Promise<string[]>
{
return nullCast(this.webSocket)
.request<string[]>('requestFileList',piPedalFileProperty);
}
saveCurrentPluginPresetAs(pluginInstanceId: number, newName: string): Promise<number> {
// default behaviour is to save after the currently selected preset.
let request: any = {
@@ -2354,6 +2419,8 @@ class PiPedalModelImpl implements PiPedalModel {
return jackConfig.isValid;
}
};
let instance: PiPedalModel | undefined = undefined;