.sud decompression implemented

Sud decompression implemented in real time and viewer mode. .sudx files hold a file map which is reloaded allowing rapid scrolling of sud files in viewer mode.
This commit is contained in:
Jamie Mac 2022-10-11 16:10:57 +01:00
parent f2d334dec2
commit 62d52898cd
11 changed files with 181 additions and 297 deletions

View File

@ -1,4 +1,4 @@
#NOTE: This is a Maven Resolver internal implementation file, its format can be changed without prior notice.
#Fri Oct 07 14:40:39 BST 2022
#Tue Oct 11 15:59:57 BST 2022
x3-2.1.0.jar>=
x3-2.1.0.pom>=

View File

@ -48,6 +48,12 @@ public class OfflineWavFileServer extends OfflineFileServer<FileDataMapPoint> {
private AudioInputStream audioInputStream;
private AudioFormat audioFormat;
/**
* The standard file formats which implement and AudioStream.
*/
private String[] standardAudioTypes = {".wav", ".aif", ".aiff", ".sud"};
public OfflineWavFileServer(OfflineFileDataStore offlineRawDataStore, FileDate fileDate) {
super(offlineRawDataStore);
@ -173,6 +179,15 @@ public class OfflineWavFileServer extends OfflineFileServer<FileDataMapPoint> {
OfflineDataMap<FileDataMapPoint> dataMap = getDataMap();
Iterator<FileDataMapPoint> mapIt = dataMap.getListIterator();
FileDataMapPoint mapPoint = findFirstMapPoint(mapIt, offlineDataLoadInfo.getStartMillis(), offlineDataLoadInfo.getEndMillis());
// System.out.println("Open sound file: " + mapPoint.getSoundFile());
// mapIt = dataMap.getListIterator();
// while (mapIt.hasNext()) {
// mapPoint = mapIt.next();
// System.out.println("Map point: " + mapPoint.getStartTime() + " " + mapPoint.getEndTime() + " Total mins: " + ((mapPoint.getEndTime() -mapPoint.getStartTime())/1000/60));
//
// }
if (openSoundFile(mapPoint.getSoundFile()) == false) {
System.out.println("Could not open .wav sound file " + mapPoint.getSoundFile().getAbsolutePath());
return false;
@ -208,8 +223,11 @@ public class OfflineWavFileServer extends OfflineFileServer<FileDataMapPoint> {
// need to fast forward in current file.
long skipBytes = (long) (((offlineDataLoadInfo.getStartMillis()-currentTime)*audioFormat.getSampleRate()*audioFormat.getFrameSize())/1000.);
try {
//System.out.println("Skipped " + skipped+ " " + skipBytes + " " + audioInputStream.available());
skipped = audioInputStream.skip(skipBytes);
// Debug.out.println("Skipped " + skipped);
//System.out.println("Offline " + (offlineDataLoadInfo.getStartMillis()-currentTime) + " ms : frame size: " + audioFormat.getFrameSize());
} catch (IOException e) {
/**
* The datamap point may be longer than the actual file here ? In any case, with the
@ -231,6 +249,7 @@ public class OfflineWavFileServer extends OfflineFileServer<FileDataMapPoint> {
break;
}
try {
bytesRead = audioInputStream.read(inputBuffer);
} catch (IOException e) {
e.printStackTrace();
@ -493,7 +512,6 @@ public class OfflineWavFileServer extends OfflineFileServer<FileDataMapPoint> {
return true;
}
private String[] standardAudioTypes = {".wav", ".aif", ".aiff"};
/**
* Is it a standard aif or wav audio file which can be opened with the standard reader ?

View File

@ -561,3 +561,15 @@
-fx-icon-color: black;
}
/********************************************
* *
* Spinner *
* *
*********************************************/
.spinner {
-fx-pref-width: 100px;
}

View File

@ -977,4 +977,13 @@
-fx-icon-color: black;
}
/********************************************
* *
* Spinner *
* *
*********************************************/
.spinner {
-fx-pref-width: 100px;
}

View File

@ -113,6 +113,7 @@
-fx-background-insets: inherit;
-fx-padding: inherit;
}
.root.popup {
-fx-background-color: transparent;
}
@ -1972,7 +1973,7 @@ Text {
-fx-underline: true;
}
.dialog-pane > .content {
-fx-padding: 1em 1em 0 1em;
-fx-padding: 1em 1em 1em 1em;
}
.dialog-pane > .content.label {
-fx-alignment: TOP_LEFT;
@ -1989,10 +1990,10 @@ Text {
-fx-padding: 0 0 0 1em;
}
.dialog-pane:no-header > .content {
-fx-padding: 1em 1em 0 0;
-fx-padding: 1em 1em 1em 1em;
}
.dialog-pane:no-header > * > .graphic-container {
-fx-padding: 1em 1em 0 1em;
-fx-padding: 1em 1em 1em 1em;
}
.dialog-pane.information > .header-panel {
-fx-background-color: -color-accent-fg, -color-bg-subtle;
@ -3662,3 +3663,15 @@ Text {
-fx-opacity: 0.85;
-fx-effect: dropshadow(three-pass-box, -color-shadow-default, 8px, 0.6, 0, 2);
}
/********************************************
* *
* Spinner *
* *
*********************************************/
.spinner {
-fx-pref-width: 120px;
}

View File

@ -351,12 +351,6 @@
-fx-font-size: 1em;
}
.radio-button {
-fx-background-color: -color-bg-default;
-fx-text-fill: transparent;
-fx-label-padding: 2px 2px 0 6px;
}
.tree-view {
-color-cell-bg: -color-bg-default;
-color-cell-fg: -color-fg-default;
@ -644,269 +638,6 @@
/**********/
.context-menu:show-mnemonics > .mnemonic-underline,
.menu:show-mnemonics > .mnemonic-underline,
.menu-bar:show-mnemonics > .mnemonic-underline,
.menu-item > .label:show-mnemonics > .mnemonic-underline {
-fx-stroke: -color-fg-default;
}
.menu-button .font-icon, .menu-button .ikonli-font-icon,
.split-menu-button .font-icon,
.split-menu-button .ikonli-font-icon {
-fx-icon-color: -color-button-fg;
-fx-fill: -color-button-fg;
}
.menu-button:disabled,
.split-menu-button:disabled {
-fx-opacity: 0.4;
}
.menu-button:show-mnemonics > .mnemonic-underline,
.split-menu-button:show-mnemonics > .mnemonic-underline {
-fx-stroke: -color-button-fg;
}
.menu-button.button-icon,
.split-menu-button.button-icon {
-fx-padding: 8px;
}
.menu-button.button-icon > .text,
.split-menu-button.button-icon > .text {
visibility: hidden;
}
.menu-button.button-circle,
.split-menu-button.button-circle {
-fx-background-radius: 50;
-fx-padding: 6px 8px 6px 8px;
}
.menu-button.button-circle .text,
.split-menu-button.button-circle .text {
visibility: hidden;
}
.menu-button.left-pill,
.split-menu-button.left-pill {
-fx-background-radius: 4px 0 0 4px;
-fx-background-insets: 0, 1px 0 1px 1px;
}
.menu-button.left-pill:hover, .menu-button.left-pill:focused,
.split-menu-button.left-pill:hover,
.split-menu-button.left-pill:focused {
-fx-background-insets: 0, 1px;
}
.menu-button.center-pill,
.split-menu-button.center-pill {
-fx-background-radius: 0;
-fx-background-insets: 0, 1px 0 1px 0;
}
.menu-button.center-pill:hover, .menu-button.center-pill:focused,
.split-menu-button.center-pill:hover,
.split-menu-button.center-pill:focused {
-fx-background-insets: 0, 1px;
}
.menu-button.right-pill,
.split-menu-button.right-pill {
-fx-background-radius: 0 4px 4px 0;
-fx-background-insets: 0, 1px 1px 1px 0;
}
.menu-button.right-pill:hover, .menu-button.right-pill:focused,
.split-menu-button.right-pill:hover,
.split-menu-button.right-pill:focused {
-fx-background-insets: 0, 1px;
}
.menu-button > .label,
.split-menu-button > .label {
-fx-padding: 8px 12px 8px 12px;
-fx-text-fill: -color-button-fg;
}
.menu-button > .arrow-button,
.split-menu-button > .arrow-button {
-fx-padding: 8px 12px 8px 0;
}
.menu-button > .arrow-button > .arrow,
.split-menu-button > .arrow-button > .arrow {
-fx-shape: "M10 17l5-5-5-5v10z";
-fx-scale-shape: false;
-fx-background-color: -color-button-fg;
-fx-min-width: 0.5em;
}
.menu-button:openvertically > .arrow-button > .arrow,
.split-menu-button:openvertically > .arrow-button > .arrow {
-fx-shape: "M7 10l5 5 5-5z";
-fx-scale-shape: false;
}
.menu-button:show-mnemonics > .label > .mnemonic-underline,
.split-menu-button:show-mnemonics > .label > .mnemonic-underline {
-fx-stroke: -color-button-fg;
}
.menu-button.button-icon,
.split-menu-button.button-icon {
-fx-padding: 0;
}
.menu-button:hover,
.split-menu-button:hover {
-fx-background-color: -color-button-border-hover, -color-button-bg-hover;
-fx-opacity: 0.9;
}
.menu-button:hover > .label,
.split-menu-button:hover > .label {
-fx-text-fill: -color-button-fg-hover;
}
.menu-button:hover > .arrow-button > .arrow,
.split-menu-button:hover > .arrow-button > .arrow {
-fx-background-color: -color-button-fg-hover;
}
.menu-button:hover .font-icon, .menu-button:hover .ikonli-font-icon,
.split-menu-button:hover .font-icon,
.split-menu-button:hover .ikonli-font-icon {
-fx-icon-color: -color-button-fg-hover;
-fx-fill: -color-button-fg-hover;
}
.menu-button:focused,
.split-menu-button:focused {
-fx-background-color: -color-button-border-focused, -color-button-bg-focused;
}
.menu-button:focused > .label,
.split-menu-button:focused > .label {
-fx-text-fill: -color-button-fg-focused;
}
.menu-button:focused > .arrow-button > .arrow,
.split-menu-button:focused > .arrow-button > .arrow {
-fx-background-color: -color-button-fg-focused;
}
.menu-button:focused .font-icon, .menu-button:focused .ikonli-font-icon,
.split-menu-button:focused .font-icon,
.split-menu-button:focused .ikonli-font-icon {
-fx-icon-color: -color-button-fg-focused;
-fx-fill: -color-button-fg-focused;
}
.menu-button:armed, .menu-button:focused:armed,
.split-menu-button:armed,
.split-menu-button:focused:armed {
-fx-background-color: -color-button-border-pressed, -color-button-bg-pressed;
-fx-text-fill: -color-button-fg-pressed;
}
.menu-button:armed > .label, .menu-button:focused:armed > .label,
.split-menu-button:armed > .label,
.split-menu-button:focused:armed > .label {
-fx-text-fill: -color-button-fg-pressed;
}
.menu-button:armed > .arrow-button > .arrow, .menu-button:focused:armed > .arrow-button > .arrow,
.split-menu-button:armed > .arrow-button > .arrow,
.split-menu-button:focused:armed > .arrow-button > .arrow {
-fx-background-color: -color-button-fg-pressed;
}
.menu-button:armed .font-icon, .menu-button:armed .ikonli-font-icon, .menu-button:focused:armed .font-icon, .menu-button:focused:armed .ikonli-font-icon,
.split-menu-button:armed .font-icon,
.split-menu-button:armed .ikonli-font-icon,
.split-menu-button:focused:armed .font-icon,
.split-menu-button:focused:armed .ikonli-font-icon {
-fx-icon-color: -color-button-fg-pressed;
-fx-fill: -color-button-fg-pressed;
}
.menu-button.accent,
.split-menu-button.accent {
-color-button-bg: -color-accent-emphasis;
-color-button-fg: -color-fg-emphasis;
-color-button-border: -color-accent-emphasis;
-color-button-bg-hover: -color-accent-emphasis;
-color-button-fg-hover: -color-fg-emphasis;
-color-button-border-hover: -color-accent-emphasis;
-color-button-bg-focused: -color-accent-6;
-color-button-fg-focused: -color-fg-emphasis;
-color-button-border-focused: -color-accent-emphasis;
-color-button-bg-pressed: -color-accent-emphasis;
-color-button-fg-pressed: -color-fg-emphasis;
-color-button-border-pressed: transparent;
}
.menu-button.accent.button-outlined,
.split-menu-button.accent.button-outlined {
-color-button-bg: -color-bg-default;
-color-button-fg: -color-accent-fg;
-color-button-bg-hover: -color-accent-emphasis;
-color-button-fg-hover: -color-fg-emphasis;
}
.menu-button.accent.flat,
.split-menu-button.accent.flat {
-color-button-fg: -color-accent-fg;
-color-button-bg-hover: -color-accent-subtle;
}
.menu-button.success,
.split-menu-button.success {
-color-button-bg: -color-success-emphasis;
-color-button-fg: -color-fg-emphasis;
-color-button-border: -color-success-emphasis;
-color-button-bg-hover: -color-success-emphasis;
-color-button-fg-hover: -color-fg-emphasis;
-color-button-border-hover: -color-success-emphasis;
-color-button-bg-focused: -color-success-6;
-color-button-fg-focused: -color-fg-emphasis;
-color-button-border-focused: -color-success-emphasis;
-color-button-bg-pressed: -color-success-emphasis;
-color-button-fg-pressed: -color-fg-emphasis;
-color-button-border-pressed: transparent;
}
.menu-button.success.button-outlined,
.split-menu-button.success.button-outlined {
-color-button-bg: -color-bg-default;
-color-button-fg: -color-success-fg;
-color-button-bg-hover: -color-success-emphasis;
-color-button-fg-hover: -color-fg-emphasis;
}
.menu-button.success.flat,
.split-menu-button.success.flat {
-color-button-fg: -color-success-fg;
-color-button-bg-hover: -color-success-subtle;
}
.menu-button.danger,
.split-menu-button.danger {
-color-button-bg: -color-danger-emphasis;
-color-button-fg: -color-fg-emphasis;
-color-button-border: -color-danger-emphasis;
-color-button-bg-hover: -color-danger-emphasis;
-color-button-fg-hover: -color-fg-emphasis;
-color-button-border-hover: -color-danger-emphasis;
-color-button-bg-focused: -color-danger-6;
-color-button-fg-focused: -color-fg-emphasis;
-color-button-border-focused: -color-danger-emphasis;
-color-button-bg-pressed: -color-danger-emphasis;
-color-button-fg-pressed: -color-fg-emphasis;
-color-button-border-pressed: transparent;
}
.menu-button.danger.button-outlined,
.split-menu-button.danger.button-outlined {
-color-button-bg: -color-bg-default;
-color-button-fg: -color-danger-fg;
-color-button-bg-hover: -color-danger-emphasis;
-color-button-fg-hover: -color-fg-emphasis;
}
.menu-button.danger.flat,
.split-menu-button.danger.flat {
-color-button-fg: -color-danger-fg;
-color-button-bg-hover: -color-danger-subtle;
}
.menu-button.flat,
.split-menu-button.flat {
-color-button-bg: transparent;
-color-button-fg: -color-fg-default;
-color-button-border: transparent;
-color-button-bg-hover: -color-bg-subtle;
-color-button-fg-hover: -color-button-fg;
-color-button-border-hover: -color-bg-subtle;
-color-button-bg-focused: -color-button-bg;
-color-button-fg-focused: -color-button-fg;
-color-button-border-focused: -color-button-bg;
-color-button-bg-pressed: -color-button-bg;
-color-button-fg-pressed: -color-button-fg;
-color-button-border-pressed: transparent;
}
.menu-button.no-arrow > .arrow-button {
-fx-padding: 0;
}
.menu-button.no-arrow > .arrow-button > .arrow {
-fx-shape: none;
-fx-scale-shape: false;
-fx-min-width: -1;
}
.menu-item {
-fx-background-color: -color-bg-default;
@ -933,3 +664,116 @@
-fx-background-color: -color-bg-default;
}
/********************************************
* *
* Spinner *
* *
*********************************************/
.spinner {
-fx-pref-width: 120px;
}
.dialog-pane > .content {
-fx-padding: 1em 1em 1em 1em;
}
/*******************************************************************************
* *
* Hiding Pane *
* *
******************************************************************************/
/**
* Button for closing a hiding panel. Right indicates bottoms points towards the right, closing a hiding panel
* on the right hand side of the screen. These buttons have a transparent background and rounded corners.
*/
/** top-left, top-right, bottom-right, and bottom-left corners, in that order. */
.close-button-right{
-fx-background-color: transparent;
-fx-background-radius: 0 10 10 0;
-fx-border-radius: 0 10 10 0;
}
.close-button-right:hover {
-fx-background-color: -fx-highlight;
}
.close-button-left{
-fx-background-color: transparent;
-fx-background-radius: 10 0 0 10;
-fx-border-radius: 10 0 0 10;
}
.close-button-left:hover {
-fx-background-color: -fx-highlight;
}
.close-button-top{
-fx-background-color: transparent;
-fx-background-radius: 10 10 0 0;
-fx-border-radius: 10 10 0 0;
}
.close-button-bottom {
-fx-background-color: transparent;
-fx-background-radius: 0 0 10 10;
-fx-border-radius: 0 0 10 10;
}
.close-button-bottom:hover {
-fx-background-color: -fx-highlight;
}
.close-button-bottom-grey{
-fx-border-color: transparent;
-fx-background-radius: 0 0 10 10;
-fx-border-radius: 0 0 10 10;
}
.close-button-left-trans{
-fx-border-color: transparent;
-fx-background-color: transparent;
-fx-background-radius: 10 0 0 10;
-fx-border-radius: 10 0 0 10;
}
.close-button-left-trans:focused {
-fx-border-color: transparent;
-fx-background-color: transparent;
-fx-background-radius: 10 0 0 10;
-fx-border-radius: 10 0 0 10;
}
.close-button-right-trans{
-fx-border-color: transparent;
-fx-background-color: transparent;
-fx-background-radius: 0 10 10 0;
-fx-border-radius: 0 10 10 0;
}
.close-button-right-trans:focused {
-fx-border-color: transparent;
-fx-background-color: transparent;
-fx-background-radius: 0 10 10 0;
-fx-border-radius: 0 10 10 0;
}
.menu-square-button {
-fx-border-color: -fx_border_col;
-fx-background-color: transparent;
-fx-background-radius: 0 0 0 0;
-fx-border-radius: 0 0 0 0;
}

View File

@ -272,7 +272,7 @@ public class TDGraphFX extends PamBorderPane {
* blocks.
*/
tdAxisSelPane = new TDDataSelPaneFX(this);
tdAxisSelPane.setPrefWidth(250);
tdAxisSelPane.setPrefWidth(280);
// put pane inside a scroll pane for graph resizing
PamScrollPane scrollPane = new PamScrollPane(tdAxisSelPane);
// scrollPane.setFitToWidth(true);

View File

@ -18,50 +18,50 @@ public class PamSpinner<T> extends Spinner<T>{
* Default widths are way off in JavaFX for spinners.
*/
// private static final double PAMSPINNER_PREF_WIDTH = USE_COMPUTED_SIZE;
private static final double PAMSPINNER_PREF_WIDTH = 100;
//private static final double PAMSPINNER_PREF_WIDTH = 100;
public PamSpinner() {
super();
this.setPrefWidth(PAMSPINNER_PREF_WIDTH);
//this.setPrefWidth(PAMSPINNER_PREF_WIDTH);
// TODO Auto-generated constructor stub
}
public PamSpinner(double min, double max, double initialValue, double amountToStepBy) {
super(min, max, initialValue, amountToStepBy);
this.setPrefWidth(PAMSPINNER_PREF_WIDTH);
//this.setPrefWidth(PAMSPINNER_PREF_WIDTH);
addDefocusConverter();
}
public PamSpinner(double min, double max, double initialValue) {
super(min, max, initialValue);
this.setPrefWidth(PAMSPINNER_PREF_WIDTH);
//this.setPrefWidth(PAMSPINNER_PREF_WIDTH);
addDefocusConverter();
}
public PamSpinner(int min, int max, int initialValue, int amountToStepBy) {
super(min, max, initialValue, amountToStepBy);
this.setPrefWidth(PAMSPINNER_PREF_WIDTH);
//this.setPrefWidth(PAMSPINNER_PREF_WIDTH);
addDefocusConverter();
}
public PamSpinner(int min, int max, int initialValue) {
super(min, max, initialValue);
this.setPrefWidth(PAMSPINNER_PREF_WIDTH);
//this.setPrefWidth(PAMSPINNER_PREF_WIDTH);
addDefocusConverter();
}
public PamSpinner(ObservableList<T> arg0) {
super(arg0);
this.setPrefWidth(PAMSPINNER_PREF_WIDTH);
//this.setPrefWidth(PAMSPINNER_PREF_WIDTH);
addDefocusConverter();
}
public PamSpinner(SpinnerValueFactory<T> arg0) {
super(arg0);
addDefocusConverter();
this.setPrefWidth(PAMSPINNER_PREF_WIDTH);
//this.setPrefWidth(PAMSPINNER_PREF_WIDTH);
}
/**

View File

@ -22,13 +22,6 @@ package pamViewFX.fxStyles;
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
import PamView.ColourScheme;
import PamView.PamColors;
import atlantafx.base.theme.NordDark;
import atlantafx.base.theme.PrimerDark;
import atlantafx.base.theme.PrimerLight;
/**
* Class defining the default CSS Style sheets to use for JavaFX displays. This class can be extended and one or more methods overridden to
* specify new CSS styles. Style sheets can be specified for 3 different categories: sliding dialogs, regular dialogs, and all other components
@ -63,8 +56,6 @@ public class PamAtlantaStyle extends PamDefaultStyle {
//private String slidingDialogCSS = "/Resources/css/pamCSS.css";
//private String slidingDialogCSS = new PrimerDark().getUserAgentStylesheet();
protected String primerSlidingDialogCSS = "/Resources/css/primer-pamguard.css";
public PamAtlantaStyle() {
super.guiCSS = primerGuiCSS;

View File

@ -50,7 +50,7 @@ import warnings.PamWarning;
public class RawDLSettingsPane extends SettingsPane<RawDLParams>{
public static double MAX_WIDTH = 250;
public static double MAX_WIDTH = 270;
/**
* The source for the FFT data source.
@ -181,7 +181,6 @@ public class RawDLSettingsPane extends SettingsPane<RawDLParams>{
vBox.getChildren().add(label);
windowLength = new PamSpinner<Integer>(0, Integer.MAX_VALUE, 10, 10000);
windowLength.setPrefWidth(100);
windowLength.getStyleClass().add(Spinner.STYLE_CLASS_SPLIT_ARROWS_HORIZONTAL);
windowLength.setEditable(true);
windowLength.valueProperty().addListener((obsVal, oldVal, newVal)->{
@ -189,7 +188,6 @@ public class RawDLSettingsPane extends SettingsPane<RawDLParams>{
});
hopLength = new PamSpinner<Integer>(0, Integer.MAX_VALUE, 10, 10000);
hopLength.setPrefWidth(100);
hopLength.getStyleClass().add(Spinner.STYLE_CLASS_SPLIT_ARROWS_HORIZONTAL);
hopLength.setEditable(true);
hopLength.valueProperty().addListener((obsVal, oldVal, newVal)->{
@ -197,7 +195,6 @@ public class RawDLSettingsPane extends SettingsPane<RawDLParams>{
});
reMergeSeg = new PamSpinner<Integer>(0, Integer.MAX_VALUE, 1, 1);
reMergeSeg.setPrefWidth(100);
reMergeSeg.getStyleClass().add(Spinner.STYLE_CLASS_SPLIT_ARROWS_HORIZONTAL);
reMergeSeg.setEditable(true);