diff --git a/dictsource/dict_phonemes b/dictsource/dict_phonemes index 4f3bf635..ad6dae2b 100644 --- a/dictsource/dict_phonemes +++ b/dictsource/dict_phonemes @@ -376,7 +376,7 @@ S s; S; t t; tS ts tS; ts; v w x z Z Z; -Dictionary pt_dict 2012-09-14 +Dictionary pt_dict 2012-09-17 & &/ &U~ &~ @ @- a A aI aU e E eI EI eU EU @@ -825,11 +825,11 @@ R s S S; t w x z Z Z; -Dictionary ko_dict 2012-09-15 +Dictionary ko_dict 2012-09-17 @ a e E i o u u- * - ; b d dZ; g h j k k- kh l m n N -p p- ph q r s t t- -tS tS; w +p p- ph q r R s t +t- tS tS; w diff --git a/phsource/compile_report b/phsource/compile_report index fad5477c..1463045d 100644 --- a/phsource/compile_report +++ b/phsource/compile_report @@ -417,7 +417,7 @@ l/l_ [l] base [l/] fr l/l_@ [l/3] base [l/] fr -l/l@ [hÖ{] base +l/l@ [h6r] base [l#] base [l] fr [l/2] fr @@ -451,7 +451,7 @@ l/L2_oL [l/2] base l/L2_uL [l/2] base l/l_3 [l/] de l/l_4 [ll] sq -l/la [hÖ{] base +l/la [h6r] base [l#] base [l] fr [l/2] fr @@ -459,7 +459,7 @@ l/la [h [K] tn l/l_a [l/3] base [l/] fr -l/le [hÖ{] base +l/le [h6r] base [l#] base [l] fr [l/2] fr @@ -471,7 +471,7 @@ l/L_eL_af [&] af [&:] af l/l_front [L] sq l/l_front_ [l/4] sq -l/li [hÖ{] base +l/li [h6r] base [l#] base [l] fr [l/2] fr @@ -485,7 +485,7 @@ ll/ll [L] base ll/_ll [L] base l/l_long [l] base [l] fr -l/lo [hÖ{] base +l/lo [h6r] base [l#] base [l/2] fr [K] nso @@ -496,7 +496,7 @@ l^/l_rfx [l.] base [l;] lt [l] ru [l^] ru -l/lu [hÖ{] base +l/lu [h6r] base [l#] base [l] fr [l/2] fr diff --git a/src/Makefile.espeakedit b/src/Makefile.espeakedit index 07f93094..281fbaf5 100644 --- a/src/Makefile.espeakedit +++ b/src/Makefile.espeakedit @@ -10,17 +10,17 @@ SRCS= compiledata.cpp compiledict.cpp debug.cpp dictionary.cpp espeak_command.cp OBJS=$(patsubst %.cpp,%.o,$(SRCS)) -WX_LIBS = -pthread -lwx_gtk2u_xrc-2.6 -lwx_gtk2u_qa-2.6 -lwx_gtk2u_html-2.6 \ - -lwx_gtk2u_adv-2.6 -lwx_gtk2u_core-2.6 -lwx_baseu_xml-2.6 -lwx_baseu_net-2.6 -lwx_baseu-2.6 +WX_LIBS = -pthread -lwx_gtk2u_xrc-2.8 -lwx_gtk2u_qa-2.8 -lwx_gtk2u_html-2.8 \ + -lwx_gtk2u_adv-2.8 -lwx_gtk2u_core-2.8 -lwx_baseu_xml-2.8 -lwx_baseu_net-2.8 -lwx_baseu-2.8 LIBS=-lstdc++ -lportaudio -CPPFLAGS = -Wall -g -fexceptions -I/usr/lib/wx/include/gtk2-unicode-release-2.6 - -I/usr/include/wx-2.6 \ +CPPFLAGS = -Wall -g -fexceptions -I/usr/lib/wx/include/gtk2-unicode-release-2.8 + -I/usr/include/wx-2.8 \ -DGTK_NO_CHECK_CASTS -D__WXGTK__ -D_FILE_OFFSET_BITS=64 -D_LARGE_FILES -D_LARGEFILE_SOURCE=1 -DNO_GCC_PRAGMA -D_ESPEAKEDIT -CXXFLAGS = -O2 -Wall -fexceptions -I/usr/lib/wx/include/gtk2-unicode-release-2.6 -I/usr/include/wx-2.6 \ +CXXFLAGS = -O2 -Wall -fexceptions -I/usr/lib/wx/include/gtk2-unicode-release-2.8 -I/usr/include/wx-2.8 \ -DGTK_NO_CHECK_CASTS -D__WXGTK__ -D_FILE_OFFSET_BITS=64 -D_LARGE_FILES -D_LARGEFILE_SOURCE=1 -DNO_GCC_PRAGMA -D_ESPEAKEDIT all: espeakedit diff --git a/src/espeakedit.cpp b/src/espeakedit.cpp index 6f5a22e0..2fe14c59 100644 --- a/src/espeakedit.cpp +++ b/src/espeakedit.cpp @@ -21,7 +21,6 @@ #include "wx/wfstream.h" -#include "wx/notebook.h" #include "wx/image.h" #include "wx/filename.h" #include "wx/numdlg.h" @@ -74,8 +73,6 @@ extern void VowelChart(int control, char *fname); extern void MakeVowelLists(void); extern void MakeWordFreqList(); -extern const char *dict_name; - extern wxMenu *speak_menu; extern wxMenu *data_menu; @@ -83,15 +80,16 @@ extern wxMenu *data_menu; MyFrame *myframe = NULL; SpectDisplay *currentcanvas = NULL; -ChildFrProsody *prosodyframe = NULL; ProsodyDisplay *prosodycanvas = NULL; wxNotebook *notebook = NULL; +wxNotebook *screenpages = NULL; + wxProgressDialog *progress; int progress_max; int gui_flag = 0; int frame_x, frame_y, frame_w, frame_h; -wxList my_children; +int adding_page = 0; // fix for wxWidgets (2,8,7) bug, adding first page to a wxNotebook gives emptystring for GetPageTex() in Notebook_Page_Changed event. wxFont FONT_SMALL(8,wxSWISS,wxNORMAL,wxNORMAL); wxFont FONT_MEDIUM(9,wxSWISS,wxNORMAL,wxNORMAL); @@ -166,7 +164,7 @@ if(argc > 1) if((frame_w == 0) || (frame_h == 0)) { - frame_w = 1024; + frame_w = 800; frame_h = 768; } @@ -191,7 +189,7 @@ if(argc > 1) return TRUE; } -BEGIN_EVENT_TABLE(MyFrame, wxMDIParentFrame) +BEGIN_EVENT_TABLE(MyFrame, wxFrame) EVT_CHAR(MyFrame::OnKey) EVT_MENU(MENU_ABOUT, MyFrame::OnAbout) EVT_MENU(MENU_DOCS, MyFrame::OnAbout) @@ -213,7 +211,6 @@ BEGIN_EVENT_TABLE(MyFrame, wxMDIParentFrame) EVT_MENU(MENU_SORT_DICTIONARY, MyFrame::OnTools) EVT_MENU(MENU_COMPILE_MBROLA, MyFrame::OnTools) EVT_MENU(MENU_COMPILE_INTONATION, MyFrame::OnTools) - EVT_MENU(MENU_CLOSE_ALL, MyFrame::OnQuit) EVT_MENU(MENU_QUIT, MyFrame::OnQuit) EVT_MENU(MENU_SPEAK_TRANSLATE, MyFrame::OnSpeak) EVT_MENU(MENU_SPEAK_RULES, MyFrame::OnSpeak) @@ -238,14 +235,22 @@ BEGIN_EVENT_TABLE(MyFrame, wxMDIParentFrame) EVT_MENU(MENU_TEST, MyFrame::OnTools) EVT_MENU(MENU_TEST2, MyFrame::OnTools) + EVT_MENU(SPECTSEQ_SAVE, MyFrame::PageCmd) + EVT_MENU(SPECTSEQ_SAVEAS, MyFrame::PageCmd) + EVT_MENU(SPECTSEQ_SAVESELECT, MyFrame::PageCmd) + EVT_MENU(SPECTSEQ_CLOSE, MyFrame::PageCmd) + EVT_MENU(SPECTSEQ_SAVEPITCH, MyFrame::PageCmd) + EVT_MENU(MENU_CLOSE_ALL, MyFrame::PageCmd) + + + EVT_NOTEBOOK_PAGE_CHANGED(ID_SCREENPAGES, MyFrame::OnPageChanged) EVT_TIMER(1, MyFrame::OnTimer) - EVT_SIZE(MyFrame::OnSize) - EVT_SASH_DRAGGED(ID_WINDOW_LEFT, MyFrame::OnSashDrag) END_EVENT_TABLE() MyFrame::~MyFrame(void) {//==================== + myframe->Maximize(false); myframe->Show(false); myframe->Iconize(false); // os=Windows, get the non-iconsized size myframe->GetPosition(&frame_x, &frame_y); @@ -254,7 +259,7 @@ MyFrame::~MyFrame(void) MyFrame::MyFrame(wxWindow *parent, const wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, const long style): - wxMDIParentFrame(parent, id, title, pos, size, style) + wxFrame(parent, id, title, pos, size, style) {//=================================================================================================================== // Main Frame constructor @@ -262,16 +267,7 @@ MyFrame::MyFrame(wxWindow *parent, const wxWindowID id, const wxString& title, c int result; int param; - // Another window to the left of the client window - m_leftWindow = new wxSashLayoutWindow(this, ID_WINDOW_LEFT, - wxDefaultPosition, wxSize(298, 30), - wxNO_BORDER | wxSW_3D | wxCLIP_CHILDREN); - m_leftWindow->SetDefaultSize(wxSize(310, 1000)); - m_leftWindow->SetOrientation(wxLAYOUT_VERTICAL); - m_leftWindow->SetAlignment(wxLAYOUT_LEFT); - m_leftWindow->SetSashVisible(wxSASH_RIGHT, TRUE); - - notebook = new wxNotebook(m_leftWindow,-1); + notebook = new wxNotebook(this, ID_NOTEBOOK, wxDefaultPosition, wxSize(312,760)); // notebook->AddPage(voicedlg,_T("Voice"),FALSE); formantdlg = new FormantDlg(notebook); notebook->AddPage(formantdlg,_T(" Spect"),FALSE); @@ -281,6 +277,29 @@ MyFrame::MyFrame(wxWindow *parent, const wxWindowID id, const wxString& title, c notebook->AddPage(transldlg,_T("Text"),TRUE); + screenpages = new wxNotebook(this, ID_SCREENPAGES, wxDefaultPosition, wxSize(554,702)); + + wxBoxSizer *framesizer = new wxBoxSizer( wxHORIZONTAL ); + + + framesizer->Add( + notebook, + 0, // make horizontally stretchable + wxEXPAND | // make vertically stretchable + wxALL, // and make border all around + 4 ); // set border width + + framesizer->Add( + screenpages, + 1, // make horizontally stretchable + wxEXPAND | // make vertically stretchable + wxALL, // and make border all around + 4 ); // set border width + + SetSizer( framesizer ); // use the sizer for layout + framesizer->SetSizeHints( this ); // set size hints to honour minimum size + SetSize(pos.x, pos.y, size.GetWidth(), size.GetHeight()); + LoadConfig(); WavegenInitSound(); @@ -310,7 +329,7 @@ MyFrame::MyFrame(wxWindow *parent, const wxWindowID id, const wxString& title, c for(param=0; paramGetSelection(); + + switch(event.GetId()) + { + case SPECTSEQ_SAVE: + currentcanvas->Save(currentcanvas->savepath); + break; + case SPECTSEQ_SAVEAS: + currentcanvas->Save(); + break; + case SPECTSEQ_SAVESELECT: + currentcanvas->Save(_T(""), 1); + break; + case SPECTSEQ_CLOSE: + if(screenpages->GetPageText(pagenum) != _T("Prosody")) + { + currentcanvas->OnActivate(0); + } + screenpages->DeletePage(pagenum); + + if((n_pages = screenpages->GetPageCount()) > 0) + { + if(pagenum >= n_pages) + pagenum--; + page = (SpectDisplay *)screenpages->GetPage(pagenum); + + if(screenpages->GetPageText(pagenum) == _T("Prosody")) + { + MakeMenu(3, NULL); + } + else + { + page->OnActivate(1); + MakeMenu(2, NULL); + } + } + else + { + MakeMenu(1, NULL); + } + break; + + case MENU_CLOSE_ALL: + n_pages = screenpages->GetPageCount(); + for(ix=n_pages-1; ix>=0; ix--) + { + screenpages->DeletePage(ix); + } + currentcanvas = NULL; + MakeMenu(1, NULL); + break; + case SPECTSEQ_SAVEPITCH: + currentcanvas->SavePitchenv(currentcanvas->spectseq->pitchenv); + break; + } + } +} + + + +void MyFrame::OnPageChanged(wxNotebookEvent& event) +{//================================================= + int pagenum; + wxString title; + SpectDisplay *page; + + pagenum = event.GetSelection(); + + if(event.GetId() == ID_SCREENPAGES) + { + title = screenpages->GetPageText(pagenum); + + if((title != _T("Prosody")) && (adding_page != 2)) + { + page = (SpectDisplay *)screenpages->GetPage(pagenum); + + if(page != currentcanvas) + { + if(currentcanvas != NULL) + { + currentcanvas->OnActivate(0); + } + page->OnActivate(1); + } + MakeMenu(2, NULL); + } + else + { + MakeMenu(3, NULL); + } + } + adding_page = 0; // work around for wxNotebook bug (version 2.8.7) +} + + void MyFrame::OnKey(wxKeyEvent& event) { int key; @@ -624,7 +747,7 @@ void MyFrame::OnTools(wxCommandEvent& event) case MENU_COMPILE_INTONATION: CompileIntonation(); break; - + case MENU_COMPILE_DICT_DEBUG: debug_flag =1; // and drop through to next case case MENU_COMPILE_DICT: @@ -729,105 +852,4 @@ void MyFrame::OnSpeak(wxCommandEvent& event) } -void MyFrame::OnSashDrag(wxSashEvent& event) -{ - int w, h; - - if (event.GetDragStatus() == wxSASH_STATUS_OUT_OF_RANGE) - return; - - GetClientSize(&w, &h); - - switch (event.GetId()) - { - case ID_WINDOW_LEFT: - { - m_leftWindow->SetDefaultSize(wxSize(event.GetDragRect().width, h)); - break; - } - } - wxLayoutAlgorithm layout; - layout.LayoutMDIFrame(this); - - // Leaves bits of itself behind sometimes - GetClientWindow()->Refresh(); -} - - - -void MyFrame::OnSize(wxSizeEvent& WXUNUSED(event)) -{ - wxLayoutAlgorithm layout; - layout.LayoutMDIFrame(this); -} - -// Note that SASHTEST_NEW_WINDOW and SASHTEST_ABOUT commands get passed -// to the parent window for processing, so no need to -// duplicate event handlers here. - -BEGIN_EVENT_TABLE(MyChild, wxMDIChildFrame) - EVT_MENU(SPECTSEQ_CLOSE, MyChild::OnQuit) - EVT_MENU(SPECTSEQ_SAVE, MyChild::OnSave) - EVT_MENU(SPECTSEQ_SAVEAS, MyChild::OnSaveAs) - EVT_MENU(SPECTSEQ_SAVESELECT, MyChild::OnSaveSelect) - EVT_MENU(SPECTSEQ_SAVEPITCH, MyChild::OnSavePitchenv) - - EVT_ACTIVATE(MyChild::OnActivate) -END_EVENT_TABLE() - -MyChild::MyChild(wxMDIParentFrame *parent, const wxString& title, const wxPoint& pos, const wxSize& size, -const long style): - wxMDIChildFrame(parent, -1, title, pos, size, style) -{ - canvas = NULL; - my_children.Append(this); -} - -MyChild::~MyChild(void) -{ - canvas = NULL; -#ifndef PLATFORM_WINDOWS - wxWindow *w; - // bug in wxMDIChildFrame, we need to explicitly remove the ChildFrame from the ClientWindow - w = myframe->GetClientWindow(); - w->RemoveChild(this); -#endif - my_children.DeleteObject(this); -} - -//extern void CloseCanvas(); - -void MyChild::OnQuit(wxCommandEvent& WXUNUSED(event)) -{ - Destroy(); - -} - -void MyChild::OnSave(wxCommandEvent& WXUNUSED(event)) -{ - canvas->Save(canvas->savepath); -} - -void MyChild::OnSaveAs(wxCommandEvent& WXUNUSED(event)) -{ - canvas->Save(); -} - -void MyChild::OnSaveSelect(wxCommandEvent& WXUNUSED(event)) -{ - canvas->Save(_T(""),1); -} - -void MyChild::OnSavePitchenv(wxCommandEvent& WXUNUSED(event)) -{ - canvas->SavePitchenv(canvas->spectseq->pitchenv); -} - -void MyChild::OnActivate(wxActivateEvent& event) -{ - if(canvas) - canvas->OnActivate(event.GetActive()); - - -} diff --git a/src/formantdlg.cpp b/src/formantdlg.cpp index 96d20b07..a7795b0c 100644 --- a/src/formantdlg.cpp +++ b/src/formantdlg.cpp @@ -97,7 +97,7 @@ void FormantDlg::OnSpin(wxSpinEvent& event) currentcanvas->SetFocus(); } -FormantDlg::FormantDlg(wxWindow *parent) : wxPanel(parent,-1,wxDefaultPosition,wxSize(400,1000)) +FormantDlg::FormantDlg(wxWindow *parent) : wxPanel(parent,-1,wxDefaultPosition,wxSize(400,800)) {//============================================================================================= int ix; int y; @@ -395,7 +395,7 @@ void FormantDlg::ShowFrame(SpectSeq *spectseq, int frame, int pk, int field) { value.Printf(_T("%3d"),peak->klt_bp); t_klt_bp[ix]->SetValue(value); - } + } } } @@ -469,12 +469,12 @@ void ByteGraph::DrawSpectrum(wxDC& dc) numframes = seq->numframes; if(numframes == 0) return; - + GetClientSize(&width,&height); if(((length = seq->frames[numframes-1]->time)==0) && (numframes>1)) length = seq->frames[numframes-2]->time; - + length = length - seq->frames[0]->time; yscale = height/3000.0; @@ -518,7 +518,7 @@ void ByteGraph::OnDraw(wxDC &dc) double xscale, yscale; if(show_spectrum) DrawSpectrum(dc); - + if(npoints==0) return; GetClientSize(&width,&height); @@ -559,7 +559,7 @@ void ByteGraph::OnMouse(wxMouseEvent& event) wxPoint pt(event.GetLogicalPosition(dc)); t0 = t2 = seq->frames[0]->time; time = (double(pt.x) / spectrum_scale) + t0; - + for(ix=1; ixnumframes; ix++) { t1=t2; diff --git a/src/main.h b/src/main.h index 80632ce7..0402f15b 100755 --- a/src/main.h +++ b/src/main.h @@ -2,6 +2,7 @@ #include "wx/toolbar.h" #include "wx/laywin.h" #include "wx/progdlg.h" +#include "wx/notebook.h" typedef unsigned short USHORT; typedef unsigned char UCHAR; @@ -32,44 +33,45 @@ class MyApp: public wxApp }; // Define a new frame -class MyFrame: public wxMDIParentFrame +class MyFrame: public wxFrame { public: MyFrame(wxWindow *parent, const wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, const long style); ~MyFrame(void); - void OnSize(wxSizeEvent& event); + void OnAbout(wxCommandEvent& event); void OnQuit(wxCommandEvent& event); void OnOptions(wxCommandEvent& event); - void OnSpeak(wxCommandEvent& event); + void OnSpeak(wxCommandEvent& event); void OnTools(wxCommandEvent& event); - void OnSashDrag(wxSashEvent& event); void OnKey(wxKeyEvent& event); void OnTimer(wxTimerEvent& event); void LoadWavFile(void); void OnNewWindow(wxCommandEvent& event); void OnProsody(wxCommandEvent& event); + void PageCmd(wxCommandEvent& event); void SetVoiceTitle(char *voice_name); - + void OnPageChanged(wxNotebookEvent& event); protected: - wxSashLayoutWindow* m_leftWindow; wxTimer m_timer; DECLARE_EVENT_TABLE() }; -class MyChild: public wxMDIChildFrame + +#ifdef deleted +class MyChild: public wxPanel { public: SpectDisplay *canvas; - MyChild(wxMDIParentFrame *parent, const wxString& title, const wxPoint& pos, const wxSize& size, const long style); + MyChild(wxNotebook *parent, const wxString& title, const wxPoint& pos, const wxSize& size, const long style); ~MyChild(void); void OnActivate(wxActivateEvent& event); - + void OnQuit(wxCommandEvent& event); void OnSave(wxCommandEvent& event); void OnSaveAs(wxCommandEvent& event); @@ -79,7 +81,7 @@ class MyChild: public wxMDIChildFrame DECLARE_EVENT_TABLE() }; - +#endif class TranslDlg : public wxPanel @@ -103,6 +105,7 @@ private: }; extern MyFrame *myframe; +extern wxNotebook* screenpages; extern TranslDlg *transldlg; extern wchar_t ipa1[256]; @@ -171,10 +174,12 @@ enum { SPECTSEQ_SAVEAS, SPECTSEQ_SAVESELECT, SPECTSEQ_SAVEPITCH, - SPECTSEQ_VOICEDLG + SPECTSEQ_VOICEDLG, + + ID_SCREENPAGES, + ID_NOTEBOOK }; -#define ID_WINDOW_LEFT 101 diff --git a/src/menus.cpp b/src/menus.cpp index 50db8d1a..b405b71a 100644 --- a/src/menus.cpp +++ b/src/menus.cpp @@ -24,10 +24,13 @@ wxMenu *speak_menu; wxMenu *data_menu = NULL; +wxMenuBar *menu_bar = NULL; + wxMenuBar *MakeMenu(int type, const char *dict_name) -{//================================================= +{//=================================================== char buf[100]; + wxMenu *old_menu; wxMenu *file_menu; wxMenu *help_menu; wxMenu *option_menu = NULL; @@ -42,118 +45,126 @@ wxMenuBar *MakeMenu(int type, const char *dict_name) file_menu->Append(MENU_SPECTRUM, _("&Open...")); file_menu->Append(MENU_SPECTRUM2, _("O&pen2...")); // file_menu->Append(MENU_PROSODY, _T("&Prosody window")); - if(type==0) + if(type<=1) { - } - else - if(type==1) - { - file_menu->Append(SPECTSEQ_SAVE, _("&Save")); - file_menu->Append(SPECTSEQ_SAVEAS, _("Save &As...")); - file_menu->Append(SPECTSEQ_SAVESELECT, _("Save Selection")); - file_menu->Append(SPECTSEQ_SAVEPITCH, _T("Save Pitch &Envelope")); - file_menu->Append(SPECTSEQ_CLOSE, _("&Close")); -// file_menu->Append(MENU_CLOSE_ALL, _T("Close &All")); } else if(type==2) { file_menu->Append(SPECTSEQ_SAVE, _("&Save")); file_menu->Append(SPECTSEQ_SAVEAS, _("Save &As...")); -// file_menu->Append(SPECTSEQ_SAVEPITCH, _T("Save Pitch &Envelope")); + file_menu->Append(SPECTSEQ_SAVESELECT, _("Save Selection")); + file_menu->Append(SPECTSEQ_SAVEPITCH, _T("Save Pitch &Envelope")); file_menu->Append(SPECTSEQ_CLOSE, _("&Close")); -// file_menu->Append(MENU_CLOSE_ALL, _T("Close &All")); + file_menu->Append(MENU_CLOSE_ALL, _T("Close &All")); + } + else + if(type==3) + { +// file_menu->Append(SPECTSEQ_SAVE, _("&Save")); +// file_menu->Append(SPECTSEQ_SAVEAS, _("Save &As...")); + file_menu->Append(SPECTSEQ_CLOSE, _("&Close")); + file_menu->Append(MENU_CLOSE_ALL, _T("Close &All")); } file_menu->Append(MENU_QUIT, _("&Quit")); - // SPEAK_MENU - speak_menu = new wxMenu; - speak_menu->Append(MENU_SPEAK_TRANSLATE, _("&Translate")); - speak_menu->Append(MENU_SPEAK_RULES, _("Show &Rules")); - speak_menu->Append(MENU_SPEAK_IPA, _("Show &IPA")); - speak_menu->Append(MENU_SPEAK_TEXT, _("&Speak")); - speak_menu->AppendSeparator(); - speak_menu->Append(MENU_SPEAK_FILE, _("Speak &file...")); - speak_menu->Append(MENU_SPEAK_PAUSE, _("&Pause")); - speak_menu->Append(MENU_SPEAK_STOP, _("St&op")); + if(type==0) + { + // Initialization, make all the menus + // SPEAK_MENU + speak_menu = new wxMenu; + speak_menu->Append(MENU_SPEAK_TRANSLATE, _("&Translate")); + speak_menu->Append(MENU_SPEAK_RULES, _("Show &Rules")); + speak_menu->Append(MENU_SPEAK_IPA, _("Show &IPA")); + speak_menu->Append(MENU_SPEAK_TEXT, _("&Speak")); + speak_menu->AppendSeparator(); + speak_menu->Append(MENU_SPEAK_FILE, _("Speak &file...")); + speak_menu->Append(MENU_SPEAK_PAUSE, _("&Pause")); + speak_menu->Append(MENU_SPEAK_STOP, _("St&op")); - // VOICE MENU - voice_menu = new wxMenu; - voice_menu->Append(MENU_SPEAK_VOICE, _("Select &Voice..")); - voice_menu->Append(MENU_SPEAK_VOICE_VARIANT, _("Select Voice Va&riant...")); + // VOICE MENU + voice_menu = new wxMenu; + voice_menu->Append(MENU_SPEAK_VOICE, _("Select &Voice..")); + voice_menu->Append(MENU_SPEAK_VOICE_VARIANT, _("Select Voice Va&riant...")); - // DATA MENU - data_menu = new wxMenu; - data_menu->Append(MENU_COMPILE_PH, _("Compile &phoneme data")); - data_menu->Append(MENU_COMPILE_DICT, _("Compile &dictionary")); - data_menu->Append(MENU_COMPILE_DICT_DEBUG, _("Compile dictionary (debu&g)")); - data_menu->AppendSeparator(); - data_menu->Append(MENU_COMPILE_MBROLA, _("Compile &mbrola phonemes list...")); - data_menu->Append(MENU_COMPILE_INTONATION, _("Compile &intonation data")); - data_menu->AppendSeparator(); - data_menu->Append(MENU_FORMAT_DICTIONARY, _("&Layout *_rules file")); - data_menu->Append(MENU_SORT_DICTIONARY, _("&Sort *_rules file")); + // DATA MENU + data_menu = new wxMenu; + data_menu->Append(MENU_COMPILE_PH, _("Compile &phoneme data")); + data_menu->Append(MENU_COMPILE_DICT, _("Compile &dictionary")); + data_menu->Append(MENU_COMPILE_DICT_DEBUG, _("Compile dictionary (debu&g)")); + data_menu->AppendSeparator(); + data_menu->Append(MENU_COMPILE_MBROLA, _("Compile &mbrola phonemes list...")); + data_menu->Append(MENU_COMPILE_INTONATION, _("Compile &intonation data")); + data_menu->AppendSeparator(); + data_menu->Append(MENU_FORMAT_DICTIONARY, _("&Layout *_rules file")); + data_menu->Append(MENU_SORT_DICTIONARY, _("&Sort *_rules file")); - sprintf(buf,"Compile &dictionary '%s'",dict_name); - data_menu->SetLabel(MENU_COMPILE_DICT, wxString(buf,wxConvLocal)); - sprintf(buf,"&Layout '%s_rules' file",dict_name); - data_menu->SetLabel(MENU_FORMAT_DICTIONARY, wxString(buf,wxConvLocal)); - sprintf(buf,"&Sort '%s_rules' file",dict_name); - data_menu->SetLabel(MENU_SORT_DICTIONARY, wxString(buf,wxConvLocal)); + sprintf(buf,"Compile &dictionary '%s'",dict_name); + data_menu->SetLabel(MENU_COMPILE_DICT, wxString(buf,wxConvLocal)); + sprintf(buf,"&Layout '%s_rules' file",dict_name); + data_menu->SetLabel(MENU_FORMAT_DICTIONARY, wxString(buf,wxConvLocal)); + sprintf(buf,"&Sort '%s_rules' file",dict_name); + data_menu->SetLabel(MENU_SORT_DICTIONARY, wxString(buf,wxConvLocal)); - // OPTIONS MENU - paths_menu = new wxMenu; - paths_menu->Append(MENU_PATH0, _("Master phonemes file...")); - paths_menu->Append(MENU_PATH1, _("Phoneme data source...")); - paths_menu->Append(MENU_PATH2, _("Dictionary data source...")); - paths_menu->Append(MENU_PATH3, _("Synthesized sound WAV file...")); - paths_menu->AppendSeparator(); - paths_menu->Append(MENU_PATH4, _("Voice file to modify formant peaks...")); + // OPTIONS MENU + paths_menu = new wxMenu; + paths_menu->Append(MENU_PATH0, _("Master phonemes file...")); + paths_menu->Append(MENU_PATH1, _("Phoneme data source...")); + paths_menu->Append(MENU_PATH2, _("Dictionary data source...")); + paths_menu->Append(MENU_PATH3, _("Synthesized sound WAV file...")); + paths_menu->AppendSeparator(); + paths_menu->Append(MENU_PATH4, _("Voice file to modify formant peaks...")); - option_menu = new wxMenu; - option_menu->Append(MENU_PATHS, _("Set &paths"), paths_menu); - option_menu->Append(MENU_OPT_SPEED, _("Speed...")); - option_menu->Append(MENU_OPT_PUNCT, _("Speak punctiation")); - option_menu->Append(MENU_OPT_SPELL, _("Speak character names")); + option_menu = new wxMenu; + option_menu->Append(MENU_PATHS, _("Set &paths"), paths_menu); + option_menu->Append(MENU_OPT_SPEED, _("Speed...")); + option_menu->Append(MENU_OPT_PUNCT, _("Speak punctiation")); + option_menu->Append(MENU_OPT_SPELL, _("Speak character names")); - // TOOLS - vowelchart_menu = new wxMenu; - vowelchart_menu->Append(MENU_VOWELCHART1, _("From compiled phoneme data")); -// vowelchart_menu->Append(MENU_VOWELCHART2, _("From list of formants...")); - vowelchart_menu->Append(MENU_VOWELCHART3, _("From directory of vowel files...")); + // TOOLS + vowelchart_menu = new wxMenu; + vowelchart_menu->Append(MENU_VOWELCHART1, _("From compiled phoneme data")); + // vowelchart_menu->Append(MENU_VOWELCHART2, _("From list of formants...")); + vowelchart_menu->Append(MENU_VOWELCHART3, _("From directory of vowel files...")); - lexicon_menu = new wxMenu; - lexicon_menu->Append(MENU_LEXICON_RU, _("Russian")); - lexicon_menu->Append(MENU_LEXICON_BG, _("Bulgarian")); - lexicon_menu->Append(MENU_LEXICON_DE, _("German")); - lexicon_menu->Append(MENU_LEXICON_IT, _("Italian")); -// lexicon_menu->Append(MENU_LEXICON_TEST, _("Test")); + lexicon_menu = new wxMenu; + lexicon_menu->Append(MENU_LEXICON_RU, _("Russian")); + lexicon_menu->Append(MENU_LEXICON_BG, _("Bulgarian")); + lexicon_menu->Append(MENU_LEXICON_DE, _("German")); + lexicon_menu->Append(MENU_LEXICON_IT, _("Italian")); + // lexicon_menu->Append(MENU_LEXICON_TEST, _("Test")); - tools_menu = new wxMenu; - tools_menu->Append(MENU_VOWELCHART, _("Make &Vowels Chart"), vowelchart_menu); -// tools_menu->Append(MENU_LOAD_WAV, _T("Analyse WAV file")); - tools_menu->Append(MENU_LEXICON, _("Process &Lexicon"), lexicon_menu); - tools_menu->Append(MENU_TO_UTF8, _("Convert file to &UTF8...")); - tools_menu->Append(MENU_COUNT_WORDS, _("Count word &frequencies...")); - tools_menu->Append(MENU_TEST , _("Test (temporary)")); -// tools_menu->Append(MENU_TEST2 , _T("Test2")); + tools_menu = new wxMenu; + tools_menu->Append(MENU_VOWELCHART, _("Make &Vowels Chart"), vowelchart_menu); + // tools_menu->Append(MENU_LOAD_WAV, _T("Analyse WAV file")); + tools_menu->Append(MENU_LEXICON, _("Process &Lexicon"), lexicon_menu); + tools_menu->Append(MENU_TO_UTF8, _("Convert file to &UTF8...")); + tools_menu->Append(MENU_COUNT_WORDS, _("Count word &frequencies...")); + tools_menu->Append(MENU_TEST , _("Test (temporary)")); + // tools_menu->Append(MENU_TEST2 , _T("Test2")); - // HELP MENU - help_menu = new wxMenu; - help_menu->Append(MENU_DOCS, _("eSpeak &Documentation")); - help_menu->Append(MENU_ABOUT, _("&About")); + // HELP MENU + help_menu = new wxMenu; + help_menu->Append(MENU_DOCS, _("eSpeak &Documentation")); + help_menu->Append(MENU_ABOUT, _("&About")); - wxMenuBar *menu_bar = new wxMenuBar; - - menu_bar->Append(file_menu, _("&File")); - menu_bar->Append(speak_menu, _("&Speak")); - menu_bar->Append(voice_menu, _("&Voice")); - menu_bar->Append(option_menu, _("&Options")); - menu_bar->Append(tools_menu, _("&Tools")); - menu_bar->Append(data_menu, _("&Compile")); - menu_bar->Append(help_menu, _("&Help")); + menu_bar = new wxMenuBar; + menu_bar->Append(file_menu, _("&File")); + menu_bar->Append(speak_menu, _("&Speak")); + menu_bar->Append(voice_menu, _("&Voice")); + menu_bar->Append(option_menu, _("&Options")); + menu_bar->Append(tools_menu, _("&Tools")); + menu_bar->Append(data_menu, _("&Compile")); + menu_bar->Append(help_menu, _("&Help")); + } + else + { + // Just replace the File menu + old_menu = menu_bar->Replace(0, file_menu, _("&File")); + delete old_menu; + } return(menu_bar); } // end of MakeMenu diff --git a/src/prosodydisplay.cpp b/src/prosodydisplay.cpp index f7706e35..a6735ec6 100644 --- a/src/prosodydisplay.cpp +++ b/src/prosodydisplay.cpp @@ -31,7 +31,6 @@ #include "translate.h" extern MyFrame *myframe; -extern ChildFrProsody *prosodyframe; extern ProsodyDisplay *prosodycanvas; wxMenu *menu_prosody; @@ -60,6 +59,7 @@ ProsodyDisplay::ProsodyDisplay(wxWindow *parent, const wxPoint& pos, const wxSiz scalex = 0.5; scaley = double(LINESEP*6)/150.0; selected_ph = -1; + SetBackgroundColour(wxColour(245,245,245)); } // end of ProsodyDisplay::ProsodyDisplay @@ -119,7 +119,7 @@ void ProsodyDisplay::RefreshLine(int line) int ProsodyDisplay::GetWidth(PHONEME_LIST *p) {//======================================== int w; - + if(p->ph == NULL) return(0); @@ -279,7 +279,7 @@ void ProsodyDisplay::OnKey(wxKeyEvent& event) {//======================================== PHONEME_LIST *p; int display=1; - + if(selected_ph < 0) selected_ph = 0; @@ -301,7 +301,7 @@ void ProsodyDisplay::OnKey(wxKeyEvent& event) if(selected_ph < (numph-2)) selected_ph++; break; - + case WXK_UP: if(event.ControlDown()) ChangePh(-1,2); @@ -360,7 +360,7 @@ void ProsodyDisplay::DrawEnv(wxDC& dc, int x1, int y1, int width, PHONEME_LIST * PHONEME_DATA phdata_tone; if(width <= 0) return; - + if((pitchr = ph->pitch2 - ph->pitch1) < 0) { pitchr = -pitchr; @@ -425,6 +425,7 @@ void ProsodyDisplay::DrawPitchline(wxDC& dc, int line, int x1, int x2) y = LINEBASE+LINESEP; dc.SetPen(*wxLIGHT_GREY_PEN); +// dc.SetPen(*wxCYAN_PEN); for(ix=0; ix<5; ix++) { dc.DrawLine(0,offy-y,linewidth,offy-y); @@ -520,6 +521,12 @@ void ProsodyDisplay::OnDraw(wxDC& dc) int line, start, end; + GetClientSize(&x1, &y1); + if(x1 != linewidth) + { + LayoutData(NULL, 0); + } + wxRegionIterator upd(GetUpdateRegion()); // get the update rect list while (upd) @@ -549,15 +556,18 @@ void ProsodyDisplay::LayoutData(PHONEME_LIST *ph_list, int n_ph) int xpos; int w; int ix; + int height; PHONEME_LIST *p; - - - numph = n_ph; - phlist = ph_list; + if(ph_list != NULL) + { + numph = n_ph; + phlist = ph_list; + } num_lines = 0; linetab[0] = 1; + GetClientSize(&linewidth, &height); xpos = linewidth; // could improve this to do 'wordwrap' - only split on word boundary @@ -584,86 +594,35 @@ void ProsodyDisplay::LayoutData(PHONEME_LIST *ph_list, int n_ph) } // end of ProsodyDisplay::LayoutData +extern int adding_page; void MyFrame::OnProsody(wxCommandEvent& WXUNUSED(event)) {//===================================================== - // Open the Prosody display window - // Make another frame, containing a canvas + int width, height; + int ix, npages; - int h, w, w2; - - if(prosodyframe != NULL) + if(prosodycanvas != NULL) { // The Prosody window is already open - prosodyframe->Activate(); + + // ?? select the prosody page ?? + npages = screenpages->GetPageCount(); + for(ix=0; ixGetPage(ix) == (wxWindow*)prosodycanvas) + { + screenpages->ChangeSelection(ix); + break; + } + } return; } - m_leftWindow->GetSize(&w2, &h); - GetClientSize(&w, &h); - prosodyframe = new ChildFrProsody(myframe, _T(""), - wxPoint(0, 100), wxSize(w-w2, 420), - wxDEFAULT_FRAME_STYLE | - wxNO_FULL_REPAINT_ON_RESIZE); - - prosodyframe->SetTitle(_T("Prosody")); - - // Give it a status line - prosodyframe->CreateStatusBar(); - - int width, height; - wxMDIClientWindow *clientwin = (wxMDIClientWindow *)this->GetClientWindow(); - clientwin->GetClientSize(&width, &height); - -#ifdef deleted - wxPanel *panel = new wxPanel(prosodyframe,-1,wxPoint(0,0), wxSize(width,50)); - ProsodyDisplay *canvas = new ProsodyDisplay(prosodyframe, wxPoint(0, 50), wxSize(width-2, height-50)); -#else - ProsodyDisplay *canvas = new ProsodyDisplay(prosodyframe, wxPoint(0, 50), wxSize(width-10, height)); -#endif - - prosodycanvas = canvas; - - // Associate the menu bar with the frame - prosodyframe->SetMenuBar(MakeMenu(2,translator->dictionary_name)); - prosodyframe->prosodycanvas = canvas; - prosodyframe->Show(TRUE); + screenpages->GetClientSize(&width, &height); + prosodycanvas = new ProsodyDisplay(screenpages, wxPoint(0, 50), wxSize(width-10, height)); + adding_page = 2; // work around for wxNotebook bug (version 2.8.7) + screenpages->AddPage(prosodycanvas, _T("Prosody"), true); } -BEGIN_EVENT_TABLE(ChildFrProsody, wxMDIChildFrame) - EVT_MENU(SPECTSEQ_CLOSE, ChildFrProsody::OnQuit) - -// EVT_ACTIVATE(ChildFrProsody::OnActivate) -END_EVENT_TABLE() - -extern wxList my_children; - -ChildFrProsody::ChildFrProsody(wxMDIParentFrame *parent, const wxString& title, const wxPoint& pos, const wxSize& size, -const long style): - wxMDIChildFrame(parent, -1, title, pos, size, style) -{ - my_children.Append(this); -} - -ChildFrProsody::~ChildFrProsody(void) -{ - wxWindow *w; - my_children.DeleteObject(this); - prosodycanvas = NULL; - prosodyframe = NULL; - -#ifndef PLATFORM_WINDOWS - // bug in wxMDIChildFrame, we need to explicitly remove the ChildFrame from the ClientWindow - w = myframe->GetClientWindow(); - w->RemoveChild(this); -#endif -} - -void ChildFrProsody::OnQuit(wxCommandEvent& WXUNUSED(event)) -{ - Close(TRUE); -} - - diff --git a/src/prosodydisplay.h b/src/prosodydisplay.h index 0351954f..e2c1ce09 100644 --- a/src/prosodydisplay.h +++ b/src/prosodydisplay.h @@ -15,7 +15,7 @@ class ProsodyDisplay: public wxScrolledWindow public: ProsodyDisplay(wxWindow *parent, const wxPoint& pos, const wxSize& size); ~ProsodyDisplay(); - + virtual void OnDraw(wxDC& dc); void OnMouse(wxMouseEvent& event); void OnKey(wxKeyEvent& event); @@ -32,7 +32,7 @@ class ProsodyDisplay: public wxScrolledWindow int GetWidth(PHONEME_LIST *p); void ChangePh(int pitch1, int pitch2); void SelectPh(int index); - + int linewidth; // height for drawing pitch double scalex; // scale length values double scaley; // scale pitch values @@ -47,18 +47,4 @@ class ProsodyDisplay: public wxScrolledWindow }; // end class ProsodyDisplay -class ChildFrProsody: public wxMDIChildFrame -{ - public: - ProsodyDisplay *prosodycanvas; - ChildFrProsody(wxMDIParentFrame *parent, const wxString& title, const wxPoint& pos, const wxSize& size, const long style); - ~ChildFrProsody(void); - void OnActivate(wxActivateEvent& event); - - void OnQuit(wxCommandEvent& event); - void OnSave(wxCommandEvent& event); - void OnSaveAs(wxCommandEvent& event); - -DECLARE_EVENT_TABLE() -}; diff --git a/src/spect.h b/src/spect.h index e415d01e..ed365860 100644 --- a/src/spect.h +++ b/src/spect.h @@ -121,7 +121,7 @@ typedef struct { PEAKS7 peak_data[7]; unsigned char data[1]; /* firstly harmonic data, then f3,f4,f5 data */ } CYCLE; /* VARIABLE LENGTH Structure */ - + extern int SPC2_size_cycle(CYCLE *cy); //============================================================================================== @@ -142,7 +142,7 @@ public: void CopyPeaks(SpectFrame *sf); void ToggleMarker(int n); void ApplyVoiceMods(); - + void MakeWaveF(int peaks, PitchEnvelope &pitch, int amplitude, int duration); void MakeHtab(int numh, int *htab, int pitch); double GetRms(int amp); diff --git a/src/spectdisplay.cpp b/src/spectdisplay.cpp index 376fdd61..080ed3fd 100644 --- a/src/spectdisplay.cpp +++ b/src/spectdisplay.cpp @@ -42,9 +42,6 @@ extern MyFrame *frame ; #define SCROLLUNITS 20 -#define N_CANVASLIST 50 -static int canvaslistix=0; -static SpectDisplay *canvaslist[N_CANVASLIST]; SpectSeq *clipboard_spect=NULL; wxMenu *menu_spectdisplay=NULL; @@ -77,37 +74,14 @@ SpectDisplay::SpectDisplay(wxWindow *parent, const wxPoint& pos, const wxSize& s pk_num = 1; SetExtent(); - - if(canvaslistix < N_CANVASLIST-1) - canvaslist[canvaslistix++] = this; -// WavegenInitPkData(0); + } // end of SpectDisplay::SpectDisplay SpectDisplay::~SpectDisplay() {//========================== - // delete this from the canvaslist - int ix; - - for(ix=0; ix 0) - currentcanvas = canvaslist[0]; - else - currentcanvas = NULL; - } + // ?? change currentcanvas } @@ -174,6 +148,7 @@ void SpectDisplay::OnActivate(int active) { formantdlg->GetValues(spectseq, sframe); ReadDialogValues(); + currentcanvas = NULL; } } @@ -209,7 +184,7 @@ int GetNumeric(wxTextCtrl *t) void SpectDisplay::WriteDialogLength() {//=================================== wxString string; - + string.Printf(_T("%d mS"),int(spectseq->GetKeyedLength()+0.5)); formantdlg->t_orig_seq->SetLabel(string); } @@ -220,7 +195,7 @@ void SpectDisplay::WriteDialogValues() //{=============================== { wxString string; - + SetSpinCtrl(formantdlg->t_amplitude,spectseq->amplitude); string.Printf(_T("%d - %d Hz %d mS"), @@ -229,7 +204,7 @@ void SpectDisplay::WriteDialogValues() pitchgraph->SetData(128,spectseq->pitchenv.env); voicedlg->SetFromSpect(spectseq); - + WriteDialogLength(); } @@ -456,15 +431,13 @@ void SpectDisplay::SavePitchenv(PitchEnvelope &pitch) } // end of SpectDisplay::SavePitchenv -// WX_DECLARE_LIST(MyChild,ChildList); -// WX_DEFINE_LIST(ChildList); void SpectDisplay::PlayChild(int number, PitchEnvelope pitchenv) {//========================================================= +#ifdef deleted SpectSeq *seq; - if(number >= canvaslistix) return; if((seq = canvaslist[number]->spectseq) == NULL) @@ -472,6 +445,7 @@ void SpectDisplay::PlayChild(int number, PitchEnvelope pitchenv) ReadDialogValues(); seq->MakeWave(0,seq->numframes-1,pitchenv); +#endif } // end of PlayChild @@ -481,7 +455,7 @@ void SpectDisplay::SetKeyframe(SpectFrame *sf, int yes) sf->keyframe = yes; pitchgraph->Refresh(); - + WriteDialogLength(); } @@ -731,7 +705,7 @@ void SpectDisplay::OnKey(wxKeyEvent& event) spectseq->bass_reduction ^= 1; Refresh(); break; - + case 0x1043: // CTRL-C spectseq->ClipboardCopy(); break; @@ -923,6 +897,7 @@ void SpectDisplay::OnMouse(wxMouseEvent& event) int frame; int ix; + SetFocus(); if(event.RightDown()) { PopupMenu(menu_spectdisplay); @@ -935,7 +910,7 @@ void SpectDisplay::OnMouse(wxMouseEvent& event) wxPoint pt(event.GetLogicalPosition(dc)); if(spectseq->numframes==0) return; - + frame = (int)(pt.y/(FRAME_HEIGHT*zoomy)); if(!event.ControlDown()) @@ -1018,30 +993,16 @@ void MyFrame::OnNewWindow(wxCommandEvent& event) else path_spectload2 = path.GetPath(); - // Make another frame, containing a canvas + + GetClientSize(&width, &height); - MyChild *subframe = new MyChild(myframe, _T("Spectrum"), - wxPoint(10, 0), wxSize(500, height), - wxDEFAULT_FRAME_STYLE | - wxNO_FULL_REPAINT_ON_RESIZE); - - subframe->SetTitle(leaf); - - // Give it a status line - subframe->CreateStatusBar(); - - subframe->GetClientSize(&width, &height); - SpectDisplay *canvas = new SpectDisplay(subframe, wxPoint(0, 0), wxSize(width, height), spectseq); + SpectDisplay *canvas = new SpectDisplay(screenpages, wxDefaultPosition, wxSize(width, height), spectseq); + screenpages->AddPage(canvas, leaf, true); canvas->savepath = filename; - currentcanvas = canvas; - - // Associate the menu bar with the frame - subframe->SetMenuBar(MakeMenu(1,translator->dictionary_name)); - subframe->canvas = canvas; - subframe->Show(TRUE); - + currentcanvas = canvas; } + void InitSpectrumDisplay() {//======================= wxMenu *menu_markers = new wxMenu; diff --git a/src/synthdata.cpp b/src/synthdata.cpp index 40fadfe4..e70a4e48 100644 --- a/src/synthdata.cpp +++ b/src/synthdata.cpp @@ -35,7 +35,7 @@ #include "translate.h" #include "wave.h" -const char *version_string = "1.46.25 14.Sep.12"; +const char *version_string = "1.46.26 17.Sep.12"; const int version_phdata = 0x014624; int option_device_number = -1; diff --git a/src/transldlg.cpp b/src/transldlg.cpp index fce227c1..c095a4e3 100644 --- a/src/transldlg.cpp +++ b/src/transldlg.cpp @@ -325,12 +325,12 @@ void TranslDlg::SpeakFile(void) wxFileName fname; FILE *f_text; char buf[200]; - + fname = wxFileName(path_speaktext); file = wxFileSelector(_T("Text file to speak"),fname.GetPath(),fname.GetName(),_T(""),_T("*"),wxOPEN); if(file == wxEmptyString) return; - + strcpy(buf,file.mb_str(wxConvLocal)); f_text = fopen(buf,"r"); if(f_text == NULL) @@ -338,9 +338,9 @@ void TranslDlg::SpeakFile(void) wxLogError(_T("Failed to read: ")+file); return; } - + path_speaktext = file; - + InitText(0); SpeakNextClause(f_text,NULL,0); return; @@ -465,11 +465,9 @@ void TranslDlg::OnCommand(wxCommandEvent& event) case T_PROCESS: case MENU_SPEAK_TEXT: - if(prosodycanvas == NULL) - { - myframe->OnProsody(event); - } + myframe->OnProsody(event); prosodycanvas->LayoutData(ph_list,n_ph_list); + myframe->Refresh(); option_phoneme_events = espeakINITIALIZE_PHONEME_EVENTS; option_log_frames = 1; MakeWave2(ph_list,n_ph_list);