void JVlibForm::on_System_PauseMidi_button_toggled(bool checked) { unsigned int current_tick; if (checked) { stopPlayer(); if (seqTimer->isActive()) { disconnect(JVlibForm::seqTimer, SIGNAL(timeout()), this, SLOT(tickDisplay())); seqTimer->stop(); } snd_seq_get_queue_status(seq, queue, status); current_tick = snd_seq_queue_status_get_tick_time(status); snd_seq_stop_queue(seq,queue,NULL); snd_seq_drain_output(seq); stop_sound(); disconnect_port(); System_PauseMidi_button->setText("Resume"); } else { connect_port(); snd_seq_continue_queue(seq, queue, NULL); snd_seq_drain_output(seq); snd_seq_get_queue_status(seq, queue, status); current_tick = snd_seq_queue_status_get_tick_time(status); System_PauseMidi_button->setText("Pause"); connect(JVlibForm::seqTimer, SIGNAL(timeout()), this, SLOT(tickDisplay())); startPlayer(current_tick); seqTimer->start(100); } } // end on_System_PauseMidi_button_toggled
static guint32 get_current_tick (void) { snd_seq_queue_status_t *status; snd_seq_queue_status_alloca (&status); snd_seq_get_queue_status (seq, queue_id, status); return snd_seq_queue_status_get_tick_time (status); }
static unsigned int get_tick(void) { snd_seq_queue_status_t * status; int result; snd_seq_queue_status_alloca(&status); result = snd_seq_get_queue_status(seq, seq_queue, status); if (result < 0) { fprintf(stderr, "ALSA snd_seq_get_queue_status err %d\n", result); return 0; } return (unsigned int) snd_seq_queue_status_get_tick_time(status); }
void JVlibForm::tickDisplay() { // set timestamp display snd_seq_get_queue_status(seq, queue, status); unsigned int current_tick = snd_seq_queue_status_get_tick_time(status); System_MIDI_progressBar->blockSignals(true); System_MIDI_progressBar->setValue(current_tick); System_MIDI_progressBar->blockSignals(false); // set time label double new_seconds = static_cast<double>(current_tick)/all_events.back().tick; new_seconds *= song_length_seconds; MIDI_time_display->setText(QString::number(static_cast<int>(new_seconds)/60).rightJustified(2,'0')+ ":"+QString::number(static_cast<int>(new_seconds)%60).rightJustified(2,'0')); if (current_tick >= all_events.back().tick) { // end of song sleep(1); System_PlayMidi_button->setChecked(false); return; } while (all_events[event_num].tick<current_tick) event_num++; } // end tickDisplay