bug: invalid mono audio device channel selects
This commit is contained in:
+21
-4
@@ -20,6 +20,12 @@
|
||||
import {PiPedalArgumentError} from './PiPedalError';
|
||||
import {AlsaMidiDeviceInfo} from './AlsaMidiDeviceInfo';
|
||||
|
||||
function getChannelNumber(channelId: string): number {
|
||||
let pos = channelId.indexOf("_");
|
||||
let i = Number(channelId.substring(pos+1));
|
||||
return i;
|
||||
}
|
||||
|
||||
export class JackChannelSelection {
|
||||
deserialize(input: any): JackChannelSelection
|
||||
{
|
||||
@@ -57,7 +63,8 @@ export class JackChannelSelection {
|
||||
return "Stereo";
|
||||
}
|
||||
if (selectedChannels.length === 1) return "Mono";
|
||||
return "Invalid selection";
|
||||
|
||||
return "\u00A0"; // nbsp
|
||||
|
||||
}
|
||||
if (selectedChannels.length === 0) return "Invalid selection";
|
||||
@@ -69,12 +76,22 @@ export class JackChannelSelection {
|
||||
} else if (selectedChannels[0] === availableChannels[1]) {
|
||||
return "Mono (right channel only)";
|
||||
} else {
|
||||
return "\u00A0"; // nbsp
|
||||
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.
|
||||
if (selectedChannels.length === 2)
|
||||
{
|
||||
let result: string = "Stereo (" + (getChannelNumber(selectedChannels[0])+1) + "," + (getChannelNumber(selectedChannels[1])+1) + ")";
|
||||
return result;
|
||||
}
|
||||
if (selectedChannels.length === 1)
|
||||
{
|
||||
let result: string = "Mono (" + (getChannelNumber(selectedChannels[0])+1) +")";
|
||||
return result;
|
||||
|
||||
}
|
||||
return "\u00A0"; // nbsp
|
||||
}
|
||||
}
|
||||
getAudioInputDisplayValue(jackConfiguration: JackConfiguration): string
|
||||
|
||||
@@ -65,12 +65,22 @@ function removePort(selectedChannels: string[], channel: string) {
|
||||
return result;
|
||||
}
|
||||
|
||||
function makeChannelName(id: string)
|
||||
{
|
||||
let pos = id.lastIndexOf("_");
|
||||
if (pos === -1)
|
||||
{
|
||||
return id;
|
||||
}
|
||||
let i = Number(id.substring(pos+1));
|
||||
return "Channel " + (i+1);
|
||||
}
|
||||
function SelectChannelsDialog(props: SelectChannelsDialogProps) {
|
||||
//const classes = useStyles();
|
||||
const { onClose, selectedChannels, availableChannels, open } = props;
|
||||
const [currentSelection, setCurrentSelection] = useState(selectedChannels);
|
||||
|
||||
let showCheckboxes = availableChannels.length > 2;
|
||||
let showCheckboxes = availableChannels.length !== 2;
|
||||
if (showCheckboxes) {
|
||||
|
||||
let toggleSelect = (value: string) => {
|
||||
@@ -85,23 +95,25 @@ function SelectChannelsDialog(props: SelectChannelsDialogProps) {
|
||||
onClose(null);
|
||||
};
|
||||
const handleOk = (): void => {
|
||||
onClose(currentSelection);
|
||||
if (currentSelection.length >= 1 && currentSelection.length <= 2)
|
||||
{
|
||||
onClose(currentSelection);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
return (
|
||||
<DialogEx tag="audioChannels" onClose={handleClose} aria-labelledby="select-channels-title" open={open}
|
||||
<DialogEx tag="audioChannels" onClose={handleClose} aria-labelledby="select-channels-title" open={open} fullWidth maxWidth="xs"
|
||||
onEnterKey={handleOk}
|
||||
>
|
||||
<DialogTitle id="simple-dialog-title">Select Channels</DialogTitle>
|
||||
<List>
|
||||
{availableChannels.map((channel) => (
|
||||
<ListItem button >
|
||||
<ListItem button key={channel}>
|
||||
<FormControlLabel
|
||||
control={
|
||||
<Checkbox checked={isChecked(currentSelection, channel)} onClick={() => toggleSelect(channel)} key={channel} />
|
||||
<Checkbox checked={isChecked(currentSelection, channel)} onClick={() => toggleSelect(channel)} style={{marginLeft: 24}} />
|
||||
}
|
||||
label={channel}
|
||||
label={makeChannelName(channel)}
|
||||
/>
|
||||
</ListItem>
|
||||
)
|
||||
|
||||
@@ -651,7 +651,8 @@ const SettingsDialog = withStyles(styles, { withTheme: true })(
|
||||
|
||||
|
||||
|
||||
<ButtonBase className={classes.setting} onClick={() => this.handleInputSelection()} disabled={!isConfigValid}
|
||||
<ButtonBase className={classes.setting} onClick={() => this.handleInputSelection()}
|
||||
disabled={!isConfigValid || this.state.jackConfiguration.outputAudioPorts.length <= 1}
|
||||
style={{ opacity: !isConfigValid ? 0.6 : 1.0 }}
|
||||
|
||||
>
|
||||
@@ -661,7 +662,8 @@ const SettingsDialog = withStyles(styles, { withTheme: true })(
|
||||
<Typography display="block" variant="caption" color="textSecondary" noWrap>{this.state.jackSettings.getAudioInputDisplayValue(this.state.jackConfiguration)}</Typography>
|
||||
</div>
|
||||
</ButtonBase>
|
||||
<ButtonBase className={classes.setting} onClick={() => this.handleOutputSelection()} disabled={!isConfigValid}
|
||||
<ButtonBase className={classes.setting} onClick={() => this.handleOutputSelection()}
|
||||
disabled={!isConfigValid || this.state.jackConfiguration.outputAudioPorts.length <= 1}
|
||||
style={{ opacity: !isConfigValid ? 0.6 : 1.0 }}
|
||||
>
|
||||
<SelectHoverBackground selected={false} showHover={true} />
|
||||
|
||||
Reference in New Issue
Block a user