diff --git a/README.md b/README.md index 4b197ca..c8bd2fe 100644 --- a/README.md +++ b/README.md @@ -6,9 +6,12 @@ applications that read or write SOFA data. Test data violating the conventions are contained in *data*. This data is intended for testing if an application correctly verifies data against AES69 when reading it. -**Conventions are implemented according to AES69-2022 +**Conventions are implemented according to AES69 (SOFA conventions version 2.1)** +AES69-2022: *AES standard for file exchange - Spatial acoustic data file +format*, Audio Engineering Society, Inc., New York, NY, USA. + Updating the conventions and data requires the sofar package available from and can be installed via @@ -29,9 +32,6 @@ To update the conventions from : - merge to master branch - update *sofa_conventions* submodule in sofar -AES69-2022: *AES standard for file exchange - Spatial acoustic data file -format*, Audio Engineering Society, Inc., New York, NY, USA. - ## 1. Conventions This folder contains the official SOFA conventions as json and csv files. SOFA @@ -95,7 +95,7 @@ and the verification rules. The verification requires the following steps: 7. All verification rules from rules.json must be checked (see below) The json files inside this folder contain rules for verifying SOFA files. -The rules were manually extracted from the SOFA Standard AES69-2020. Note that +The rules were manually extracted from the SOFA Standard AES69. Note that the json files are written with `write_verification_rules.py` where additional comments on the rules can be found. diff --git a/write_verification_rules.py b/write_verification_rules.py index f416433..07cdcc1 100644 --- a/write_verification_rules.py +++ b/write_verification_rules.py @@ -36,13 +36,13 @@ coords_min = ["cartesian", "spherical"] coords_full = coords_min + ["spherical harmonics"] -# definition of units acordings to AES69-2020 Table 7 +# definition of units acordings to AES69 Table 7 units_min = ["metre", "degree, degree, metre"] units_full = units_min + [units_min[1]] # allowed alternative versions of units # NOTE: AES69 allows multi-unit strings to be separated by comma, comma plus -# space and space (AES69-2020 Section 4.7.8). This means that the unit +# space and space (AES69 Section 4.7.8). This means that the unit # "cubic metre" will be tested as a multi unit string and is thus also # split in the aliases. A separate test for verifying that "cubic" is # followed be "metre" must be performed. @@ -59,18 +59,18 @@ } # possible values for restricted dimensions in the API # Dimensions for spherical harmonics (considering orders up to 100) according -# to AES69-2020 Eq. (5) and (6) +# to AES69 Eq. (5) and (6) sh_dimension = ([(N+1)**2 for N in range(100)], "(N+1)**2 where N is the spherical harmonics order") -# Dimensions for SOS (considering up to 100 sections) according to AES69-2020 -# Appenx C.5.2 +# Dimensions for SOS (considering up to 100 sections) according to AES69 +# Appendix C.5.2 sos_dimension = ([6 * (N + 1) for N in range(100)], "an integer multiple of 6 greater 0") # verification rules rules = { # Global -------------------------------------------------------------- - # Check value of GLOBAL_DataType (AES69-2020 Annex C) + # Check value of GLOBAL_DataType (AES69 Annex C) # (FIRE and TFE are legacy data types from SOFA version 1.0) "GLOBAL:DataType": { "value": ["Audio", "FIR", "FIR-E", "FIRE", "TF", "TF-E", "SOS"], @@ -120,7 +120,7 @@ "value": sos_dimension[0], "value_str": sos_dimension[1]} }}}}, - # Specified in AES69-2020 SEction 4.7.7 and Table 6 + # Specified in AES69 Section 4.7.7 and Table 6 "GLOBAL:RoomType": { "value": ["free field", "reverberant", "shoebox", "dae"], "specific": { @@ -131,7 +131,7 @@ "RoomCornerB": None}, "dae": { "GLOBAL:RoomGeometry": None}}}, - # Specified in AES69-2020 Annex D + # Specified in AES69 Annex D "GLOBAL:SOFAConventions": { "value": _get_conventions(return_type="name"), "specific": { @@ -185,12 +185,12 @@ "GLOBAL:DataType": ["FIR-E"]}, "FreeFieldDirectivityTF": { "GLOBAL:DataType": ["TF"]}}}, - # check NLongName (AES69-2020 Tables C.3 and C.4) + # check NLongName (AES69 Tables C.3 and C.4) "N:LongName": { "value": ["frequency"]}, # Listener ------------------------------------------------------------ # Possible values and dependencies are specified in - # AES69-2020 Section 4.7.3 + # AES69 Section 4.7.3 # --------------------------------------------------------------------- # Check values and consistency of if ListenerPosition Type and Unit "ListenerPosition:Type": { @@ -220,7 +220,7 @@ "general": ["ListenerView"]}, # Receiver ------------------------------------------------------------ # Possible values and dependencies are specified in - # AES69-2020 Section 4.7.4 + # AES69 Section 4.7.4 # --------------------------------------------------------------------- # Check values and consistency of if ReceiverPosition Type and Unit "ReceiverPosition:Type": { @@ -258,7 +258,7 @@ "general": ["ReceiverView"]}, # Source -------------------------------------------------------------- # Possible values and dependencies are specified in - # AES69-2020 Section 4.7.5 + # AES69 Section 4.7.5 # --------------------------------------------------------------------- # Check values and consistency of if SourcePosition Type and Unit "SourcePosition:Type": { @@ -288,7 +288,7 @@ "general": ["SourceView"]}, # Emitter ------------------------------------------------------------- # Possible values and dependencies are specified in - # AES69-2020 Section 4.7.6 + # AES69 Section 4.7.6 # --------------------------------------------------------------------- # Check values and consistency of if EmitterPosition Type and Unit "EmitterPosition:Type": { @@ -331,7 +331,7 @@ "general": ["GLOBAL:EmitterDescription"]}, # Room ---------------------------------------------------------------- # Possible values and dependencies are specified in - # AES69-2020 Section 4.7.7 + # AES69 Section 4.7.7 # --------------------------------------------------------------------- "RoomVolume": { "value": None,