void MidiQueue::close() { if (_id != kInvalidId) { snd_seq_free_queue(_sequencer, _id); _id = kInvalidId; } }
static void alsa_unuse_queue(void) { if (--queue_used == 0) { snd_seq_stop_queue(seq, queue, NULL); snd_seq_drain_output(seq); snd_seq_free_queue(seq, queue); VERBOSE printf("queue freed\n"); } }
MidiAlsaSeq::~MidiAlsaSeq() { if( isRunning() ) { m_quit = true; wait( EventPollTimeOut*2 ); m_seqMutex.lock(); snd_seq_stop_queue( m_seqHandle, m_queueID, NULL ); snd_seq_free_queue( m_seqHandle, m_queueID ); snd_seq_close( m_seqHandle ); m_seqMutex.unlock(); } }
void ALSADrv_MIDI_Shutdown(void) { ALSADrv_MIDI_HaltPlayback(); if (seq_queue >= 0) { snd_seq_free_queue(seq, seq_queue); } if (seq_port >= 0) { snd_seq_delete_simple_port(seq, seq_port); } if (seq) { snd_seq_close(seq); } seq_queue = -1; seq_port = -1; seq = 0; }
mastermidibus::~mastermidibus() { for ( int i=0; i<m_num_out_buses; i++ ) delete m_buses_out[i]; snd_seq_event_t ev; /* kill timer */ snd_seq_ev_clear(&ev); snd_seq_stop_queue( m_alsa_seq, m_queue, &ev ); snd_seq_free_queue( m_alsa_seq, m_queue ); /* close client */ snd_seq_close( m_alsa_seq ); }
mastermidibus::~mastermidibus () { for (int i = 0; i < m_num_out_buses; i++) { if (not_nullptr(m_buses_out[i])) { delete m_buses_out[i]; m_buses_out[i] = nullptr; } } #ifdef HAVE_LIBASOUND snd_seq_event_t ev; snd_seq_ev_clear(&ev); /* kill timer */ snd_seq_stop_queue(m_alsa_seq, m_queue, &ev); snd_seq_free_queue(m_alsa_seq, m_queue); snd_seq_close(m_alsa_seq); /* close client */ #endif }
mastermidibus::~mastermidibus () { for (int i = 0; i < m_num_out_buses; ++i) { if (not_nullptr(m_buses_out[i])) { delete m_buses_out[i]; m_buses_out[i] = nullptr; } } for (int i = 0; i < m_num_in_buses; ++i) { if (not_nullptr(m_buses_in[i])) { delete m_buses_in[i]; m_buses_in[i] = nullptr; } } #ifdef SEQ64_HAVE_LIBASOUND snd_seq_event_t ev; snd_seq_ev_clear(&ev); /* kill timer */ snd_seq_stop_queue(m_alsa_seq, m_queue, &ev); snd_seq_free_queue(m_alsa_seq, m_queue); snd_seq_close(m_alsa_seq); /* close client */ (void) snd_config_update_free_global(); /* additional cleanup */ #endif /* * Still more cleanup, not in seq24. */ if (not_nullptr(m_poll_descriptors)) { delete [] m_poll_descriptors; m_poll_descriptors = nullptr; } if (not_nullptr(m_bus_announce)) { delete m_bus_announce; m_bus_announce = nullptr; } }
SeqContext::~SeqContext() { snd_seq_event_t ev; unsigned long t; snd_seq_drop_output(handle); t = 0; if( connected == 3 ) { seq_midi_event_init( &ev, t, 0); seq_midi_control( &ev, 0, MIDI_CTL_ALL_SOUNDS_OFF, 0); seq_send_to_all( &ev); #ifdef USE_DRAIN snd_seq_drain_output(handle); #else snd_seq_flush_output(handle); #endif } if( queue ) snd_seq_free_queue(handle, queue); snd_seq_close(handle); }
static GstStateChangeReturn gst_amidisrc_change_state (GstElement * element, GstStateChange transition ) { GstStateChangeReturn ret = GST_STATE_CHANGE_SUCCESS; GstaMIDISrc *src = GST_AMIDISRC (element); switch (transition) { case GST_STATE_CHANGE_NULL_TO_READY: // TODO: Open our listen alsa ports // 1. Open sequencer // 2. If we have a client and port, connect to them printf("***Here: %s:%d\n",__FILE__,__LINE__); if ((snd_seq_open(&src->a_seq, src->device, SND_SEQ_OPEN_INPUT, 0)) < 0) return GST_STATE_CHANGE_FAILURE; if( src->a_seq == NULL ) return GST_STATE_CHANGE_FAILURE; snd_seq_set_client_name(src->a_seq, "gstreamer"); if ((src->a_port = snd_seq_create_simple_port(src->a_seq, "In", SND_SEQ_PORT_CAP_WRITE | SND_SEQ_PORT_CAP_SUBS_WRITE, SND_SEQ_PORT_TYPE_MIDI_GENERIC)) < 0) { return GST_STATE_CHANGE_FAILURE; } src->a_queue = snd_seq_alloc_queue(src->a_seq); if( src->a_queue < 0 ) return GST_STATE_CHANGE_FAILURE; // Only connect if we have positive client/port if( src->client >= 0 && src->port >= 0 ) { if( snd_seq_connect_to(src->a_seq, src->a_port, src->client, src->port) < 0 ) return GST_STATE_CHANGE_FAILURE; } break; case GST_STATE_CHANGE_READY_TO_PAUSED: return GST_STATE_CHANGE_NO_PREROLL; break; default: break; } ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition); if (ret == GST_STATE_CHANGE_FAILURE) return ret; switch (transition) { case GST_STATE_CHANGE_READY_TO_NULL: // TODO: close our listening alsa ports // disconnect from midi port printf("***Here: %s:%d\n",__FILE__,__LINE__); if( src->a_queue >= 0 ){ if( snd_seq_free_queue( src->a_seq, src->a_queue ) < 0 ) return GST_STATE_CHANGE_FAILURE; } if( src->a_port >= 0 && src->a_seq != NULL){ if( snd_seq_delete_simple_port(src->a_seq,src->a_port) < 0 ){ return GST_STATE_CHANGE_FAILURE; } } if( snd_seq_close( src->a_seq ) < 0 ) return GST_STATE_CHANGE_FAILURE; break; case GST_STATE_CHANGE_PLAYING_TO_PAUSED: return GST_STATE_CHANGE_NO_PREROLL; break; default: break; } return ret; }