/*
- Copyright (C) 2000 Paul Davis
+ Copyright (C) 2000 Paul Davis
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
#include <time.h>
-#include <pbd/fastlog.h>
-#include <pbd/ringbufferNPT.h>
+#include "pbd/fastlog.h"
+#include "pbd/ringbufferNPT.h"
-#include <ardour/ardour.h>
-#include <ardour/configuration.h>
-#include <ardour/diskstream.h>
-#include <ardour/midi_playlist.h>
-#include <ardour/midi_ring_buffer.h>
-#include <ardour/midi_state_tracker.h>
-#include <ardour/utils.h>
+#include "ardour/ardour.h"
+#include "ardour/diskstream.h"
+#include "ardour/midi_playlist.h"
+#include "ardour/midi_ring_buffer.h"
+#include "ardour/utils.h"
struct tm;
class Session;
class MidiDiskstream : public Diskstream
-{
+{
public:
MidiDiskstream (Session &, const string& name, Diskstream::Flag f = Recordable);
MidiDiskstream (Session &, const XMLNode&);
float playback_buffer_load() const;
float capture_buffer_load() const;
-
- void get_playback(MidiBuffer& dst, nframes_t start, nframes_t end, nframes_t offset);
+
+ void get_playback(MidiBuffer& dst, nframes_t start, nframes_t end);
void set_record_enabled (bool yn);
/* stateful */
XMLNode& get_state(void);
- int set_state(const XMLNode& node);
+ int set_state(const XMLNode&, int version);
void monitor_input (bool);
- boost::shared_ptr<SMFSource> write_source () { return _write_source; }
-
+ MidiRingBuffer<nframes_t>* playback_buffer () { return _playback_buf; }
+ MidiRingBuffer<nframes_t>* capture_buffer () { return _capture_buf; }
+ boost::shared_ptr<SMFSource> write_source () { return _write_source; }
+
int set_destructive (bool yn); // doom!
-
+
void set_note_mode (NoteMode m);
-
- uint16_t get_channel_mask() {
+
+ uint16_t get_channel_mask() {
uint16_t playback_mask = _playback_buf->get_channel_mask();
#ifndef NDEBUG
uint16_t capture_mask = _capture_buf->get_channel_mask();
}
void set_channel_mode(ChannelMode mode, uint16_t mask) {
- _playback_buf->set_channel_mode(mode, mask);
- _capture_buf->set_channel_mode(mode, mask);
+ _playback_buf->set_channel_mode(mode, mask);
+ _capture_buf->set_channel_mode(mode, mask);
}
-
+
ChannelMode get_channel_mode() {
ChannelMode playback_mode = _playback_buf->get_channel_mode();
#ifndef NDEBUG
protected:
friend class Session;
+ friend class Butler;
/* the Session is the only point of access for these
because they require that the Session is "inactive"
void non_realtime_input_change ();
void non_realtime_locate (nframes_t location);
- static void set_readahed_frames( nframes_t frames_ahead ) { midi_readahead = frames_ahead; }
+ static void set_readahead_frames(nframes_t frames_ahead) { midi_readahead = frames_ahead; }
protected:
int seek (nframes_t which_sample, bool complete_refill = false);
protected:
friend class MidiTrack;
- int process (nframes_t transport_frame, nframes_t nframes, nframes_t offset, bool can_record, bool rec_monitors_input);
+ int process (nframes_t transport_frame, nframes_t nframes, bool can_record, bool rec_monitors_input);
bool commit (nframes_t nframes);
static nframes_t midi_readahead;
/* The two central butler operations */
int do_flush (RunContext context, bool force = false);
int do_refill ();
-
+
int do_refill_with_alloc();
int read (nframes_t& start, nframes_t cnt, bool reversed);
int use_pending_capture_data (XMLNode& node);
void get_input_sources ();
- void check_record_status (nframes_t transport_frame, nframes_t nframes, bool can_record);
void set_align_style_from_io();
-
+
void engage_record_enable ();
void disengage_record_enable ();
- void check_note_onoffs(Evoral::MIDIEvent<MidiBuffer::TimeType> &event);
- void emit_pending_note_offs(MidiBuffer &dst, nframes_t time);
-
- MidiRingBuffer<MidiBuffer::TimeType>* _playback_buf;
- MidiRingBuffer<MidiBuffer::TimeType>* _capture_buf;
- MidiPort* _source_port;
- boost::shared_ptr<SMFSource> _write_source;
- nframes_t _last_flush_frame;
- NoteMode _note_mode;
- MidiStateTracker _midistate_tracker;
- volatile gint _frames_written_to_ringbuffer;
- volatile gint _frames_read_from_ringbuffer;
+
+ MidiRingBuffer<nframes_t>* _playback_buf;
+ MidiRingBuffer<nframes_t>* _capture_buf;
+ MidiPort* _source_port;
+ boost::shared_ptr<SMFSource> _write_source;
+ nframes_t _last_flush_frame;
+ NoteMode _note_mode;
+ volatile gint _frames_written_to_ringbuffer;
+ volatile gint _frames_read_from_ringbuffer;
};
}; /* namespace ARDOUR */