diff --git a/ChangeLog b/ChangeLog index 49972a11d..d15976f47 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,14 @@ +2008-08-20 Tobias Doerffel + + * src/core/midi/midi_alsa_seq.cpp: + * src/core/midi/midi_port.cpp: + - fixed crash when changing mode of midiPort + - various small improvements + + * include/instrument_track.h: + * src/core/note_play_handle.cpp: + made midiPort of instrumentTrack accessible via getMidiPort() + 2008-08-19 Tobias Doerffel * plugins/sf2_player/sf2_player.cpp: diff --git a/src/core/midi/midi_alsa_seq.cpp b/src/core/midi/midi_alsa_seq.cpp index ded6c77aa..919cd6810 100644 --- a/src/core/midi/midi_alsa_seq.cpp +++ b/src/core/midi/midi_alsa_seq.cpp @@ -266,7 +266,8 @@ void midiALSASeq::applyPortMode( midiPort * _port ) else if( m_portIDs[_port][i] != -1 ) { // then remove this port - snd_seq_delete_simple_port( m_seqHandle, m_portIDs[_port][i] ); + snd_seq_delete_simple_port( m_seqHandle, + m_portIDs[_port][i] ); m_portIDs[_port][i] = -1; } } @@ -326,11 +327,8 @@ void midiALSASeq::subscribeReadablePort( midiPort * _port, const QString & _dest, bool _subscribe ) { - if( _subscribe &&( m_portIDs.contains( _port ) == FALSE || - _port->inputEnabled() == FALSE ) ) + if( !m_portIDs.contains( _port ) || m_portIDs[_port][0] < 0 ) { - printf( "port %s can't be (un)subscribed!\n", - _port->name().toAscii().constData() ); return; } snd_seq_addr_t sender; @@ -367,11 +365,8 @@ void midiALSASeq::subscribeWriteablePort( midiPort * _port, const QString & _dest, bool _subscribe ) { - if( _subscribe && ( m_portIDs.contains( _port ) == FALSE || - _port->outputEnabled() == FALSE ) ) + if( !m_portIDs.contains( _port ) || m_portIDs[_port][1] < 0 ) { - printf( "port %s can't be (un)subscribed!\n", - _port->name().toAscii().constData() ); return; } snd_seq_addr_t dest; @@ -383,10 +378,8 @@ void midiALSASeq::subscribeWriteablePort( midiPort * _port, } snd_seq_port_info_t * port_info; snd_seq_port_info_malloc( &port_info ); - snd_seq_get_port_info( m_seqHandle, ( m_portIDs[_port][1] == -1 ) ? - m_portIDs[_port][0] : - m_portIDs[_port][1], - port_info ); + snd_seq_get_port_info( m_seqHandle, m_portIDs[_port][1] == -1, + port_info ); const snd_seq_addr_t * sender = snd_seq_port_info_get_addr( port_info ); snd_seq_port_subscribe_t * subs; snd_seq_port_subscribe_malloc( &subs ); @@ -485,7 +478,8 @@ void midiALSASeq::run( void ) break; case SND_SEQ_EVENT_CONTROLLER: - dest->processInEvent( midiEvent( MidiControlChange, + dest->processInEvent( midiEvent( + MidiControlChange, ev->data.control.channel, ev->data.control.param, ev->data.control.value ), diff --git a/src/core/midi/midi_port.cpp b/src/core/midi/midi_port.cpp index 110f8309c..493abb4c8 100644 --- a/src/core/midi/midi_port.cpp +++ b/src/core/midi/midi_port.cpp @@ -124,7 +124,7 @@ void midiPort::setMode( Modes _mode ) void midiPort::processInEvent( const midiEvent & _me, const midiTime & _time ) { // mask event - if( ( mode() == Input || mode() == Duplex ) && + if( inputEnabled() && ( inputChannel()-1 == _me.m_channel || inputChannel() == 0 ) ) { if( _me.m_type == MidiNoteOn || @@ -152,7 +152,7 @@ void midiPort::processInEvent( const midiEvent & _me, const midiTime & _time ) void midiPort::processOutEvent( const midiEvent & _me, const midiTime & _time ) { // mask event - if( ( mode() == Output || mode() == Duplex ) && + if( outputEnabled() && ( outputChannel()-1 == _me.m_channel && outputChannel() != 0 ) ) { midiEvent ev = _me; @@ -180,7 +180,7 @@ void midiPort::saveSettings( QDomDocument & _doc, QDomElement & _this ) m_defaultVelocityOutEnabledModel.saveSettings( _doc, _this, "defvelout" ); - if( m_readableModel.value() == TRUE ) + if( inputEnabled() ) { QString rp; for( midiPort::map::iterator it = m_readablePorts.begin(); @@ -199,7 +199,7 @@ void midiPort::saveSettings( QDomDocument & _doc, QDomElement & _this ) _this.setAttribute( "inports", rp ); } - if( m_writableModel.value() == TRUE ) + if( outputEnabled() ) { QString wp; for( map::const_iterator it = m_writablePorts.begin(); @@ -235,7 +235,7 @@ void midiPort::loadSettings( const QDomElement & _this ) // restore connections - if( m_readableModel.value() == TRUE ) + if( inputEnabled() ) { QStringList rp = _this.attribute( "inports" ).split( ',' ); for( map::const_iterator it = m_readablePorts.begin(); @@ -248,7 +248,7 @@ void midiPort::loadSettings( const QDomElement & _this ) } } - if( m_writableModel.value() == TRUE ) + if( outputEnabled() ) { QStringList wp = _this.attribute( "outports" ).split( ',' ); for( map::const_iterator it = m_writablePorts.begin(); @@ -276,24 +276,26 @@ void midiPort::updateMidiPortMode( void ) setMode( modeTable[m_readableModel.value()][m_writableModel.value()] ); // check whether we have to dis-check items in connection-menu - if( m_readableModel.value() == FALSE ) + if( !inputEnabled() ) { for( map::const_iterator it = m_readablePorts.begin(); it != m_readablePorts.end(); ++it ) { - if( it.value() == TRUE ) + // subscribed? + if( it.value() ) { subscribeReadablePort( it.key(), FALSE ); } } } - if( m_writableModel.value() == FALSE ) + if( !outputEnabled() ) { for( map::const_iterator it = m_writablePorts.begin(); it != m_writablePorts.end(); ++it ) { - if( it.value() == TRUE ) + // subscribed? + if( it.value() ) { subscribeWriteablePort( it.key(), FALSE ); } @@ -368,7 +370,7 @@ void midiPort::subscribeReadablePort( const QString & _port, bool _subscribe ) { m_readablePorts[_port] = _subscribe; // make sure, MIDI-port is configured for input - if( _subscribe == TRUE && mode() != Input && mode() != Duplex ) + if( _subscribe == TRUE && !inputEnabled() ) { m_readableModel.setValue( TRUE ); } @@ -382,7 +384,7 @@ void midiPort::subscribeWriteablePort( const QString & _port, bool _subscribe ) { m_writablePorts[_port] = _subscribe; // make sure, MIDI-port is configured for output - if( _subscribe == TRUE && mode() != Output && mode() != Duplex ) + if( _subscribe == TRUE && !outputEnabled() ) { m_writableModel.setValue( TRUE ); }