Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

When Jack is used, start / stop jack transport #4412

Closed
wants to merge 4 commits into from
Closed
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -380,7 +380,7 @@ IF(WANT_JACK)
SET(STATUS_JACK "OK (weak linking enabled)")
SET(JACK_INCLUDE_DIRS "")
# use dlsym instead
SET(JACK_LIBRARIES ${CMAKE_DL_LIBS})
SET(JACK_LIBRARIES ${CMAKE_DL_LIBS} jackserver)
ELSE()
SET(STATUS_JACK "OK")
ENDIF()
Expand Down
2 changes: 2 additions & 0 deletions include/AudioJack.h
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,8 @@ class AudioJack : public QObject, public AudioDevice
"JACK (JACK Audio Connection Kit)" );
}

void syncTransport( bool playing );
void repositionTransport(jack_position_t pos);

class setupWidget : public AudioDeviceSetupWidget
{
Expand Down
Binary file added include/AudioJack.h.gch
Binary file not shown.
2 changes: 2 additions & 0 deletions include/Song.h
Original file line number Diff line number Diff line change
Expand Up @@ -337,6 +337,8 @@ private slots:

void updateFramesPerTick();

void onPlaybackStateChanged();



private:
Expand Down
15 changes: 14 additions & 1 deletion src/core/Song.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@
*
*/



#include "Song.h"
#include <QTextStream>
#include <QCoreApplication>
Expand All @@ -32,6 +34,7 @@

#include <functional>

#include "AudioJack.h"
#include "AutomationTrack.h"
#include "AutomationEditor.h"
#include "BBEditor.h"
Expand Down Expand Up @@ -105,6 +108,8 @@ Song::Song() :
/* connect( &m_masterPitchModel, SIGNAL( dataChanged() ),
this, SLOT( masterPitchChanged() ) );*/

connect( this, SIGNAL( playbackStateChanged() ), this, SLOT( onPlaybackStateChanged() ) );

qRegisterMetaType<Note>( "Note" );
setType( SongContainer );
}
Expand All @@ -119,7 +124,15 @@ Song::~Song()
}



void Song::onPlaybackStateChanged()
{
#ifdef LMMS_HAVE_JACK
AudioJack *device = dynamic_cast<AudioJack*>(Engine::mixer()->audioDev());
if (device) {
device->syncTransport(m_playing);
}
#endif
}

void Song::masterVolumeChanged()
{
Expand Down
16 changes: 16 additions & 0 deletions src/core/audio/AudioJack.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,22 @@ AudioJack::~AudioJack()



void AudioJack::syncTransport( bool playing )
{
if (playing) {
jack_transport_start( m_client );
} else {
jack_transport_stop( m_client );
}
}

void AudioJack::repositionTransport(jack_position_t pos)
{
jack_transport_reposition(m_client, &pos);
}



void AudioJack::restartAfterZombified()
{
if( initJackClient() )
Expand Down
24 changes: 22 additions & 2 deletions src/gui/editors/SongEditor.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,10 @@
#include <QPainter>

#include "AutomatableSlider.h"
#ifdef LMMS_HAVE_JACK
#include "AudioJack.h"
#include <jack/jack.h>
#endif
#include "ComboBox.h"
#include "ConfigManager.h"
#include "CPULoadWidget.h"
Expand Down Expand Up @@ -551,10 +555,26 @@ static inline void animateScroll( QScrollBar *scrollBar, int newVal, bool smooth
}




void SongEditor::updatePosition( const MidiTime & t )
{
#ifdef LMMS_HAVE_JACK
AudioJack *device = dynamic_cast<AudioJack*>(Engine::mixer()->audioDev());
if (device && m_song->playMode() == Song::PlayModes::Mode_None) {
jack_position_t pos;
pos.valid = jack_position_bits_t::JackPositionBBT;
pos.bar = m_song->currentTact() + 1;
pos.beat = m_song->getBeat() + 1;
pos.tick = m_song->getBeatTicks() + 1;
pos.bar_start_tick = m_song->getTicks();
pos.beats_per_bar = m_song->getTimeSigModel().numeratorModel().value();
pos.beat_type = m_song->getTimeSigModel().denominatorModel().value();
pos.ticks_per_beat = m_song->getPlayPos().ticksPerBeat(m_song->getTimeSigModel());
pos.beats_per_minute = m_song->getTempo();
pos.frame = m_song->currentFrame();
device->repositionTransport(pos);
}
#endif

int widgetWidth, trackOpWidth;
if( ConfigManager::inst()->value( "ui", "compacttrackbuttons" ).toInt() )
{
Expand Down