#ifndef BASE_KEY_TONE_HPP #define BASE_KEY_TONE_HPP #include "handler.hpp" #include "macros.h" #include "media/ZKMediaPlayer.h" #include "manager/ConfigManager.h" #include "stream_player.h" namespace base { class KeyTone { DISALLOW_COPY_AND_ASSIGN(KeyTone) DECLARE_INSTANCE(KeyTone) private: enum Messages { kClick, }; public: static void Trigger() { if (!instance()->enable_) { return; } instance()->handler_.remove_messages(kClick); base::message msg(kClick, instance()->click_volume_); instance()->handler_.send_message(msg); } static void Announce(float volume, int delayed) { base::message msg(kClick, volume); instance()->handler_.send_message_delayed(msg, delayed); } static void set_enable(bool enable) { instance()->enable_ = enable; } static void set_volume(float volume) { instance()->click_volume_ = volume; } private: KeyTone() { handler_.set_message_handler( [](const base::message* msg, const void* user_data){ ((KeyTone*)user_data)->HandleMessage(msg); }, this); stream_player_ = new fy::StreamPlayer(); click_volume_ = 1.0; stream_player_->SetVolume(click_volume_); enable_ = true; } ~KeyTone() { if (stream_player_) { delete stream_player_; } } void HandleMessage(const base::message* msg) { stream_player_->SetVolume(msg->obj); stream_player_->Play(CONFIGMANAGER->getResFilePath("keytone.wav")); } private: base::handler handler_; fy::StreamPlayer* stream_player_; bool enable_; float click_volume_; }; } /* namespace base */ #endif