int main(int argc, char *argv[]){ if(argc > 1){ strcpy(device,argv[1]); } Gtk::Main kit(argc,argv); std::thread audio_thread(audio_thread_func); mainwindow = new MainWindow; Gtk::Main::run(); quit_threads = true; audio_thread.join(); delete mainwindow; return 0; }
int main(int argc, char *argv[]){ int config_alsa = 0; int config_pa = 0; static struct option long_opts[] = { {"alsa", no_argument, &config_alsa, 1}, {"pulseaudio", no_argument, &config_pa, 1}, {"pa", no_argument, &config_pa, 1}, {"device", no_argument, 0, 'd'}, {"help", no_argument, 0, 'h'}, {0,0,0,0} }; std::string config_device = "default"; int c, opt_index = 0; while((c = getopt_long(argc,argv,"hd:",long_opts,&opt_index)) != -1){ switch (c){ case 'h': usage(argv[0]); return 0; break; case 'd': config_device = optarg; break; default: std::cout << "Unrecognized option " << (char)c << std::endl; usage(argv[0]); return 1; } } std::vector<std::string> config_infiles; while(optind < argc){ config_infiles.push_back(argv[optind]); optind++; } if(config_infiles.size() > 1){ std::cout << "Unable to open multiple files at once." << std::endl; return 1; } Gtk::Main kit(argc,argv); AudioDriver* audio_driver = nullptr; MidiDriver* midi_driver = nullptr; // Select audio driver to use if(!config_pa && !config_alsa){ config_alsa = 1; } if(config_pa && config_alsa){ std::cout << "Cannot enable multiple audio drivers at once." << std::endl; return 1; } if(config_pa){ std::cout << "ERROR: Pulseaudio driver is not yet implemented." << std::endl; // audio_driver = new PulseaudioAlsaDriver(); return 1; }else if(config_alsa){ audio_driver = new AlsaAudioDriver(config_device); } // Select midi driver to use midi_driver = new AlsaSeqDriver(); // Create audio context AudioContext ctx = {audio_driver, midi_driver}; // TODO: Create mainwindow on stack here and pass a reference to Engine. mainwindow = new MainWindow(); std::thread audio_thread(audio_main, ctx); std::thread midi_thread( midi_main, ctx); if(config_infiles.size() > 0){ // TODO: Open file. } Gtk::Main::run(); // ====================== quit_threads = true; audio_thread.join(); midi_thread.join(); delete mainwindow; delete midi_driver; delete audio_driver; return 0; }