Skip to content

Commit 163f7d0

Browse files
committed
objects: allow overloading renderer for other formats
1 parent 9aecbef commit 163f7d0

File tree

2 files changed

+20
-2
lines changed

2 files changed

+20
-2
lines changed

ear/core/objectbased/renderer.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
import numpy as np
22
import math
33
from fractions import Fraction
4+
from functools import singledispatch
45
from ..convolver import OverlapSaveConvolver, VariableBlockSizeAdapter
56
from ..delay import Delay
67
from .gain_calc import GainCalc
78
from . import decorrelate
9+
from ..layout import Layout
810
from ..renderer_common import BlockProcessingChannel, InterpretTimingMetadata, InterpGains, FixedGains
911
from ..track_processor import TrackProcessor
1012

@@ -148,3 +150,19 @@ def render(self, sample_rate, start_sample, input_samples):
148150
direct_out = self.delays.process(interpolated[:, :self._nchannels])
149151
diffuse_out = self.decorrelators_vbs.process(interpolated[:, self._nchannels:])
150152
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)

ear/core/renderer.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import numpy as np
2-
from .objectbased.renderer import ObjectRenderer
2+
from .objectbased.renderer import build_objects_renderer
33
from .direct_speakers.renderer import DirectSpeakersRenderer
44
from .scenebased.renderer import HOARenderer
55
from .metadata_input import ObjectRenderingItem, DirectSpeakersRenderingItem, HOARenderingItem
@@ -20,7 +20,7 @@ class Renderer(object):
2020
def __init__(self, layout, object_renderer_opts={}, direct_speakers_opts={}, hoa_renderer_opts={}):
2121
self.block_aligner = BlockAligner(layout.num_channels)
2222

23-
self._object_renderer = ObjectRenderer(layout, **object_renderer_opts)
23+
self._object_renderer = build_objects_renderer(layout, **object_renderer_opts)
2424
self._direct_speakers_renderer = DirectSpeakersRenderer(layout, **direct_speakers_opts)
2525
self._hoa_renderer = HOARenderer(layout, **hoa_renderer_opts)
2626

0 commit comments

Comments
 (0)