Commit d75742e49393115a8b051a02df7c613ecaffb96c

Authored by 김태훈
1 parent 1d848d8450
Exists in master and in 2 other branches fhd, fhd-demo

음향 효과 개선

- QSound, QSoundEffect 대신 aplay 사용. 해당 클래스는 음향이 깨지는 문제가 있음
app/gui/oven_control/manualcookwindow.cpp
... ... @@ -154,7 +154,8 @@ ManualCookWindow::ManualCookWindow(QWidget *parent, Define::Mode mode) :
154 154 updateViewTimer.start(100);
155 155  
156 156 foreach (QPushButton *button, findChildren<QPushButton *>())
157   - connect(button, &QPushButton::pressed, SoundPlayer::playClick);
  157 + if (button != ui->runStopButton)
  158 + connect(button, &QPushButton::pressed, SoundPlayer::playClick);
158 159  
159 160 QTimer::singleShot(0, this, SLOT(setupAnimation()));
160 161  
... ... @@ -906,6 +907,8 @@ void ManualCookWindow::on_runStopButton_clicked()
906 907 stop();
907 908 else if (oven->time() > 0)
908 909 start();
  910 + else
  911 + SoundPlayer::playClick();
909 912  
910 913 updateView();
911 914 }
... ...
app/gui/oven_control/oven_control.pro
... ... @@ -329,3 +329,10 @@ TRANSLATIONS += lang_en.ts lang_zh.ts
329 329  
330 330 target.path = /falinux/dev
331 331 INSTALLS += target
  332 +
  333 +DISTFILES += \
  334 + sounds/button.wav \
  335 + sounds/error1.wav \
  336 + sounds/error2.wav \
  337 + sounds/start.wav \
  338 + sounds/stop.wav
... ...
app/gui/oven_control/resources.qrc
... ... @@ -533,11 +533,6 @@
533 533 <file>images/config/102_icon_play_ov.png</file>
534 534 <file>images/config/102_icon_play.png</file>
535 535 <file>images/config/102_usb_icon.png</file>
536   - <file>sounds/error1.wav</file>
537   - <file>sounds/error2.wav</file>
538   - <file>sounds/start.wav</file>
539   - <file>sounds/stop.wav</file>
540   - <file>sounds/button.wav</file>
541 536 <file>images/config/100_fav_pannel_icon_ov.png</file>
542 537 <file>images/config/100_fav_pannel_icon.png</file>
543 538 <file>images/config/105_icon_cancel_ov.png</file>
... ...
app/gui/oven_control/soundplayer.cpp
... ... @@ -2,6 +2,7 @@
2 2 #include "system.h"
3 3  
4 4 #include "config.h"
  5 +#include "unistd.h"
