Hi Roman, here is a short description about the mechanics:
The key are the mc._in and mc._out abstractions which are present in each mc-object.
The source object sends its signal data though send~ objects with the naming convention $0-mc-0.... $0-mc-n, where n equals channel-count-1. The object informs a sink object by use of a simple two float message [$0-of-source channel-count( . This message flows through a signal connection which has the two floats at the beginning of each signal block (implemented using tabsend~ and tabreceive~). The sink in turn uses the $0-of-source to dynamically create or set receive~s to connect to the source send~s.
The signal connection is doubled by a send/receive message connection in order to also transmit the data in the message domain. Otherwise there would be warnings about missing send~/receive~ connection when the graph changes.
Currently, i am working on making the dynamic generation process modular for the various functionalities needed (see the mc.map object for starters). When this overhaul has been completed, the general mechanics should be better understandable. I admit that the whole thing is pretty involved.
best, Thomas
Am 08.12.2021 um 16:34 schrieb Roman Haefeli reduzent@gmail.com:
Signierter PGP-Teil Hey Thomas
On Sun, 2021-12-05 at 17:22 +0100, Thomas Grill wrote:
i'd like to make you aware of an abstraction library i have made because of working more with multi-channel loudspeaker systems lately.
Quite a few times I thought it would practical to pack many audio cables into one. It wouldn't have occurred to me how to actually implement it. This is really interesting. I had only a close look at it and, frankly, I failed to understand how it works. I'll check this out to some more detail for sure.
Roman
-- Thomas Grill http://grrrr.org