sofar 1.2.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (105) hide show
  1. docs/Makefile +20 -0
  2. docs/api_reference.rst +20 -0
  3. docs/conf.py +167 -0
  4. docs/contributing.rst +1 -0
  5. docs/history.rst +1 -0
  6. docs/index.rst +4 -0
  7. docs/make.bat +36 -0
  8. docs/readme.rst +1 -0
  9. docs/resources/conventions.py +162 -0
  10. docs/resources/working_with_sofa_HRIR_lateral.png +0 -0
  11. docs/resources/working_with_sofa_source_horizontal.png +0 -0
  12. docs/resources/working_with_sofa_source_lateral.png +0 -0
  13. docs/sofar.rst +82 -0
  14. sofar/__init__.py +28 -0
  15. sofar/io.py +427 -0
  16. sofar/sofa.py +1835 -0
  17. sofar/sofa_conventions/VERSION +1 -0
  18. sofar/sofa_conventions/conventions/AnnotatedEmitterAudio_0.2.csv +46 -0
  19. sofar/sofa_conventions/conventions/AnnotatedEmitterAudio_0.2.json +353 -0
  20. sofar/sofa_conventions/conventions/AnnotatedReceiverAudio_0.2.csv +46 -0
  21. sofar/sofa_conventions/conventions/AnnotatedReceiverAudio_0.2.json +353 -0
  22. sofar/sofa_conventions/conventions/FreeFieldDirectivityTF_1.1.csv +59 -0
  23. sofar/sofa_conventions/conventions/FreeFieldDirectivityTF_1.1.json +444 -0
  24. sofar/sofa_conventions/conventions/FreeFieldHRIR_1.0.csv +43 -0
  25. sofar/sofa_conventions/conventions/FreeFieldHRIR_1.0.json +333 -0
  26. sofar/sofa_conventions/conventions/FreeFieldHRTF_1.0.csv +44 -0
  27. sofar/sofa_conventions/conventions/FreeFieldHRTF_1.0.json +340 -0
  28. sofar/sofa_conventions/conventions/GeneralFIR-E_2.0.csv +37 -0
  29. sofar/sofa_conventions/conventions/GeneralFIR-E_2.0.json +270 -0
  30. sofar/sofa_conventions/conventions/GeneralFIR_1.0.csv +40 -0
  31. sofar/sofa_conventions/conventions/GeneralFIR_1.0.json +295 -0
  32. sofar/sofa_conventions/conventions/GeneralSOS_1.0.csv +40 -0
  33. sofar/sofa_conventions/conventions/GeneralSOS_1.0.json +306 -0
  34. sofar/sofa_conventions/conventions/GeneralTF-E_1.0.csv +38 -0
  35. sofar/sofa_conventions/conventions/GeneralTF-E_1.0.json +277 -0
  36. sofar/sofa_conventions/conventions/GeneralTF_1.0.csv +38 -0
  37. sofar/sofa_conventions/conventions/GeneralTF_1.0.json +277 -0
  38. sofar/sofa_conventions/conventions/GeneralTF_2.0.csv +38 -0
  39. sofar/sofa_conventions/conventions/GeneralTF_2.0.json +277 -0
  40. sofar/sofa_conventions/conventions/SimpleFreeFieldHRIR_1.0.csv +47 -0
  41. sofar/sofa_conventions/conventions/SimpleFreeFieldHRIR_1.0.json +369 -0
  42. sofar/sofa_conventions/conventions/SimpleFreeFieldHRSOS_1.0.csv +43 -0
  43. sofar/sofa_conventions/conventions/SimpleFreeFieldHRSOS_1.0.json +349 -0
  44. sofar/sofa_conventions/conventions/SimpleFreeFieldHRTF_1.0.csv +44 -0
  45. sofar/sofa_conventions/conventions/SimpleFreeFieldHRTF_1.0.json +340 -0
  46. sofar/sofa_conventions/conventions/SimpleFreeFieldSOS_1.0.csv +43 -0
  47. sofar/sofa_conventions/conventions/SimpleFreeFieldSOS_1.0.json +349 -0
  48. sofar/sofa_conventions/conventions/SimpleHeadphoneIR_1.0.csv +51 -0
  49. sofar/sofa_conventions/conventions/SimpleHeadphoneIR_1.0.json +396 -0
  50. sofar/sofa_conventions/conventions/SingleRoomMIMOSRIR_1.0.csv +78 -0
  51. sofar/sofa_conventions/conventions/SingleRoomMIMOSRIR_1.0.json +601 -0
  52. sofar/sofa_conventions/conventions/SingleRoomSRIR_1.0.csv +78 -0
  53. sofar/sofa_conventions/conventions/SingleRoomSRIR_1.0.json +601 -0
  54. sofar/sofa_conventions/conventions/deprecated/AnnotatedEmitterAudio_0.1.csv +46 -0
  55. sofar/sofa_conventions/conventions/deprecated/AnnotatedEmitterAudio_0.1.json +351 -0
  56. sofar/sofa_conventions/conventions/deprecated/AnnotatedReceiverAudio_0.1.csv +46 -0
  57. sofar/sofa_conventions/conventions/deprecated/AnnotatedReceiverAudio_0.1.json +351 -0
  58. sofar/sofa_conventions/conventions/deprecated/FreeFieldDirectivityTF_1.0.csv +58 -0
  59. sofar/sofa_conventions/conventions/deprecated/FreeFieldDirectivityTF_1.0.json +437 -0
  60. sofar/sofa_conventions/conventions/deprecated/GeneralFIRE_1.0.csv +37 -0
  61. sofar/sofa_conventions/conventions/deprecated/GeneralFIRE_1.0.json +270 -0
  62. sofar/sofa_conventions/conventions/deprecated/MultiSpeakerBRIR_0.3.csv +48 -0
  63. sofar/sofa_conventions/conventions/deprecated/MultiSpeakerBRIR_0.3.json +376 -0
  64. sofar/sofa_conventions/conventions/deprecated/SimpleFreeFieldHRIR_0.4.csv +43 -0
  65. sofar/sofa_conventions/conventions/deprecated/SimpleFreeFieldHRIR_0.4.json +333 -0
  66. sofar/sofa_conventions/conventions/deprecated/SimpleFreeFieldTF_0.4.csv +44 -0
  67. sofar/sofa_conventions/conventions/deprecated/SimpleFreeFieldTF_0.4.json +340 -0
  68. sofar/sofa_conventions/conventions/deprecated/SimpleFreeFieldTF_1.0.csv +44 -0
  69. sofar/sofa_conventions/conventions/deprecated/SimpleFreeFieldTF_1.0.json +340 -0
  70. sofar/sofa_conventions/conventions/deprecated/SimpleHeadphoneIR_0.1.csv +51 -0
  71. sofar/sofa_conventions/conventions/deprecated/SimpleHeadphoneIR_0.1.json +396 -0
  72. sofar/sofa_conventions/conventions/deprecated/SimpleHeadphoneIR_0.2.csv +51 -0
  73. sofar/sofa_conventions/conventions/deprecated/SimpleHeadphoneIR_0.2.json +396 -0
  74. sofar/sofa_conventions/conventions/deprecated/SingleRoomDRIR_0.2.csv +47 -0
  75. sofar/sofa_conventions/conventions/deprecated/SingleRoomDRIR_0.2.json +360 -0
  76. sofar/sofa_conventions/conventions/deprecated/SingleRoomDRIR_0.3.csv +47 -0
  77. sofar/sofa_conventions/conventions/deprecated/SingleRoomDRIR_0.3.json +360 -0
  78. sofar/sofa_conventions/conventions/deprecated/SingleTrackedAudio_0.1.csv +47 -0
  79. sofar/sofa_conventions/conventions/deprecated/SingleTrackedAudio_0.1.json +366 -0
  80. sofar/sofa_conventions/conventions/deprecated/SingleTrackedAudio_0.2.csv +51 -0
  81. sofar/sofa_conventions/conventions/deprecated/SingleTrackedAudio_0.2.json +397 -0
  82. sofar/sofa_conventions/rules/deprecations.json +13 -0
  83. sofar/sofa_conventions/rules/rules.json +819 -0
  84. sofar/sofa_conventions/rules/unit_aliases.json +11 -0
  85. sofar/sofa_conventions/rules/upgrade.json +226 -0
  86. sofar/sofa_conventions/write_upgrade_rules.py +139 -0
  87. sofar/sofa_conventions/write_verification_data.py +313 -0
  88. sofar/sofa_conventions/write_verification_rules.py +356 -0
  89. sofar/sofastream.py +301 -0
  90. sofar/update_conventions.py +449 -0
  91. sofar/utils.py +316 -0
  92. sofar-1.2.1.dist-info/LICENSE +22 -0
  93. sofar-1.2.1.dist-info/METADATA +136 -0
  94. sofar-1.2.1.dist-info/RECORD +105 -0
  95. sofar-1.2.1.dist-info/WHEEL +5 -0
  96. sofar-1.2.1.dist-info/top_level.txt +3 -0
  97. tests/__init__.py +0 -0
  98. tests/conftest.py +27 -0
  99. tests/test_deprecations.py +19 -0
  100. tests/test_io.py +349 -0
  101. tests/test_sofa.py +353 -0
  102. tests/test_sofa_upgrade_conventions.py +111 -0
  103. tests/test_sofa_verify.py +480 -0
  104. tests/test_sofastream.py +127 -0
  105. tests/test_utils.py +250 -0
