clarity.data.scene_builder_cec2 module¶
Code for building the scenes.json files.
- class clarity.data.scene_builder_cec2.InterfererType(value)[source]¶
Bases:
Enum
Enum for interferer types.
- MUSIC = 'music'¶
- NOISE = 'noise'¶
- SPEECH = 'speech'¶
- class clarity.data.scene_builder_cec2.RoomBuilder[source]¶
Bases:
object
Functions for handling rooms.
- build_from_rpf(rpf_location, n_interferers=3, n_rooms=10000, start_room=1)[source]¶
Build a list of rooms by extracting info from RAVEN rpf files.
- Parameters:
rpf_location (str) – path to where rpf files are stored
n_interferers (int, optional) – number of interferer definitions to expect. Defaults to N_INTERFERERS.
n_rooms (int, optional) – number of scenes to expect. Defaults to N_SCENES.
start_room (int, optional) – index of the first room to expect
- get_room(name: str)[source]¶
Get a room by name.
- Parameters:
name (str) – Name of room to extract.
Returns:
- class clarity.data.scene_builder_cec2.RoundingFloat(x=0, /)[source]¶
Bases:
float
Round a float to 4 decimal places.
- class clarity.data.scene_builder_cec2.SceneBuilder(rb, scene_datasets, target, interferer, snr_range, listener, shuffle_rooms=None)[source]¶
Bases:
object
Class with methods for building a list of scenes.
- add_SNR_to_scene(snr_range: list)[source]¶
Add the Signal Noise Ratio (SNR) info to the scenes.
- Parameters:
snr_range (list) – Range of values from which SNR will be sampled.
Returns:
- add_interferer_to_scene(speech_interferers: str, noise_interferers: str, music_interferers: str, number: list, start_time_range: list, end_early_time_range: list)[source]¶
Add interferer to the scene description file.
- Parameters:
speech_interferers (str) – Path to speech interferer to load.
noise_interferers (str) – Path to noise interferer to load.
music_interferers (str) – Path to music interferer to load
number (list) – Number of interefers to be added.
start_time_range (list) – Range for randomly selecting start point.
end_early_time_range (list) – Range for randomly selecting end point.
- Returns:
None
- add_listener_details_to_scene(heads, channels, relative_start_time_range: list, duration_mean: float, duration_sd: float, angle_initial_mean: float, angle_initial_sd: float, angle_final_range: tuple)[source]¶
Add the listener info to the scenes.
- Parameters:
() (channels)
()
relative_start_time_range (list) – Range from which start time is selected at random.
duration_mean (float) – mean of the time offset for start of turn
duration_sd (float) – standard deviation of the time offset for start of turn
angle_initial_mean (float)
angle_initial_sd (float)
angle_final_range (tuple)
- Returns:
None
- add_target_to_scene(dataset: str, target_speakers: str, target_selection: str, pre_samples_range: list, post_samples_range: list)[source]¶
Add target info to the scenes.
Uses target speaker file set via config.
- Parameters:
dataset (str) – dataset to be added.
target_speakers (str)
target_selection (str) – Type of target to be added, valid values are ‘SEQUENTIAL’ and ‘RANDOM’.
pre_samples_range (list) – Parameters for number of samples prior to target onset.
post_samples_range (list) – Parameters for number of samples to continue player after target offsets.
Raises: TypeError if room_selection is not SEQUENTIAL or RANDOM
- initialise_scenes(dataset, n_scenes: int, room_selection: str, scene_start_index: int)[source]¶
Initialise the scenes for a given dataset.
- Parameters:
dataset – train, dev, or eval set
n_scenes (int) – number of scenes to generate
room_selection (str) – SEQUENTIAL or RANDOM
scene_start_index (int) – index to start for scene IDs
Raises: TypeError if room_selection is not SEQUENTIAL or RANDOM
- clarity.data.scene_builder_cec2.add_interferer_to_scene_inner(scene: dict, interferers: dict, number: list, start_time_range: list[int], end_early_time_range: list[int])[source]¶
Randomly select interferers and add them to the given scene. A random number of interferers is chosen, then each is given a random type selected from the possible speech, nonspeech, music types. Interferers are then chosen from the available lists according to the type and also taking care to match the scenes ‘dataset’ field, ie. train, dev, test. The interferer data is supplied as a dictionary of lists of lists. The key being “speech”, “nonspeech”, or “music”, and the list of list being a partitioned list of interferers for that type. The idea of using a list of lists is that interferers can be split by subcondition and then the randomization draws equally from each subcondition, e.g. for nonspeech there is “washing machine”, “microwave” etc. This ensures that each subcondition is equally represented even if the number of exemplars of each subcondition is different. Note, there is no return. The scene is modified in place.
- Parameters:
scene (dict) – the scene description
interferers (dict) – the interferer metadata
number (list) – number of interferers
start_time_range (list) – range of starting points as integers, a random number is selected between these.
end_early_time_range (list) – range of end points as integers, a random number is selected between these.
- clarity.data.scene_builder_cec2.add_this_target_to_scene(target: dict, scene: dict, pre_samples_range: list, post_samples_range: list)[source]¶
Add the target details to the scene dict.
Adds given target to given scene. Target details will be taken from the target dict but the start time will be according to the CEC2 target start time specification.
- Parameters:
target (dict) – target dict read from target metadata file.
scene (dict) – complete scene dictionary.
pre_samples_range (list) – parameters for number of samples prior to target onset
post_samples_range (list) – parameters for number of samples to continue player after target offsets.
- clarity.data.scene_builder_cec2.build_room(target_file: str, interferer_files: list[str]) dict [source]¶
Build room json file from contents of related rpf files. Note, there is an rpf file for each source in the scene. All of these files are read and a single scene json file is constructed.
- Parameters:
target_file (str) – rpf file containing the target position
interferer_files (List[str]) – list of files containing the interferer positions
- Returns:
dictionary representation of the scene following CEC2 scene.json format
- Return type:
dict
- clarity.data.scene_builder_cec2.generate_rotation(scene: dict, relative_start_time_range: list, duration_mean: float, duration_sd: float, angle_initial_mean: float, angle_initial_sd: float, angle_final_range: tuple) list[dict] [source]¶
Generate a suitable head rotation for the given scene. Based on behavioural studies by Hadley et al. TODO: find ref
- Parameters:
scene (dict) – the scene description
relative_start_time_range (list) – Range from which start time is uniformly selected at random.
duration_mean (float) – mean of the time offset for start of turn
duration_sd (float) – standard deviation of the time offset for start of turn
angle_initial_mean (float)
angle_initial_sd (float)
angle_final_range (tuple)
- Returns:
list of dicts with keys “sample” and “view_vector” specifying the head motion.
- Return type:
list(dict)
- clarity.data.scene_builder_cec2.generate_snr(snr_range: list[int]) float [source]¶
Generate a random Signal Noise Ratio (SNR).
- Parameters:
snr_range (list) – Range from which to uniformly sample SNR.
- Returns:
random number from uniform distribution in given range.
- Return type:
float
- clarity.data.scene_builder_cec2.get_num_post_samples(post_samples_range: list) int [source]¶
Number of samples to continue player after target offsets.
- Parameters:
post_samples_range (list) – parameters for number of samples to continue.
Returns:
- clarity.data.scene_builder_cec2.get_num_pre_samples(pre_samples_range: list) int [source]¶
Number of samples prior to target onset.
- Parameters:
pre_samples_range (list) – parameters for number of samples prior to target onset
Returns:
- clarity.data.scene_builder_cec2.get_random_hrir_set(heads, channels)[source]¶
Get a random HRIR set.
- clarity.data.scene_builder_cec2.get_random_interferer_offset(interferer: dict, required_samples: int) int [source]¶
Generate a random offset sample for interferer. The offset sample is the point within the masker signal at which the interferer segment will be extracted. Randomly selected but with care for it not to start too late, i.e. such that the required samples would overrun the end of the masker signal will be used is taken.
- Parameters:
interferer (dict) – the interferer metadata
required_samples (int) – number of samples that is going to be required
- Returns:
a valid randomly selected offset
- Return type:
int
- clarity.data.scene_builder_cec2.get_room_dims(text: str) list [source]¶
Find the room dimensions in the rpf file.
- Parameters:
text (str) – String to be searched for room dimensions (string to be searched for is of the form ‘ProjectName = CuboidRoom_5.9x3.4186x2.9’).
- Returns:
List of the three dimensions of the room.
- Return type:
list
- clarity.data.scene_builder_cec2.get_room_name(text: str) str [source]¶
Find the room name in the rpf file.
- Parameters:
text (str) – String to be searched for room name (‘R’ followed by 5 digits).
- Returns:
The room name.
- Return type:
str
- clarity.data.scene_builder_cec2.get_vector(text: str, vector_name: str) list[float] [source]¶
Get a vector quantity from the rpf file. Will read rpf vector quantities, eg. “sourceViewVectors = -0.095,-0.995, 0.000”
- Parameters:
text (str) – string contents of the rpf file
vector_name (str) – name of vector to extract (e.g. “sourceViewVectors”)
- Returns:
vector as list of floats
- Return type:
List[float]
- clarity.data.scene_builder_cec2.make_rpf_filename_dict(rpf_location: str, scene_str: str, n_interferers: int) dict [source]¶
Construct dictionary storing all rpf files that will be processed.
- Parameters:
rpf_location (str) – Location
scene (str) – Scene (as string)
n_interferers (int) – Number of interferers.
- Returns:
Dictionary of rpf files to be processed.
- Return type:
dict
- clarity.data.scene_builder_cec2.read_rpf_file(rpf_filename: str) dict [source]¶
Process an rpf file and return key contents as a dictionary.
- Parameters:
rpf_filename (str) – Path to an rpf file to be read.
- Returns:
- dictionary of rpf file contents
{“position”: sourcePositions, “view_vector”: sourceViewVectors}
- Return type:
dict
- clarity.data.scene_builder_cec2.select_interferer_types(allowed_n_interferers: list) list[InterfererType] [source]¶
Select the interferer types to use.
The number of interferer is drawn randomly from list of allowed valued. The type of each is chosen randomly but there is not allowed to be more than 1 music source.
- Parameters:
allowed_n_interferers (list) – list of allowed number of interferers
- Returns:
list of interferer types to use
- Return type:
list(InterfererType)
- clarity.data.scene_builder_cec2.select_random_interferer(interferers: list[list], dataset: str, required_samples: int) dict [source]¶
Randomly select an interferer. Interferers stored as list of list. First randomly select a sublist then randomly select an item from sublist matching constraints.
- Parameters:
interferers (list(list)) – interferers as list of lists
dataset (str) – desired data [train, dev, eval]
required_samples (int) – required number of samples
- Raises:
ValueError – if no suitable interferer is found
- Returns:
the interferer dict
- Return type:
dict