int glue_startInputRec() { if (G_audio_status == false) return -1; if (G_Mixer.chanInput != -1) // if there's another recording active return 1; if (!G_Mixer.running) { glue_startSeq(); mainWin->beat_stop->value(1); } int ch = mh_startInputRec(); if (ch == -1) // no chans available return 0; glue_setVol(ch, 1.0f); gu_trim_label(G_Mixer.chan[ch]->name.c_str(), 28, mainWin->keyboard->sampleButton[ch]); mainWin->input_rec->value(1); mainWin->input_rec->redraw(); mainWin->beat_stop->redraw(); return 1; }
int jackSyncCb(jack_transport_state_t state, jack_position_t *pos, void *arg) { switch (state) { case JackTransportStopped: gLog("[KA] Jack transport stopped, frame=%d\n", pos->frame); glue_stopSeq(false); // false = not from GUI if (pos->frame == 0) glue_rewindSeq(); break; case JackTransportRolling: gLog("[KA] Jack transport rolling\n"); break; case JackTransportStarting: gLog("[KA] Jack transport starting, frame=%d\n", pos->frame); glue_startSeq(false); // false = not from GUI if (pos->frame == 0) glue_rewindSeq(); break; default: gLog("[KA] Jack transport [unknown]\n"); } return 1; }
void glue_startRec() { if (G_audio_status == false) return; if (!G_Mixer.running) glue_startSeq(); // start the sequencer for convenience recorder::active = true; mainWin->beat_rec->value(1); mainWin->beat_rec->redraw(); }
int Keyboard::handle(int e) { int ret = Fl_Group::handle(e); // assume the buttons won't handle the Keyboard events switch (e) { case FL_FOCUS: case FL_UNFOCUS: { ret = 1; // enables receiving Keyboard events break; } case FL_SHORTCUT: // in case widget that isn't ours has focus case FL_KEYDOWN: // Keyboard key pushed case FL_KEYUP: { // Keyboard key released /* rewind session. Avoid retrigs */ if (e == FL_KEYDOWN) { if (Fl::event_key() == FL_BackSpace && !bckspcPressed) { bckspcPressed = true; glue_rewindSeq(); ret = 1; break; } else if (Fl::event_key() == FL_End && !endPressed) { endPressed = true; glue_startStopInputRec(false); // update gui ret = 1; break; } else if (Fl::event_key() == FL_Enter && !enterPressed) { enterPressed = true; glue_startStopActionRec(); ret = 1; break; } else if (Fl::event_key() == ' ' && !spacePressed) { spacePressed = true; G_Mixer.running ? glue_stopSeq() : glue_startSeq(); ret = 1; break; } } else if (e == FL_KEYUP) { if (Fl::event_key() == FL_BackSpace) bckspcPressed = false; else if (Fl::event_key() == FL_End) endPressed = false; else if (Fl::event_key() == ' ') spacePressed = false; else if (Fl::event_key() == FL_Enter) enterPressed = false; } /* Walk button arrays, trying to match button's label with the Keyboard event. * If found, set that button's value() based on up/down event, * and invoke that button's callback() */ for (int i=0; i<gChannelsL->children(); i++) ret &= ((gChannel*)gChannelsL->child(i))->keyPress(e); for (int i=0; i<gChannelsR->children(); i++) ret &= ((gChannel*)gChannelsR->child(i))->keyPress(e); break; } } return ret; }
void gdMainWindow::__cb_startstop() { G_Mixer.running ? glue_stopSeq() : glue_startSeq(); }