5 6  
6 7 namespace {
7 8 QThread playThread;
... ... @@ -9,50 +10,54 @@ QThread playThread;
9 10  
10 11 SoundPlayWorker::SoundPlayWorker()
11 12 {
12   - current = 0;
13   - click = 0;
  13 + repeat_ = false;
  14 + proc = new QProcess(this);
  15 +
  16 + connect(proc, SIGNAL(finished(int)), SLOT(onFinished()));
14 17 }
15 18  
16 19 void SoundPlayWorker::play(const QString &filename)
17 20 {
18   - if (current && !current->isFinished())
19   - current->stop();
20   -
21   - if (click && click->isPlaying())
22   - click->stop();
23   -
24   - if (map.contains(filename))
25   - current = map.value(filename);
26   - else
  21 + if (proc->state() != QProcess::NotRunning)
27 22 {
28   - current = new QSound(filename);
29   - map[filename] = current;
  23 + proc->terminate();
  24 + proc->waitForFinished();
30 25 }
31 26  
32   - current->play();
  27 + proc->start(QString("aplay"), QStringList(filename));
  28 + proc->waitForStarted();
33 29 }
34 30  
35 31 void SoundPlayWorker::playClick()
36 32 {
37   - if (current && !current->isFinished())
38   - current->stop();
  33 + play("/falinux/sounds/button.wav");
  34 +}
39 35  
40   - if (click && click->isPlaying())
41   - click->stop();
  36 +void SoundPlayWorker::setVolume(int volume)
  37 +{
  38 + System::setVolume(volume);
  39 +}
  40 +
  41 +void SoundPlayWorker::repeat(const QString &filename)
  42 +{
  43 + repeat_ = true;
  44 + play(filename);
  45 +}
42 46  
43   - if (click == 0)
  47 +void SoundPlayWorker::stop()
  48 +{
  49 + repeat_ = false;
  50 + if (proc->state() != QProcess::NotRunning)
44 51 {
45   - click = new QSoundEffect;
46   - click->setSource(QUrl::fromLocalFile(":/sounds/button.wav"));
47   - click->setVolume(1.0);
  52 + proc->terminate();
  53 + proc->waitForFinished();
48 54 }
49   -
50   - click->play();
51 55 }
52 56  
53   -void SoundPlayWorker::setVolume(int volume)
  57 +void SoundPlayWorker::onFinished()
54 58 {
55   - System::setVolume(volume);
  59 + if (repeat_)
  60 + proc->start();
56 61 }
57 62  
58 63 SoundPlayer *SoundPlayer::instance = 0;
... ... @@ -65,6 +70,8 @@ SoundPlayer::SoundPlayer()
65 70 connect(this, SIGNAL(setVolume(int)), w, SLOT(setVolume(int)));
66 71 connect(this, SIGNAL(operate(QString)), w, SLOT(play(QString)));
67 72 connect(this, SIGNAL(click()), w, SLOT(playClick()));
  73 + connect(this, SIGNAL(operateRepeat(QString)), w, SLOT(repeat(QString)));
  74 + connect(this, SIGNAL(operateStop()), w, SLOT(stop()));
68 75  
69 76 playThread.start();
70 77 }
... ... @@ -78,22 +85,22 @@ void SoundPlayer::play(const QString &amp;filename)
78 85 emit setVolume(0);
79 86 break;
80 87 case 1:
81   - emit setVolume(40);
  88 + emit setVolume(60);
82 89 break;
83 90 case 2:
84   - emit setVolume(50);
  91 + emit setVolume(70);
85 92 break;
86 93 case 3:
87   - emit setVolume(60);
  94 + emit setVolume(80);
88 95 break;
89 96 case 4:
90   - emit setVolume(70);
  97 + emit setVolume(85);
91 98 break;
92 99 case 5:
93   - emit setVolume(80);
  100 + emit setVolume(90);
94 101 break;
95 102 case 6:
96   - emit setVolume(90);
  103 + emit setVolume(95);
97 104 break;
98 105 case 7:
99 106 emit setVolume(100);
... ... @@ -115,17 +122,54 @@ void SoundPlayer::emitClick()
115 122 emit setVolume(0);
116 123 break;
117 124 case 1:
118   - emit setVolume(50);
  125 + emit setVolume(75);
119 126 break;
120 127 case 2:
121   - emit setVolume(60);
  128 + emit setVolume(80);
122 129 break;
123 130 case 3:
124   - emit setVolume(70);
  131 + emit setVolume(85);
125 132 break;
126 133 case 4:
  134 + emit setVolume(90);
  135 + break;
  136 + case 5:
  137 + emit setVolume(95);
  138 + break;
  139 + case 6:
  140 + emit setVolume(98);
  141 + break;
  142 + case 7:
  143 + emit setVolume(100);
  144 + break;
  145 + default:
  146 + emit setVolume(0);
  147 + break;
  148 + }
  149 +
  150 + emit click();
  151 +}
  152 +
  153 +void SoundPlayer::repeat(const QString &filename)
  154 +{
  155 + Define::config_item item = Config::getInstance()->getConfigValue(Define::config_marster_vol);
  156 + switch (item.d32)
  157 + {
  158 + case 0:
  159 + emit setVolume(0);
  160 + break;
  161 + case 1:
  162 + emit setVolume(60);
  163 + break;
  164 + case 2:
  165 + emit setVolume(70);
  166 + break;
  167 + case 3:
127 168 emit setVolume(80);
128 169 break;
  170 + case 4:
  171 + emit setVolume(85);
  172 + break;
129 173 case 5:
130 174 emit setVolume(90);
131 175 break;
... ... @@ -140,7 +184,12 @@ void SoundPlayer::emitClick()
140 184 break;
141 185 }
142 186  
143   - emit click();
  187 + emit operateRepeat(filename);
  188 +}
  189 +
  190 +void SoundPlayer::stopPlay()
  191 +{
  192 + emit operateStop();
144 193 }
145 194  
146 195 void SoundPlayer::playClick()
... ... @@ -156,7 +205,7 @@ void SoundPlayer::playStart()
156 205 if (instance == 0)
157 206 instance = new SoundPlayer;
158 207  
159   - instance->play(":/sounds/start.wav");
  208 + instance->play("/falinux/sounds/start.wav");
