1
0
Fork 0

VoiceSynthesizer: add some test/debug properties

/sim/sound/voice-synthesizer/volume to set the volume of the generated wav (in dB)
/sim/sound/voice-synthesizer/keep-scratch-file do not remove the scratch file if true
This commit is contained in:
Torsten Dreyer 2014-04-27 22:53:59 +02:00
parent 38e2b8b11c
commit 4d4e1a2371
2 changed files with 13 additions and 4 deletions

View file

@ -7,6 +7,7 @@
#include "VoiceSynthesizer.hxx" #include "VoiceSynthesizer.hxx"
#include <Main/globals.hxx> #include <Main/globals.hxx>
#include <Main/fg_props.hxx>
#include <simgear/debug/logstream.hxx> #include <simgear/debug/logstream.hxx>
#include <simgear/sound/readwav.hxx> #include <simgear/sound/readwav.hxx>
#include <simgear/misc/sg_path.hxx> #include <simgear/misc/sg_path.hxx>
@ -15,14 +16,14 @@
class ScopedTempfile { class ScopedTempfile {
public: public:
ScopedTempfile() ScopedTempfile( bool keep = false ) : _keep(keep)
{ {
_name = ::tempnam(globals->get_fg_home().c_str(), "fgvox"); _name = ::tempnam(globals->get_fg_home().c_str(), "fgvox");
} }
~ScopedTempfile() ~ScopedTempfile()
{ {
if (_name) ::unlink(_name); if (_name && !_keep) ::unlink(_name);
::free(_name); ::free(_name);
} }
@ -36,6 +37,7 @@ public:
} }
private: private:
char * _name; char * _name;
bool _keep;
}; };
class FLITEVoiceSynthesizer::WorkerThread: public OpenThreads::Thread { class FLITEVoiceSynthesizer::WorkerThread: public OpenThreads::Thread {
@ -66,8 +68,10 @@ void FLITEVoiceSynthesizer::synthesize( SynthesizeRequest & request)
} }
FLITEVoiceSynthesizer::FLITEVoiceSynthesizer(const std::string & voice) FLITEVoiceSynthesizer::FLITEVoiceSynthesizer(const std::string & voice)
: _engine(new Flite_HTS_Engine), _worker(new FLITEVoiceSynthesizer::WorkerThread(this)) : _engine(new Flite_HTS_Engine), _worker(new FLITEVoiceSynthesizer::WorkerThread(this)), _volume(6.0), _keepScratchFile(false)
{ {
_volume = fgGetDouble("/sim/sound/voice-synthesizer/volume", _volume );
_keepScratchFile = fgGetBool("/sim/sound/voice-synthesizer/keep-scratch-file", _keepScratchFile);
Flite_HTS_Engine_initialize(_engine); Flite_HTS_Engine_initialize(_engine);
Flite_HTS_Engine_load(_engine, voice.c_str()); Flite_HTS_Engine_load(_engine, voice.c_str());
_worker->start(); _worker->start();
@ -82,7 +86,9 @@ FLITEVoiceSynthesizer::~FLITEVoiceSynthesizer()
SGSoundSample * FLITEVoiceSynthesizer::synthesize(const std::string & text) SGSoundSample * FLITEVoiceSynthesizer::synthesize(const std::string & text)
{ {
ScopedTempfile scratch; ScopedTempfile scratch(_keepScratchFile);
HTS_Engine_set_volume( &_engine->engine, _volume );
if ( FALSE == Flite_HTS_Engine_synthesize(_engine, text.c_str(), scratch.getName())) return NULL; if ( FALSE == Flite_HTS_Engine_synthesize(_engine, text.c_str(), scratch.getName())) return NULL;
SG_LOG(SG_SOUND, SG_ALERT, "created wav at " << scratch.getPath()); SG_LOG(SG_SOUND, SG_ALERT, "created wav at " << scratch.getPath());

View file

@ -76,6 +76,9 @@ private:
typedef SGBlockingQueue<SynthesizeRequest> SynthesizeRequestList; typedef SGBlockingQueue<SynthesizeRequest> SynthesizeRequestList;
SynthesizeRequestList _requests; SynthesizeRequestList _requests;
double _volume;
bool _keepScratchFile;
}; };
#endif /* VOICESYNTHESIZER_HXX_ */ #endif /* VOICESYNTHESIZER_HXX_ */