*************************************************************
*** History of SOFA API for Matlab and Octave
*** Acoustics Research Institute, Austrian Academy of Sciences, Vienna
*** Project leader: Piotr Majdak, piotr@majdak.com
*** Contributors:
***		Michael Mihocic
***		Harald Ziegelwanger
***		Hagen Wierstorf
***		Wolfgang Hrauda
***		Fabian Brinkmann
***		Felix Perchfler
*************************************************************

*** DEVELOPMENT STATUS ***

*** v1.1.3
- bug fixes from unreleased SOFA API v1.1.2 merged to latest version of branch v1:
- SOFAplotGeometry: bug fix if no SourceView given
- FreeFieldDirectivityTF: missing eCM in EmitterPosition fixed
- SOFAcheckFilename: do not convert if filename is http://
- SOFAplotHRTF: plot TF with regular frequency grid. Not tested for irregular grids, though...


*** v1.1.2
- v1.1.2 is the first version of SOFA branch v1; major updates are implemented in master branch (v2)
- SOFAconvertConventions: bug fixed when converting from SimpleFreeFieldTF/GeneralTF or from SimpleFreeFieldSOS 
	to SimpleFreeFieldHRIR: N has not been removed from the API.Dimensions structure

*** v1.1.1
- SOFAstart: bug fix when starting for the first time
- SOFAconvertTUBerlinBRIR2SOFA.m: bug fixed in Obj.ReceiverPosition: left / right was inverted 
- SOFAconvertTHK2SOFA.m: bug fixed in Obj.ReceiverPosition: left / right was inverted 
- SOFAconvertFHK2SOFA.m: bug fixed in Obj.ReceiverPosition: left / right was inverted 
- SOFAappendText.m: example added to help
- SOFAcompileConventions: fix for changes in Octave 4.2
- FreeFieldDirectivityTF: updated to version 0.2

*** v1.1.0 (not released)
- SOFAremoveVariable added. It removes a variable from the SOFA object.
- SOFAplotGeometry: show SourceView, and bug fix ListenerView. 
- SOFAdbPath, SOFAdbURL: reset the path/URL to the default if the parameter is 'reset'.
- SOFAhrtf2dtf: handling for R=1 added.
- SOFAfind added: Find an index for a given position (draft, to be improved).
- SOFAload: provide error message on loading unknown conventions

*** v1.0.4 (29.4.2019)
- on "SOFA upgrade warning", display a message on how to switch it off
- SOFAplotHRTF: 'magsagittal' added to plot HRTFs along a sagittal plane.
- SOFAload can use filenames beginning with "db://" to indicate to load from the database (local or remote)
- SOFAstart avoids repeated starts now - 
  - once SOFAstart has been started, SOFAstart won't be executed fully again, when the paths are still available.
  - Call SOFAstart('restart') if a restart needs to be forced. 
  

*** v1.0.3 (5.9.2018)
- automatic load of the netcdf package in Octave on SOFAstart
- SOFAspat: bugs in normalization, actual position selection removed
- SOFAhrtf2dtf: RMS and weighted averaging added, Octave compatibility ensured
- SOFAcompileConventions: bug fix when compiling conventions in Octave 4.2.1
- test_SOFAall: suppress irrelevant warnings
- SOFAconvertMIT2SOFA: wavread replaced by audioread
- SOFAconvertConventions: it can convert from SimpleFreeFieldTF to SimpleFreeFieldHRIR. 
- SOFAplotHRTF: more variable input of parameters, normalization optional
- SOFAconvertTHK2SOFA: converter from THK format (in miro format) to SOFA added. 

*** v1.0.2 (16.8.2016)
- SOFAplotHRTF: extended to SimpleFreeFieldTF and some cases of GeneralTF
- SOFAplotGeometry: extended to SimpleFreeFieldTF
- SOFAconvertTUBerling2SOFA: uses MultiSpeakerBRIR now
- SOFAspat, SOFAcalculateAPV: minor bug fixes

*** v1.0.1 (10.6.2015)
- miro class is not supported in Octave. Error is thrown in demo_FHK2SOFA and converterFHK2SOFA
- demo_BTDEI2SOFA: bug fix in renamed BTDEI files
- demo_SOFA2ARI: bug fix in coordinate comparison

*** v1.0.0 (3.6.2015)
- 'short' flag added to SOFAstart in order to show only a short header on start-up.
- warnings are function-specific now and can be specifically enabled/disabled.

*** v0.9.1 (13.5.2015) 
- 0.9.1 is the internal numbering for the release version 1.0 RC2
- SimpleFreeFieldSOS added
- SOFAexpand and SOFAaddVariable handle Data. variables now
- SOFAplotHRTF supports SimpleFreeFielsSOS now

