1
1
import numpy as np
2
+ import pytest
2
3
3
4
import pyroomacoustics as pra
4
5
8
9
source_loc1 = [3.5 , 7.7 , 2.1 ]
9
10
mic0 = [7 , 8 , 3.9 ]
10
11
mic1 = [7.87 , 3.6 , 6.1 ]
12
+ mic_dir0 = pra .FigureEight (
13
+ orientation = pra .DirectionVector (azimuth = 90 , colatitude = 15 , degrees = True )
14
+ )
15
+ mic_dir1 = pra .FigureEight (
16
+ orientation = pra .DirectionVector (azimuth = 180 , colatitude = 15 , degrees = True )
17
+ )
18
+ src_dir0 = pra .FigureEight (
19
+ orientation = pra .DirectionVector (azimuth = 270 , colatitude = 15 , degrees = True )
20
+ )
21
+ src_dir1 = pra .FigureEight (
22
+ orientation = pra .DirectionVector (azimuth = 0 , colatitude = 15 , degrees = True )
23
+ )
24
+
25
+
26
+ @pytest .mark .parametrize ("with_dir" , ((True ,), (False ,)))
27
+ def test_add_source_mic (with_dir ):
28
+ room = pra .ShoeBox (room_size )
11
29
30
+ if with_dir :
31
+ sdir0 = src_dir0
32
+ sdir1 = src_dir1
33
+ mdir0 = mic_dir0
34
+ mdir1 = mic_dir1
35
+ else :
36
+ sdir0 = sdir1 = None
37
+ mdir0 = mdir1 = None
12
38
13
- def test_add_source_mic ():
14
- room = pra .ShoeBox (room_size ).add_source (source_loc0 ).add_microphone (mic0 )
39
+ room = (
40
+ pra .ShoeBox (room_size )
41
+ .add_source (source_loc0 , directivity = sdir0 )
42
+ .add_microphone (mic0 , directivity = mdir0 )
43
+ )
15
44
16
45
assert len (room .sources ) == 1
17
46
assert np .allclose (room .sources [0 ].position , source_loc0 )
18
47
assert len (room .mic_array ) == 1
19
48
assert room .mic_array .R .shape == (3 , 1 )
20
49
assert np .allclose (room .mic_array .R [:, 0 ], mic0 )
50
+ # Test directivities.
51
+ assert room .sources [0 ].directivity is sdir0
52
+ assert all (d is md for d , md in zip (room .mic_array .directivity , [mdir0 ]))
21
53
22
- room .add_microphone (mic1 ).add_source (source_loc1 )
54
+ room .add_microphone (mic1 , directivity = mdir1 ).add_source (
55
+ source_loc1 , directivity = sdir1
56
+ )
23
57
24
58
assert len (room .sources ) == 2
25
59
assert np .allclose (room .sources [1 ].position , source_loc1 )
26
60
assert len (room .mic_array ) == 2
27
61
assert np .allclose (room .mic_array .R [:, 0 ], mic0 )
28
62
assert np .allclose (room .mic_array .R [:, 1 ], mic1 )
29
63
assert room .mic_array .R .shape == (3 , 2 )
64
+ # Test directivities.
65
+ assert room .sources [0 ].directivity is sdir0
66
+ assert room .sources [1 ].directivity is sdir1
67
+ assert all (d is md for d , md in zip (room .mic_array .directivity , [mdir0 , mdir1 ]))
30
68
31
69
32
- def test_add_source_mic_obj ():
70
+ @pytest .mark .parametrize ("with_dir" , ((True ,), (False ,)))
71
+ def test_add_source_mic_obj (with_dir ):
33
72
room = pra .ShoeBox (room_size )
34
73
35
- source0 = pra .SoundSource (source_loc0 , signal = sig )
36
- source1 = pra .SoundSource (source_loc1 , signal = sig )
74
+ if with_dir :
75
+ sdir0 = src_dir0
76
+ sdir1 = src_dir1
77
+ mdir0 = mic_dir0
78
+ mdir1 = mic_dir1
79
+ else :
80
+ sdir0 = sdir1 = None
81
+ mdir0 = mdir1 = None
82
+
83
+ source0 = pra .SoundSource (source_loc0 , signal = sig , directivity = sdir0 )
84
+ source1 = pra .SoundSource (source_loc1 , signal = sig , directivity = sdir1 )
37
85
38
- mic_array0 = pra .MicrophoneArray (np .c_ [mic0 ], fs = room .fs )
39
- mic_array1 = pra .MicrophoneArray (np .c_ [mic1 ], fs = room .fs )
86
+ mic_array0 = pra .MicrophoneArray (np .c_ [mic0 ], fs = room .fs , directivity = mdir0 )
87
+ mic_array1 = pra .MicrophoneArray (np .c_ [mic1 ], fs = room .fs , directivity = mdir1 )
40
88
41
89
room .add (source0 ).add (mic_array0 )
42
90
@@ -45,6 +93,9 @@ def test_add_source_mic_obj():
45
93
assert len (room .mic_array ) == 1
46
94
assert room .mic_array .R .shape == (3 , 1 )
47
95
assert np .allclose (room .mic_array .R [:, 0 ], mic0 )
96
+ # Test directivities.
97
+ assert room .sources [0 ].directivity is sdir0
98
+ assert all (d is md for d , md in zip (room .mic_array .directivity , [mdir0 ]))
48
99
49
100
room .add (mic_array1 ).add (source1 )
50
101
@@ -54,14 +105,27 @@ def test_add_source_mic_obj():
54
105
assert np .allclose (room .mic_array .R [:, 0 ], mic0 )
55
106
assert np .allclose (room .mic_array .R [:, 1 ], mic1 )
56
107
assert room .mic_array .R .shape == (3 , 2 )
108
+ # Test directivities.
109
+ assert room .sources [0 ].directivity is sdir0
110
+ assert room .sources [1 ].directivity is sdir1
111
+ assert all (d is md for d , md in zip (room .mic_array .directivity , [mdir0 , mdir1 ]))
57
112
58
113
59
- def test_add_source_mic_obj_2 ():
114
+ @pytest .mark .parametrize ("with_dir" , ((True ,), (False ,)))
115
+ def test_add_source_mic_obj_2 (with_dir ):
60
116
room = pra .ShoeBox (room_size )
61
117
62
- source0 = pra .SoundSource (source_loc0 , signal = sig )
63
- source1 = pra .SoundSource (source_loc1 , signal = sig )
64
- mic_array = pra .MicrophoneArray (np .c_ [mic0 , mic1 ], fs = room .fs )
118
+ if with_dir :
119
+ sdir0 = src_dir0
120
+ sdir1 = src_dir1
121
+ mdir = [mic_dir0 , mic_dir1 ]
122
+ else :
123
+ sdir0 = sdir1 = None
124
+ mdir = [None , None ]
125
+
126
+ source0 = pra .SoundSource (source_loc0 , signal = sig , directivity = sdir0 )
127
+ source1 = pra .SoundSource (source_loc1 , signal = sig , directivity = sdir1 )
128
+ mic_array = pra .MicrophoneArray (np .c_ [mic0 , mic1 ], fs = room .fs , directivity = mdir )
65
129
66
130
room .add (source0 ).add (source1 ).add (mic_array )
67
131
@@ -72,15 +136,40 @@ def test_add_source_mic_obj_2():
72
136
assert np .allclose (room .mic_array .R [:, 0 ], mic0 )
73
137
assert np .allclose (room .mic_array .R [:, 1 ], mic1 )
74
138
assert room .mic_array .R .shape == (3 , 2 )
139
+ # Test directivities.
140
+ assert room .sources [0 ].directivity is sdir0
141
+ assert room .sources [1 ].directivity is sdir1
142
+ assert all (d is md for d , md in zip (room .mic_array .directivity , mdir ))
143
+
144
+
145
+ def test_add_source_mic_obj_with_dir_error ():
146
+ room = pra .ShoeBox (room_size )
147
+
148
+ mic_array = pra .MicrophoneArray (np .c_ [mic0 , mic1 ], fs = room .fs )
149
+
150
+ with pytest .raises (ValueError ):
151
+ room .add_microphone_array (mic_array , directivity = [mic_dir0 , mic_dir1 ])
152
+
75
153
154
+ @pytest .mark .parametrize ("with_dir" , ((True ,), (False ,)))
155
+ def test_add_source_mic_ndarray (with_dir ):
156
+ if with_dir :
157
+ sdir0 = src_dir0
158
+ sdir1 = src_dir1
159
+ mdir = [mic_dir0 , mic_dir1 ]
160
+ else :
161
+ sdir0 = sdir1 = None
162
+ mdir = [None , None ]
76
163
77
- def test_add_source_mic_ndarray ():
78
- source0 = pra .SoundSource (source_loc0 , signal = sig )
79
- source1 = pra .SoundSource (source_loc1 , signal = sig )
164
+ source0 = pra .SoundSource (source_loc0 , signal = sig , directivity = sdir0 )
165
+ source1 = pra .SoundSource (source_loc1 , signal = sig , directivity = sdir1 )
80
166
mic_array = np .c_ [mic0 , mic1 ]
81
167
82
168
room = (
83
- pra .ShoeBox (room_size ).add (source0 ).add (source1 ).add_microphone_array (mic_array )
169
+ pra .ShoeBox (room_size )
170
+ .add (source0 )
171
+ .add (source1 )
172
+ .add_microphone_array (mic_array , directivity = mdir )
84
173
)
85
174
86
175
assert len (room .sources ) == 2
@@ -90,14 +179,32 @@ def test_add_source_mic_ndarray():
90
179
assert np .allclose (room .mic_array .R [:, 0 ], mic0 )
91
180
assert np .allclose (room .mic_array .R [:, 1 ], mic1 )
92
181
assert room .mic_array .R .shape == (3 , 2 )
93
-
94
-
95
- def test_add_source_mic_ndarray_2 ():
96
- source0 = pra .SoundSource (source_loc0 , signal = sig )
97
- source1 = pra .SoundSource (source_loc1 , signal = sig )
182
+ # Test directivities.
183
+ assert room .sources [0 ].directivity is sdir0
184
+ assert room .sources [1 ].directivity is sdir1
185
+ assert all (d is md for d , md in zip (room .mic_array .directivity , mdir ))
186
+
187
+
188
+ @pytest .mark .parametrize ("with_dir" , ((True ,), (False ,)))
189
+ def test_add_source_mic_ndarray_2 (with_dir ):
190
+ if with_dir :
191
+ sdir0 = src_dir0
192
+ sdir1 = src_dir1
193
+ mdir = [mic_dir0 , mic_dir1 ]
194
+ else :
195
+ sdir0 = sdir1 = None
196
+ mdir = [None , None ]
197
+
198
+ source0 = pra .SoundSource (source_loc0 , signal = sig , directivity = sdir0 )
199
+ source1 = pra .SoundSource (source_loc1 , signal = sig , directivity = sdir1 )
98
200
mic_array = np .c_ [mic0 , mic1 ]
99
201
100
- room = pra .ShoeBox (room_size ).add (source0 ).add (source1 ).add_microphone (mic_array )
202
+ room = (
203
+ pra .ShoeBox (room_size )
204
+ .add (source0 )
205
+ .add (source1 )
206
+ .add_microphone (mic_array , directivity = mdir )
207
+ )
101
208
102
209
assert len (room .sources ) == 2
103
210
assert np .allclose (room .sources [0 ].position , source_loc0 )
@@ -106,6 +213,10 @@ def test_add_source_mic_ndarray_2():
106
213
assert np .allclose (room .mic_array .R [:, 0 ], mic0 )
107
214
assert np .allclose (room .mic_array .R [:, 1 ], mic1 )
108
215
assert room .mic_array .R .shape == (3 , 2 )
216
+ # Test directivities.
217
+ assert room .sources [0 ].directivity is sdir0
218
+ assert room .sources [1 ].directivity is sdir1
219
+ assert all (d is md for d , md in zip (room .mic_array .directivity , mdir ))
109
220
110
221
111
222
if __name__ == "__main__" :
0 commit comments