Ejemplo n.º 1
0
Box& Box::loadSettings(QSettings &settings)
{
    setHelpString(settings.value("help").toString());
    readPtrListSettings(inputPorts(), settings, "inputs");
    readPtrListSettings(outputPorts(), settings, "outputs");
    readListSettings<BoxProperty>(this, std::mem_fun(&Box::setBoxProperties), settings, "properties");
    return *this;
}
Ejemplo n.º 2
0
int main(int argc, char* argv[])
{
    int testsignal = 0;
    bool runSpeedTest = false;
    bool connectAudio = false;
    std::vector<std::string> midiConnections;
    std::map<unsigned, unsigned> patchFromCmdline;

    struct option longopts[] = {
            { "testsignal", 1, 0, 't' },
            { "speedtest", 0, 0, 's' },
            { "connect-audio", 0, 0, 'C' },
            { "connect-midi", 1, 0, 'M' },
            { "patch", 1, 0, 'p' },
            { "help", no_argument, 0, 'h' },
            { 0, 0, 0, 0 } };
    int opt;
    while ((opt = getopt_long(argc, argv, "st:CM:p:h", longopts, 0)) != -1) {
        switch (opt) {
        case 't':
            testsignal = atoi(optarg);
            break;
        case 's':
            runSpeedTest = true;
            break;
        case 'C':
            connectAudio = true;
            break;
        case 'M':
            midiConnections.push_back(optarg);
            break;
        case 'p':
            unsigned channel, program;
            sscanf(optarg, "%u:%u", &channel, &program);
            patchFromCmdline[channel] = program;
            break;
        default:
        case 'h':
            printHelp();
            return 0;
        }
    }

    if (testsignal) {
        TGlobal::SampleRate = 44100;
        TGlobal::NyquistFrequency = TGlobal::SampleRate / 2;

        TAudioFileWriter fileWriter("testsignal.wav", 2, TGlobal::SampleRate);

        TFileAudioPort inputPortL("", TFileAudioPort::INPUT);
        TFileAudioPort inputPortR("", TFileAudioPort::INPUT);
        TAudioPortCollection inputPorts( { &inputPortL, &inputPortR });
        TFileAudioPort intOutPort1("/dev/null", TFileAudioPort::OUTPUT);
        TFileAudioPort intOutPort2("/dev/null", TFileAudioPort::OUTPUT);
        TFileAudioPort intOutPort3("/dev/null", TFileAudioPort::OUTPUT);
        TFileAudioPort intOutPort4("/dev/null", TFileAudioPort::OUTPUT);
        TAudioPortCollection intOutPorts( { &intOutPort1, &intOutPort2,
                &intOutPort3, &intOutPort4 });
        TAudioPortCollection outputPorts = fileWriter.GetPorts();

        TJackSynth synth(inputPorts, outputPorts, intOutPorts);

        switch (testsignal) {
        case 1:
            testSignalSawSweep(synth);
            break;
        case 2:
            testSignalFilterSweep(synth);
            break;
        case 3:
            testSignalDelay(synth);
            break;
        case 4:
            testSignalReverb(synth);
            break;
        }
    }
    else if (runSpeedTest) {
        speedTest();
    }
    else {
        signal(SIGINT, sigterm);
        signal(SIGTERM, sigterm);
        runInJack(connectAudio, midiConnections, patchFromCmdline);
    }
    return 0;
}
Ejemplo n.º 3
0
void runInJack(bool connectAudio,
		std::vector<std::string> midiConnections,
		std::map<unsigned, unsigned> patchFromCmdline)
{
    Client = jack_client_open("jacksynth", JackNullOption, 0);
    if (!Client) {
        std::cerr << "Cannot connect to JACK" << std::endl;
        abort();
    }

    std::cout << "Connected to JACK:" << std::endl << "  Sample rate "
            << jack_get_sample_rate(Client) << " Hz" << std::endl
            << "  Buffer size " << jack_get_buffer_size(Client) << " frames"
            << std::endl << "  Sample size " << sizeof(TSample) << " bytes"
            << std::endl;

    TJackAudioPort inputPortL("leftin", Client, TJackAudioPort::INPUT);
    TJackAudioPort inputPortR("rightin", Client, TJackAudioPort::INPUT);
    TJackAudioPort outputPortL("left", Client, TJackAudioPort::OUTPUT);
    TJackAudioPort outputPortR("right", Client, TJackAudioPort::OUTPUT);
    TJackAudioPort intOutPort1("int1", Client, TJackAudioPort::OUTPUT);
    TJackAudioPort intOutPort2("int2", Client, TJackAudioPort::OUTPUT);
    TJackAudioPort intOutPort3("int3", Client, TJackAudioPort::OUTPUT);
    TJackAudioPort intOutPort4("int4", Client, TJackAudioPort::OUTPUT);

    MidiIn = jack_port_register(Client, "MIDI-IN",
            JACK_DEFAULT_MIDI_TYPE, JackPortIsInput, 0);

    MidiOut = jack_port_register(Client, "MIDI-OUT",
            JACK_DEFAULT_MIDI_TYPE, JackPortIsOutput, 0);

    TGlobal::SampleRate = jack_get_sample_rate(Client);
    TGlobal::NyquistFrequency = TGlobal::SampleRate / 2;

    TAudioPortCollection inputPorts( { &inputPortL, &inputPortR });
    TAudioPortCollection outputPorts( { &outputPortL, &outputPortR });
    TAudioPortCollection intermediateOutPorts( { &intOutPort1, &intOutPort2,
            &intOutPort3, &intOutPort4 });
    TJackSynth synth(inputPorts, outputPorts, intermediateOutPorts);
    synth.SetMidiSendCallback(send_midi);

    jack_set_process_callback(Client, process, &synth);
    if (jack_activate(Client)) {
        std::cerr << "Cannot start jackiness" << std::endl;
        abort();
    }

    if (connectAudio) {
        inputPortL.Connect("system:capture_1");
        inputPortR.Connect("system:capture_2");
        outputPortL.Connect("system:playback_1");
        outputPortR.Connect("system:playback_2");
    }

    for (auto con : midiConnections) {
        const char* me = jack_port_name(MidiIn);
        jack_connect(Client, con.c_str(), me);
    }

    for (auto patch : patchFromCmdline) {
        uint8_t channel = 0xc0 | (patch.first - 1);
        uint8_t pgm = patch.second - 1;
        synth.HandleMidi({ channel, pgm });
    }

    while (!die)
        sleep(1);
    jack_client_close(Client);
}