@@ -28,7 +28,8 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWi
2828
2929 highlighterTab = new Highlighter (ui->melodie_textarea ->document ());
3030 music = new QMediaPlayer (this );
31- midi2audioCall = new QProcess (this );
31+ score_compiler = new QProcess (this );
32+ midi_converter = new QProcess (this );
3233 pdf = new PdfViewer ();
3334 timer = new QTimer (this );
3435
@@ -53,6 +54,7 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWi
5354 // ==== Trigger rendering ====
5455 connect (ui->actionCompile , SIGNAL (triggered ()), this , SLOT (compile ()));
5556 connect (ui->actionCompile_tool , SIGNAL (triggered ()), this , SLOT (compile ()));
57+ connect (score_compiler,SIGNAL (finished (int )),this ,SLOT (scoreCompilerFinished (int )));
5658
5759 // ==== Various exernal opening ====
5860 connect (ui->actionHelpTabliato , &QAction::triggered, [=]() { QDesktopServices::openUrl (QUrl (" https://jean-romain.github.io/tabliato/doc.html" )); });
@@ -104,8 +106,7 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWi
104106 connect (music, SIGNAL (stateChanged (QMediaPlayer::State)), this , SLOT (updateMusic (QMediaPlayer::State)));
105107
106108 // ==== Music renderer ====
107- connect (midi2audioCall,SIGNAL (readyReadStandardOutput ()),this ,SLOT (midi2audioReadyRead ()));
108- connect (midi2audioCall,SIGNAL (finished (int )),this ,SLOT (midi2audioFinished (int )));
109+ connect (midi_converter,SIGNAL (finished (int )), this ,SLOT (midi2audioFinished (int )));
109110
110111 // ===- Music download soundfonts ====
111112 connect (ui->actionBallone_Burini , &QAction::triggered, [=]() { this ->download_soundfonts (" BalloneBurini.sf2" ); });
@@ -177,38 +178,41 @@ MainWindow::~MainWindow()
177178 delete ui;
178179 delete highlighterTab;
179180 delete music;
180- delete midi2audioCall;
181+ delete score_compiler;
182+ delete midi_converter;
181183 delete pdf;
182184}
183185
184186void MainWindow::compile ()
185187{
186188 if (!currentOpenedFile.isEmpty ()) save ();
187189
188- terminal (" Compilation" );
189-
190190 if (!Lilypond::is_lilypond_installed ())
191191 {
192192 QMessageBox::critical (this , " Erreur" , " Impossible de trouver le logicel lilypond sur cet machine. Lilypond ne semble pas avoir été installé." );
193193 return ;
194194 }
195195
196+ terminal (" Compilation..." );
197+
198+
199+ ui->actionCompile ->setEnabled (false );
200+ ui->actionCompile_tool ->setEnabled (false );
201+
196202 Tabulature tab = readMusicFromUI ();
197203
198204 try
199205 {
200- QElapsedTimer timer;
201- timer.start ();
202-
203206 TabliatoProcessor proc (tab);
204207 m_timeline = proc.m_timeline ;
205208 // terminal(proc.get_logs());
206- terminal (" Tablature parsée en " + QString::number (timer.elapsed ()) + " milliseconds" );
207209 }
208210 catch (const std::exception &e)
209211 {
210212 QMessageBox::critical (this , " Erreur" , QString (e.what ()));
211213 terminal (e.what ());
214+ ui->actionCompile ->setEnabled (true );
215+ ui->actionCompile_tool ->setEnabled (true );
212216 return ;
213217 }
214218
@@ -219,28 +223,34 @@ void MainWindow::compile()
219223 QElapsedTimer timer;
220224 timer.start ();
221225
222- QProcess tabliato;
223226 QStringList arguments;
227+
228+ if (ui->actionSlowCPU ->isChecked ()) arguments.append (" --slow-machine" ); // See #52
229+
224230 arguments.append (" --png" );
225231 arguments.append (" --pdf" );
226232 arguments.append (" --midi" );
227233 arguments.append (" --ly" );
228234 arguments.append (dtb);
229235
230- tabliato.start (APPPATH, arguments);
231- tabliato.waitForFinished (5000 );
236+ score_compiler->start (APPPATH, arguments);
237+ }
238+
239+
240+ void MainWindow::scoreCompilerFinished (int exit)
241+ {
242+ ui->actionCompile ->setEnabled (true );
243+ ui->actionCompile_tool ->setEnabled (true );
232244
233- if (tabliato. exitCode () != 0 )
245+ if (exit != 0 )
234246 {
235- QString err = tabliato.readAllStandardError ();
236- QMessageBox::critical (this , " Erreur :" , err);
247+ QString errorDetails = score_compiler->readAllStandardError ();
248+ if (errorDetails.isEmpty ())errorDetails = " La partition n'a pas pu être générée pour une raison inconnue." ;
249+ QMessageBox::critical (this , " Erreur" , errorDetails);
250+ terminal (errorDetails);
237251 return ;
238252 }
239253
240- if (!tabliato.readAllStandardOutput ().isEmpty ())
241- terminal (tabliato.readAllStandardOutput ());
242-
243- terminal (" Gravure terminée en " + QString::number (timer.elapsed ()) + " milliseconds" );
244254 updatePreview (OUTPUT + " /output.pdf" );
245255 stopMusic ();
246256 midi2audio ();
@@ -252,22 +262,26 @@ void MainWindow::midi2audio()
252262 ui->play_pushButton ->setEnabled (false );
253263
254264 QStringList arguments;
265+ if (ui->actionSlowCPU ->isChecked ()) arguments.append (" --slow-machine" ); // See #52
255266 arguments.append (" --soundfont=" + SOUNDFONTS + " /" + ui->sf2_combobox ->currentText ());
256267 arguments.append (OUTPUT + " /output" + MIDIEXT);
257- midi2audioCall->start (APPPATH, arguments);
258- }
259-
260- void MainWindow::midi2audioReadyRead ()
261- {
262- terminal (midi2audioCall->readAllStandardOutput ());
268+ midi_converter->start (APPPATH, arguments);
263269}
264270
265271void MainWindow::midi2audioFinished (int exit)
266272{
267273 exportFiles ();
268- if (exit) QMessageBox::critical (this , " Erreur" , " La musique n'a pas pu être générée pour une raison inconnue" );
274+
275+ if (exit != 0 )
276+ {
277+ QString errorDetails = midi_converter->readAllStandardError ();
278+ if (errorDetails.isEmpty ())errorDetails = " La musique n'a pas pu être générée pour une raison inconnue." ;
279+ QMessageBox::critical (this , " Erreur" , errorDetails);
280+ terminal (errorDetails);
281+ }
282+
269283 ui->play_pushButton ->setEnabled (true );
270- QUrl audio = QUrl::fromLocalFile (OUTPUT+ " /output" + AUDIOEXT);
284+ QUrl audio = QUrl::fromLocalFile (OUTPUT + " /output" + AUDIOEXT);
271285 music->setMedia (QMediaContent ());
272286 music->setMedia (audio);
273287 music->setPosition (0 );
@@ -771,6 +785,7 @@ void MainWindow::writeSettings()
771785 settings.setValue (" previewWidth" , ui->previewDock ->width ());
772786 settings.setValue (" editorWidth" , ui->centralwidget ->width ());
773787 settings.setValue (" editorFontSize" , ui->melodie_textarea ->font ().pointSize ());
788+ settings.setValue (" slowcpu" , ui->actionSlowCPU ->isChecked ());
774789 settings.setValue (" v110" , 0 );
775790}
776791
@@ -800,6 +815,8 @@ void MainWindow::readSettings()
800815 ui->centralwidget ->resize (settings.value (" editorWidth" ).toInt (), ui->centralwidget ->height ());
801816 ui->previewDock ->resize (settings.value (" previewWidth" ).toInt (), ui->previewDock ->height ());
802817
818+ ui->actionSlowCPU ->setChecked (settings.value (" slowcpu" ).toBool ());
819+
803820 QFont font = ui->melodie_textarea ->font ();
804821 font.setPointSize (settings.value (" editorFontSize" ).toInt ());
805822 ui->melodie_textarea ->setFont (font);
0 commit comments