summaryrefslogtreecommitdiffstats
path: root/src/sequencer/RosegardenSequencerIface.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/sequencer/RosegardenSequencerIface.h')
-rw-r--r--src/sequencer/RosegardenSequencerIface.h364
1 files changed, 364 insertions, 0 deletions
diff --git a/src/sequencer/RosegardenSequencerIface.h b/src/sequencer/RosegardenSequencerIface.h
new file mode 100644
index 0000000..47c0215
--- /dev/null
+++ b/src/sequencer/RosegardenSequencerIface.h
@@ -0,0 +1,364 @@
+/* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
+
+/*
+ Rosegarden
+ A MIDI and audio sequencer and musical notation editor.
+
+ This program is Copyright 2000-2008
+ Guillaume Laurent <[email protected]>,
+ Chris Cannam <[email protected]>,
+ Richard Bown <[email protected]>
+
+ The moral rights of Guillaume Laurent, Chris Cannam, and Richard
+ Bown to claim authorship of this work have been asserted.
+
+ Other copyrights also apply to some parts of this work. Please
+ see the AUTHORS file and individual file headers for details.
+
+ 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 the Free Software Foundation; either version 2 of the
+ License, or (at your option) any later version. See the file
+ COPYING included with this distribution for more information.
+*/
+
+#ifndef _ROSEGARDENSEQUENCERIFACE_H_
+#define _ROSEGARDENSEQUENCERIFACE_H_
+
+#include <dcopobject.h>
+// #include <qvaluevector.h>
+// #include <qpair.h>
+
+#include "gui/application/RosegardenDCOP.h"
+
+#include "base/Event.h"
+#include "sound/MappedComposition.h"
+#include "sound/MappedEvent.h"
+#include "base/Instrument.h"
+#include "sound/MappedDevice.h"
+#include "sound/MappedRealTime.h"
+#include "sound/MappedStudio.h"
+#include "sound/MappedCommon.h"
+
+namespace Rosegarden {
+
+class RosegardenSequencerIface : virtual public DCOPObject
+{
+ K_DCOP
+public:
+ k_dcop:
+
+ // close the sequencer
+ //
+ virtual void quit() = 0;
+
+
+
+ // play from a given time with given parameters
+ //
+ virtual int play(long timeSec,
+ long timeNsec,
+ long readAheadSec,
+ long readAheadNsec,
+ long audioMixSec,
+ long audioMixNsec,
+ long audioReadSec,
+ long audioReadNsec,
+ long audioWriteSec,
+ long audioWriteNsec,
+ long smallFileSize) = 0;
+
+ // record from a given time with given parameters
+ //
+ virtual int record(long timeSec,
+ long timeNsec,
+ long readAheadSec,
+ long readAheadNsec,
+ long audioMixSec,
+ long audioMixNsec,
+ long audioReadSec,
+ long audioReadNsec,
+ long audioWriteSec,
+ long audioWriteNsec,
+ long smallFileSize,
+ long recordMode) = 0;
+
+ // stop the sequencer
+ //
+ virtual ASYNC stop() = 0;
+
+ // punch out from recording to playback
+ //
+ virtual int punchOut() = 0;
+
+ // Set the sequencer to a given time
+ //
+ virtual void jumpTo(long posSec, long posNsec) = 0;
+
+ // Set a loop on the sequencer
+ //
+ virtual void setLoop(long loopStartSec,
+ long loopStartNsec,
+ long loopEndSec,
+ long loopEndNsec) = 0;
+
+ // Get the status of the Sequencer
+ //
+ virtual unsigned int getSoundDriverStatus(const QString &guiVersion) = 0;
+
+ // Add and delete audio files on the Sequencer
+ //
+ virtual int addAudioFile(const QString &fileName, int id) = 0;
+ virtual int removeAudioFile(int id) = 0;
+ virtual void clearAllAudioFiles() = 0;
+
+ // Single set function as the MappedInstrument is so lightweight.
+ // Any mods on the GUI are sent only through this method.
+ //
+ virtual void setMappedInstrument(int type,
+ unsigned char channel,
+ unsigned int id) = 0;
+
+ // The GUI can use this method to process an immediate selection
+ // of MappedEvents (Program Changes, SysExs, async Events etc).
+ //
+ virtual void processSequencerSlice(MappedComposition mC) = 0;
+
+
+ // Horrible ugly ugly ugly interface for single MappedEvents
+ // just until we implement the proper MappedEvent interface
+ //
+ virtual void processMappedEvent(unsigned int id,
+ int type,
+ unsigned char pitch,
+ unsigned char velocity,
+ long absTimeSec,
+ long absTimeNsec,
+ long durationSec,
+ long durationNsec,
+ long audioStartMarkerSec,
+ long audioStartMarkerNsec) = 0;
+
+ // The proper implementation
+ //
+ virtual void processMappedEvent(MappedEvent mE) = 0;
+
+ // Return device id following last existing one -- you can treat
+ // this as "number of devices" but there might be some holes if
+ // devices were deleted, which you will recognise because
+ // getMappedDevice(id) will return a device with id NO_DEVICE
+ //
+ virtual unsigned int getDevices() = 0;
+
+ // Return device by number
+ //
+ virtual MappedDevice getMappedDevice(unsigned int id) = 0;
+
+ // Query whether the driver implements device reconnection.
+ // Returns a non-zero value if the addDevice, removeDevice,
+ // getConnections, getConnection and setConnection methods
+ // may be used with devices of the given type.
+ //
+ virtual int canReconnect(int deviceType) = 0;
+
+ // Create a device of the given type and direction (corresponding
+ // to MidiDevice::DeviceDirection enum) and return its id.
+ // The device will have no connection by default. Direction is
+ // currently ignored for non-MIDI devices.
+ // Do not use this unless canReconnect(type) returned true.
+ //
+ virtual unsigned int addDevice(int type, unsigned int direction) = 0;
+
+ // Remove the device of the given id.
+ // Ignored if driver does not permit changing the number of devices
+ // (i.e. if canReconnect(type) would return false when given the
+ // type of the supplied device).
+ //
+ virtual void removeDevice(unsigned int id) = 0;
+
+ // Rename the given device.
+ // Ignored if the driver does not permit this operation.
+ //
+ virtual void renameDevice(unsigned int id, QString name) = 0;
+
+ // Return the number of permissible connections for a device of
+ // the given type and direction (corresponding to MidiDevice::
+ // DeviceDirection enum). Direction is ignored for non-MIDI devices.
+ // Returns zero if devices of this type are non-reconnectable
+ // (i.e. if canReconnect(type) would return false).
+ //
+ virtual unsigned int getConnections(int type, unsigned int direction) = 0;
+
+ // Return one of the set of permissible connections for a device of
+ // the given type and direction (corresponding to MidiDevice::
+ // DeviceDirection enum). Direction is ignored for non-MIDI devices.
+ // Returns the empty string for invalid parameters.
+ //
+ virtual QString getConnection(int type,
+ unsigned int direction,
+ unsigned int connectionNo) = 0;
+
+ // Reconnect a particular device.
+ // Ignored if driver does not permit reconnections or the connection
+ // is not one of the permissible set for that device.
+ //
+ virtual void setConnection(unsigned int deviceId, QString connection) = 0;
+
+ // Reconnect a device to a particular connection or to the closest
+ // thing to that connection currently available (using some heuristic).
+ // Ignored if driver does not permit reconnections.
+ //
+ virtual void setPlausibleConnection(unsigned int deviceId,
+ QString idealConnection) = 0;
+
+ // Return the number of different timers we are capable of
+ // sychronising against. This may return 0 if the driver has no
+ // ability to change the current timer.
+ //
+ virtual unsigned int getTimers() = 0;
+
+ // Return the name of a timer from the available set (where
+ // n is between 0 and the return value from getTimers() - 1).
+ //
+ virtual QString getTimer(unsigned int n) = 0;
+
+ // Return the name of the timer we are currently synchronising
+ // against.
+ //
+ virtual QString getCurrentTimer() = 0;
+
+ // Set the timer we are currently synchronising against.
+ // Invalid arguments are simply ignored.
+ //
+ virtual void setCurrentTimer(QString timer) = 0;
+
+ virtual void setLowLatencyMode(bool lowLatMode) = 0;
+
+ // Fetch audio play latencies
+ //
+ virtual MappedRealTime getAudioPlayLatency() = 0;
+ virtual MappedRealTime getAudioRecordLatency() = 0;
+
+ // Set a property on a MappedObject
+ //
+ virtual void setMappedProperty(int id,
+ const QString &property,
+ float value) = 0;
+
+ // Set many properties on many MappedObjects
+ //
+ virtual void setMappedProperties(const MappedObjectIdList &ids,
+ const MappedObjectPropertyList &properties,
+ const MappedObjectValueList &values) = 0;
+
+ // Set a string property on a MappedObject
+ //
+ virtual void setMappedProperty(int id,
+ const QString &property,
+ const QString &value) = 0;
+
+ // Set a MappedObject to a property list
+ //
+ virtual void setMappedPropertyList(
+ int id,
+ const QString &property,
+ const MappedObjectPropertyList &values) = 0;
+
+ // Get a mapped object id for a object type
+ //
+ virtual int getMappedObjectId(int type) = 0;
+
+ // Get a list of properties of a certain type from an object
+ //
+ virtual std::vector<QString> getPropertyList(int id,
+ const QString &property) = 0;
+
+ // Get a list of available plugins
+ //
+ virtual std::vector<QString> getPluginInformation() = 0;
+
+ // Nasty hack: program name/number mappings are one thing that
+ // mapped object properties can't cope with
+ //
+ virtual QString getPluginProgram(int mappedId, int bank, int program) = 0;
+
+ // Nastier hack: return value is bank << 16 + program
+ //
+ virtual unsigned long getPluginProgram(int mappedId, const QString &name) = 0;
+
+ // Cheat - we can't use a call (getPropertyList) during playback
+ // so we use this method to set port N on plugin X.
+ //
+ virtual void setMappedPort(int pluginIn,
+ unsigned long id,
+ float value) = 0;
+
+ virtual float getMappedPort(int pluginIn,
+ unsigned long id) = 0;
+
+ // Create a (transient, writeable) object
+ //
+ virtual int createMappedObject(int type) = 0;
+
+ // Destroy an object (returns a bool but for KDE2 DCOP compat we
+ // use an int of course).
+ //
+ virtual int destroyMappedObject(int id) = 0;
+
+ // Connect two objects
+ //
+ virtual void connectMappedObjects(int id1, int id2) = 0;
+
+ // Disconnect two objects
+ //
+ virtual void disconnectMappedObjects(int id1, int id2) = 0;
+
+ // Disconnect an object from everything
+ //
+ virtual void disconnectMappedObject(int id) = 0;
+
+ // Driver sample rate
+ //
+ virtual unsigned int getSampleRate() const = 0;
+
+ // Initialise/Reinitialise the studio back down to read only objects
+ // and set to defaults.
+ //
+ virtual void clearStudio() = 0;
+
+ // Allow the GUI to tell the sequence the duration of a quarter
+ // note when the TEMPO changes - this is to allow the sequencer
+ // to generate MIDI clock (at 24 PPQN).
+ //
+ virtual void setQuarterNoteLength(long timeSec, long timeNsec) = 0;
+
+ // Return a (potentially lengthy) human-readable status log
+ //
+ virtual QString getStatusLog() = 0;
+
+ // Debug stuff, to check MmappedSegment::iterator
+ virtual void dumpFirstSegment() = 0;
+
+ /// Remap a segment while playing
+ virtual void remapSegment(const QString& filename, size_t newSize) = 0;
+
+ /// Add a segment while playing
+ virtual void addSegment(const QString& filename) = 0;
+
+ /// Delete a segment while playing
+ virtual void deleteSegment(const QString& filename) = 0;
+
+ /// Close all mmapped segments
+ virtual void closeAllSegments() = 0;
+
+ /** Update mute (etc) statuses while playing. The sequencer handles
+ this automatically (with no need for this call) for MIDI events,
+ but it needs to be prodded when an already-playing audio segment
+ drops in or out.
+ */
+ virtual void remapTracks() = 0;
+};
+
+}
+
+#endif // _ROSEGARDENSEQUENCERIFACE_H_