lp://staging/~burkhard/harmonyseq/jacksupport

Created by Burkhard Ritter and last modified
Get this branch:
bzr branch lp://staging/~burkhard/harmonyseq/jacksupport
Only Burkhard Ritter can upload to this branch. If you are Burkhard Ritter please log in for upload directions.

Branch merges

Related bugs

Related blueprints

Branch information

Owner:
Burkhard Ritter
Project:
harmonySEQ
Status:
Development

Recent revisions

761. By Burkhard Ritter

More signals. Code cleanup.

* More signals for communication between Jack thread and GUI thread: transport
  start/stop and tempo changes are now handled via signals.
* Renamed queues to "engineQueue" (signals to the Jack thread) and "guiQueue"
  (signals to the GUI).
* Renamed global "jack" object to "engine". The idea is that we can have
  different engines (Jack, Alsa) with the same interface, making it easier to
  use different engines / Midi backends.
* Removed global "tempo".
* TODO: Tempo does not seem to get saved to the file. Quite generally, I have
  to figure out how my Jack implementation / engine works best together with
  loading data from a file and saving data to a file.

760. By Burkhard Ritter

Work on decoupling GUI and Jack.

* New signal queue "toJackQueue". The idea is that the Jack thread "owns" the
  sequencer / pattern data structure and that only the Jack thread makes
  changes to this data structure (as far as possible within the constraints of
  the Jack realtime thread). Therefore, changes initiated in the GUI are
  communicated to the Jack thread via a signal queue ("toJackQueue"). When
  something changes, the Jack thread communicates these changes back to the GUI
  via another signal queue ("signalqueue", name should probably be changed).
  Hence, the communication between GUI and Jack is completely asynchronous.
  Ideally, the GUI only every reads the data structure (sequencers, patterns)
  and never changes it directly.
* Implemented a couple of signals and related functionality for communication
  between GUI and Jack. E.g. switch sequencer on/off, change active pattern,
  change length of a pattern.
* However, more signals need to be implemented (importantly: changing
  patterns).
* Changed scheduling of notes in Jack thread. As the Jack thread is now the
  sole owner of the sequencers / patterns its easier for it to keep track of
  its internal state, which simplifies things. Now only sequencers that are
  "on" are actually sequenced. Also fixed a related critical crashing bug
  (before, in some cases jack_i would not be updated properly, leading to
  segfaults).
* Jack midi tempo can now be changed via GUI.
* There are still a few bigger problems: Changing the length of sequencers
  leads to them being out of sync. When a lot of diode events are generated
  very fast, the GUI gets updated very slowly.

759. By Burkhard Ritter

Encapsulated access to pattern vector.

* all access to the pattern vector is now through methods of the Sequencer
  class, which acts as a pattern container
* use shared_ptr to store references to patterns (AtomContainer)

758. By Burkhard Ritter

Play once and diode events supported in Jack midi.

* Moved sequencer related Jack functionality from JackMidi to Sequencer.
* Mostly unified Sequencer and NoteOffSequencer interfaces. (They are still
  completely separate classes, but the interface is now almost the same.)
* Disabled Alsa Midi for now.
* Implemented play once functionality (now implemented within Sequencer class).
* I believe the play once behaviour is a little bit different now, but it is
  very usable.
* Deprecated SetPlayOncePhase(int) in favour of the easier PlayOnce().
* Implemented DiodeEvents via an ActivateDiode signal in the signal queue.
  Again, behaviour has subtly changed, but it seems very usable. (Diodes are
  now drawn with the GUI / signal queue refresh rate, and are therefore not
  exactly on time for very fast sequences.)

757. By Burkhard Ritter

Control sequencer support in Jack midi.

* Control sequencers now work with Jack midi.
* Only flat slope style is supported for now. Linear slope is probably best
  implemented in the controller class itself.
* Fixed a number of issues with note-on and note-off scheduling.
* Notably, the play-once functionality is still missing from Jack midi playback
  support. Otherwise we are slowly getting there (for the playback part).

756. By Burkhard Ritter

Basic note-off support in Jack midi playback.

* Note-off events are working on a basic level.
* There are still quite a number of open issues (TODOs in JackMidi.cpp).
* Note-off events are scheduled via NoteOffSequencer.
* NoteOffSequencer uses a fixed-size circular list to avoid memory allocations
  in Jack thread.
* Some unit tests for NoteOffSequencer, but otherwise note-off functionality is
  not really tested.

755. By Burkhard Ritter

Very primitive Jack playback support.

* basic playback works: note events from sequences are scheduled at the correct
  time
* sequence on/off works
* only schedules note-on events for now
* sequences should not be modified in GUI while playing; this would not be
  handled correctly at the moment

754. By Burkhard Ritter

Started disentangling GUI from Midi event processing.

* Class SignalQueue, used to send "signals" from Jack/Midi/OSC thread to the
  GUI thread
* The GUI thread then processes these signals (implemented in
  MainWindow::HandleSignalsFromQueue, right now with a frequency of 10 fps)
* This way we don't need to ever call GUI functions from outside the GUI thread
  (in theory), and hence need not use gdk_threads_lock(), etc
* Only started the disentanglement; Midi input and all events processing still
  call GUI directly
* Jack transport implementation should now be real-time safe
* Diode display does not work properly on Sync right now
* Started using C++11

753. By Burkhard Ritter

Basic Jack transport support.

* not thoroughly tested, but start and stop basically seems to work
* not realtime-safe for now, causes occasional xruns

752. By Launchpad Translations on behalf of rafalcieslak256

Launchpad automatic translations update.

Branch metadata

Branch format:
Branch format 7
Repository format:
Bazaar repository format 2a (needs bzr 1.16 or later)
Stacked on:
lp://staging/harmonyseq
This branch contains Public information 
Everyone can see this information.