Exemple #1
0
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;
}
Exemple #2
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;
}