summaryrefslogtreecommitdiff
path: root/attic/muse_qt4_evolution/muse/audio.h
diff options
context:
space:
mode:
Diffstat (limited to 'attic/muse_qt4_evolution/muse/audio.h')
-rw-r--r--attic/muse_qt4_evolution/muse/audio.h306
1 files changed, 0 insertions, 306 deletions
diff --git a/attic/muse_qt4_evolution/muse/audio.h b/attic/muse_qt4_evolution/muse/audio.h
deleted file mode 100644
index 5d52ee0f..00000000
--- a/attic/muse_qt4_evolution/muse/audio.h
+++ /dev/null
@@ -1,306 +0,0 @@
-//=============================================================================
-// MusE
-// Linux Music Editor
-// $Id:$
-//
-// Copyright (C) 2002-2006 by Werner Schweer and others
-//
-// This program is free software; you can redistribute it and/or modify
-// it under the terms of the GNU General Public License version 2.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-//=============================================================================
-
-#ifndef __AUDIO_H__
-#define __AUDIO_H__
-
-#include "thread.h"
-#include "midievent.h"
-#include "route.h"
-#include "al/tempo.h"
-#include "al/pos.h"
-#include "event.h"
-#include "ctrl.h"
-
-namespace AL {
- class TimeSignature;
- };
-
-using AL::Xml;
-class SndFile;
-class PluginI;
-class MidiPluginI;
-class SynthI;
-class AudioDriver;
-class Track;
-class AudioTrack;
-class Part;
-class Event;
-class MidiEvent;
-class Event;
-class MidiTrack;
-class MidiSeq;
-class MidiTrackBase;
-
-//---------------------------------------------------------
-// GuiMessages
-// messages from sequencer to GUI
-// used in Audio::sendMsgToGui(char c)
-//---------------------------------------------------------
-
-#define MSG_STOP '0'
-#define MSG_PLAY '1'
-#define MSG_RECORD '2'
-#define MSG_SEEK 'G'
-#define MSG_JACK_SHUTDOWN 'S'
-#define MSG_START_BOUNCE 'f'
-#define MSG_STOP_BOUNCE 'F'
-#define MSG_GRAPH_CHANGED 'C'
-#define MSG_ALSA_CHANGED 'P'
-
-//---------------------------------------------------------
-// AudioMsgId
-// this are the messages send from the GUI thread to
-// the midi thread
-//---------------------------------------------------------
-
-enum {
- SEQM_ADD_TRACK,
- SEQM_REMOVE_TRACK,
- SEQM_MOVE_TRACK,
- SEQM_ADD_PART,
- SEQM_REMOVE_PART,
- SEQM_CHANGE_PART,
- SEQM_ADD_EVENT,
- SEQM_ADD_EVENTS,
- SEQM_REMOVE_EVENT,
- SEQM_CHANGE_EVENT,
- SEQM_ADD_TEMPO,
- SEQM_SET_TEMPO,
- SEQM_REMOVE_TEMPO,
- SEQM_ADD_SIG,
- SEQM_REMOVE_SIG,
- SEQM_SET_GLOBAL_TEMPO,
- SEQM_UNDO,
- SEQM_REDO,
- SEQM_RESET_DEVICES,
- SEQM_INIT_DEVICES,
- //
- AUDIO_ROUTEADD,
- AUDIO_ROUTEREMOVE,
- AUDIO_ADDPLUGIN,
- AUDIO_ADDMIDIPLUGIN,
- AUDIO_SET_SEG_SIZE,
- AUDIO_SET_CHANNELS,
-
- MS_PROCESS,
- MS_START,
- MS_STOP,
- MS_SET_RTC,
-
- SEQM_IDLE,
- SEQM_ADD_CTRL,
- SEQM_REMOVE_CTRL
- };
-
-extern const char* seqMsgList[]; // for debug
-
-//---------------------------------------------------------
-// Msg
-//---------------------------------------------------------
-
-struct AudioMsg : public ThreadMsg { // this should be an union
- int serialNo;
- SndFile* downmix;
- Route route;
- int ival;
- int iival;
- CVal cval1, cval2;
- PluginI* plugin;
- MidiPluginI* mplugin;
- SynthI* synth;
- Part* spart;
- Part* dpart;
- Track* track;
- QList<Event>* el;
-
- const void *p1, *p2, *p3;
- Event ev1, ev2;
- char port, channel, ctrl;
- int a, b, c;
- Pos pos;
- unsigned time;
- };
-
-class AudioOutput;
-
-
-//---------------------------------------------------------
-// SeqTime
-// timing information for sequencer cycle
-//---------------------------------------------------------
-
-extern unsigned int segmentSize;
-
-struct SeqTime {
- unsigned lastFrameTime; // free running counter
-
- // transport values for current cycle:
- Pos pos; // current play position
- unsigned curTickPos; // pos at start of frame during play/record
- unsigned nextTickPos; // pos at start of next frame during play/record
-
- unsigned startFrame() const { return pos.frame(); }
- unsigned endFrame() const { return startFrame() + segmentSize; }
-
- //---------------------------------------------------------
- // tick2frame
- // translate from tick to frameTime, this event has to
- // be scheduled
- //---------------------------------------------------------
-
- unsigned tick2frame(unsigned tick) {
- return AL::tempomap.tick2frame(tick) - pos.frame() + lastFrameTime + segmentSize;
- }
- unsigned frame2tick(unsigned frame) {
- return AL::tempomap.frame2tick(frame - lastFrameTime + pos.frame());
- }
- };
-
-//---------------------------------------------------------
-// Audio
-//---------------------------------------------------------
-
-class Audio {
- public:
- enum State {STOP, START_PLAY, PLAY, LOOP1, LOOP2, SYNC, PRECOUNT};
-
- private:
- bool recording; // recording is active
- bool idle; // do nothing in idle mode
- bool _freewheel;
- int _bounce;
- bool loopPassed;
- unsigned loopFrame; // startframe of loop if in LOOP mode
- unsigned lmark; // left loop position
- unsigned rmark; // right loop position
-
- SeqTime _seqTime;
- Pos startRecordPos;
- Pos endRecordPos;
-
- int _curReadIndex;
-
- State state;
- bool updateController;
-
- AudioMsg* volatile msg;
- int fromThreadFdw, fromThreadFdr; // message pipe
-
- int sigFd; // pipe fd for messages to gui
-
- bool filterEvent(const MidiEvent* event, int type, bool thru);
-
- void startRolling();
- void stopRolling();
-
- void collectEvents(MidiTrack*, unsigned startTick, unsigned endTick);
- void processMsg();
- void initMidiDevices();
- void resetMidiDevices();
-
- public:
- Audio();
- virtual ~Audio() {}
-
- void process(unsigned frames, int jackState);
- bool sync(int state, unsigned frame);
- void shutdown();
-
- // transport:
- bool start();
- void stop();
- void seek(const Pos& pos);
-
- bool isPlaying() const { return state == PLAY || state == LOOP1 || state == LOOP2; }
- bool isRecording() const { return state == PLAY && recording; }
-
- //-----------------------------------------
- // message interface
- //-----------------------------------------
-
- void msgSeek(const Pos&);
- void msgPlay(bool val);
-
- void msgRemoveTrack(Track*);
- void msgRemoveTracks();
- void msgMoveTrack(Track*, Track*);
-
- void msgAddEvent(const Event&, Part*, bool u = true);
- void msgAddEvents(QList<Event>* el, Part* part);
- void msgDeleteEvent(const Event&, Part*, bool u = true);
- void msgChangeEvent(const Event&, const Event&, Part*, bool u = true);
-
- void msgAddTempo(int tick, int tempo, bool doUndoFlag = true);
- void msgSetTempo(int tick, int tempo, bool doUndoFlag = true);
- void msgSetGlobalTempo(int val);
- void msgDeleteTempo(int tick, int tempo, bool doUndoFlag = true);
- void msgAddSig(int tick, const AL::TimeSignature&, bool doUndoFlag = true);
- void msgRemoveSig(int tick, int z, int n, bool doUndoFlag = true);
- void msgPanic();
- void sendMsg(AudioMsg*);
- bool sendMessage(AudioMsg* m, bool doUndo);
- void msgRoute(bool add, Route);
- void msgRemoveRoute(Route);
- void msgRemoveRoute1(Route);
- void msgAddRoute(Route);
- void msgAddRoute1(Route);
- void msgAddPlugin(AudioTrack*, int idx, PluginI* plugin, bool prefader);
- void msgAddMidiPlugin(MidiTrackBase*, int idx, MidiPluginI* plugin);
- void msgSetMute(AudioTrack*, bool val);
- void msgAddSynthI(SynthI* synth);
- void msgRemoveSynthI(SynthI* synth);
- void msgSetSegSize(int, int);
- void msgSetChannels(AudioTrack*, int);
- void msgSetOff(AudioTrack*, bool);
- void msgUndo();
- void msgRedo();
- void msgLocalOff();
- void msgInitMidiDevices();
- void msgResetMidiDevices();
- void msgIdle(bool);
- void msgBounce();
- void msgAddController(Track*, int id, unsigned time, CVal);
- void msgRemoveController(Track*, int id, unsigned time);
- void msgSetRtc();
-
- const Pos& getStartRecordPos() const { return startRecordPos; }
- const Pos& getEndRecordPos() const { return endRecordPos; }
-
- bool freewheel() const { return _freewheel; }
- void setFreewheel(bool val);
-
- void sendMsgToGui(char c);
- bool bounce() const { return _bounce != 0; }
- MidiEvent* getMidiEvent();
- void popMidiEvent();
- int curReadIndex() const { return _curReadIndex; }
-
- const SeqTime* seqTime() const { return &_seqTime; }
- };
-
-extern int processAudio(unsigned long, void*);
-extern void processAudio1(void*, void*);
-
-extern Audio* audio;
-class AudioDriver;
-extern AudioDriver* audioDriver; // current audio device in use
-#endif
-