*** v0.9.0 (12.5.2015) 

- 0.9.0 is the internal numbering for the release version 1.0 RC1
- update of all conventions to SOFA 1.0
- changes according to the AES212-standard implemented
- Octave: upgraded to a new netcdf-package: http://modb.oce.ulg.ac.be/mediawiki/index.php/Octave-netcdf
- Matlab/Octave: NETCDF* functions merged for both systems (thx to Hagen Wierstorf)
- HRTFs directory: database handling improved: 
  - SOFAdbPath mirrors http://sofacoustics.org/data now. 
	- Warning: directory structure of HRTFs/SOFA changed! 
	- all SOFA files created by demo_ will be saved in sofa_api_mo_test 
	- all demo_ files which use SOFA files will be automatically downloaded from sofacoustics.org
- clean up of comments
- SOFAcalculateAPV: reimplemented
- horsph and sph2hor: bug fixes
- directory CDL deleted (had historical relevance only)
- SOFAdefinitions: flag 'units' added for unit aliases.
- SOFAgetConventions: returns empty vector if conventions not supported

*** v0.4.4 (until 20.4.2015) unreleased

*** v0.4.3 (5.6.2014) by Piotr Majdak
- fix: annoying bug in SOFAupgradeConventions

*** v0.4.2 (7.4.2014) by Piotr Majdak
- fix: SOFAhrtf2dtf supports more than two receivers

*** v0.4.1 (30.3.2014) by Piotr Majdak
- MultiSpeakerBRIR conventions added
- SOFAcompact: compacts variables along dimensions, opposite to SOFAexpand. Functionality not complete for 3D variables
- SOFAcompare: compares two SOFA objects. Preliminary functionality; compares attributes only
- SOFAexpand: expanding of Data added
- bug fix: SOFAplotGeometry
- function-specific warnings added: SOFA:upgrade and SOFA:save
- SOFAload optimized for handling huge (3.7 GB) data files on a 4 GB RAM machine


*** v0.4 (19.3.2014) by Piotr Majdak
- implements SOFA 0.6:
  - GLOBAL_Source renamed to GLOBAL_Origin 
  - GLOBAL_TimeCreated and GLOBAL_TimeModified renamed to GLOBAL_DateCreated and GLOBAL_DateModified, respectively
  - If ListenerUp is provided, ListenerView must be provided as well. If ListenerView is provided, ListenerView_Type and ListenerView_Units must be provided as well. This also applies to Source, Emitter, and Receiver objects. 
  - Geometry: only "cartesian" or "spherical" coordinate systems allowed
  - In SimpleFreeFieldHRIR: GLOBAL_SubjectID renamed to GLOBAL_ListenerShortName
- Converters adapted to provide more precise information
- SOFAappendText added for appending a text to an attribute
- SOFAdefinitions: returns various definitions, depending on the input flag
- SOFAupgradeConventions: upgrades conventions up to 0.6 now. 

*** v0.3.1 (2.9.2013) by Piotr Majdak
- zip file required 7-zip, fixed
- minor bug fixes

*** v0.3.0 (27.8.2013) by Piotr Majdak
- major change: .API added to the structure, contains .Dimensions and the dimension sizes (formely known as .DimSize)
- implements SOFA 0.5 (without the support for string arrays)
- upgrade of SimpleFreeFieldHRIR 0.3 and other conventions
- syntax of convention files .csv adapted to that from the specs ("_" replaced by ":")
- SOFAcalculateAPV added, provides calculation of the apparent position vector (APV)
- SOFAplotGeometry added, rudimentary plotting available for SimpleFreeFieldHRIR and SingleRoomDRIR
- SOFAaddVariables supports private variables now

*** v0.2.9 (30.5.2013) by Piotr Majdak
- development snapshot for the draft of SOFA 0.4 
- tested for Matlab (Octave support not finished yet)
- conventions implemented as CSV files which are compiled to MAT at start and are cached by SOFAgetConventions
- user-defined HRTF database path
- seemless download of remote SOFA files on SOFAload
- user-defined HRTF internet repository
- seemless upgrade from SOFA 0.3 files on SOFAload

*** v0.2.1 (13.5.2013) by Piotr Majdak
- Bug fix with the wrong spelling of "License"
- "License" it very restrictive per default now
- demo_SOFAsave included

