# Temporal Reasoning Audio Dataset Pipeline Configuration ##uniform distributuon for clip duration ##not mixing datasets ##count ##pick dataset -> pick class -> pick audio clip -> get duration -> concatenate clips to reach target duration -> modulo to get num clips -> inserting silences randomly based on remainder ##duration ##amplitude based filtering -> normalize -> threshold based selection ##gap between audio clips - x2/1.5 the shorter one -> add as param ##different clips of the same class can be contatenated to reach target duration ##consecutive ordering only ##based on n unique sources and total clips we can have -> shortest and longest duration calculation ##reject datapoint if same target audio clip cannot be repeated to maintain the gap - arg ##sample different clip from the same class -> check if different clips can be used to fill the gap - arg ##amplitude filtered durations in metadata csv ##get_max_clip_num_to_be_joined() ##pick dataset -> pick class -> pick audio clip -> get duration -> concatenate clips to reach target duration -> modulo to get num clips -> inserting silences randomly based on remainder ##ensure_silence_between_clips() ##silence should always be there between two clips ##order ##repeat target clips ##second and second last - modify question types ##volume ##amplitude average loudness for a audio clip -> repetitions but same clip(argument) -> different volume levels based on dB levels ##add crossfade ##trimming - threshold separately for each audio clip - normalize 1 and 0 - get threshold -> trim -> concatenate ##leftmost and rightmost silence trimming ##buffer for trimming - cutting early and cutting a bit late to avoid cutting important parts ##periodicity affect ##volume - trim and get average loudness -> normalize -> adjust volume levels ##number of clips per samples to avoid silence # ESC-50 Dataset paths (each clip is 5 seconds) esc50: audio_path: "/home/debarpanb1/TREA_2.0/ESC-50-master/audio" metadata_path: "/home/debarpanb1/TREA_2.0/ESC-50-master/meta/esc50.csv" # Generic dataset source. When present, pipeline tasks use this instead of ESC-50. dataset_source: name: "GISE_preprocessed_duration" audio_path: "/home/debarpanb1/TREA_2.0/GISE_preprocessed_duration/isolated_events" metadata_path: "/home/debarpanb1/TREA_2.0/GISE_preprocessed_duration/gise_metadata_kept_0p5_10s.csv" preprocessed_path: "/home/debarpanb1/TREA_2.0/GISE_preprocessed_duration" category_col: "class" filename_col: "file_name" classid_col: "classID" fullpath_col: "clean_audio_path" duration_col: "duration" # Synthetic silence audio for concatenation synthetic_silence: path: "/home/debarpanb1/TREA_2.0/synthetic_silences" # Output configuration output: base_path: "/home/debarpanb1/TREA_2.0/pipeline/dataset_gise" # Dataset class-subset configuration # Use this to create datasets (train/val/test) from a persistent subset # of classes (e.g. use 40 of 50 classes for in-distribution splits and # optionally create an OOD test set using all 50 classes). dataset: use_class_subset: false # if false, use all available classes num_classes_subset: 40 # number of classes to use for train/val/test subset_persist_path: "/home/debarpanb1/TREA_2.0/class_subset.json" subset_seed: 42 # RNG seed when sampling the subset (persisted) # Audio generation parameters audio: # Duration range for each GENERATED clip (in seconds) # Original ESC-50 clips are 5s and will be concatenated to create clips in this range min_clip_duration: 20.0 # Minimum duration for each generated clip max_clip_duration: 60.0 # Maximum duration for each generated clip # Crossfade and silence crossfade_duration: 500 # Crossfade between audio and silence (milliseconds) for smooth transitions silence_duration: 1000 # Default silence between clips (milliseconds) min_silence_duration: 100 # Minimum silence ALWAYS inserted between clips (milliseconds) max_extra_silence_per_gap: 500 # Maximum extra silence per gap when distributing remainder crossfade_within_source: 50 # Small crossfade within same-source repetitions (count task) with_silence: true # Add silence between clips # Duration (seconds) of individual source clips (ESC-50 are 5s by default). # Used to compute how many source clips are concatenated to reach a target # generated clip duration. Change only if your source clips differ. source_clip_duration: 6.5 # Audio normalization normalize: false normalize_target_dBFS: -20.0 # Random seed for reproducibility random_seed: 42 # LLM for question generation (local Llama 3.1 8B) llm: enabled: false # Set to true to use LLM for question generation # Task-specific configurations tasks: count: enabled: true # Total duration for ALL samples in this task combined (in hours) # Pipeline will calculate number of samples based on min/max clip durations task_duration_size: 1.0 # hours # Maximum unique sound sources per sample (single number) # Actual number will be subsampled from max(1, max_clips-3) to min(max_clips, max_clips_per_sample) max_clips_per_sample: 10 # Ordering mode for repeated clips of same source: # "random": Clips are shuffled randomly (A B A C B A C...) - tests recognition of recurring sounds # "consecutive": Same-source clips grouped together (AAA BBB CCC) - easier, just count blocks ordering_mode: "random" # Question types: unique_count (how many distinct sounds) and # occurrence_count (how many times does a specific sound occur) question_types: ["unique_count", "occurrence_count"] # Question templates for MCQ (organized by question type) mcq_questions: unique_count: - "What is the number of distinct sound sources in the audio file?" - "How many different types of sounds can be identified in this recording?" - "How many unique types of sound are present in this audio?" - "Identify the count of different sound sources in this clip." - "What is the total number of unique sounds heard in this audio?" - "How many distinct sound categories are there in this audio file?" - "Determine the number of unique sound sources in this recording." - "How many separate sound sources are included in the audio?" - "What is the total number of unique sound types in this audio?" - "How many different sound sources can be heard in this clip?" occurrence_count: - "How many times does {target_sound} occur in the audio?" - "How many separate occurrences of {target_sound} are heard in this recording?" - "What is the number of times {target_sound} appears in the audio?" - "How many {target_sound} events are present in the clip?" # Question templates for open-text (organized by question type) open_text_questions: unique_count: - "How many distinct sound sources are present in the audio?" - "Count the number of unique sounds in this recording." - "What is the total count of different sound categories heard?" - "Identify and count all unique sound types in the clip." occurrence_count: - "How many times is {target_sound} heard?" - "Count the number of {target_sound} occurrences in the audio." - "How many separate {target_sound} events are present?" duration: enabled: true # Total duration for ALL samples in this task combined (in hours) task_duration_size: 1.0 # hours # Number of unique sound sources per sample (can be single int or list) # Single int (e.g., 15): randomly samples from 1 to 15 (like count/order tasks) # List (e.g., [2,3,4]): randomly picks from the list # The script will automatically generate repetition patterns to create # shortest/longest variations based on the target clip duration num_unique_sources: 10 # Ordering: only keep "consecutive" so repeated segments of the same # source remain grouped together, ensuring that multiple consecutive # clips of the same audio yield the longest duration unambiguously. ordering_methods: ["consecutive"] # ===================================================== # Amplitude-based filtering parameters (preprocessing) # ===================================================== # RELATIVE dB threshold below peak to consider as silence # For each clip: silence_threshold = clip_peak_dB + amplitude_threshold_db # Example: If clip peak is -5 dB and threshold is -20, silence threshold = -25 dB # Based on ESC-50 analysis: -20 dB gives ~60% effective duration (good balance) # More aggressive (removes more silence): -15 dB # More conservative (keeps more sound): -25 dB amplitude_threshold_db: -20.0 # Minimum duration of sound region to keep (milliseconds) # Filters out very short transient noise spikes # ESC-50 is curated, so 20-30ms is sufficient min_sound_duration_ms: 25 # ===================================================== # Adaptive threshold strategy # ===================================================== # "peak_relative": threshold = peak_dB + amplitude_threshold_db (fixed offset from peak) # - Simple but not adaptive to actual noise levels # "noise_floor": threshold = percentile(dB, N) + delta_dB (RECOMMENDED) # - Fully adaptive per-clip based on its own noise floor # - Each clip analyzed independently - no fixed dB values needed # - Better for diverse audio with varying noise levels threshold_strategy: "noise_floor" # Noise floor estimation percentile (used when threshold_strategy = noise_floor) # Lower percentile = more conservative estimate of background noise # 5 = use 5th percentile of dB values as noise floor estimate (better for sparse sounds) noise_floor_percentile: 2.0 # Delta above noise floor (dB) to set as threshold # This is relative to EACH clip's own noise floor, not a fixed dB value # 8dB above the clip's noise floor works well for most ESC-50 clips # Higher = more conservative (keeps more), Lower = more aggressive (removes more) noise_floor_delta_db: 5.0 # Path to preprocessed ESC-50 data (effective durations + trimmed audio) preprocessed_data_path: "/home/debarpanb1/TREA_2.0/GISE_preprocessed_duration" # ===================================================== # Duration gap multipliers # ===================================================== # For LONGEST questions: target_effective >= max_background × multiplier_longest multiplier_longest: 1.5 # For SHORTEST questions: target_effective <= min_background × multiplier_shortest # Using 0.75 instead of 0.5 for smaller gaps (easier to distinguish) multiplier_shortest: 0.75 # Minimum effective duration per source (seconds) # Clips with less than this duration are harder to distinguish min_effective_duration_per_source: 1.0 # ===================================================== # Fallback/rejection options # ===================================================== # Reject sample if duration gap cannot be satisfied reject_if_gap_not_met: true # Try different clips from same class if one clip isn't enough sample_different_clips_same_class: true # Question types question_types: ["shortest", "longest", "pairwise_longer", "pairwise_shorter"] # MCQ questions mcq_questions: shortest: "Which of the following sounds is heard for the shortest duration?" longest: "Which of the following sounds is heard for the longest duration?" pairwise_longer: "Between {sound1} and {sound2}, which sound lasts longer?" pairwise_shorter: "Between {sound1} and {sound2}, which sound is heard for a shorter duration?" # Open-text questions open_text_questions: shortest: "Which sound is heard for the shortest duration in the audio?" longest: "Which sound is heard for the longest duration in the audio?" pairwise_longer: "Which lasts longer, {sound1} or {sound2}?" pairwise_shorter: "Which is shorter, {sound1} or {sound2}?" order: enabled: true # Total duration for ALL samples in this task combined (in hours) task_duration_size: 1.0 # hours # Maximum clips to join per sample (minimum 2 for ordering) # Actual number will be subsampled from max(2, max_clips-3) to min(max_clips, max_clips_per_sample) max_clips_per_sample: 10 # Whether to allow repeating clips from the same source category # If true: sequence could be [dog, dog, cat, bird] (same clip repeated) # If false: sequence is always unique sources allow_source_repetition: false # Minimum clips needed for "second" and "second_last" questions # Set to 4 to ensure second and second_last refer to different positions # (with 3 clips, both would refer to middle clip at position 1) min_clips_for_second_questions: 3 # Question types: "first", "last", "after", "before", "second", "second_last" # "second" and "second_last" only generated when n_clips >= min_clips_for_second_questions question_types: ["first", "last", "after", "before", "second", "second_last"] # MCQ question templates mcq_questions: first: "Which sound appears first in the audio clip?" last: "Which sound appears last in the audio clip?" after: "Which sound comes after {sound1}?" before: "Which sound comes before {sound2}?" second: "Which sound appears second in the audio clip?" second_last: "Which sound appears second to last in the audio clip?" # Open-text question templates open_text_questions: first: "What is the first sound you hear in the audio?" last: "What is the last sound you hear in the audio?" after: "What sound comes after {sound1}?" before: "What sound comes before {sound2}?" second: "What is the second sound you hear in the audio?" second_last: "What sound is second to last in the audio?" sequence: "List the sounds in the order they appear in the audio." volume: enabled: true # Total duration for ALL samples in this task combined (in hours) task_duration_size: 1.0 # hours # Maximum clips with different volumes per sample # Actual number will be subsampled from max(2, max_clips-3) to min(max_clips, max_clips_per_sample) max_clips_per_sample: 10 # ===================================================== # Normalization settings (CRITICAL for volume comparison) # ===================================================== # All clips are FIRST normalized to baseline, THEN volume adjusted # This ensures volume differences are controlled and comparable normalize_to_baseline: true baseline_dBFS: -20.0 # Normalize all clips to this level first (used if use_lufs=false) # ===================================================== # LUFS (Perceived Loudness) Settings # ===================================================== # LUFS (Loudness Units Full Scale) measures PERCEIVED loudness # Unlike dBFS which only measures RMS amplitude, LUFS accounts for # human hearing sensitivity to different frequencies (K-weighting) # # IMPORTANT: For volume comparison task, we DISABLE LUFS normalization! # LUFS makes everything the same perceived loudness, defeating the purpose. # Instead, we normalize to a baseline dBFS then apply LARGE volume adjustments. use_lufs: false # DISABLED for audible volume differences baseline_lufs: -23.0 # EBU R128 standard (not used when use_lufs=false) # ===================================================== # Volume gap multipliers (similar to duration task) # ===================================================== # For MAX_LOUDNESS questions: target_loudness >= second_loudest × multiplier_max # Multiplier 2.5 = ~8dB difference = clearly audible # Multiplier 4.0 = ~12dB difference = very obvious (4x perceived loudness) multiplier_max_loudness: 4.0 # For MIN_LOUDNESS questions: target_loudness <= second_softest × multiplier_min # Multiplier 0.25 = ~12dB quieter = clearly distinguishable multiplier_min_loudness: 0.25 # Reject sample if loudness gap cannot be satisfied reject_if_gap_not_met: true # ===================================================== # Source clip options # ===================================================== # If true: same clip can be repeated at different volumes # If false: always use different source clips (default behavior) use_same_clip_different_volumes: false # If use_same_clip_different_volumes is true, how many repetitions per source? # Can be a single int or list for variety repetitions_per_source: [2, 3, 4] # Question types: "max_loudness", "min_loudness", "pairwise_louder", "pairwise_softer" question_types: ["max_loudness", "min_loudness", "pairwise_louder", "pairwise_softer"] # MCQ questions mcq_questions: max_loudness: "Which sound has the maximum loudness in the audio?" min_loudness: "Which sound has the minimum loudness in the audio?" pairwise_louder: "Between {sound1} and {sound2}, which sound is louder?" pairwise_softer: "Between {sound1} and {sound2}, which sound is softer?" # Open-text questions open_text_questions: max_loudness: "Identify the sound with maximum loudness in the audio clip." min_loudness: "Identify the sound with minimum loudness in the audio clip." pairwise_louder: "Which is louder, {sound1} or {sound2}?" pairwise_softer: "Which is softer, {sound1} or {sound2}?" order_volume: "List the sounds in order from maximum to minimum loudness." # ============================================================= # NEW TASKS: silence_gap, overlap, during_contains # ============================================================= silence_gap: enabled: true task_duration_size: 1.0 # hours # Clips per sample: need at least 3 clips to have 2+ gaps to compare min_clips_per_sample: 3 max_clips_per_sample: 10 # ===================================================== # Silence gap control # ===================================================== # Range for individual gap durations (milliseconds) min_gap_duration_ms: 500 max_gap_duration_ms: 3000 # Multiplier constraint: longest gap >= shortest gap × gap_multiplier # 2.0 = longest silence must be at least 2× the shortest gap_multiplier: 2.0 # Use preprocessed (trimmed) audio to avoid random leading/trailing silences preprocessed_data_path: "/home/debarpanb1/TREA_2.0/GISE_preprocessed_duration" # Question types question_types: ["longest_gap", "shortest_gap", "after_gap", "before_gap", "compare_gaps"] # MCQ questions mcq_questions: longest_gap: "Which two sounds have the longest silence between them?" shortest_gap: "Which two sounds have the shortest silence between them?" after_gap: "Which sound occurs after the longest silence?" before_gap: "Which sound occurs before the longest silence?" compare_gaps: "Which silence is longer: after {sound1} or after {sound2}?" # Open-text questions open_text_questions: longest_gap: "Which two sounds have the longest silence between them?" shortest_gap: "Which two sounds have the shortest silence between them?" after_gap: "What sound occurs after the longest silence?" before_gap: "What sound occurs before the longest silence?" compare_gaps: "Which pause is longer, after {sound1} or after {sound2}?" overlap: enabled: true task_duration_size: 1.0 # hours # Number of sounds in each sample (start with 2, configurable) num_sounds: 2 # ===================================================== # Overlap control # ===================================================== # Overlap as a ratio of the shorter clip's duration min_overlap_ratio: 0.2 # At least 20% overlap max_overlap_ratio: 0.5 # At most 50% overlap # Question types question_types: ["identify_overlap", "overlap_pair", "yes_no_overlap", "starts_before_end"] # MCQ questions mcq_questions: identify_overlap: "Which sound overlaps with {anchor_sound}?" overlap_pair: "Which two sounds occur at the same time?" yes_no_overlap: "Does {sound1} overlap with {sound2}?" starts_before_end: "Which sound starts before {anchor_sound} ends?" # Open-text questions open_text_questions: identify_overlap: "Which sound overlaps with {anchor_sound}?" overlap_pair: "Which two sounds occur at the same time?" yes_no_overlap: "Do {sound1} and {sound2} overlap?" starts_before_end: "Which sound starts before {anchor_sound} ends?" during_contains: enabled: true task_duration_size: 1.0 # hours # Number of sounds in each sample (start with 2, configurable) num_sounds: 2 # ===================================================== # Containment control # ===================================================== # Duration of the container sound (seconds) # The container is extended by repeating the source clip min_container_duration_s: 8.0 max_container_duration_s: 15.0 # Minimum margin (seconds) between contained sound edges and container edges # Ensures the contained sound doesn't start/end right at container boundaries min_margin_s: 0.5 # Question types question_types: ["during", "contains", "yes_no_during"] # MCQ questions mcq_questions: during: "Which sound occurs during {anchor_sound}?" contains: "Which longer sound contains {target_sound}?" yes_no_during: "Does {target_sound} happen entirely during {anchor_sound}?" # Open-text questions open_text_questions: during: "Which sound occurs during {anchor_sound}?" contains: "Which sound contains {target_sound}?" yes_no_during: "Does {target_sound} happen entirely during {anchor_sound}?" # ===================================================================== # MULTIHOP TEMPORAL REASONING — SINGULAR TASKS # ===================================================================== conditional_count: enabled: true task_duration_size: 1.0 # hours min_events: 4 max_events: 8 question_types: ["count_after", "count_before", "count_between", "count_during", "count_overlap"] mcq_questions: count_after: "How many {target_sound} sounds occur after {anchor_sound}?" count_before: "How many {target_sound} sounds occur before {anchor_sound}?" count_between: "How many {target_sound} sounds occur between {sound1} and {sound2}?" count_during: "How many {target_sound} sounds occur while {anchor_sound} is playing?" count_overlap: "How many sounds overlap with {anchor_sound}?" open_text_questions: count_after: "How many {target_sound} sounds occur after {anchor_sound}?" count_before: "How many {target_sound} sounds occur before {anchor_sound}?" count_between: "How many {target_sound} sounds occur between {sound1} and {sound2}?" count_during: "How many {target_sound} sounds happen while {anchor_sound} is playing?" count_overlap: "How many sounds overlap with {anchor_sound}?" conditional_duration: enabled: true task_duration_size: 1.0 # hours min_events: 5 max_events: 8 preprocessed_data_path: "/home/debarpanb1/TREA_2.0/GISE_preprocessed_duration" question_types: ["longest_after", "shortest_after", "longest_before", "shortest_before", "repeated_compare"] mcq_questions: longest_after: "Which sound after {anchor_sound} lasts the longest?" shortest_after: "Which sound after {anchor_sound} lasts the shortest time?" longest_before: "Which sound before {anchor_sound} lasts the longest?" shortest_before: "Which sound before {anchor_sound} lasts the shortest time?" repeated_compare: "Which {target_sound} occurrence lasts longer: the one before {anchor_sound} or the one after {anchor_sound}?" open_text_questions: longest_after: "Which sound after {anchor_sound} lasts the longest?" shortest_after: "Which sound after {anchor_sound} lasts the shortest?" longest_before: "Which sound before {anchor_sound} lasts the longest?" shortest_before: "Which sound before {anchor_sound} lasts the shortest?" repeated_compare: "Which {target_sound} lasts longer, the one before {anchor_sound} or the one after {anchor_sound}?" between_events: enabled: true task_duration_size: 1.0 # hours min_events: 5 max_events: 8 question_types: ["identify_between", "count_between", "yes_no_between"] mcq_questions: identify_between: "Which sound occurs between {sound1} and {sound2}?" count_between: "How many sounds occur between {sound1} and {sound2}?" yes_no_between: "Is {target_sound} heard between {sound1} and {sound2}?" open_text_questions: identify_between: "What sound occurs between {sound1} and {sound2}?" count_between: "How many sounds occur between {sound1} and {sound2}?" yes_no_between: "Is {target_sound} heard between {sound1} and {sound2}?" event_density: enabled: true task_duration_size: 1.0 # hours min_events: 6 max_events: 10 question_types: ["half_density", "before_after_density", "label_density"] mcq_questions: half_density: "Which half of the audio contains more sound events?" before_after_density: "Are there more sounds before or after {anchor_sound}?" label_density: "Which part has more {target_sound} sounds: before {anchor_sound} or after {anchor_sound}?" open_text_questions: half_density: "Which half of the audio contains more events?" before_after_density: "Are there more sounds before or after {anchor_sound}?" label_density: "Are there more {target_sound} sounds before or after {anchor_sound}?" # ===================================================================== # MULTIHOP TEMPORAL REASONING — INTER-TASK # ===================================================================== duration_gap: enabled: true task_duration_size: 1.0 # hours min_events: 3 max_events: 6 min_gap_ms: 500 max_gap_ms: 4000 preprocessed_data_path: "/home/debarpanb1/TREA_2.0/GISE_preprocessed_duration" question_types: ["event_vs_after_gap", "event_vs_before_gap", "gap_vs_event"] mcq_questions: event_vs_after_gap: "Which is longer: {sound1} or the silence after {sound1}?" event_vs_before_gap: "Which is longer: {sound1} or the silence before {sound1}?" gap_vs_event: "Which lasted longer: the pause between {sound1} and {sound2}, or {sound3}?" open_text_questions: event_vs_after_gap: "Which is longer, {sound1} or the silence after {sound1}?" event_vs_before_gap: "Which is longer, {sound1} or the silence before {sound1}?" gap_vs_event: "Was the pause between {sound1} and {sound2} longer than {sound3}?" temporal_arithmetic: enabled: true task_duration_size: 1.0 # hours min_events: 4 max_events: 8 min_gap_ms: 300 max_gap_ms: 2000 preprocessed_data_path: "/home/debarpanb1/TREA_2.0/GISE_preprocessed_duration" question_types: ["total_label_duration", "label_vs_silence", "combined_duration"] mcq_questions: total_label_duration: "Which sound lasts longer in total: {sound1} or {sound2}?" label_vs_silence: "Which is longer in total: {target_sound} or the total silence?" combined_duration: "Which is longer: all {target_sound} sounds combined or the longest silence?" open_text_questions: total_label_duration: "Which sound lasts longer in total, {sound1} or {sound2}?" label_vs_silence: "Which is longer in total, {target_sound} or silence?" combined_duration: "Which is longer, all {target_sound} sounds combined or the longest silence?" temporal_loudness: enabled: true task_duration_size: 1.0 # hours min_events: 4 max_events: 8 # Volume adjustment range for per-event volume (dB) volume_range_db: [-12, 6] min_volume_diff_db: 3.0 question_types: ["loudest_after", "softest_after", "loudest_before", "softest_before", "repeated_loudness"] mcq_questions: loudest_after: "Which sound after {anchor_sound} is the loudest?" softest_after: "Which sound after {anchor_sound} is the softest?" loudest_before: "Which sound before {anchor_sound} is the loudest?" softest_before: "Which sound before {anchor_sound} is the softest?" repeated_loudness: "Which occurrence of {target_sound} is the loudest?" open_text_questions: loudest_after: "Which sound after {anchor_sound} is loudest?" softest_after: "Which sound after {anchor_sound} is softest?" loudest_before: "Which sound before {anchor_sound} is loudest?" softest_before: "Which sound before {anchor_sound} is softest?" repeated_loudness: "Which occurrence of {target_sound} is loudest?" multi_hop: enabled: true task_duration_size: 1.0 # hours min_events: 5 max_events: 8 min_gap_ms: 500 max_gap_ms: 3000 # Volume adjustment range for per-event volume (dB) volume_range_db: [-10, 6] min_volume_diff_db: 4.0 preprocessed_data_path: "/home/debarpanb1/TREA_2.0/GISE_preprocessed_duration" question_types: - "after_longest" - "before_longest" - "after_shortest" - "before_loudest" - "after_longest_gap" - "overlap_after_anchor" - "loudest_after_anchor" - "longest_before_anchor" - "count_before_loudest" - "count_after_longest" mcq_questions: after_longest: "What sound occurs after the longest sound?" before_longest: "What sound occurs before the longest sound?" after_shortest: "What sound occurs after the shortest sound?" before_loudest: "What sound occurs before the loudest sound?" after_longest_gap: "Which sound is heard after the longest silence?" overlap_after_anchor: "Which sound overlaps with the event that occurs after {anchor_sound}?" loudest_after_anchor: "Which sound after {anchor_sound} is the loudest?" longest_before_anchor: "Which sound before {anchor_sound} lasts the longest?" count_before_loudest: "How many {target_sound} sounds occur before the loudest event?" count_after_longest: "How many {target_sound} sounds occur after the longest event?" open_text_questions: after_longest: "What sound occurs after the longest sound?" before_longest: "What sound occurs before the longest sound?" after_shortest: "What sound occurs after the shortest sound?" before_loudest: "What sound occurs before the loudest sound?" after_longest_gap: "Which sound occurs after the longest silence?" overlap_after_anchor: "Which sound overlaps with the event that occurs after {anchor_sound}?" loudest_after_anchor: "Which sound after {anchor_sound} is loudest?" longest_before_anchor: "Which sound before {anchor_sound} lasts the longest?" count_before_loudest: "How many {target_sound} sounds occur before the loudest event?" count_after_longest: "How many {target_sound} sounds occur after the longest event?" # MCQ options configuration mcq: num_options: 4 option_labels: ["A", "B", "C", "D"] # Strategy for generating distractor options # "present_only": only use sounds present in audio # "mixed": mix of present and absent sounds # "balanced": balanced distribution distractor_strategy: "balanced" # Logging configuration logging: level: "INFO" # DEBUG, INFO, WARNING, ERROR, CRITICAL log_file: "pipeline.log" console_output: true