espeakedit_SOURCE = \ | espeakedit_SOURCE = \ | ||||
src/compiledata.cpp \ | src/compiledata.cpp \ | ||||
src/espeakedit.cpp \ | src/espeakedit.cpp \ | ||||
src/options.cpp \ | |||||
src/prosodydisplay.cpp \ | src/prosodydisplay.cpp \ | ||||
src/spect.cpp \ | src/spect.cpp \ | ||||
src/spectseq.cpp | src/spectseq.cpp |
#define wxOPEN wxFD_OPEN | #define wxOPEN wxFD_OPEN | ||||
#endif | #endif | ||||
extern wxString path_dictsource; | |||||
extern wxString path_phsource; | |||||
extern wxString path_phfile; | |||||
extern char path_dsource[sizeof(path_home)+20]; | |||||
extern char path_source[sizeof(path_home)+20]; | extern char path_source[sizeof(path_home)+20]; | ||||
extern int progress_max; | extern int progress_max; | ||||
return(0); | return(0); | ||||
} | } | ||||
wxString filename = path_phsource + path_sep + wxString(path,wxConvLocal); | |||||
wxString filename = wxString(path_source,wxConvLocal) + path_sep + wxString(path,wxConvLocal); | |||||
wxFileInputStream stream(filename); | wxFileInputStream stream(filename); | ||||
if(stream.Ok() == FALSE) | if(stream.Ok() == FALSE) | ||||
f_errors = stderr; | f_errors = stderr; | ||||
if(!wxDirExists(path_phsource)) | |||||
if(!wxDirExists(path_source)) | |||||
{ | { | ||||
if(gui_flag) | |||||
{ | |||||
wxString dirname = wxDirSelector(_T("Phoneme source directory"),path_phsource); | |||||
if(!dirname.IsEmpty()) | |||||
{ | |||||
path_phsource = dirname; | |||||
strncpy0(path_source,path_phsource.mb_str(wxConvLocal),sizeof(path_source)-1); | |||||
strcat(path_source,"/"); | |||||
} | |||||
} | |||||
else | |||||
{ | |||||
fprintf(stderr,"Can't find phoneme source directory: %s\n",path_source); | |||||
} | |||||
fprintf(stderr,"Can't find phoneme source directory: %s\n",path_source); | |||||
return; | |||||
} | } | ||||
strncpy0(current_fname,source,sizeof(current_fname)); | strncpy0(current_fname,source,sizeof(current_fname)); | ||||
strncpy0(fname,path_phfile.mb_str(wxConvLocal),sizeof(fname)); | |||||
sprintf(fname,"%s/%s",path_source,"phonemes"); | |||||
f_in = fopen_log(f_errors,fname,"rb"); | f_in = fopen_log(f_errors,fname,"rb"); | ||||
if(f_in == NULL) | if(f_in == NULL) | ||||
{ | { | ||||
if(gui_flag) | |||||
{ | |||||
wxString phfile = wxFileSelector(_T("Master phonemes file"),path_phsource, | |||||
_T(""),_T(""),_T("*"),wxOPEN); | |||||
if(!phfile.IsEmpty()) | |||||
{ | |||||
path_phfile = phfile; | |||||
} | |||||
} | |||||
strncpy0(fname,path_phfile.mb_str(wxConvLocal),sizeof(fname)); | |||||
f_in = fopen_log(f_errors,fname,"rb"); | |||||
if(f_in == NULL) | |||||
{ | |||||
wxLogError(_T("Can't read master phonemes file:\n") + wxString(fname,wxConvLocal)); | |||||
return; | |||||
} | |||||
wxLogError(_T("Can't read master phonemes file:\n") + wxString(fname,wxConvLocal)); | |||||
return; | |||||
} | } | ||||
progress_max = 0; | progress_max = 0; | ||||
fprintf(f_errors, "Source data path = '%s'\n", path_source); | fprintf(f_errors, "Source data path = '%s'\n", path_source); | ||||
strncpy0(fname,path_phfile.mb_str(wxConvLocal),sizeof(fname)); | |||||
fprintf(f_errors, "Master phonemes file = '%s'\n", fname); | |||||
fprintf(f_errors, "Master phonemes file = '%s/phonemes'\n", path_source); | |||||
fprintf(f_errors, "Output to '%s/'\n\n", path_home); | fprintf(f_errors, "Output to '%s/'\n\n", path_home); | ||||
sprintf(fname,"%s/%s",path_home,"phondata"); | sprintf(fname,"%s/%s",path_home,"phondata"); |
"<a href=\"http://espeak.sourceforge.net/\">http://espeak.sourceforge.net</a><br>" | "<a href=\"http://espeak.sourceforge.net/\">http://espeak.sourceforge.net</a><br>" | ||||
"Licensed under <a href=\"http://espeak.sourceforge.net/license.html\">GNU General Public License version 3</a></font>"; | "Licensed under <a href=\"http://espeak.sourceforge.net/license.html\">GNU General Public License version 3</a></font>"; | ||||
extern void ConfigInit(bool use_defaults); | |||||
extern void CompilePhonemeData(void); | extern void CompilePhonemeData(void); | ||||
extern void CompileSampleRate(void); | extern void CompileSampleRate(void); | ||||
extern espeak_ng_STATUS CompileIntonation(FILE *log); | extern espeak_ng_STATUS CompileIntonation(FILE *log); | ||||
int progress_max; | int progress_max; | ||||
int gui_flag = 0; | int gui_flag = 0; | ||||
char path_source[sizeof(path_home)+20]; | |||||
char voice_name2[40]; | |||||
class MyApp: public wxApp | class MyApp: public wxApp | ||||
{ | { | ||||
public: | public: | ||||
exit(0); | exit(0); | ||||
} | } | ||||
ConfigInit(true); | |||||
char *env; | |||||
if((env = getenv("ESPEAK_DATA_PATH")) == NULL) | |||||
env = getenv("HOME"); | |||||
snprintf(path_home,sizeof(path_home),"%s/espeak-data",env); | |||||
snprintf(path_source,sizeof(path_source),"%s/../phsource/",path_home); | |||||
if(strcmp(param,"--compile")==0) | if(strcmp(param,"--compile")==0) | ||||
{ | { |
/*************************************************************************** | |||||
* Copyright (C) 2005 to 2013 by Jonathan Duddington * | |||||
* email: [email protected] * | |||||
* Copyright (C) 2013-2015 by Reece H. Dunn * | |||||
* * | |||||
* This program is free software; you can redistribute it and/or modify * | |||||
* it under the terms of the GNU General Public License as published by * | |||||
* the Free Software Foundation; either version 3 of the License, or * | |||||
* (at your option) any later version. * | |||||
* * | |||||
* This program is distributed in the hope that it will be useful, * | |||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of * | |||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * | |||||
* GNU General Public License for more details. * | |||||
* * | |||||
* You should have received a copy of the GNU General Public License * | |||||
* along with this program; if not, see: * | |||||
* <http://www.gnu.org/licenses/>. * | |||||
***************************************************************************/ | |||||
#include "wx/wx.h" | |||||
#include "wx/fileconf.h" | |||||
#include <sys/stat.h> | |||||
#include "speech.h" | |||||
#ifdef PLATFORM_WINDOWS | |||||
#include "wx/msw/registry.h" | |||||
#endif | |||||
wxString path_phfile; | |||||
wxString path_phsource; | |||||
wxString path_dictsource; | |||||
char path_source[sizeof(path_home)+20]; | |||||
char path_dsource[sizeof(path_home)+20]; | |||||
char voice_name2[40]; | |||||
void ConfigSetPaths() | |||||
{//================== | |||||
// set c_string paths from wxStrings | |||||
strncpy0(path_source,path_phsource.mb_str(wxConvLocal),sizeof(path_source)-1); | |||||
strcat(path_source,"/"); | |||||
strncpy0(path_dsource,path_dictsource.mb_str(wxConvLocal),sizeof(path_source)-1); | |||||
strcat(path_dsource,"/"); | |||||
} | |||||
void ConfigInit(bool use_defaults) | |||||
{//============== | |||||
wxString string; | |||||
wxString basedir; | |||||
const char *path_base; | |||||
#ifdef PLATFORM_WINDOWS | |||||
int found = 0; | |||||
char buf[200]; | |||||
wxRegKey *pRegKey = new wxRegKey(_T("HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Speech\\Voices\\Tokens\\eSpeak")); | |||||
if((path_base = getenv("ESPEAK_DATA_PATH")) != NULL) | |||||
{ | |||||
sprintf(path_home,"%s\\espeak-data",path_base); | |||||
if(GetFileLength(path_home) == -2) | |||||
found = 1; // an espeak-data directory exists | |||||
} | |||||
if(found == 0) | |||||
{ | |||||
if(pRegKey->Exists() ) | |||||
{ | |||||
wxString RegVal; | |||||
pRegKey->QueryValue(_T("Path"),RegVal); | |||||
strncpy0(buf,RegVal.mb_str(wxConvLocal),sizeof(buf)); | |||||
path_base = buf; | |||||
} | |||||
else | |||||
{ | |||||
path_base = "C:\\Program Files\\eSpeak"; | |||||
} | |||||
sprintf(path_home,"%s\\espeak-data",path_base); | |||||
} | |||||
#else | |||||
char *env; | |||||
if((env = getenv("ESPEAK_DATA_PATH")) == NULL) | |||||
env = getenv("HOME"); | |||||
snprintf(path_home,sizeof(path_home),"%s/espeak-data",env); | |||||
path_base = path_home; | |||||
#endif | |||||
mkdir(path_home,S_IRWXU); // create if it doesn't already exist | |||||
wxFileConfig *pConfig = new wxFileConfig(_T("espeakedit")); | |||||
wxFileConfig::Set(pConfig); | |||||
basedir = wxString(path_base,wxConvLocal); // this is only used to set defaults for other paths if they are not in the config file | |||||
path_phsource = basedir + _T("/../phsource"); | |||||
path_phfile = path_phsource + _T("/phonemes"); | |||||
path_dictsource = basedir + _T("/../dictsource"); | |||||
ConfigSetPaths(); | |||||
} // end of ConfigInit |