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,349 @@
1
+ {
2
+ "GLOBAL:Conventions": {
3
+ "default": "SOFA",
4
+ "flags": "rm",
5
+ "dimensions": null,
6
+ "type": "attribute",
7
+ "comment": ""
8
+ },
9
+ "GLOBAL:Version": {
10
+ "default": "1.0",
11
+ "flags": "rm",
12
+ "dimensions": null,
13
+ "type": "attribute",
14
+ "comment": ""
15
+ },
16
+ "GLOBAL:SOFAConventions": {
17
+ "default": "SimpleFreeFieldSOS",
18
+ "flags": "rm",
19
+ "dimensions": null,
20
+ "type": "attribute",
21
+ "comment": "This convention set follows SimpleFreeFieldHRIR but the data is stored as second-order section (SOS) coefficients."
22
+ },
23
+ "GLOBAL:SOFAConventionsVersion": {
24
+ "default": "1.0",
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": "SOS",
74
+ "flags": "rm",
75
+ "dimensions": null,
76
+ "type": "attribute",
77
+ "comment": "Filters described as second-order section (SOS) coefficients"
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
+ "GLOBAL:DatabaseName": {
143
+ "default": "",
144
+ "flags": "m",
145
+ "dimensions": null,
146
+ "type": "attribute",
147
+ "comment": "name of the database to which these data belong"
148
+ },
149
+ "GLOBAL:ListenerShortName": {
150
+ "default": "",
151
+ "flags": "m",
152
+ "dimensions": null,
153
+ "type": "attribute",
154
+ "comment": "ID of the subject from the database"
155
+ },
156
+ "ListenerPosition": {
157
+ "default": [
158
+ 0,
159
+ 0,
160
+ 0
161
+ ],
162
+ "flags": "m",
163
+ "dimensions": "IC, MC",
164
+ "type": "double",
165
+ "comment": ""
166
+ },
167
+ "ListenerPosition:Type": {
168
+ "default": "cartesian",
169
+ "flags": "m",
170
+ "dimensions": null,
171
+ "type": "attribute",
172
+ "comment": ""
173
+ },
174
+ "ListenerPosition:Units": {
175
+ "default": "metre",
176
+ "flags": "m",
177
+ "dimensions": null,
178
+ "type": "attribute",
179
+ "comment": ""
180
+ },
181
+ "ReceiverPosition": {
182
+ "default": [
183
+ [
184
+ 0,
185
+ 0.09,
186
+ 0
187
+ ],
188
+ [
189
+ 0,
190
+ -0.09,
191
+ 0
192
+ ]
193
+ ],
194
+ "flags": "m",
195
+ "dimensions": "rCI, rCM",
196
+ "type": "double",
197
+ "comment": ""
198
+ },
199
+ "ReceiverPosition:Type": {
200
+ "default": "cartesian",
201
+ "flags": "m",
202
+ "dimensions": null,
203
+ "type": "attribute",
204
+ "comment": ""
205
+ },
206
+ "ReceiverPosition:Units": {
207
+ "default": "metre",
208
+ "flags": "m",
209
+ "dimensions": null,
210
+ "type": "attribute",
211
+ "comment": ""
212
+ },
213
+ "SourcePosition": {
214
+ "default": [
215
+ 0,
216
+ 0,
217
+ 1
218
+ ],
219
+ "flags": "m",
220
+ "dimensions": "IC, MC",
221
+ "type": "double",
222
+ "comment": "Source position is assumed to vary for different directions/positions around the listener"
223
+ },
224
+ "SourcePosition:Type": {
225
+ "default": "spherical",
226
+ "flags": "m",
227
+ "dimensions": null,
228
+ "type": "attribute",
229
+ "comment": ""
230
+ },
231
+ "SourcePosition:Units": {
232
+ "default": "degree, degree, metre",
233
+ "flags": "m",
234
+ "dimensions": null,
235
+ "type": "attribute",
236
+ "comment": ""
237
+ },
238
+ "EmitterPosition": {
239
+ "default": [
240
+ 0,
241
+ 0,
242
+ 0
243
+ ],
244
+ "flags": "m",
245
+ "dimensions": "eCI, eCM",
246
+ "type": "double",
247
+ "comment": ""
248
+ },
249
+ "EmitterPosition:Type": {
250
+ "default": "cartesian",
251
+ "flags": "m",
252
+ "dimensions": null,
253
+ "type": "attribute",
254
+ "comment": ""
255
+ },
256
+ "EmitterPosition:Units": {
257
+ "default": "metre",
258
+ "flags": "m",
259
+ "dimensions": null,
260
+ "type": "attribute",
261
+ "comment": ""
262
+ },
263
+ "ListenerUp": {
264
+ "default": [
265
+ 0,
266
+ 0,
267
+ 1
268
+ ],
269
+ "flags": "m",
270
+ "dimensions": "IC, MC",
271
+ "type": "double",
272
+ "comment": ""
273
+ },
274
+ "ListenerView": {
275
+ "default": [
276
+ 1,
277
+ 0,
278
+ 0
279
+ ],
280
+ "flags": "m",
281
+ "dimensions": "IC, MC",
282
+ "type": "double",
283
+ "comment": ""
284
+ },
285
+ "ListenerView:Type": {
286
+ "default": "cartesian",
287
+ "flags": "m",
288
+ "dimensions": null,
289
+ "type": "attribute",
290
+ "comment": ""
291
+ },
292
+ "ListenerView:Units": {
293
+ "default": "metre",
294
+ "flags": "m",
295
+ "dimensions": null,
296
+ "type": "attribute",
297
+ "comment": ""
298
+ },
299
+ "Data.SOS": {
300
+ "default": [
301
+ [
302
+ [
303
+ 0,
304
+ 0,
305
+ 0,
306
+ 1,
307
+ 0,
308
+ 0
309
+ ],
310
+ [
311
+ 0,
312
+ 0,
313
+ 0,
314
+ 1,
315
+ 0,
316
+ 0
317
+ ]
318
+ ]
319
+ ],
320
+ "flags": "m",
321
+ "dimensions": "mRn",
322
+ "type": "double",
323
+ "comment": "Filter coefficients as SOS coefficients."
324
+ },
325
+ "Data.SamplingRate": {
326
+ "default": 48000,
327
+ "flags": "m",
328
+ "dimensions": "I",
329
+ "type": "double",
330
+ "comment": "Sampling rate of the coefficients in Data.SOS and the delay in Data.Delay"
331
+ },
332
+ "Data.SamplingRate:Units": {
333
+ "default": "hertz",
334
+ "flags": "m",
335
+ "dimensions": null,
336
+ "type": "attribute",
337
+ "comment": ""
338
+ },
339
+ "Data.Delay": {
340
+ "default": [
341
+ 0,
342
+ 0
343
+ ],
344
+ "flags": "m",
345
+ "dimensions": "IR, MR",
346
+ "type": "double",
347
+ "comment": "Broadband delay (in samples resulting from SamplingRate)"
348
+ }
349
+ }
@@ -0,0 +1,51 @@
1
+ Name Default Flags Dimensions Type Comment
2
+ GLOBAL:Conventions SOFA rm attribute
3
+ GLOBAL:Version 2.1 rm attribute
4
+ GLOBAL:SOFAConventions SimpleHeadphoneIR rm attribute Conventions for IRs with a 1-to-1 correspondence between emitter and receiver. The main application for this convention is to store headphone IRs recorded for each emitter and each ear.
5
+ GLOBAL:SOFAConventionsVersion 1.0 rm attribute
6
+ GLOBAL:APIName rm attribute
7
+ GLOBAL:APIVersion rm attribute
8
+ GLOBAL:ApplicationName attribute
9
+ GLOBAL:ApplicationVersion attribute
10
+ GLOBAL:AuthorContact m attribute
11
+ GLOBAL:Comment attribute
12
+ GLOBAL:DataType FIR rm attribute We will store IRs here
13
+ GLOBAL:History attribute
14
+ GLOBAL:License No license provided, ask the author for permission m attribute
15
+ GLOBAL:Organization m attribute
16
+ GLOBAL:References attribute
17
+ GLOBAL:RoomType free field m attribute Room type is not relevant here
18
+ GLOBAL:Origin attribute
19
+ GLOBAL:DateCreated m attribute
20
+ GLOBAL:DateModified m attribute
21
+ GLOBAL:Title m attribute
22
+ ListenerPosition [0 0 0] m IC, MC double
23
+ ListenerPosition:Type cartesian m attribute
24
+ ListenerPosition:Units metre m attribute
25
+ ReceiverPosition [0 0.09 0; 0 -0.09 0] m rCI, rCM double
26
+ ReceiverPosition:Type cartesian m attribute
27
+ ReceiverPosition:Units metre m attribute
28
+ SourcePosition [0 0 0] m IC, MC double Default: Headphones are located at the position of the listener
29
+ SourcePosition:Type spherical m attribute
30
+ SourcePosition:Units degree, degree, metre m attribute
31
+ EmitterPosition [0 0.09 0; 0 -0.09 0] m eCI, eCM double Default: Reflects the correspondence of each emitter to each receiver
32
+ EmitterPosition:Type cartesian m attribute
33
+ EmitterPosition:Units metre m attribute
34
+ Data.IR [0 0] m mRn double
35
+ Data.SamplingRate 48000 m I, M double
36
+ Data.SamplingRate:Units hertz m attribute
37
+ Data.Delay [0 0] m IR, MR double
38
+ GLOBAL:DatabaseName m attribute Correspondence to a database
39
+ GLOBAL:ListenerShortName m attribute Correspondence to a subject from the database
40
+ GLOBAL:ListenerDescription attribute Narrative description of the listener (or mannequin)
41
+ GLOBAL:SourceDescription attribute Narrative description of the headphones
42
+ GLOBAL:SourceManufacturer attribute Name of the headphones manufacturer
43
+ SourceManufacturer {''} MS string Optional M-dependent version of the attribute SourceManufucturer
44
+ GLOBAL:SourceModel attribute Name of the headphone model. Must uniquely describe the headphones of the manufacturer
45
+ SourceModel {''} MS string Optional M-dependent version of the attribute SourceModel
46
+ GLOBAL:SourceURI attribute URI of the headphone specifications
47
+ GLOBAL:ReceiverDescription m attribute Narrative description of the microphones
48
+ ReceiverDescriptions {''} MS string R-dependent version of the attribute ReceiverDescription
49
+ GLOBAL:EmitterDescription m attribute Narrative description of the headphone drivers
50
+ EmitterDescriptions {''} MS string E-dependent version of the attribute EmitterDescription
51
+ MeasurementDate 0 M double Optional M-dependent date and time of the measurement