@@ -23,12 +23,10 @@ namespace PokemonAutomation{
2323
2424
2525void AudioSession::add_state_listener (StateListener& listener){
26- std::lock_guard<std::mutex> lg (m_lock);
27- m_listeners.insert (&listener);
26+ m_listeners.add (listener);
2827}
2928void AudioSession::remove_state_listener (StateListener& listener){
30- std::lock_guard<std::mutex> lg (m_lock);
31- m_listeners.erase (&listener);
29+ m_listeners.remove (listener);
3230}
3331void AudioSession::add_stream_listener (AudioFloatStreamListener& listener){
3432 m_devices->add_listener (listener);
@@ -74,33 +72,33 @@ void AudioSession::get(AudioOption& option){
7472 option.m_display_type = m_option.m_display_type ;
7573}
7674void AudioSession::set (const AudioOption& option){
77- std::lock_guard<std::mutex> lg (m_lock);
78- signal_pre_input_change ();
75+ {
76+ std::lock_guard<std::mutex> lg (m_lock);
77+ signal_pre_input_change ();
7978
80- m_option.m_input_file = option.m_input_file ;
81- m_option.m_input_device = option.m_input_device ;
82- m_option.m_input_format = option.m_input_format ;
83- m_option.m_output_device = option.m_output_device ;
84- m_option.m_volume = option.m_volume ;
85- m_option.m_display_type = option.m_display_type ;
79+ m_option.m_input_file = option.m_input_file ;
80+ m_option.m_input_device = option.m_input_device ;
81+ m_option.m_input_format = option.m_input_format ;
82+ m_option.m_output_device = option.m_output_device ;
83+ m_option.m_volume = option.m_volume ;
84+ m_option.m_display_type = option.m_display_type ;
8685
87- if (!m_option.m_input_file .empty ()){
88- sanitize_format ();
89- m_devices->set_audio_source (m_option.m_input_file );
90- }else if (sanitize_format ()){
91- m_devices->set_audio_source (m_option.m_input_device , m_option.m_input_format );
92- }else {
93- m_devices->clear_audio_source ();
94- }
86+ if (!m_option.m_input_file .empty ()){
87+ sanitize_format ();
88+ m_devices->set_audio_source (m_option.m_input_file );
89+ }else if (sanitize_format ()){
90+ m_devices->set_audio_source (m_option.m_input_device , m_option.m_input_format );
91+ }else {
92+ m_devices->clear_audio_source ();
93+ }
9594
96- m_devices->set_audio_sink (m_option.m_output_device , m_option.m_volume );
95+ m_devices->set_audio_sink (m_option.m_output_device , m_option.m_volume );
96+ }
9797
9898 signal_post_input_change ();
9999 signal_post_output_change ();
100- for (StateListener* listener : m_listeners){
101- listener->post_volume_change (m_option.volume ());
102- listener->post_display_change (m_option.m_display_type );
103- }
100+ m_listeners.run_method_unique (&StateListener::post_volume_change, m_option.volume ());
101+ m_listeners.run_method_unique (&StateListener::post_display_change, m_option.m_display_type );
104102}
105103std::pair<std::string, AudioDeviceInfo> AudioSession::input_device () const {
106104 std::lock_guard<std::mutex> lg (m_lock);
@@ -193,25 +191,25 @@ void AudioSession::set_audio_output(AudioDeviceInfo info){
193191 signal_post_output_change ();
194192}
195193void AudioSession::set_volume (double volume){
196- std::lock_guard<std::mutex> lg (m_lock);
197- if (m_option.m_volume == volume){
198- return ;
199- }
200- m_devices->set_sink_volume (volume);
201- m_option.m_volume = volume;
202- for (StateListener* listener : m_listeners){
203- listener->post_volume_change (m_option.volume ());
194+ {
195+ std::lock_guard<std::mutex> lg (m_lock);
196+ if (m_option.m_volume == volume){
197+ return ;
198+ }
199+ m_devices->set_sink_volume (volume);
200+ m_option.m_volume = volume;
204201 }
202+ m_listeners.run_method_unique (&StateListener::post_volume_change, m_option.volume ());
205203}
206204void AudioSession::set_display (AudioOption::AudioDisplayType display){
207- std::lock_guard<std::mutex> lg (m_lock);
208- if (m_option.m_display_type == display){
209- return ;
210- }
211- m_option.m_display_type = display;
212- for (StateListener* listener : m_listeners){
213- listener->post_display_change (m_option.m_display_type );
205+ {
206+ std::lock_guard<std::mutex> lg (m_lock);
207+ if (m_option.m_display_type == display){
208+ return ;
209+ }
210+ m_option.m_display_type = display;
214211 }
212+ m_listeners.run_method_unique (&StateListener::post_display_change, m_option.m_display_type );
215213}
216214
217215bool AudioSession::sanitize_format (){
@@ -243,19 +241,18 @@ bool AudioSession::sanitize_format(){
243241 return true ;
244242}
245243void AudioSession::signal_pre_input_change (){
246- for (StateListener* listener : m_listeners){
247- listener->pre_input_change ();
248- }
244+ m_listeners.run_method_unique (&StateListener::pre_input_change);
249245}
250246void AudioSession::signal_post_input_change (){
251- for (StateListener* listener : m_listeners){
252- listener->post_input_change (m_option.input_file (), m_option.input_device (), m_option.input_format ());
253- }
247+ m_listeners.run_method_unique (
248+ &StateListener::post_input_change,
249+ m_option.input_file (),
250+ m_option.input_device (),
251+ m_option.input_format ()
252+ );
254253}
255254void AudioSession::signal_post_output_change (){
256- for (StateListener* listener : m_listeners){
257- listener->post_output_change (m_option.output_device ());
258- }
255+ m_listeners.run_method_unique (&StateListener::post_output_change, m_option.output_device ());
259256}
260257
261258
@@ -290,7 +287,7 @@ void AudioSession::add_overlay(uint64_t starting_seqnum, size_t end_seqnum, Colo
290287}
291288
292289
293- void AudioSession::on_fft (size_t sample_rate, std::shared_ptr<AlignedVector<float >> fft_output){
290+ void AudioSession::on_fft (size_t sample_rate, std::shared_ptr<const AlignedVector<float >> fft_output){
294291 m_spectrum_holder.push_spectrum (sample_rate, std::move (fft_output));
295292 global_watchdog ().delay (*this );
296293}
0 commit comments