\r
#include <core/mixer/write_frame.h>\r
#include <core/producer/frame/frame_transform.h>\r
+#include <core/monitor/monitor.h>\r
#include <common/diagnostics/graph.h>\r
#include "audio_util.h"\r
\r
channel_layout channel_layout_;\r
float master_volume_;\r
float previous_master_volume_;\r
+ safe_ptr<monitor::subject> monitor_subject_;\r
\r
public:\r
implementation(const safe_ptr<diagnostics::graph>& graph)\r
, channel_layout_(channel_layout::stereo())\r
, master_volume_(1.0f)\r
, previous_master_volume_(master_volume_)\r
+ , monitor_subject_(make_safe<monitor::subject>("/audio"))\r
{\r
graph_->set_color("volume", diagnostics::color(1.0f, 0.8f, 0.1f));\r
transform_stack_.push(core::frame_transform());\r
float audio_mixer::get_master_volume() const { return impl_->get_master_volume(); }\r
void audio_mixer::set_master_volume(float volume) { impl_->set_master_volume(volume); }\r
audio_buffer audio_mixer::operator()(const video_format_desc& format_desc, const channel_layout& layout){return impl_->mix(format_desc, layout);}\r
+monitor::subject& audio_mixer::monitor_output(){return *impl_->monitor_subject_;}\r
\r
}}
\ No newline at end of file
\r
#include <common/memory/safe_ptr.h>\r
\r
+#include "../../monitor/monitor.h"\r
+\r
#include <core/producer/frame/frame_visitor.h>\r
\r
#include <boost/noncopyable.hpp>\r
void set_master_volume(float volume);\r
\r
audio_buffer operator()(const video_format_desc& format_desc, const channel_layout& layout);\r
+\r
+ monitor::subject& monitor_output();\r
\r
private:\r
struct implementation;\r
{ \r
graph_->set_color("mix-time", diagnostics::color(1.0f, 0.0f, 0.9f, 0.8));\r
current_mix_time_ = 0;\r
+\r
+ audio_mixer_.monitor_output().attach_parent(monitor_subject_);\r
}\r
\r
void send(const std::pair<std::map<int, safe_ptr<core::basic_frame>>, std::shared_ptr<void>>& packet)\r