*** v0.2.0 (2.5.2013) by Piotr Majdak
- Updated to SOFA 0.3
- Octave support added
- demo_* create file names compliant with MS DOS FAT character set
- test script (test/test_SOFAall.m) added
- converters do not add database specific attriubutes, this is done in demo_*
- new demos: SOFAmerge, SOFAload, SOFAsave
- readme improved
- Pulse.sofa removed as binary, it can be created with demo_SOFAsave now
- Link to HRTF files saved as SOFA added (nice for playing around)

*** v0.1.4 (2.5.2013) by Piotr Majdak
- Major bug fix: dimension order reversed while loading/saving in Matlab
- Some other minor issues closed
- Ready for intercompatibility test between Matlab and Octave

*** v0.1.3 (18.4.2013) by Piotr Majdak
- This version implements SOFA specs version 0.2 with the following limitations:
  - no Octave support
  - only SimpleFreeFieldHRIR supported and tested
  
- Detailed changes:  
  - directory structure changed
  - new converter added: SOFA2ARI
  - SOFAdbPath added

*** v0.1.2 (17.4.2013) by Piotr Majdak
- SOFAload: partial loading added. Load of metadata only or by measurement section
- docs: changes since AES2013-specs added.
- history file moved to docs
- Repository cleaned from older stuff

*** v0.1.1 (16.4.2013) by Piotr Majdak
- SOFAload improved: checks added. Still further checks would be nice, but it can be used now.
- SOFAsave improved: saves user-defined variables
- SOFAexpand added: expands the singleton dimensions in the SOFA object
- Convertors for MIT KEMAR, LISTEN, and CIPIC databases added (with corresponding demos)
- HRTF directory created where all HRTFs should be stored. The convertors rely on that.
- SOFAspat improved, now the engine works better

*** v0.1.0 (11.4.2013) by Piotr Majdak
- Saving/Loading works in Matlab, it is quite rudimentary now:
  - Data and Variables saved as Double
  - No string in variables supported yet
  - One Conventions implemented and tested (SingleFreeFieldHRIR)
  - Loading: no checks (todo)
  - Saving: removes optional variables (bug)
  - No partial loading/saving yet 
- Convertion: ARI2SOFA with demo_ARI2SOFA added
- Spatialization: very rudimentary demo added (SOFAspat and demo_SOFAspat), just for fun

*** v0.0.12 (12.3.2013) by Piotr Majdak
- Conventions: transmitter renamed to emitter

*** v0.0.11 (7.3.2013) by Piotr Majdak
- Conventions added
- Octave branch deleted
- Examples: ARI2SOFA as a function
- General: adapted to current specs. Don't use yet.

*** v0.0.10 (5.3.2013) by Piotr Majdak
- ARI2SOFA: changed to a function now, the fields are more clear defined
- SOFAsave: transmitted and receiver separated, dimensions changed
- Specs have drastically changed - beware of using this version at the current development state

*** v0.0.9 (31.1.2013) by Piotr Majdak
- included octave part from Hagen Wierstorf
- changed the data structure format
- added try-catch to SOFAsave to avoid open file handles

*** v0.0.8 (24.08.2012) by Wolfgang Hrauda
- changed data structure format
- updates and fixes in several functions and scripts
- added Eigenmike.sofa as a demo file

*** v0.0.7 (23.08.2012) by Wolfgang Hrauda
- now using structures or cells as input and output values of functions
- added and renamed several functions and scripts
- updates in several functions and scripts

*** v0.0.6 (14.08.2012) by Wolfgang Hrauda
- added new functions for coordinate type conversion
- functionality of SOFAgetData slightly expanded
- dismissed function SOFAloadVariables (is now an option in SOFAload)
- "ARI_to_SOFA_lab_setup" updated
- minor fixes in several functions

*** v0.0.5 (08.08.2012) by Wolfgang Hrauda
- implemented additional dimensions for string variables in SOFAsave
- added new function SOFAloadVariables (a variant of SOFAload)
- added new demo script "ARI_to_SOFA_lab_setup"
- fixes in several functions

*** v0.0.4 (07.08.2012) by Wolfgang Hrauda
- fixed some issues in SOFAsave
- minor changes in SOFAload
- added new functions SOFAgetID, SOFAgetData, SOFAlistVariables

*** v0.0.3 (03.08.2012) by Wolfgang Hrauda
- split demo script in two API functions and one script that calls them
- change file extension to 'sofa'

*** v0.0.2 (01.08.2012) by Wolfgang Hrauda
- finished matrix dimension check

*** v0.0.1 (31.07.2012) by Wolfgang Hrauda
- demo script that loads ARI .mat file, converts it to SOFA format and writes to .nc-file
  then reads all data from .nc.file
