class_docstr: A ShoeBox Room Simulator. Simulates a cuboid of parametrized size and 
  average surface absorption coefficient. It also includes a source     and microphones in parametrized locations.
  
  Use it when you want a ton of synthetic room impulse responses of specific configurations
  characteristics or simply to quickly add reverb for augmentation purposes
  
  Some examples:
  
  > augment = RoomSimulator(use_ray_tracing=False)
  Quickly add reverberation without caring for accuracy.
  
  > augment = RoomSimulator(calculation_mode="rt60", min_target_rt60=0.06, max_target_rt60=0.06, min_size_x = ...)
  Augment with randomly selected room impulse responses that have an RT60 of 0.06.
  
  > augment = RoomSimulator(min_mic_radius=1.0, max_min_radius=1.0)
  Augment with a RIR captured by all positions of the microphone on a sphere, centred around the source at 1m
  
  > augment = RoomSimulator(min_mic_radius=1.0, max_min_radius=1.0, min_mic_elevation=0.0, max_mic_elevation=0.0)
  Augment with a RIR captured by all positions of the microphone on a circle, centred around the source at 1m    
code: def apply(self, samples: NDArray[np.float32], sample_rate: int):
      assert samples.dtype == np.float32
  
      rir = self.room.rir[0][0]
  
      # This is the same as ApplyImpulseResponse transform
      if samples.ndim > 1:
          signal_ir = []
          for i in range(samples.shape[0]):
              channel_conv = convolve(samples[i], rir)
              signal_ir.append(channel_conv)
          signal_ir = np.array(signal_ir, dtype=samples.dtype)
      else:
          signal_ir = convolve(samples, rir).astype(samples.dtype)
  
      if self.leave_length_unchanged:
          signal_ir = signal_ir[..., : samples.shape[-1]]
      return signal_ir
  
file_path: audiomentations/audiomentations/augmentations/room_simulator.py
imports: import random
  from typing import Optional, Dict
  import numpy
  import sys
  from numpy.typing import NDArray
  from scipy.signal import convolve
  from audiomentations.core.transforms_interface import BaseWaveformTransform
label_desc: Use image node_id 3 for calling the RoomSimulator obj's underlying member method code with example usage: obj.apply(samples, sample_rate) and returns: signal_ir