|
1 | 1 | import numpy as np |
2 | 2 | import math |
3 | 3 | from fractions import Fraction |
| 4 | +from functools import singledispatch |
4 | 5 | from ..convolver import OverlapSaveConvolver, VariableBlockSizeAdapter |
5 | 6 | from ..delay import Delay |
6 | 7 | from .gain_calc import GainCalc |
7 | 8 | from . import decorrelate |
| 9 | +from ..layout import Layout |
8 | 10 | from ..renderer_common import BlockProcessingChannel, InterpretTimingMetadata, InterpGains, FixedGains |
9 | 11 | from ..track_processor import TrackProcessor |
10 | 12 |
|
@@ -148,3 +150,19 @@ def render(self, sample_rate, start_sample, input_samples): |
148 | 150 | direct_out = self.delays.process(interpolated[:, :self._nchannels]) |
149 | 151 | diffuse_out = self.decorrelators_vbs.process(interpolated[:, self._nchannels:]) |
150 | 152 | return direct_out + diffuse_out |
| 153 | + |
| 154 | + |
| 155 | +@singledispatch |
| 156 | +def build_objects_renderer(_layout, **_options): |
| 157 | + """build an objects renderer (e.g. ObjectRenderer) given a loudspeaker |
| 158 | + layout or other output format; this can be overridden from other modules to |
| 159 | + add support for different formats |
| 160 | +
|
| 161 | + returns None if no handler renderer is defined for this format |
| 162 | + """ |
| 163 | + return None |
| 164 | + |
| 165 | + |
| 166 | +@build_objects_renderer.register(Layout) |
| 167 | +def _build_objects_renderer_speakers(layout, **options): |
| 168 | + return ObjectRenderer(layout, **options) |
0 commit comments