diff options
Diffstat (limited to 'attic/muse2-oom/muse2/muse/song.h')
-rw-r--r-- | attic/muse2-oom/muse2/muse/song.h | 429 |
1 files changed, 0 insertions, 429 deletions
diff --git a/attic/muse2-oom/muse2/muse/song.h b/attic/muse2-oom/muse2/muse/song.h deleted file mode 100644 index 9d0e1f86..00000000 --- a/attic/muse2-oom/muse2/muse/song.h +++ /dev/null @@ -1,429 +0,0 @@ -//========================================================= -// MusE -// Linux Music Editor -// $Id: song.h,v 1.35.2.25 2009/12/15 03:39:58 terminator356 Exp $ -// -// (C) Copyright 1999/2000 Werner Schweer (ws@seh.de) -//========================================================= - -#ifndef __SONG_H__ -#define __SONG_H__ - -#include <QObject> -#include <QStringList> - -#include "pos.h" -#include "globaldefs.h" -#include "tempo.h" -///#include "sig.h" -#include "al/sig.h" -#include "undo.h" -#include "track.h" -#include "trackview.h" - -class QAction; -class QFont; -class QMenu; - -class SynthI; -struct MidiMsg; -struct AudioMsg; -class Event; -class Xml; -class Sequencer; -class Track; -class Part; -class MidiPart; -class PartList; -class MPEventList; -class EventList; -class MarkerList; -class Marker; -class SNode; - -class MidiPort; -class MidiDevice; -class AudioPort; -class AudioDevice; - -#define SC_TRACK_INSERTED 1 -#define SC_TRACK_REMOVED 2 -#define SC_TRACK_MODIFIED 4 -#define SC_PART_INSERTED 8 -#define SC_PART_REMOVED 0x10 -#define SC_PART_MODIFIED 0x20 -#define SC_EVENT_INSERTED 0x40 -#define SC_EVENT_REMOVED 0x80 -#define SC_EVENT_MODIFIED 0x100 -#define SC_SIG 0x200 // timing signature -#define SC_TEMPO 0x400 // tempo map changed -#define SC_MASTER 0x800 // master flag changed -#define SC_SELECTION 0x1000 -#define SC_MIDI_CONTROLLER 0x2000 // must update midi mixer -#define SC_MUTE 0x4000 -#define SC_SOLO 0x8000 -#define SC_RECFLAG 0x10000 -#define SC_ROUTE 0x20000 -#define SC_CHANNELS 0x40000 -#define SC_CONFIG 0x80000 // midiPort-midiDevice -#define SC_DRUMMAP 0x100000 // must update drumeditor -#define SC_MIXER_VOLUME 0x200000 -#define SC_MIXER_PAN 0x400000 -#define SC_AUTOMATION 0x800000 -#define SC_AUX 0x1000000 // mixer aux changed -#define SC_RACK 0x2000000 // mixer rack changed -#define SC_CLIP_MODIFIED 0x4000000 -#define SC_MIDI_CONTROLLER_ADD 0x8000000 // a hardware midi controller was added or deleted -#define SC_MIDI_TRACK_PROP 0x10000000 // a midi track's properties changed (channel, compression etc) -#define SC_SONG_TYPE 0x20000000 // the midi song type (mtype) changed -#define SC_TRACKVIEW_INSERTED 0x30000000 -#define SC_TRACKVIEW_REMOVED 0x40000000 -#define SC_TRACKVIEW_MODIFIED 0x50000000 - -#define REC_NOTE_FIFO_SIZE 16 - -//--------------------------------------------------------- -// Song -//--------------------------------------------------------- - -class Song : public QObject { - Q_OBJECT - - public: - enum POS { CPOS = 0, LPOS, RPOS }; - enum FollowMode { NO, JUMP, CONTINUOUS }; - enum { REC_OVERDUP, REC_REPLACE }; - enum { CYCLE_NORMAL, CYCLE_MIX, CYCLE_REPLACE }; - enum { MARKER_CUR, MARKER_ADD, MARKER_REMOVE, MARKER_NAME, - MARKER_TICK, MARKER_LOCK }; - - private: - // fifo for note-on events - // - this events are read by the heart beat interrupt - // - used for single step recording in midi editors - - int recNoteFifo[REC_NOTE_FIFO_SIZE]; - volatile int noteFifoSize; - int noteFifoWindex; - int noteFifoRindex; - - int updateFlags; - - TrackList _tracks; // tracklist as seen by arranger - TrackViewList _tviews; // trackviewlist as seen by arranger - MidiTrackList _midis; - WaveTrackList _waves; - InputList _inputs; // audio input ports - OutputList _outputs; // audio output ports - GroupList _groups; // mixer groups - AuxList _auxs; // aux sends - SynthIList _synthIs; - - UndoList* undoList; - UndoList* redoList; - Pos pos[3]; - Pos _vcpos; // virtual CPOS (locate in progress) - MarkerList* _markerList; - - bool _masterFlag; - bool loopFlag; - bool punchinFlag; - bool punchoutFlag; - bool recordFlag; - bool soloFlag; - enum MType _mtype; - int _recMode; - int _cycleMode; - bool _click; - bool _quantize; - int _arrangerRaster; // Used for audio rec new part snapping. Set by Arranger snap combo box. - unsigned _len; // song len in ticks - FollowMode _follow; - int _globalPitchShift; - void readMarker(Xml&); - - QString songInfoStr; // contains user supplied song information, stored in song file. - QStringList deliveredScriptNames; - QStringList userScriptNames; - - public: - Song(const char* name = 0); - ~Song(); - - void putEvent(int pv); - void endMsgCmd(); - void processMsg(AudioMsg* msg); - - void setMType(MType t); - MType mtype() const { return _mtype; } - - void setFollow(FollowMode m) { _follow = m; } - FollowMode follow() const { return _follow; } - - bool dirty; - WaveTrack* bounceTrack; - AudioOutput* bounceOutput; - void updatePos(); - - void read(Xml&); - void write(int, Xml&) const; - void writeFont(int level, Xml& xml, const char* name, - const QFont& font) const; - QFont readFont(Xml& xml, const char* name); - QString getSongInfo() { return songInfoStr; } - void setSongInfo(QString info) { songInfoStr = info; } - - void clear(bool signal); - void update(int flags = -1); - void cleanupForQuit(); - - int globalPitchShift() const { return _globalPitchShift; } - void setGlobalPitchShift(int val) { _globalPitchShift = val; } - - //----------------------------------------- - // Marker - //----------------------------------------- - - MarkerList* marker() const { return _markerList; } - Marker* addMarker(const QString& s, int t, bool lck); - Marker* getMarkerAt(int t); - void removeMarker(Marker*); - Marker* setMarkerName(Marker*, const QString&); - Marker* setMarkerTick(Marker*, int); - Marker* setMarkerLock(Marker*, bool); - void setMarkerCurrent(Marker* m, bool f); - - //----------------------------------------- - // transport - //----------------------------------------- - - void setPos(int, const Pos&, bool sig = true, bool isSeek = true, - bool adjustScrollbar = false); - const Pos& cPos() const { return pos[0]; } - const Pos& lPos() const { return pos[1]; } - const Pos& rPos() const { return pos[2]; } - unsigned cpos() const { return pos[0].tick(); } - unsigned vcpos() const { return _vcpos.tick(); } - const Pos& vcPos() const { return _vcpos; } - unsigned lpos() const { return pos[1].tick(); } - unsigned rpos() const { return pos[2].tick(); } - - bool loop() const { return loopFlag; } - bool record() const { return recordFlag; } - bool punchin() const { return punchinFlag; } - bool punchout() const { return punchoutFlag; } - bool masterFlag() const { return _masterFlag; } - void setRecMode(int val) { _recMode = val; } - int recMode() const { return _recMode; } - void setCycleMode(int val) { _cycleMode = val; } - int cycleMode() const { return _cycleMode; } - bool click() const { return _click; } - bool quantize() const { return _quantize; } - void setStopPlay(bool); - void stopRolling(); - void abortRolling(); - - //----------------------------------------- - // access tempomap/sigmap (Mastertrack) - //----------------------------------------- - - unsigned len() const { return _len; } - void setLen(unsigned l); // set songlen in ticks - int roundUpBar(int tick) const; - int roundUpBeat(int tick) const; - int roundDownBar(int tick) const; - void initLen(); - void tempoChanged(); - - //----------------------------------------- - // event manipulations - //----------------------------------------- - - //void cmdAddRecordedWave(WaveTrack* track, const Pos&, const Pos&); - void cmdAddRecordedWave(WaveTrack* track, Pos, Pos); - void cmdAddRecordedEvents(MidiTrack*, EventList*, unsigned); - bool addEvent(Event&, Part*); - void changeEvent(Event&, Event&, Part*); - void deleteEvent(Event&, Part*); - void cmdChangeWave(QString original, QString tmpfile, unsigned sx, unsigned ex); - void remapPortDrumCtrlEvents(int mapidx, int newnote, int newchan, int newport); - void changeAllPortDrumCtrlEvents(bool add, bool drumonly = false); - - //----------------------------------------- - // part manipulations - //----------------------------------------- - - void cmdResizePart(Track* t, Part* p, unsigned int size); - void cmdSplitPart(Track* t, Part* p, int tick); - void cmdGluePart(Track* t, Part* p); - - void addPart(Part* part); - void removePart(Part* part); - void changePart(Part*, Part*); - PartList* getSelectedMidiParts() const; - PartList* getSelectedWaveParts() const; - bool msgRemoveParts(); - - //void cmdChangePart(Part* oldPart, Part* newPart); - void cmdChangePart(Part* oldPart, Part* newPart, bool doCtrls, bool doClones); - void cmdRemovePart(Part* part); - void cmdAddPart(Part* part); - int arrangerRaster() { return _arrangerRaster; } // Used by Song::cmdAddRecordedWave to snap new wave parts - void setArrangerRaster(int r) { _arrangerRaster = r; } // Used by Arranger snap combo box - - //----------------------------------------- - // track manipulations - //----------------------------------------- - - TrackList* tracks() { return &_tracks; } - MidiTrackList* midis() { return &_midis; } - WaveTrackList* waves() { return &_waves; } - InputList* inputs() { return &_inputs; } - OutputList* outputs() { return &_outputs; } - GroupList* groups() { return &_groups; } - AuxList* auxs() { return &_auxs; } - SynthIList* syntis() { return &_synthIs; } - - void cmdRemoveTrack(Track* track); - void removeTrack0(Track* track); - void removeTrack1(Track* track); - void removeTrack2(Track* track); - void removeTrack3(Track* track); - void removeMarkedTracks(); - void changeTrack(Track* oldTrack, Track* newTrack); - MidiTrack* findTrack(const Part* part) const; - Track* findTrack(const QString& name) const; - void swapTracks(int i1, int i2); - void setChannelMute(int channel, bool flag); - void setRecordFlag(Track*, bool); - void insertTrack0(Track*, int idx); - void insertTrack1(Track*, int idx); - void insertTrack2(Track*, int idx); - void insertTrack3(Track*, int idx); - void deselectTracks(); - void readRoute(Xml& xml); - void recordEvent(MidiTrack*, Event&); - void msgInsertTrack(Track* track, int idx, bool u = true); - void clearRecAutomation(bool clearList); - void processAutomationEvents(); - int execAutomationCtlPopup(AudioTrack*, const QPoint&, int); - int execMidiAutomationCtlPopup(MidiTrack*, MidiPart*, const QPoint&, int); - void connectJackRoutes(AudioTrack* track, bool disconnect); - void updateSoloStates(); - //void chooseMidiRoutes(QButton* /*parent*/, MidiTrack* /*track*/, bool /*dst*/); - - // TrackView - TrackViewList* trackviews() { return &_tviews; } - TrackView* findTrackView(const QString& name) const; - void insertTrackView(TrackView*, int idx); - void removeTrackView(TrackView*); - void cmdRemoveTrackView(TrackView*); - void msgInsertTrackView(TrackView*, int idx, bool u = true); - - //----------------------------------------- - // undo, redo - //----------------------------------------- - - void startUndo(); - void endUndo(int); - //void undoOp(UndoOp::UndoType, Track* oTrack, Track* nTrack); - void undoOp(UndoOp::UndoType, int n, Track* oTrack, Track* nTrack); - void undoOp(UndoOp::UndoType, int, Track*); - void undoOp(UndoOp::UndoType, int, int, int = 0); - void undoOp(UndoOp::UndoType, Part*); - //void undoOp(UndoOp::UndoType, Event& nevent, Part*); - void undoOp(UndoOp::UndoType, Event& nevent, Part*, bool doCtrls, bool doClones); - //void undoOp(UndoOp::UndoType, Event& oevent, Event& nevent, Part*); - void undoOp(UndoOp::UndoType, Event& oevent, Event& nevent, Part*, bool doCtrls, bool doClones); - void undoOp(UndoOp::UndoType, SigEvent* oevent, SigEvent* nevent); - void undoOp(UndoOp::UndoType, int channel, int ctrl, int oval, int nval); - //void undoOp(UndoOp::UndoType, Part* oPart, Part* nPart); - void undoOp(UndoOp::UndoType, Part* oPart, Part* nPart, bool doCtrls, bool doClones); - void undoOp(UndoOp::UndoType type, const char* changedFile, const char* changeData, int startframe, int endframe); - void undoOp(UndoOp::UndoType type, Marker* copyMarker, Marker* realMarker); - bool doUndo1(); - void doUndo2(); - void doUndo3(); - bool doRedo1(); - void doRedo2(); - void doRedo3(); - - void addUndo(UndoOp& i); - - //----------------------------------------- - // Configuration - //----------------------------------------- - - //SynthI* createSynthI(const QString& sclass); - SynthI* createSynthI(const QString& sclass, const QString& label = QString()); - - void rescanAlsaPorts(); - - //----------------------------------------- - // Debug - //----------------------------------------- - - void dumpMaster(); - void addUpdateFlags(int f) { updateFlags |= f; } - - //----------------------------------------- - // Python bridge related - //----------------------------------------- -#ifdef ENABLE_PYTHON - virtual bool event (QEvent* e ); -#endif - void executeScript(const char* scriptfile, PartList* parts, int quant, bool onlyIfSelected); - - public slots: - void beat(); - - void undo(); - void redo(); - - void setTempo(int t); - void setSig(int a, int b); - void setSig(const AL::TimeSignature&); - void setTempo(double tempo) { setTempo(int(60000000.0/tempo)); } - - void setMasterFlag(bool flag); - bool getLoop() { return loopFlag; } - void setLoop(bool f); - void setRecord(bool f, bool autoRecEnable = true); - void clearTrackRec(); - void setPlay(bool f); - void setStop(bool); - void forward(); - void rewindStart(); - void rewind(); - void setPunchin(bool f); - void setPunchout(bool f); - void setClick(bool val); - void setQuantize(bool val); - void panic(); - void seqSignal(int fd); - Track* addTrack(int); - Track* addNewTrack(QAction* action); - TrackView* addNewTrackView(int); - QString getScriptPath(int id, bool delivered); - void populateScriptMenu(QMenu* menuPlugins, QObject* receiver); - TrackView* addTrackView(int); - - signals: - void songChanged(int); - void posChanged(int, unsigned, bool); - void loopChanged(bool); - void recordChanged(bool); - void playChanged(bool); - void punchinChanged(bool); - void punchoutChanged(bool); - void clickChanged(bool); - void quantizeChanged(bool); - void markerChanged(int); - void midiPortsChanged(); - void midiNote(int pitch, int velo); - }; - -extern Song* song; - -#endif - |