LfoController::LfoController( Model * _parent ) : Controller( Controller::LfoController, _parent, tr( "LFO Controller" ) ), m_baseModel( 0.5, 0.0, 1.0, 0.001, this, tr( "Base value" ) ), m_speedModel( 2.0, 0.01, 20.0, 0.0001, 20000.0, this, tr( "Oscillator speed" ) ), m_amountModel( 1.0, -1.0, 1.0, 0.005, this, tr( "Oscillator amount" ) ), m_phaseModel( 0.0, 0.0, 360.0, 4.0, this, tr( "Oscillator phase" ) ), m_waveModel( Oscillator::SineWave, 0, Oscillator::NumWaveShapes, this, tr( "Oscillator waveform" ) ), m_multiplierModel( 0, 0, 2, this, tr( "Frequency Multiplier" ) ), m_duration( 1000 ), m_phaseOffset( 0 ), m_currentPhase( 0 ), m_sampleFunction( &Oscillator::sinSample ), m_userDefSampleBuffer( new SampleBuffer ) { setSampleExact( true ); connect( &m_waveModel, SIGNAL( dataChanged() ), this, SLOT( updateSampleFunction() ) ); connect( &m_speedModel, SIGNAL( dataChanged() ), this, SLOT( updateDuration() ) ); connect( &m_multiplierModel, SIGNAL( dataChanged() ), this, SLOT( updateDuration() ) ); connect( engine::mixer(), SIGNAL( sampleRateChanged() ), this, SLOT( updateDuration() ) ); connect( engine::getSong(), SIGNAL( playbackStateChanged() ), this, SLOT( updatePhase() ) ); connect( engine::getSong(), SIGNAL( playbackPositionChanged() ), this, SLOT( updatePhase() ) ); updateDuration(); }
void Player::handleTransportChange() { if (m_player) { #define AVTRANSPORT_UNCHANGED 0 #define AVTRANSPORT_STATE_CHANGED 1 #define AVTRANSPORT_PLAYMODE_CHANGED 2 #define AVTRANSPORT_SLEEPTIMER_CHANGED 4 unsigned signalMask = AVTRANSPORT_UNCHANGED; SONOS::AVTProperty prop = m_player->GetTransportProperty(); setCurrentMeta(prop); emit sourceChanged(); if (prop.TransportState != m_AVTProperty.TransportState) signalMask |= AVTRANSPORT_STATE_CHANGED; if (prop.CurrentPlayMode != m_AVTProperty.CurrentPlayMode) signalMask |= AVTRANSPORT_PLAYMODE_CHANGED; if (prop.r_SleepTimerGeneration != m_AVTProperty.r_SleepTimerGeneration) signalMask |= AVTRANSPORT_SLEEPTIMER_CHANGED; // Set property before emit m_AVTProperty = prop; if (signalMask & AVTRANSPORT_STATE_CHANGED) emit playbackStateChanged(); if (signalMask & AVTRANSPORT_PLAYMODE_CHANGED) emit playModeChanged(); if (signalMask & AVTRANSPORT_SLEEPTIMER_CHANGED) emit sleepTimerChanged(); } }
void Song::stop() { // do not stop/reset things again if we're stopped already if( m_playMode == Mode_None ) { return; } TimeLineWidget * tl = m_playPos[m_playMode].m_timeLine; m_playing = false; m_paused = false; m_recording = true; if( tl != NULL ) { switch( tl->behaviourAtStop() ) { case TimeLineWidget::BackToZero: m_playPos[m_playMode].setTicks( 0 ); m_elapsedMilliSeconds = 0; break; case TimeLineWidget::BackToStart: if( tl->savedPos() >= 0 ) { m_playPos[m_playMode].setTicks( tl->savedPos().getTicks() ); m_elapsedMilliSeconds = ( ( ( tl->savedPos().getTicks() ) * 60 * 1000 / 48 ) / getTempo() ); tl->savePos( -1 ); } break; case TimeLineWidget::KeepStopPosition: default: break; } } else { m_playPos[m_playMode].setTicks( 0 ); m_elapsedMilliSeconds = 0; } m_playPos[m_playMode].setCurrentFrame( 0 ); m_vstSyncController.setPlaybackState( m_exporting ); m_vstSyncController.setAbsolutePosition( m_playPos[m_playMode].getTicks() ); // remove all note-play-handles that are active Engine::mixer()->clear(); m_playMode = Mode_None; emit playbackStateChanged(); }
/*! If \a enabled is true, the item is enabled; otherwise, it is disabled. Item is enabled by default. */ void MpNowPlayingWidgetPrivate::setEnabled( bool enabled ) { if ( enabled ) { connect( mPlaybackData, SIGNAL( playbackStateChanged() ), this, SLOT( setState() ) ); connect( mPlaybackData, SIGNAL( playbackInfoChanged() ), this, SLOT( updateBannerInfo() ) ); setState(); updateBannerInfo(); } else { disconnect( mPlaybackData, SIGNAL( playbackStateChanged() ), this, SLOT( setState() ) ); disconnect( mPlaybackData, SIGNAL( playbackInfoChanged() ), this, SLOT( updateBannerInfo() ) ); } }
Mpris2DBusHandler::Mpris2DBusHandler() : QObject( kapp ) { new Mpris2RootAdaptor( this ); new Mpris2PlayerAdaptor( this ); // amarok extensions: new Mpris2AmarokAppAdaptor( this ); new Mpris2AmarokPlayerAdaptor( this ); QDBusConnection::sessionBus().registerObject( MPRIS2_OBJECT_PATH, this ); connect( The::playlistActions(), SIGNAL( navigatorChanged() ), SLOT( updateTrackProgressionProperties() ) ); // changing the navigator may also affect whether there is a // next or previous track connect( The::playlistActions(), SIGNAL( navigatorChanged() ), SLOT( updatePlaylistProperties() ) ); connect( The::playlist()->qaim(), SIGNAL( rowsInserted(QModelIndex,int,int) ), SLOT( updatePlaylistProperties() ) ); connect( The::playlist()->qaim(), SIGNAL( rowsMoved(QModelIndex,int,int,QModelIndex,int) ), SLOT( updatePlaylistProperties() ) ); connect( The::playlist()->qaim(), SIGNAL( rowsRemoved(QModelIndex,int,int) ), SLOT( updatePlaylistProperties() ) ); connect( qobject_cast<Playlist::ProxyBase*>(The::playlist()->qaim()), SIGNAL( activeTrackChanged(const quint64) ), this, SLOT( playlistActiveTrackChanged(quint64) ) ); EngineController *engine = The::engineController(); connect( engine, SIGNAL( playbackStateChanged() ), this, SLOT( updatePlaybackStatusProperty() ) ); connect( engine, SIGNAL( trackChanged( Meta::TrackPtr ) ), this, SLOT( updatePlaylistProperties() ) ); connect( engine, SIGNAL( trackChanged( Meta::TrackPtr ) ), this, SLOT( updateTrackProperties() ) ); connect( engine, SIGNAL( trackPositionChanged( qint64, bool ) ), this, SLOT( trackPositionChanged( qint64, bool ) ) ); connect( engine, SIGNAL( seekableChanged( bool ) ), this, SLOT( seekableChanged( bool ) ) ); connect( engine, SIGNAL( volumeChanged( int ) ), this, SLOT( volumeChanged( int ) ) ); updateTrackProgressionProperties(); updatePlaybackStatusProperty(); updatePlaylistProperties(); updateTrackProperties(); setPropertyInternal( "Volume", static_cast<double>(The::engineController()->volume()) / 100.0 ); setPropertyInternal( "CanSeek", The::engineController()->phononMediaObject()->isSeekable() ); }
SampleTCO::SampleTCO( Track * _track ) : TrackContentObject( _track ), m_sampleBuffer( new SampleBuffer ), m_isPlaying( false ) { saveJournallingState( false ); setSampleFile( "" ); restoreJournallingState(); // we need to receive bpm-change-events, because then we have to // change length of this TCO connect( Engine::getSong(), SIGNAL( tempoChanged( bpm_t ) ), this, SLOT( updateLength() ), Qt::DirectConnection ); connect( Engine::getSong(), SIGNAL( timeSignatureChanged( int,int ) ), this, SLOT( updateLength() ) ); //care about positionmarker TimeLineWidget * timeLine = Engine::getSong()->getPlayPos( Engine::getSong()->Mode_PlaySong ).m_timeLine; if( timeLine ) { connect( timeLine, SIGNAL( positionMarkerMoved() ), this, SLOT( playbackPositionChanged() ) ); } //playbutton clicked or space key / on Export Song set isPlaying to false connect( Engine::getSong(), SIGNAL( playbackStateChanged() ), this, SLOT( playbackPositionChanged() ), Qt::DirectConnection ); //care about loops connect( Engine::getSong(), SIGNAL( updateSampleTracks() ), this, SLOT( playbackPositionChanged() ), Qt::DirectConnection ); //care about mute TCOs connect( this, SIGNAL( dataChanged() ), this, SLOT( playbackPositionChanged() ) ); //care about mute track connect( getTrack()->getMutedModel(), SIGNAL( dataChanged() ), this, SLOT( playbackPositionChanged() ), Qt::DirectConnection ); //care about TCO position connect( this, SIGNAL( positionChanged() ), this, SLOT( updateTrackTcos() ) ); switch( getTrack()->trackContainer()->type() ) { case TrackContainer::BBContainer: setAutoResize( true ); break; case TrackContainer::SongContainer: // move down default: setAutoResize( false ); break; } updateTrackTcos(); }
void song::togglePause() { if( m_paused == true ) { m_playing = true; m_paused = false; } else { m_playing = false; m_paused = true; } m_vstSyncController.setPlaybackState( m_playing ); emit playbackStateChanged(); }
void song::playBB() { if( isStopped() == false ) { stop(); } m_playMode = Mode_PlayBB; m_playing = true; m_paused = false; m_vstSyncController.setPlaybackState( true ); savePos(); emit playbackStateChanged(); }
void Song::playSong() { m_recording = false; if( isStopped() == false ) { stop(); } m_playMode = Mode_PlaySong; m_playing = true; m_paused = false; m_vstSyncController.setPlaybackState( true ); savePos(); emit playbackStateChanged(); }
void song::playPattern( Pattern* patternToPlay, bool _loop ) { if( isStopped() == false ) { stop(); } m_patternToPlay = patternToPlay; m_loopPattern = _loop; if( m_patternToPlay != NULL ) { m_playMode = Mode_PlayPattern; m_playing = true; m_paused = false; } savePos(); emit playbackStateChanged(); }
void QDeclarativeAudio::_q_statusChanged() { if (m_player->mediaStatus() == QMediaPlayer::EndOfMedia && m_runningCount != 0) { m_runningCount -= 1; m_player->play(); } const QMediaPlayer::MediaStatus oldStatus = m_status; const QMediaPlayer::State lastPlaybackState = m_playbackState; const QMediaPlayer::State state = m_player->state(); m_playbackState = state; m_status = m_player->mediaStatus(); if (m_status != oldStatus) emit statusChanged(); if (lastPlaybackState != state) { if (lastPlaybackState == QMediaPlayer::StoppedState) m_runningCount = m_loopCount - 1; switch (state) { case QMediaPlayer::StoppedState: emit stopped(); break; case QMediaPlayer::PausedState: emit paused(); break; case QMediaPlayer::PlayingState: emit playing(); break; } emit playbackStateChanged(); } }
MainWindow::MainWindow() : m_workspace( NULL ), m_templatesMenu( NULL ), m_recentlyOpenedProjectsMenu( NULL ), m_toolsMenu( NULL ), m_autoSaveTimer( this ), m_viewMenu( NULL ), m_metronomeToggle( 0 ), m_session( Normal ) { setAttribute( Qt::WA_DeleteOnClose ); QWidget * main_widget = new QWidget( this ); QVBoxLayout * vbox = new QVBoxLayout( main_widget ); vbox->setSpacing( 0 ); vbox->setMargin( 0 ); QWidget * w = new QWidget( main_widget ); QHBoxLayout * hbox = new QHBoxLayout( w ); hbox->setSpacing( 0 ); hbox->setMargin( 0 ); SideBar * sideBar = new SideBar( Qt::Vertical, w ); QSplitter * splitter = new QSplitter( Qt::Horizontal, w ); splitter->setChildrenCollapsible( false ); ConfigManager* confMgr = ConfigManager::inst(); emit initProgress(tr("Preparing plugin browser")); sideBar->appendTab( new PluginBrowser( splitter ) ); emit initProgress(tr("Preparing file browsers")); sideBar->appendTab( new FileBrowser( confMgr->userProjectsDir() + "*" + confMgr->factoryProjectsDir(), "*.mmp *.mmpz *.xml *.mid", tr( "My Projects" ), embed::getIconPixmap( "project_file" ).transformed( QTransform().rotate( 90 ) ), splitter, false, true ) ); sideBar->appendTab( new FileBrowser( confMgr->userSamplesDir() + "*" + confMgr->factorySamplesDir(), "*", tr( "My Samples" ), embed::getIconPixmap( "sample_file" ).transformed( QTransform().rotate( 90 ) ), splitter, false, true ) ); sideBar->appendTab( new FileBrowser( confMgr->userPresetsDir() + "*" + confMgr->factoryPresetsDir(), "*.xpf *.cs.xml *.xiz", tr( "My Presets" ), embed::getIconPixmap( "preset_file" ).transformed( QTransform().rotate( 90 ) ), splitter , false, true ) ); sideBar->appendTab( new FileBrowser( QDir::homePath(), "*", tr( "My Home" ), embed::getIconPixmap( "home" ).transformed( QTransform().rotate( 90 ) ), splitter, false, false ) ); QStringList root_paths; QString title = tr( "Root directory" ); bool dirs_as_items = false; #ifdef LMMS_BUILD_APPLE title = tr( "Volumes" ); root_paths += "/Volumes"; #elif defined(LMMS_BUILD_WIN32) title = tr( "My Computer" ); dirs_as_items = true; #endif #if ! defined(LMMS_BUILD_APPLE) QFileInfoList drives = QDir::drives(); for( const QFileInfo & drive : drives ) { root_paths += drive.absolutePath(); } #endif sideBar->appendTab( new FileBrowser( root_paths.join( "*" ), "*", title, embed::getIconPixmap( "computer" ).transformed( QTransform().rotate( 90 ) ), splitter, dirs_as_items) ); m_workspace = new QMdiArea( splitter ); // Load background emit initProgress(tr("Loading background artwork")); QString bgArtwork = ConfigManager::inst()->backgroundArtwork(); QImage bgImage; if( !bgArtwork.isEmpty() ) { bgImage = QImage( bgArtwork ); } if( !bgImage.isNull() ) { m_workspace->setBackground( bgImage ); } else { m_workspace->setBackground( Qt::NoBrush ); } m_workspace->setOption( QMdiArea::DontMaximizeSubWindowOnActivation ); m_workspace->setHorizontalScrollBarPolicy( Qt::ScrollBarAsNeeded ); m_workspace->setVerticalScrollBarPolicy( Qt::ScrollBarAsNeeded ); hbox->addWidget( sideBar ); hbox->addWidget( splitter ); // create global-toolbar at the top of our window m_toolBar = new QWidget( main_widget ); m_toolBar->setObjectName( "mainToolbar" ); m_toolBar->setFixedHeight( 64 ); m_toolBar->move( 0, 0 ); // add layout for organizing quite complex toolbar-layouting m_toolBarLayout = new QGridLayout( m_toolBar/*, 2, 1*/ ); m_toolBarLayout->setMargin( 0 ); m_toolBarLayout->setSpacing( 0 ); vbox->addWidget( m_toolBar ); vbox->addWidget( w ); setCentralWidget( main_widget ); m_updateTimer.start( 1000 / 20, this ); // 20 fps if( !ConfigManager::inst()->value( "ui", "disableautosave" ).toInt() ) { // connect auto save connect(&m_autoSaveTimer, SIGNAL(timeout()), this, SLOT(autoSave())); m_autoSaveInterval = ConfigManager::inst()->value( "ui", "saveinterval" ).toInt() < 1 ? DEFAULT_AUTO_SAVE_INTERVAL : ConfigManager::inst()->value( "ui", "saveinterval" ).toInt(); // The auto save function mustn't run until there is a project // to save or it will run over recover.mmp if you hesitate at the // recover messagebox for a minute. It is now started in main. // See autoSaveTimerReset() in MainWindow.h } connect( Engine::getSong(), SIGNAL( playbackStateChanged() ), this, SLOT( updatePlayPauseIcons() ) ); }