key_tone.hpp 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. #ifndef BASE_KEY_TONE_HPP
  2. #define BASE_KEY_TONE_HPP
  3. #include "handler.hpp"
  4. #include "macros.h"
  5. #include "media/ZKMediaPlayer.h"
  6. #include "manager/ConfigManager.h"
  7. #include "stream_player.h"
  8. namespace base {
  9. class KeyTone {
  10. DISALLOW_COPY_AND_ASSIGN(KeyTone)
  11. DECLARE_INSTANCE(KeyTone)
  12. private:
  13. enum Messages {
  14. kClick,
  15. };
  16. public:
  17. static void Trigger() {
  18. if (!instance()->enable_) {
  19. return;
  20. }
  21. instance()->handler_.remove_messages(kClick);
  22. base::message<float> msg(kClick, instance()->click_volume_);
  23. instance()->handler_.send_message(msg);
  24. }
  25. static void Announce(float volume, int delayed) {
  26. base::message<float> msg(kClick, volume);
  27. instance()->handler_.send_message_delayed(msg, delayed);
  28. }
  29. static void set_enable(bool enable) {
  30. instance()->enable_ = enable;
  31. }
  32. static void set_volume(float volume) {
  33. instance()->click_volume_ = volume;
  34. }
  35. private:
  36. KeyTone() {
  37. handler_.set_message_handler(
  38. [](const base::message<float>* msg, const void* user_data){
  39. ((KeyTone*)user_data)->HandleMessage(msg);
  40. }, this);
  41. stream_player_ = new fy::StreamPlayer();
  42. click_volume_ = 1.0;
  43. stream_player_->SetVolume(click_volume_);
  44. enable_ = true;
  45. }
  46. ~KeyTone() {
  47. if (stream_player_) {
  48. delete stream_player_;
  49. }
  50. }
  51. void HandleMessage(const base::message<float>* msg) {
  52. stream_player_->SetVolume(msg->obj);
  53. stream_player_->Play(CONFIGMANAGER->getResFilePath("keytone.wav"));
  54. }
  55. private:
  56. base::handler<float> handler_;
  57. fy::StreamPlayer* stream_player_;
  58. bool enable_;
  59. float click_volume_;
  60. };
  61. } /* namespace base */
  62. #endif