Package Acquisition

Class FileInputSystem

java.lang.Object
Acquisition.DaqSystem
Acquisition.FileInputSystem
All Implemented Interfaces:
FileDateObserver, ActionListener, EventListener, DataInputStore, PamSettings, SettingsNameProvider
Direct Known Subclasses:
FolderInputSystem

public class FileInputSystem extends DaqSystem implements ActionListener, PamSettings, FileDateObserver, DataInputStore
Implementation of DaqSystem for reading data from audio files.
Author:
Doug Gillespie
See Also:
  • Field Details

  • Constructor Details

  • Method Details

    • getDaqSpecificDialogComponent

      public JPanel getDaqSpecificDialogComponent(AcquisitionDialog acquisitionDialog)
      Description copied from class: DaqSystem
      The AcquisitionDialog has been designed to that each data source type can plug in it's own panel of device specific controls. These could be things like a file name, gain settings, channel lists, whatever is available for the specific device

      The AcquisitionDialog will handle placing this component on the dialog when a particular DaqSystem is selected. The component will be placed between a drop down list of available DaqSystem's and a section of the dialog showing the sample rate and number of channels.

      Specified by:
      getDaqSpecificDialogComponent in class DaqSystem
      Parameters:
      acquisitionDialog - the AcquisitionDialog this component will be added to
      Returns:
      dialog component specific to this DAQ device
    • dialogSetParams

      public void dialogSetParams()
      Description copied from class: DaqSystem
      Called by AcquisitionDialog.SetParams so that the dialog componenet can update it's fields
      Specified by:
      dialogSetParams in class DaqSystem
    • dialogGetParams

      public boolean dialogGetParams()
      Description copied from class: DaqSystem
      Called by AcquisitionDialog.GetParams so that parameters can be extracted from the dialog component. The DaqSystem should also implement PamSettings and handle storage of parameters between runs.
      Specified by:
      dialogGetParams in class DaqSystem
      Returns:
      true if the parameters and selections are OK. If false is returned the Acquisition dialog will not respond to its Ok button.
    • getSystemType

      public String getSystemType()
      Specified by:
      getSystemType in class DaqSystem
      Returns:
      The 'type' of data source for display in the Data Source dialog

      Calling functions should be able to handle 'null'

    • getSystemName

      public String getSystemName()
      Specified by:
      getSystemName in class DaqSystem
      Returns:
      A string describing the data source, e.g. the sound card name, file name, udp port, etc.
    • actionPerformed

      public void actionPerformed(ActionEvent e)
      Specified by:
      actionPerformed in interface ActionListener
    • setNewFile

      public void setNewFile(String newFile)
      Called when user selects a file in the dialog.
      Parameters:
      newFile -
    • getFirstFile

      public String getFirstFile()
    • interpretNewFile

      public void interpretNewFile(String newFile)
      Called when a new file or folder is selected.
      Parameters:
      newFile -
    • setStreamStatus

      public void setStreamStatus(int streamStatus)
      Overrides:
      setStreamStatus in class DaqSystem
    • getMaxChannels

      public int getMaxChannels()
      Specified by:
      getMaxChannels in class DaqSystem
      Returns:
      the maximum number of channels supporrted by the selected device, or PARAMETER_UNKNOWN
    • getMaxSampleRate

      public int getMaxSampleRate()
      Specified by:
      getMaxSampleRate in class DaqSystem
      Returns:
      the maximum sample rate supporrted by the selected device, or PARAMETER_UNKNOWN
    • getPeak2PeakVoltage

      public double getPeak2PeakVoltage(int swChannel)
      Specified by:
      getPeak2PeakVoltage in class DaqSystem
      Returns:
      peak to peak voltage for the device or PARAMETER_UNKNOWN
    • isRealTime

      public boolean isRealTime()
      Specified by:
      isRealTime in class DaqSystem
      Returns:
      true for real time systems (e.g. sound cards, NI cards, wav files which are being played back over speakers. false for reading files which are to be processed as fast as possible with no playback.
    • getSkipStartFileTime

      public long getSkipStartFileTime()
    • canPlayBack

      public boolean canPlayBack(float sampleRate)
      Specified by:
      canPlayBack in class DaqSystem
      Returns:
      true if the system can also play back sound - likely to be true for sound cards and ASIO, and some NI cards, false for wav files. Simulator ?
    • getSettingsReference

      public Serializable getSettingsReference()
      Specified by:
      getSettingsReference in interface PamSettings
      Returns:
      The serialisable object that will be stored
    • getSettingsVersion

      public long getSettingsVersion()
      Specified by:
      getSettingsVersion in interface PamSettings
      Returns:
      An integer version number for the settings
    • getUnitName

      public String getUnitName()
      Specified by:
      getUnitName in interface SettingsNameProvider
      Returns:
      A Name specific to this instance of the particular class, e.g. Sperm whale detector, Beaked whale detector, etc.
    • getUnitType

      public String getUnitType()
      Specified by:
      getUnitType in interface PamSettings
      Returns:
      A Name specific to the type, e.g. Click detector
    • restoreSettings

      public boolean restoreSettings(PamControlledUnitSettings pamControlledUnitSettings)
      Specified by:
      restoreSettings in interface PamSettings
      Returns:
      true if successful The object performs final checks (if needed) and then casts the settings data pamcontrolledunitSettings.settings into the correct type and uses as required
    • getChannels

      public int getChannels()
    • getSampleRate

      public float getSampleRate()
    • prepareSystem

      public boolean prepareSystem(AcquisitionControl daqControl)
      Description copied from class: DaqSystem
      Prepare the DaqSystem.

      Usually this is the time for opening files, preparing data buffers, etc.

      Specified by:
      prepareSystem in class DaqSystem
      Parameters:
      daqControl - AcquisitionControl unit.
      Returns:
      true if OK, false otherwise.
    • getCurrentFile

      public File getCurrentFile()
    • getDataUnitSamples

      public int getDataUnitSamples()
      Specified by:
      getDataUnitSamples in class DaqSystem
      Returns:
      the number of samples expected in each data unit.
    • prepareInputFile

      public boolean prepareInputFile()
      Open the audio stream for processing.
      Returns:
      true if audio stream opened correctly.
    • runFileAnalysis

      public boolean runFileAnalysis()
    • getFileStartTime

      public long getFileStartTime(File file)
      Interpret the file name to get the file time.

      Moved to a separate function so it can be overridden in a special version for the DCL5 data set.

      Parameters:
      file - audio file.
      Returns:
      time in milliseconds.
    • startSystem

      public boolean startSystem(AcquisitionControl daqControl)
      Description copied from class: DaqSystem
      Start the DaqSystem. This is called immediately after PrepareSystem

      Most things should be ready from the call to PrepareSystem. In StartSystem you will generally need to start a thread which will read in the data and place PamDataUnits in a buffer from where they are read by the main thred and passed on to other Pam modules for processing (see SoundCardSystem for an example)

      Specified by:
      startSystem in class DaqSystem
      Parameters:
      daqControl - AcquisitionControl unit.
      Returns:
      true if OK, false otherwise
    • stopSystem

      public void stopSystem(AcquisitionControl daqControl)
      Description copied from class: DaqSystem
      Stop the DaqSystem.
      Specified by:
      stopSystem in class DaqSystem
    • systemHasStopped

      public void systemHasStopped(boolean wasRunning)
    • bytesToSamples

      public static double[] bytesToSamples(byte[] byteArray, long nBytes, int channel, AudioFormat audioFormat)
      Format one channel of the data in a byte array into a sample array.
    • getSample

      public static double getSample(byte[] buffer, int position, int bytesPerSample, boolean isBigEndian)
      Convenience method for getting samples from a byte array. Samples should be signed, integer, of either endian-ness, and 8, 16, 24, or 32 bits long. Result is scaled to the range of [-1,1). Note that .wav files are little-endian and .aif files are big-endian.
    • daqHasEnded

      public void daqHasEnded()
      Description copied from class: DaqSystem
      Called after DAQ has stopped - for whatever reason. Nost DAQ systems will not need to do anything here, but they could potentially clean up memory The motivation for putting this here now is for the folder analysis system so that it can start analysing the next file.
      Specified by:
      daqHasEnded in class DaqSystem
    • getStatusBarComponent

      public Component getStatusBarComponent()
      Overrides:
      getStatusBarComponent in class DaqSystem
    • sayEta

      public void sayEta()
    • getEta

      public long getEta()
    • sayEta

      public void sayEta(long timeMs)
    • getDeviceName

      public String getDeviceName()
      Description copied from class: DaqSystem
      Gets a name for the acquisition device (may just be a number but need to generalise).
      Specified by:
      getDeviceName in class DaqSystem
      Returns:
    • getSampleBits

      public int getSampleBits()
      Description copied from class: DaqSystem
      Get the number of bits in each sample.
      Overrides:
      getSampleBits in class DaqSystem
      Returns:
      the number of bits in each sample.
    • fileDateChange

      public void fileDateChange(FileDate fileDate)
      Specified by:
      fileDateChange in interface FileDateObserver
    • getAquisitionControl

      public AcquisitionControl getAquisitionControl()
      Get the acquisition control for the input system
      Returns:
      the acquisition control.
    • setSelected

      public void setSelected(boolean select)
      Description copied from class: DaqSystem
      Tell a DAQ system it's been selected or deselected.
      Overrides:
      setSelected in class DaqSystem
    • getSelectedFileTypes

      public List<SoundFileType> getSelectedFileTypes()
      Returns:
      the selectedFileTypes
    • setSelectedFileTypes

      public void setSelectedFileTypes(List<SoundFileType> selectedFileTypes)
      Called when the file or file list selection is changes and finds a list of all sound file types included in the selection. this is only implemented for SUD files at the moment, the idea being to offer some additional functionality.
      Parameters:
      selectedFileTypes - the selectedFileTypes to set
    • getStoreInfo

      public InputStoreInfo getStoreInfo(boolean detail)
      Description copied from interface: DataInputStore
      Get information about the input store (e.g. start times of all files).
      Specified by:
      getStoreInfo in interface DataInputStore
      Returns:
      information about data input.
    • setAnalysisStartTime

      public boolean setAnalysisStartTime(long startTime)
      Description copied from interface: DataInputStore
      Set an analysis start time. This might get called just before processing starts, in which case
      Specified by:
      setAnalysisStartTime in interface DataInputStore
      Returns:
      ok if no problems.
    • getBatchStatus

      public String getBatchStatus()
      Description copied from interface: DataInputStore
      Very specific command handler for batch status which will only work with the acquisition folderinputSystem or the tritech file processing.
      Specified by:
      getBatchStatus in interface DataInputStore
      Returns: