int main(int argc, char *argv[]) { VirtualMidi midi; MidiCallbacks callbacks; ADD_CALLBACK(midi.MidiClass::addOnNoteOnCallback, callbacks, onNoteOn); ADD_CALLBACK(midi.MidiClass::addOnNoteOffCallback, callbacks, onNoteOff); midi.sendNoteOn(MIDI_NOTE_A0, 100); midi.sendNoteOff(MIDI_NOTE_A0); return 0; }
VlcProc::VlcProc( intf_thread_t *pIntf ): SkinObject( pIntf ), m_varEqBands( pIntf ), m_pVout( NULL ), m_pAout( NULL ), m_bEqualizer_started( false ) { // Create and register VLC variables VarManager *pVarManager = VarManager::instance( getIntf() ); #define REGISTER_VAR( var, type, name ) \ var = VariablePtr( new type( getIntf() ) ); \ pVarManager->registerVar( var, name ); REGISTER_VAR( m_cVarRandom, VarBoolImpl, "playlist.isRandom" ) REGISTER_VAR( m_cVarLoop, VarBoolImpl, "playlist.isLoop" ) REGISTER_VAR( m_cVarRepeat, VarBoolImpl, "playlist.isRepeat" ) REGISTER_VAR( m_cPlaytree, Playtree, "playtree" ) pVarManager->registerVar( getPlaytreeVar().getPositionVarPtr(), "playtree.slider" ); pVarManager->registerVar( m_cVarRandom, "playtree.isRandom" ); pVarManager->registerVar( m_cVarLoop, "playtree.isLoop" ); REGISTER_VAR( m_cVarPlaying, VarBoolImpl, "vlc.isPlaying" ) REGISTER_VAR( m_cVarStopped, VarBoolImpl, "vlc.isStopped" ) REGISTER_VAR( m_cVarPaused, VarBoolImpl, "vlc.isPaused" ) /* Input variables */ pVarManager->registerVar( m_cVarRepeat, "playtree.isRepeat" ); REGISTER_VAR( m_cVarTime, StreamTime, "time" ) REGISTER_VAR( m_cVarSeekable, VarBoolImpl, "vlc.isSeekable" ) REGISTER_VAR( m_cVarDvdActive, VarBoolImpl, "dvd.isActive" ) REGISTER_VAR( m_cVarRecordable, VarBoolImpl, "vlc.canRecord" ) REGISTER_VAR( m_cVarRecording, VarBoolImpl, "vlc.isRecording" ) /* Vout variables */ REGISTER_VAR( m_cVarFullscreen, VarBoolImpl, "vlc.isFullscreen" ) REGISTER_VAR( m_cVarHasVout, VarBoolImpl, "vlc.hasVout" ) /* Aout variables */ REGISTER_VAR( m_cVarHasAudio, VarBoolImpl, "vlc.hasAudio" ) REGISTER_VAR( m_cVarVolume, Volume, "volume" ) REGISTER_VAR( m_cVarMute, VarBoolImpl, "vlc.isMute" ) REGISTER_VAR( m_cVarEqualizer, VarBoolImpl, "equalizer.isEnabled" ) REGISTER_VAR( m_cVarEqPreamp, EqualizerPreamp, "equalizer.preamp" ) #undef REGISTER_VAR m_cVarSpeed = VariablePtr( new VarText( getIntf(), false ) ); pVarManager->registerVar( m_cVarSpeed, "speed" ); SET_TEXT( m_cVarSpeed, UString( getIntf(), "1") ); m_cVarStreamName = VariablePtr( new VarText( getIntf(), false ) ); pVarManager->registerVar( m_cVarStreamName, "streamName" ); m_cVarStreamURI = VariablePtr( new VarText( getIntf(), false ) ); pVarManager->registerVar( m_cVarStreamURI, "streamURI" ); m_cVarStreamBitRate = VariablePtr( new VarText( getIntf(), false ) ); pVarManager->registerVar( m_cVarStreamBitRate, "bitrate" ); m_cVarStreamSampleRate = VariablePtr( new VarText( getIntf(), false ) ); pVarManager->registerVar( m_cVarStreamSampleRate, "samplerate" ); m_cVarStreamArt = VariablePtr( new VarString( getIntf() ) ); pVarManager->registerVar( m_cVarStreamArt, "streamArt" ); // Register the equalizer bands for( int i = 0; i < EqualizerBands::kNbBands; i++) { stringstream ss; ss << "equalizer.band(" << i << ")"; pVarManager->registerVar( m_varEqBands.getBand( i ), ss.str() ); } // XXX WARNING XXX // The object variable callbacks are called from other VLC threads, // so they must put commands in the queue and NOT do anything else // (X11 calls are not reentrant) #define ADD_CALLBACK( p_object, var ) \ var_AddCallback( p_object, var, onGenericCallback, this ); ADD_CALLBACK( pIntf->p_sys->p_playlist, "volume" ) ADD_CALLBACK( pIntf->p_libvlc, "intf-toggle-fscontrol" ) ADD_CALLBACK( pIntf->p_sys->p_playlist, "item-current" ) ADD_CALLBACK( pIntf->p_sys->p_playlist, "random" ) ADD_CALLBACK( pIntf->p_sys->p_playlist, "loop" ) ADD_CALLBACK( pIntf->p_sys->p_playlist, "repeat" ) #undef ADD_CALLBACK // Called when a playlist item is added var_AddCallback( pIntf->p_sys->p_playlist, "playlist-item-append", onItemAppend, this ); // Called when a playlist item is deleted // TODO: properly handle item-deleted var_AddCallback( pIntf->p_sys->p_playlist, "playlist-item-deleted", onItemDelete, this ); // Called when the current input changes var_AddCallback( pIntf->p_sys->p_playlist, "input-current", onInputNew, this ); // Called when a playlist item changed var_AddCallback( pIntf->p_sys->p_playlist, "item-change", onItemChange, this ); // Called when we have an interaction dialog to display var_Create( pIntf, "interaction", VLC_VAR_ADDRESS ); var_AddCallback( pIntf, "interaction", onInteraction, this ); // initialize variables refering to liblvc and playlist objects init_variables(); }