119 lines
5.0 KiB
TypeScript
119 lines
5.0 KiB
TypeScript
// Copyright (c) 2022 Robin Davies
|
|
//
|
|
// 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.
|
|
|
|
import {PiPedalArgumentError} from './PiPedalError';
|
|
|
|
export class JackChannelSelection {
|
|
deserialize(input: any): JackChannelSelection
|
|
{
|
|
this.inputAudioPorts = input.inputAudioPorts.slice();
|
|
this.outputAudioPorts = input.outputAudioPorts.slice();
|
|
this.inputMidiPorts = input.inputMidiPorts.slice();
|
|
this.sampleRate = input.sampleRate;
|
|
this.bufferSize = input.bufferSize;
|
|
this.numberOfBuffers = input.numberOfBuffers;
|
|
return this;
|
|
}
|
|
clone() : JackChannelSelection {
|
|
return new JackChannelSelection().deserialize(this);
|
|
}
|
|
inputAudioPorts: string[] = [];
|
|
outputAudioPorts: string[] = [];
|
|
inputMidiPorts: string[] = [];
|
|
|
|
sampleRate: number = 48000;
|
|
bufferSize: number = 64;
|
|
numberOfBuffers: number = 3;
|
|
|
|
static makeDefault(jackConfiguration: JackConfiguration): JackChannelSelection {
|
|
let result = new JackChannelSelection();
|
|
result.inputAudioPorts = jackConfiguration.inputAudioPorts.slice(0,2);
|
|
result.outputAudioPorts = jackConfiguration.inputAudioPorts.slice(0,2);
|
|
return result;
|
|
}
|
|
getChannelDisplayValue(selectedChannels: string[], availableChannels: string[],isConfigValid: boolean): string
|
|
{
|
|
if (!isConfigValid)
|
|
{
|
|
if (selectedChannels.length === 2) {
|
|
return "Stereo";
|
|
}
|
|
if (selectedChannels.length === 1) return "Mono";
|
|
return "Invalid selection";
|
|
|
|
}
|
|
if (selectedChannels.length === 0) return "Invalid selection";
|
|
if (availableChannels.length === 1) return "Mono";
|
|
if (availableChannels.length === 2) {
|
|
if (selectedChannels.length === 2) return "Stereo";
|
|
if (selectedChannels[0] === availableChannels[0]) {
|
|
return "Mono (left channel only)";
|
|
} else if (selectedChannels[0] === availableChannels[1]) {
|
|
return "Mono (right channel only)";
|
|
} else {
|
|
throw new PiPedalArgumentError("Invalid channel selection."); // should be subset of jackConfiguration.
|
|
}
|
|
} else {
|
|
if (selectedChannels.length === 2) return "Stereo (custom selection)";
|
|
if (selectedChannels.length === 1) return "Mono (custom selection)";
|
|
throw new PiPedalArgumentError("Invalid channel selection."); // should be subset of jackConfiguration.
|
|
}
|
|
}
|
|
getAudioInputDisplayValue(jackConfiguration: JackConfiguration): string
|
|
{
|
|
return this.getChannelDisplayValue(this.inputAudioPorts,jackConfiguration.inputAudioPorts, jackConfiguration.isValid);
|
|
}
|
|
getAudioOutputDisplayValue(jackConfiguration: JackConfiguration): string
|
|
{
|
|
return this.getChannelDisplayValue(this.outputAudioPorts,jackConfiguration.outputAudioPorts, jackConfiguration.isValid);
|
|
}
|
|
|
|
};
|
|
|
|
export class JackConfiguration {
|
|
deserialize(input: any): JackConfiguration {
|
|
this.isValid = input.isValid;
|
|
this.isRestarting = input.isRestarting;
|
|
this.errorState = input.errorState;
|
|
this.sampleRate = input.sampleRate;
|
|
this.blockLength = input.blockLength;
|
|
this.midiBufferSize = input.midiBufferSize;
|
|
this.maxAllowedMidiDelta = input.maxAllowedMidiDelta;
|
|
this.inputAudioPorts = input.inputAudioPorts;
|
|
this.outputAudioPorts = input.outputAudioPorts;
|
|
this.inputMidiPorts = input.inputMidiPorts;
|
|
this.outputMidiPorts = input.outputMidiPorts;
|
|
return this;
|
|
}
|
|
isValid: boolean = false;
|
|
isRestarting: boolean = false;
|
|
errorState: string = "Not loaded.";
|
|
sampleRate: number = 0;
|
|
blockLength: number = 0;
|
|
midiBufferSize: number = 0;
|
|
maxAllowedMidiDelta: number = 0;
|
|
|
|
inputAudioPorts: string[] = [];
|
|
outputAudioPorts: string[] = [];
|
|
inputMidiPorts: string[] = [];
|
|
outputMidiPorts: string[] = [];
|
|
|
|
};
|
|
|
|
export default JackConfiguration; |