CVoiceWorker.cpp 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. #include "../pch/pch.h"
  2. #include "CVoiceWorker.h"
  3. #include "mmsystem.h"
  4. #include "../helper/CSpeech.h"
  5. #include "../tool/CAppEnv.h"
  6. CVoiceWorker::CVoiceWorker()
  7. {
  8. }
  9. CVoiceWorker::~CVoiceWorker()
  10. {
  11. }
  12. void CVoiceWorker::Start()
  13. {
  14. m_is_work = true;
  15. //处理声音提醒
  16. std::thread(&CVoiceWorker::HandleVoice, this).detach();
  17. CAppEnv::GetInstance()->AddWorkerNum();
  18. //处理文字转语音
  19. std::thread(&CVoiceWorker::HandleVoiceContent, this).detach();
  20. CAppEnv::GetInstance()->AddWorkerNum();
  21. }
  22. void CVoiceWorker::Stop()
  23. {
  24. m_is_work = false;
  25. }
  26. void CVoiceWorker::AddVoice(int voice_type)
  27. {
  28. m_voice_mutex.lock();
  29. m_voice_queue.push(voice_type);
  30. m_voice_mutex.unlock();
  31. }
  32. //文字转语音播放
  33. void CVoiceWorker::AddVoice(std::string voiceContent)
  34. {
  35. m_voice_mutex.lock();
  36. m_voice_content_queue.push(voiceContent);
  37. m_voice_mutex.unlock();
  38. }
  39. void CVoiceWorker::HandleVoice()
  40. {
  41. while (m_is_work)
  42. {
  43. m_voice_mutex.lock();
  44. if (m_voice_queue.empty())
  45. {
  46. m_voice_mutex.unlock();
  47. Sleep(100);
  48. continue;
  49. }
  50. int voice_type = m_voice_queue.front();
  51. m_voice_queue.pop();
  52. m_voice_mutex.unlock();
  53. if (voice_type == 1)
  54. {
  55. std::wstring path = CSystem::GetProgramDir() + L"\\music\\waimai_new.wav";
  56. PlaySound(path.c_str(), NULL, SND_FILENAME | SND_ASYNC);
  57. }
  58. else if (voice_type == 2)
  59. {
  60. std::wstring path = CSystem::GetProgramDir() + L"\\music\\waimai_new_auto.wav";
  61. PlaySound(path.c_str(), NULL, SND_FILENAME | SND_ASYNC);
  62. }
  63. else if (voice_type == 3)
  64. {
  65. std::wstring path = CSystem::GetProgramDir() + L"\\music\\waimai_quxiao.wav";
  66. PlaySound(path.c_str(), NULL, SND_FILENAME | SND_ASYNC);
  67. }
  68. else if (voice_type == 4)
  69. {
  70. std::wstring path = CSystem::GetProgramDir() + L"\\music\\waimai_tuikuan.wav";
  71. PlaySound(path.c_str(), NULL, SND_FILENAME | SND_ASYNC);
  72. }
  73. else if (voice_type == 5)
  74. {
  75. std::wstring path = CSystem::GetProgramDir() + L"\\music\\diannei_new.wav";
  76. PlaySound(path.c_str(), NULL, SND_FILENAME | SND_ASYNC);
  77. }
  78. else if (voice_type == 6)
  79. {
  80. std::wstring path = CSystem::GetProgramDir() + L"\\music\\zhengcan_h5_diancai.wav";
  81. PlaySound(path.c_str(), NULL, SND_FILENAME | SND_ASYNC);
  82. }
  83. //8秒内最多播放一次
  84. //CSystem::my_sleep(8);
  85. }
  86. CAppEnv::GetInstance()->DelWorkerNum();
  87. }
  88. //处理文字转语音的
  89. void CVoiceWorker::HandleVoiceContent()
  90. {
  91. while (m_is_work)
  92. {
  93. m_voice_mutex.lock();
  94. if (m_voice_content_queue.empty())
  95. {
  96. m_voice_mutex.unlock();
  97. Sleep(100);
  98. continue;
  99. }
  100. std::string content = m_voice_content_queue.front();
  101. m_voice_content_queue.pop();
  102. m_voice_mutex.unlock();
  103. //进行播放
  104. std::wstring ws_content = CLewaimaiString::UTF8ToUnicode(content);
  105. CSpeech::MSSSpeak(ws_content.c_str());
  106. }
  107. CAppEnv::GetInstance()->DelWorkerNum();
  108. }