diff --git a/libs/audio/include/psemek/audio/combine/mixer.hpp b/libs/audio/include/psemek/audio/combine/mixer.hpp index baf9407b..1796978a 100644 --- a/libs/audio/include/psemek/audio/combine/mixer.hpp +++ b/libs/audio/include/psemek/audio/combine/mixer.hpp @@ -13,6 +13,8 @@ namespace psemek::audio : stream { virtual channel_ptr add(stream_ptr stream) = 0; + + virtual std::size_t stream_count() const = 0; }; using mixer_ptr = std::shared_ptr; diff --git a/libs/audio/source/combine/mixer.cpp b/libs/audio/source/combine/mixer.cpp index ff7f2677..98c5e69c 100644 --- a/libs/audio/source/combine/mixer.cpp +++ b/libs/audio/source/combine/mixer.cpp @@ -17,6 +17,11 @@ namespace psemek::audio { channel_ptr add(stream_ptr stream) override; + std::size_t stream_count() const override + { + return stream_count_.load(); + } + std::size_t read(util::span samples) override; std::optional length() const override @@ -39,6 +44,7 @@ namespace psemek::audio std::vector new_channels_; std::atomic played_{0}; + std::atomic stream_count_{0}; }; channel_ptr mixer_impl::add(stream_ptr stream) @@ -89,6 +95,8 @@ namespace psemek::audio alive_channels_.push_back(std::move(ch)); } + stream_count_ = alive_channels_.size(); + std::swap(channels_, alive_channels_); alive_channels_.clear();