Hi @Radio42,
Yes, I've tried several combinations of those options.
If the only option is to take a specific approach for each stream type, then it looks like the split streams are my biggest obstacle. I can't find a way to determine when those streams should even be flushed, unless I were to keep a separate collection of all the streams added up stream. Thus far, I've relied on the built-in methods to determine if a stream/channel BASS_ChannelIsActive, or if a mixer had BASS_Mixer_StreamGetChannelCount > 0. Split streams just don't seem to have any method to determine if they're actively decoding/reading. Now, with that being said, I've tried so many combinations of things that I may have just missed something along the way.
In my setup, I'm ultimately dealing with multiple split streams. Some are sourced by another split stream, and the others from mixers. The DLP_PeakLevelMeter assigned to a split stream knows when to stop providing Notification events, so I'm trying to accomplish the same thing. How do I know when a split stream is not active, but still has a source (or not)?
Here is an example of how some of the splits are setup:
//Mixer setup
//Mainmix
// |-> Split stream -> Main Output
// |-> Split stream -> Monitor Mix <- Cue Mix
// |-> Split Stream -> Headphone Output
// |-> Split Stream -> Monitor Output
_bassMainMix = BassMix.BASS_Mixer_StreamCreate(44100, 2, BASSFlag.BASS_SAMPLE_FLOAT | BASSFlag.BASS_STREAM_DECODE);
_bassMonitorMix = BassMix.BASS_Mixer_StreamCreate(44100, 2, BASSFlag.BASS_SAMPLE_FLOAT | BASSFlag.BASS_STREAM_DECODE);
_bassCueMix = BassMix.BASS_Mixer_StreamCreate(44100, 2, BASSFlag.BASS_SAMPLE_FLOAT | BASSFlag.BASS_STREAM_DECODE);
//Split Streams for MainMix
_bassMainToMainReader = BassMix.BASS_Split_StreamCreate(_bassMainMix, BASSFlag.BASS_SAMPLE_FLOAT | BASSFlag.BASS_STREAM_DECODE, null);
_bassMainToMonitorReader = BassMix.BASS_Split_StreamCreate(_bassMainMix, BASSFlag.BASS_SAMPLE_FLOAT | BASSFlag.BASS_STREAM_DECODE, null);
//Monitor Mixer configuration
BassMix.BASS_Mixer_StreamAddChannel(_bassMonitorMix, _bassMainToMonitorReader, BASSFlag.BASS_DEFAULT);
BassMix.BASS_Mixer_StreamAddChannel(_bassMonitorMix, _bassCueMix, BASSFlag.BASS_DEFAULT);
//Split Streams for MonitorMix
_bassMonitorToHeadphoneReader = BassMix.BASS_Split_StreamCreate(_bassMonitorMix, BASSFlag.BASS_SAMPLE_FLOAT | BASSFlag.BASS_STREAM_DECODE, null);
_bassMonitorToMonitorReader = BassMix.BASS_Split_StreamCreate(_bassMonitorMix, BASSFlag.BASS_SAMPLE_FLOAT | BASSFlag.BASS_STREAM_DECODE, null);