aboutsummaryrefslogtreecommitdiff
path: root/engines/testbed/sound.cpp
diff options
context:
space:
mode:
authorNeeraj Kumar2010-07-30 20:10:30 +0000
committerNeeraj Kumar2010-07-30 20:10:30 +0000
commit9d6d0f8b3586c094f2f269394c8e8715c5e31db8 (patch)
tree627d0380193be850bf940080e9785923ffd16370 /engines/testbed/sound.cpp
parenta6e84128c975a220f4c2800a1d937c37e34b6cec (diff)
downloadscummvm-rg350-9d6d0f8b3586c094f2f269394c8e8715c5e31db8.tar.gz
scummvm-rg350-9d6d0f8b3586c094f2f269394c8e8715c5e31db8.tar.bz2
scummvm-rg350-9d6d0f8b3586c094f2f269394c8e8715c5e31db8.zip
TESTBED: added code to enable the mixer to simultaneously play channels, pause/unpause some of them using GUI, couple of fixes as well
svn-id: r51515
Diffstat (limited to 'engines/testbed/sound.cpp')
-rw-r--r--engines/testbed/sound.cpp75
1 files changed, 65 insertions, 10 deletions
diff --git a/engines/testbed/sound.cpp b/engines/testbed/sound.cpp
index 37e814eda2..161b69b2bb 100644
--- a/engines/testbed/sound.cpp
+++ b/engines/testbed/sound.cpp
@@ -22,10 +22,10 @@
* $Id$
*/
-#include "sound/mixer.h"
-#include "testbed/sound.h"
#include "sound/softsynth/pcspk.h"
+#include "testbed/sound.h"
+
namespace Testbed {
enum {
@@ -46,54 +46,109 @@ SoundSubsystemDialog::SoundSubsystemDialog() : TestbedInteractionDialog(80, 60,
addButton(200, 20, "Play Channel #2", kPlayChannel2);
addButton(200, 20, "Play Channel #3", kPlayChannel3);
addButton(50, 20, "Close", GUI::kCloseCmd, 160, 15);
+
+ _mixer = g_system->getMixer();
+
+ // the three streams to be mixed
+ Audio::PCSpeaker *s1 = new Audio::PCSpeaker();
+ Audio::PCSpeaker *s2 = new Audio::PCSpeaker();
+ Audio::PCSpeaker *s3 = new Audio::PCSpeaker();
+
+ s1->play(Audio::PCSpeaker::kWaveFormSine, 1000, -1);
+ s2->play(Audio::PCSpeaker::kWaveFormSquare, 500, -1);
+ s3->play(Audio::PCSpeaker::kWaveFormSaw, 200, -1);
+
+ _mixer->playStream(Audio::Mixer::kPlainSoundType, &_h1, s1);
+ _mixer->pauseHandle(_h1, true);
+
+ _mixer->playStream(Audio::Mixer::kSpeechSoundType, &_h2, s2);
+ _mixer->pauseHandle(_h2, true);
+
+ _mixer->playStream(Audio::Mixer::kSFXSoundType, &_h3, s3);
+ _mixer->pauseHandle(_h3, true);
+
}
void SoundSubsystemDialog::handleCommand(GUI::CommandSender *sender, uint32 cmd, uint32 data) {
+
switch (cmd) {
case kPlayChannel1:
_buttonArray[0]->setLabel("Pause Channel #1");
_buttonArray[0]->setCmd(kPauseChannel1);
- // TODO: Play music #1 here
+ _mixer->pauseHandle(_h1, false);
break;
case kPlayChannel2:
_buttonArray[1]->setLabel("Pause Channel #2");
_buttonArray[1]->setCmd(kPauseChannel2);
+ _mixer->pauseHandle(_h2, false);
break;
case kPlayChannel3:
_buttonArray[2]->setLabel("Pause Channel #3");
_buttonArray[2]->setCmd(kPauseChannel3);
+ _mixer->pauseHandle(_h3, false);
break;
case kPauseChannel1:
_buttonArray[0]->setLabel("Play Channel #1");
_buttonArray[0]->setCmd(kPlayChannel1);
+ _mixer->pauseHandle(_h1, true);
break;
case kPauseChannel2:
_buttonArray[1]->setLabel("Play Channel #2");
_buttonArray[1]->setCmd(kPlayChannel2);
+ _mixer->pauseHandle(_h2, true);
break;
case kPauseChannel3:
_buttonArray[2]->setLabel("Play Channel #3");
_buttonArray[2]->setCmd(kPlayChannel3);
+ _mixer->pauseHandle(_h3, true);
break;
default:
+ _mixer->stopAll();
GUI::Dialog::handleCommand(sender, cmd, data);
}
}
-bool SoundSubsystem::playPCSpkSound() {
+bool SoundSubsystem::playBeeps() {
+ Testsuite::clearScreen();
+ bool passed = true;
+ Common::String info = "Testing Sound Output by generating beeps\n"
+ "You should hear a left beep followed by a right beep\n";
+
+ if (Testsuite::handleInteractiveInput(info, "OK", "Skip", kOptionRight)) {
+ Testsuite::logPrintf("Info! Skipping test : Play Beeps\n");
+ return true;
+ }
+
Audio::PCSpeaker *speaker = new Audio::PCSpeaker();
Audio::Mixer *mixer = g_system->getMixer();
Audio::SoundHandle handle;
mixer->playStream(Audio::Mixer::kPlainSoundType, &handle, speaker);
- speaker->play(Audio::PCSpeaker::kWaveFormSine, 1000, -1);
- g_system->delayMillis(1000);
+
+ // Left Beep
+ Testsuite::writeOnScreen("Left Beep", Common::Point(0, 100));
mixer->setChannelBalance(handle, -127);
- g_system->delayMillis(1000);
+ speaker->play(Audio::PCSpeaker::kWaveFormSine, 1000, -1);
+ g_system->delayMillis(500);
+ mixer->pauseHandle(handle, true);
+
+ if (Testsuite::handleInteractiveInput("Were you able to hear the left beep?", "Yes", "No", kOptionRight)) {
+ Testsuite::logDetailedPrintf("Error! Left Beep couldn't be detected : Error with Mixer::setChannelBalance()\n");
+ passed = false;
+ }
+
+ // Right Beep
+ Testsuite::writeOnScreen("Right Beep", Common::Point(0, 100));
mixer->setChannelBalance(handle, 127);
- g_system->delayMillis(1000);
+ mixer->pauseHandle(handle, false);
+ g_system->delayMillis(500);
mixer->stopAll();
- return true;
+
+ if (Testsuite::handleInteractiveInput("Were you able to hear the right beep?", "Yes", "No", kOptionRight)) {
+ Testsuite::logDetailedPrintf("Error! Right Beep couldn't be detected : Error with Mixer::setChannelBalance()\n");
+ passed = false;
+ }
+ return passed;
}
bool SoundSubsystem::mixSounds() {
@@ -103,7 +158,7 @@ bool SoundSubsystem::mixSounds() {
}
SoundSubsystemTestSuite::SoundSubsystemTestSuite() {
- addTest("PCSpkrSound", &SoundSubsystem::playPCSpkSound, true);
+ addTest("SimpleBeeps", &SoundSubsystem::playBeeps, true);
addTest("MixSounds", &SoundSubsystem::mixSounds, true);
}