160 209 }
161 210  
162 211 void SoundPlayer::playStop()
... ... @@ -164,7 +213,7 @@ void SoundPlayer::playStop()
164 213 if (instance == 0)
165 214 instance = new SoundPlayer;
166 215  
167   - instance->play(":/sounds/stop.wav");
  216 + instance->play("/falinux/sounds/stop.wav");
168 217 }
169 218  
170 219 void SoundPlayer::playError1()
... ... @@ -172,7 +221,7 @@ void SoundPlayer::playError1()
172 221 if (instance == 0)
173 222 instance = new SoundPlayer;
174 223  
175   - instance->play(":/sounds/error1.wav");
  224 + instance->play("/falinux/sounds/error1.wav");
176 225 }
177 226  
178 227 void SoundPlayer::playError2()
... ... @@ -180,5 +229,29 @@ void SoundPlayer::playError2()
180 229 if (instance == 0)
181 230 instance = new SoundPlayer;
182 231  
183   - instance->play(":/sounds/error2.wav");
  232 + instance->play("/falinux/sounds/error2.wav");
  233 +}
  234 +
  235 +void SoundPlayer::repeatError1()
  236 +{
  237 + if (instance == 0)
  238 + instance = new SoundPlayer;
  239 +
  240 + instance->repeat("/falinux/sounds/error1.wav");
  241 +}
  242 +
  243 +void SoundPlayer::repeatError2()
  244 +{
  245 + if (instance == 0)
  246 + instance = new SoundPlayer;
  247 +
  248 + instance->repeat("/falinux/sounds/error2.wav");
  249 +}
  250 +
  251 +void SoundPlayer::stop()
  252 +{
  253 + if (instance == 0)
  254 + instance = new SoundPlayer;
  255 +
  256 + instance->stopPlay();
184 257 }
... ...
app/gui/oven_control/soundplayer.h
... ... @@ -6,10 +6,14 @@
6 6 #include <QSoundEffect>
7 7 #include <QThread>
8 8 #include <QMap>
  9 +#include <QProcess>
9 10  
10 11 class SoundPlayWorker : public QObject
11 12 {
12 13 Q_OBJECT
  14 +
  15 + bool repeat_;
  16 +
13 17 public:
14 18 explicit SoundPlayWorker();
15 19  
... ... @@ -17,11 +21,17 @@ public slots:
17 21 void play(const QString &filename);
18 22 void playClick();
19 23 void setVolume(int volume);
  24 + void repeat(const QString &filename);
  25 + void stop();
20 26  
21 27 private:
22 28 QMap<QString, QSound *> map;
23 29 QSound *current;
24 30 QSoundEffect *click;
  31 + QProcess *proc;
  32 +
  33 +private slots:
  34 + void onFinished();
25 35 };
26 36  
27 37 class SoundPlayer : public QObject
... ... @@ -31,6 +41,8 @@ class SoundPlayer : public QObject
31 41 explicit SoundPlayer();
32 42 void play(const QString &filename);
33 43 void emitClick();
  44 + void repeat(const QString &filename);
  45 + void stopPlay();
34 46  
35 47  
36 48 static SoundPlayer *instance;
... ... @@ -41,11 +53,16 @@ public:
41 53 static void playStop();
42 54 static void playError1();
43 55 static void playError2();
  56 + static void repeatError1();
  57 + static void repeatError2();
  58 + static void stop();
44 59  
45 60 signals:
46 61 void setVolume(int);
47 62 void operate(const QString &);
48 63 void click();
  64 + void operateRepeat(const QString &);
  65 + void operateStop();
49 66 };
50 67  
51 68 #endif // SOUNDPLAYER_H
... ...