@@ -0,0 +1,353 @@
1
+ {
2
+ "GLOBAL:Conventions": {
3
+ "default": "SOFA",
4
+ "flags": "rm",
5
+ "dimensions": null,
6
+ "type": "attribute",
7
+ "comment": ""
8
+ },
9
+ "GLOBAL:Version": {
10
+ "default": "2.1",
11
+ "flags": "rm",
12
+ "dimensions": null,
13
+ "type": "attribute",
14
+ "comment": ""
15
+ },
16
+ "GLOBAL:SOFAConventions": {
17
+ "default": "AnnotatedReceiverAudio",
18
+ "flags": "rm",
19
+ "dimensions": null,
20
+ "type": "attribute",
21
+ "comment": ""
22
+ },
23
+ "GLOBAL:SOFAConventionsVersion": {
24
+ "default": "0.2",
25
+ "flags": "rm",
26
+ "dimensions": null,
27
+ "type": "attribute",
28
+ "comment": ""
29
+ },
30
+ "GLOBAL:APIName": {
31
+ "default": "",
32
+ "flags": "rm",
33
+ "dimensions": null,
34
+ "type": "attribute",
35
+ "comment": ""
36
+ },
37
+ "GLOBAL:APIVersion": {
38
+ "default": "",
39
+ "flags": "rm",
40
+ "dimensions": null,
41
+ "type": "attribute",
42
+ "comment": ""
43
+ },
44
+ "GLOBAL:ApplicationName": {
45
+ "default": "",
46
+ "flags": null,
47
+ "dimensions": null,
48
+ "type": "attribute",
49
+ "comment": ""
50
+ },
51
+ "GLOBAL:ApplicationVersion": {
52
+ "default": "",
53
+ "flags": null,
54
+ "dimensions": null,
55
+ "type": "attribute",
56
+ "comment": ""
57
+ },
58
+ "GLOBAL:AuthorContact": {
59
+ "default": "",
60
+ "flags": "m",
61
+ "dimensions": null,
62
+ "type": "attribute",
63
+ "comment": ""
64
+ },
65
+ "GLOBAL:Comment": {
66
+ "default": "",
67
+ "flags": null,
68
+ "dimensions": null,
69
+ "type": "attribute",
70
+ "comment": ""
71
+ },
72
+ "GLOBAL:DataType": {
73
+ "default": "Audio",
74
+ "flags": "rm",
75
+ "dimensions": null,
76
+ "type": "attribute",
77
+ "comment": ""
78
+ },
79
+ "GLOBAL:History": {
80
+ "default": "",
81
+ "flags": null,
82
+ "dimensions": null,
83
+ "type": "attribute",
84
+ "comment": ""
85
+ },
86
+ "GLOBAL:License": {
87
+ "default": "No license provided, ask the author for permission",
88
+ "flags": "m",
89
+ "dimensions": null,
90
+ "type": "attribute",
91
+ "comment": ""
92
+ },
93
+ "GLOBAL:Organization": {
94
+ "default": "",
95
+ "flags": "m",
96
+ "dimensions": null,
97
+ "type": "attribute",
98
+ "comment": ""
99
+ },
100
+ "GLOBAL:References": {
101
+ "default": "",
102
+ "flags": null,
103
+ "dimensions": null,
104
+ "type": "attribute",
105
+ "comment": ""
106
+ },
107
+ "GLOBAL:RoomType": {
108
+ "default": "free field",
109
+ "flags": "m",
110
+ "dimensions": null,
111
+ "type": "attribute",
112
+ "comment": ""
113
+ },
114
+ "GLOBAL:Origin": {
115
+ "default": "",
116
+ "flags": null,
117
+ "dimensions": null,
118
+ "type": "attribute",
119
+ "comment": ""
120
+ },
121
+ "GLOBAL:DateCreated": {
122
+ "default": "",
123
+ "flags": "m",
124
+ "dimensions": null,
125
+ "type": "attribute",
126
+ "comment": ""
127
+ },
128
+ "GLOBAL:DateModified": {
129
+ "default": "",
130
+ "flags": "m",
131
+ "dimensions": null,
132
+ "type": "attribute",
133
+ "comment": ""
134
+ },
135
+ "GLOBAL:Title": {
136
+ "default": "",
137
+ "flags": "m",
138
+ "dimensions": null,
139
+ "type": "attribute",
140
+ "comment": ""
141
+ },
142
+ "ListenerPosition": {
143
+ "default": [
144
+ 0,
145
+ 0,
146
+ 0
147
+ ],
148
+ "flags": "m",
149
+ "dimensions": "IC, MC",
150
+ "type": "double",
151
+ "comment": "Position of the head. IC if not tracked, MC if tracked."
152
+ },
153
+ "ListenerPosition:Type": {
154
+ "default": "cartesian",
155
+ "flags": "m",
156
+ "dimensions": null,
157
+ "type": "attribute",
158
+ "comment": ""
159
+ },
160
+ "ListenerPosition:Units": {
161
+ "default": "metre",
162
+ "flags": "m",
163
+ "dimensions": null,
164
+ "type": "attribute",
165
+ "comment": ""
166
+ },
167
+ "ReceiverPosition": {
168
+ "default": [
169
+ [
170
+ 0,
171
+ 0.09,
172
+ 0
173
+ ],
174
+ [
175
+ 0,
176
+ -0.09,
177
+ 0
178
+ ]
179
+ ],
180
+ "flags": "m",
181
+ "dimensions": "rC, rCM",
182
+ "type": "double",
183
+ "comment": "Position of the ears. RC if not tracked, RCM if tracked."
184
+ },
185
+ "ReceiverPosition:Type": {
186
+ "default": "cartesian",
187
+ "flags": "m",
188
+ "dimensions": null,
189
+ "type": "attribute",
190
+ "comment": ""
191
+ },
192
+ "ReceiverPosition:Units": {
193
+ "default": "metre",
194
+ "flags": "m",
195
+ "dimensions": null,
196
+ "type": "attribute",
197
+ "comment": ""
198
+ },
199
+ "SourcePosition": {
200
+ "default": [
201
+ 0,
202
+ 0,
203
+ 0
204
+ ],
205
+ "flags": "m",
206
+ "dimensions": "IC, MC",
207
+ "type": "double",
208
+ "comment": "Position of the virtual ensemble. IC if not tracked, MC if tracked."
209
+ },
210
+ "SourcePosition:Type": {
211
+ "default": "cartesian",
212
+ "flags": "m",
213
+ "dimensions": null,
214
+ "type": "attribute",
215
+ "comment": ""
216
+ },
217
+ "SourcePosition:Units": {
218
+ "default": "metre",
219
+ "flags": "m",
220
+ "dimensions": null,
221
+ "type": "attribute",
222
+ "comment": ""
223
+ },
224
+ "EmitterPosition": {
225
+ "default": [
226
+ 0,
227
+ 0,
228
+ 0
229
+ ],
230
+ "flags": "m",
231
+ "dimensions": "eC, eCM",
232
+ "type": "double",
233
+ "comment": "Position of the virtual source(s). eC if not tracked, eCM if tracked."
234
+ },
235
+ "EmitterPosition:Type": {
236
+ "default": "cartesian",
237
+ "flags": "m",
238
+ "dimensions": null,
239
+ "type": "attribute",
240
+ "comment": ""
241
+ },
242
+ "EmitterPosition:Units": {
243
+ "default": "metre",
244
+ "flags": "m",
245
+ "dimensions": null,
246
+ "type": "attribute",
247
+ "comment": ""
248
+ },
249
+ "ListenerUp": {
250
+ "default": [
251
+ 0,
252
+ 0,
253
+ 1
254
+ ],
255
+ "flags": "m",
256
+ "dimensions": "IC, MC",
257
+ "type": "double",
258
+ "comment": "Must be of the same dimensionality as ListenerView."
259
+ },
260
+ "ListenerView": {
261
+ "default": [
262
+ 1,
263
+ 0,
264
+ 0
265
+ ],
266
+ "flags": "m",
267
+ "dimensions": "IC, MC",
268
+ "type": "double",
269
+ "comment": "Orientation of the head. IC if not tracked, MC if tracked."
270
+ },
271
+ "ListenerView:Type": {
272
+ "default": "cartesian",
273
+ "flags": "m",
274
+ "dimensions": null,
275
+ "type": "attribute",
276
+ "comment": ""
277
+ },
278
+ "ListenerView:Units": {
279
+ "default": "metre",
280
+ "flags": "m",
281
+ "dimensions": null,
282
+ "type": "attribute",
283
+ "comment": ""
284
+ },
285
+ "M": {
286
+ "default": 0,
287
+ "flags": "m",
288
+ "dimensions": "m",
289
+ "type": "double",
290
+ "comment": "Time stamp of the measurements in M, defines the size of M."
291
+ },
292
+ "M:LongName": {
293
+ "default": "time",
294
+ "flags": "m",
295
+ "dimensions": null,
296
+ "type": "attribute",
297
+ "comment": "Narrative name for M"
298
+ },
299
+ "M:Units": {
300
+ "default": "second",
301
+ "flags": "m",
302
+ "dimensions": null,
303
+ "type": "attribute",
304
+ "comment": "Units used for M"
305
+ },
306
+ "Response": {
307
+ "default": [
308
+ ""
309
+ ],
310
+ "flags": null,
311
+ "dimensions": "I, C, S",
312
+ "type": "string",
313
+ "comment": "the subject\u00e2\u20ac\u2122s response"
314
+ },
315
+ "Response:Type": {
316
+ "default": "",
317
+ "flags": null,
318
+ "dimensions": null,
319
+ "type": "attribute",
320
+ "comment": "type depends on the dimension"
321
+ },
322
+ "Response:LongName": {
323
+ "default": "",
324
+ "flags": null,
325
+ "dimensions": null,
326
+ "type": "attribute",
327
+ "comment": "narrative description of the response type"
328
+ },
329
+ "Data.Receiver": {
330
+ "default": [
331
+ 0,
332
+ 0
333
+ ],
334
+ "flags": "m",
335
+ "dimensions": "In, Rn",
336
+ "type": "double",
337
+ "comment": "(binaural) audio data at the receivers; n=number of audio samples"
338
+ },
339
+ "Data.SamplingRate": {
340
+ "default": 44100,
341
+ "flags": "m",
342
+ "dimensions": "I",
343
+ "type": "double",
344
+ "comment": ""
345
+ },
346
+ "Data.SamplingRate:Units": {
347
+ "default": "hertz",
348
+ "flags": "m",
349
+ "dimensions": null,
350
+ "type": "attribute",
351
+ "comment": ""
352
+ }
353
+ }
@@ -0,0 +1,59 @@
1
+ Name Default Flags Dimensions Type Comment
2
+ GLOBAL:Conventions SOFA rm attribute
3
+ GLOBAL:Version 2.1 rm attribute
4
+ GLOBAL:SOFAConventions FreeFieldDirectivityTF rm attribute This conventions stores directivities of acoustic sources (instruments, loudspeakers, singers, talkers, etc) in the frequency domain for multiple musical notes in free field.
5
+ GLOBAL:SOFAConventionsVersion 1.1 rm attribute
6
+ GLOBAL:DataType TF rm attribute We store frequency-dependent data here
7
+ GLOBAL:RoomType free field m attribute The room information can be arbitrary, but the spatial setup assumes free field.
8
+ GLOBAL:Title m attribute
9
+ GLOBAL:DateCreated m attribute
10
+ GLOBAL:DateModified m attribute
11
+ GLOBAL:APIName rm attribute
12
+ GLOBAL:APIVersion rm attribute
13
+ GLOBAL:AuthorContact m attribute
14
+ GLOBAL:Organization m attribute
15
+ GLOBAL:License No license provided, ask the author for permission m attribute
16
+ GLOBAL:ApplicationName attribute
17
+ GLOBAL:ApplicationVersion attribute
18
+ GLOBAL:Comment attribute
19
+ GLOBAL:History attribute
20
+ GLOBAL:References attribute
21
+ GLOBAL:Origin attribute
22
+ GLOBAL:DatabaseName m attribute Name of the database. Used for classification of the data
23
+ GLOBAL:Musician attribute Narrative description of the musician such as position, behavior, or personal data if not data-protected, e.g., 'Christiane Schmidt sitting on the chair', or 'artificial excitation by R2D2'.
24
+ GLOBAL:Description attribute Narrative description of a measurement. For musical instruments/singers, the note (C1, D1, etc) or the dynamic (pp., ff., etc), or the string played, the playing style (pizzicato, legato, etc.), or the type of excitation (e.g., hit location of a cymbal). For loudspeakers, the system and driver units.
25
+ GLOBAL:SourceType m attribute Narrative description of the acoustic source, e.g., 'Violin', 'Female singer', or '2-way loudspeaker'
26
+ GLOBAL:SourceManufacturer m attribute Narrative description of the manufacturer of the source, e.g., 'Stradivari, Lady Blunt, 1721' or 'LoudspeakerCompany'
27
+ GLOBAL:EmitterDescription attribute A more detailed structure of the source. In a simple setting, a single Emitter is considered that is collocated with the source. In a more complicated setting, this may be the strings of a violin or the units of a loudspeaker.
28
+ ListenerPosition [0 0 0] m IC, MC double Position of the microphone array during the measurements.
29
+ ListenerPosition:Type cartesian m attribute
30
+ ListenerPosition:Units metre m attribute
31
+ ListenerView [1 0 0] m IC, MC double Orientation of the microphone array
32
+ ListenerView:Type cartesian m attribute
33
+ ListenerView:Units metre m attribute
34
+ ListenerUp [0 0 1] m IC, MC double Up vector of the microphone array
35
+ ReceiverPosition [0 0 0] m IC, RC, RCM double Positions of the microphones during the measurements (relative to the Listener)
36
+ ReceiverPosition:Type spherical m attribute Type of the coordinate system used.
37
+ ReceiverPosition:Units degree, degree, metre m attribute Units of the coordinates.
38
+ SourcePosition [0 0 0] m IC, MC double Position of the acoustic source (instrument)
39
+ SourcePosition:Type cartesian m attribute
40
+ SourcePosition:Units metre m attribute
41
+ SourcePosition:Reference m attribute Narrative description of the spatial reference of the source position, e.g., 'The bell' for a trumpet or 'On the front plate between the low- and mid/high-frequency unit' for a loudspeaker. Mandatory in order to provide a reference across different sources.
42
+ SourceView [1 0 0] m IC, MC double View vector for the orientation.
43
+ SourceView:Type cartesian m attribute
44
+ SourceView:Units metre m attribute
45
+ SourceView:Reference m attribute Narrative description of the spatial reference of the source view, e.g., 'Viewing direction of the bell' for a trumpet or 'Perpendicular to the front plate' for a loudspeaker. Mandatory in order to provide a reference across different sources.
46
+ SourceUp [0 0 1] m IC, MC double Up vector of the acoustic source (instrument)
47
+ SourceUp:Reference m attribute Narrative description of the spatial reference of the source up, e.g., 'Along the keys, keys up' for a trumpet or 'Perpendicular to the top plate' for a loudspeaker. Mandatory in order to provide a reference across different sources.
48
+ EmitterPosition [0 0 0] m eC, eCM double Position. In a simple settings, a single emitter is considered that is collocated with the source.
49
+ EmitterPosition:Type cartesian m attribute
50
+ EmitterPosition:Units metre m attribute
51
+ EmitterDescriptions {''} MS, ES, MES string A more detailed description of the Emitters. For example, this may be the strings of a violin or the units of a loudspeaker.
52
+ MIDINote 0 I, M double Defines the note played by the source during the measurement. The note is specified a MIDI note by the [https://www.midi.org/specifications-old/item/the-midi-1-0-specification MIDI specifications, version 1.0]. Not mandatory, but recommended for tonal instruments.
53
+ Description {''} MS string This variable is used when the description varies with M.
54
+ SourceTuningFrequency 440 I, M double Frequency (in hertz) to which a musical instrument is tuned to corresponding to the note A4 (MIDINote=69). Recommended for tonal instruments.
55
+ Data.Real 0 m mrn double Real part of the complex spectrum. The default value 0 indicates that all data fields are initialized with zero values.
56
+ Data.Imag 0 m MRN double Imaginary part of the complex spectrum
57
+ N 0 m N double Frequency values
58
+ N:LongName frequency m attribute narrative name of N
59
+ N:Units hertz m attribute Units used for N