summaryrefslogtreecommitdiff
path: root/attic/muse2-oom/muse2/muse/audio.h
diff options
context:
space:
mode:
Diffstat (limited to 'attic/muse2-oom/muse2/muse/audio.h')
-rw-r--r--attic/muse2-oom/muse2/muse/audio.h301
1 files changed, 0 insertions, 301 deletions
diff --git a/attic/muse2-oom/muse2/muse/audio.h b/attic/muse2-oom/muse2/muse/audio.h
deleted file mode 100644
index ba188f8a..00000000
--- a/attic/muse2-oom/muse2/muse/audio.h
+++ /dev/null
@@ -1,301 +0,0 @@
-//=========================================================
-// MusE
-// Linux Music Editor
-// $Id: audio.h,v 1.25.2.13 2009/12/20 05:00:35 terminator356 Exp $
-//
-// (C) Copyright 2001 Werner Schweer (ws@seh.de)
-//=========================================================
-
-#ifndef __AUDIO_H__
-#define __AUDIO_H__
-
-#include "thread.h"
-#include "pos.h"
-#include "mpevent.h"
-#include "route.h"
-#include "event.h"
-
-class SndFile;
-class PluginI;
-class SynthI;
-class MidiDevice;
-class AudioDevice;
-class Track;
-class AudioTrack;
-class Part;
-class Event;
-class MidiPlayEvent;
-class Event;
-class MidiPort;
-class EventList;
-class MidiInstrument;
-class MidiTrack;
-
-//---------------------------------------------------------
-// AudioMsgId
-// this are the messages send from the GUI thread to
-// the midi thread
-//---------------------------------------------------------
-
-enum {
- SEQM_ADD_TRACK, SEQM_REMOVE_TRACK, SEQM_CHANGE_TRACK, SEQM_MOVE_TRACK,
- SEQM_ADD_PART, SEQM_REMOVE_PART, SEQM_CHANGE_PART,
- SEQM_ADD_EVENT, 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, SEQM_PANIC,
- SEQM_MIDI_LOCAL_OFF,
- SEQM_SET_MIDI_DEVICE,
- SEQM_PLAY_MIDI_EVENT,
- SEQM_SET_HW_CTRL_STATE,
- SEQM_SET_HW_CTRL_STATES,
- SEQM_SET_TRACK_OUT_PORT,
- SEQM_SET_TRACK_OUT_CHAN,
- SEQM_REMAP_PORT_DRUM_CTL_EVS,
- SEQM_CHANGE_ALL_PORT_DRUM_CTL_EVS,
- SEQM_SCAN_ALSA_MIDI_PORTS,
- SEQM_SET_AUX,
- SEQM_UPDATE_SOLO_STATES,
- MIDI_SHOW_INSTR_GUI,
- AUDIO_RECORD,
- AUDIO_ROUTEADD, AUDIO_ROUTEREMOVE, AUDIO_REMOVEROUTES,
- AUDIO_VOL, AUDIO_PAN,
- AUDIO_ADDPLUGIN,
- AUDIO_SET_SEG_SIZE,
- AUDIO_SET_PREFADER, AUDIO_SET_CHANNELS,
- AUDIO_SET_PLUGIN_CTRL_VAL,
- AUDIO_SWAP_CONTROLLER_IDX,
- AUDIO_CLEAR_CONTROLLER_EVENTS,
- AUDIO_SEEK_PREV_AC_EVENT,
- AUDIO_SEEK_NEXT_AC_EVENT,
- AUDIO_ERASE_AC_EVENT,
- AUDIO_ERASE_RANGE_AC_EVENTS,
- AUDIO_ADD_AC_EVENT,
- AUDIO_SET_SOLO, AUDIO_SET_SEND_METRONOME,
- MS_PROCESS, MS_STOP, MS_SET_RTC, MS_UPDATE_POLL_FD,
- SEQM_IDLE, SEQM_SEEK,
- };
-
-extern const char* seqMsgList[]; // for debug
-
-//---------------------------------------------------------
-// Msg
-//---------------------------------------------------------
-
-struct AudioMsg : public ThreadMsg { // this should be an union
- int serialNo;
- SndFile* downmix;
- AudioTrack* snode;
- AudioTrack* dnode;
- Route sroute, droute;
- AudioDevice* device;
- int ival;
- int iival;
- double dval;
- PluginI* plugin;
- SynthI* synth;
- Part* spart;
- Part* dpart;
- Track* track;
-
- const void *p1, *p2, *p3;
- Event ev1, ev2;
- char port, channel, ctrl;
- int a, b, c;
- Pos pos;
- };
-
-class AudioOutput;
-
-//---------------------------------------------------------
-// Audio
-//---------------------------------------------------------
-
-class Audio {
- public:
- enum State {STOP, START_PLAY, PLAY, LOOP1, LOOP2, SYNC, PRECOUNT};
-
- private:
- bool _running; // audio is active
- bool recording; // recording is active
- bool idle; // do nothing in idle mode
- bool _freewheel;
- bool _bounce;
- //bool loopPassed;
- unsigned _loopFrame; // Startframe of loop if in LOOP mode. Not quite the same as left marker !
- int _loopCount; // Number of times we have looped so far
-
- 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
-
- //metronome values
- unsigned midiClick;
- int clickno; // precount values
- int clicksMeasure;
- int ticksBeat;
-
- double syncTime; // wall clock at last sync point
- unsigned syncFrame; // corresponding frame no. to syncTime
- int frameOffset; // offset to free running hw frame counter
-
- State state;
-
- AudioMsg* msg;
- int fromThreadFdw, fromThreadFdr; // message pipe
-
- int sigFd; // pipe fd for messages to gui
-
- // record values:
- Pos startRecordPos;
- Pos endRecordPos;
-
- //
- AudioOutput* _audioMaster;
- AudioOutput* _audioMonitor;
-
- void sendLocalOff();
- bool filterEvent(const MidiPlayEvent* event, int type, bool thru);
-
- void startRolling();
- void stopRolling();
-
- void panic();
- void processMsg(AudioMsg* msg);
- void process1(unsigned samplePos, unsigned offset, unsigned samples);
-
- void collectEvents(MidiTrack*, unsigned int startTick, unsigned int endTick);
-
- public:
- Audio();
- virtual ~Audio() {}
-
- void process(unsigned frames);
- bool sync(int state, unsigned frame);
- void shutdown();
- void writeTick();
-
- // transport:
- bool start();
- void stop(bool);
- void seek(const Pos& pos);
-
- bool isPlaying() const { return state == PLAY || state == LOOP1 || state == LOOP2; }
- bool isRecording() const { return state == PLAY && recording; }
- void setRunning(bool val) { _running = val; }
- bool isRunning() const { return _running; }
-
- //-----------------------------------------
- // message interface
- //-----------------------------------------
-
- void msgSeek(const Pos&);
- void msgPlay(bool val);
-
- void msgRemoveTrack(Track*, bool u = true);
- void msgRemoveTracks();
- void msgChangeTrack(Track* oldTrack, Track* newTrack, bool u = true);
- void msgMoveTrack(int idx1, int dx2, bool u = true);
- void msgAddPart(Part*, bool u = true);
- void msgRemovePart(Part*, bool u = true);
- //void msgChangePart(Part* oldPart, Part* newPart, bool u = true);
- void msgChangePart(Part* oldPart, Part* newPart, bool u = true, bool doCtrls = true, bool doClones = false);
- //void msgAddEvent(Event&, Part*, bool u = true);
- void msgAddEvent(Event&, Part*, bool u = true, bool doCtrls = true, bool doClones = false);
- //void msgDeleteEvent(Event&, Part*, bool u = true);
- void msgDeleteEvent(Event&, Part*, bool u = true, bool doCtrls = true, bool doClones = false);
- //void msgChangeEvent(Event&, Event&, Part*, bool u = true);
- void msgChangeEvent(Event&, Event&, Part*, bool u = true, bool doCtrls = true, bool doClones = false);
- void msgScanAlsaMidiPorts();
- void msgAddTempo(int tick, int tempo, bool doUndoFlag = true);
- void msgSetTempo(int tick, int tempo, bool doUndoFlag = true);
- void msgUpdateSoloStates();
- void msgSetAux(AudioTrack*, int, double);
- void msgSetGlobalTempo(int val);
- void msgDeleteTempo(int tick, int tempo, bool doUndoFlag = true);
- void msgAddSig(int tick, int z, int n, bool doUndoFlag = true);
- void msgRemoveSig(int tick, int z, int n, bool doUndoFlag = true);
- void msgShowInstrumentGui(MidiInstrument*, bool);
- void msgPanic();
- void sendMsg(AudioMsg*);
- bool sendMessage(AudioMsg* m, bool doUndo);
- void msgRemoveRoute(Route, Route);
- void msgRemoveRoute1(Route, Route);
- void msgRemoveRoutes(Route, Route); // p3.3.55
- void msgRemoveRoutes1(Route, Route); // p3.3.55
- void msgAddRoute(Route, Route);
- void msgAddRoute1(Route, Route);
- void msgAddPlugin(AudioTrack*, int idx, PluginI* plugin);
- void msgSetMute(AudioTrack*, bool val);
- void msgSetVolume(AudioTrack*, double val);
- void msgSetPan(AudioTrack*, double val);
- void msgAddSynthI(SynthI* synth);
- void msgRemoveSynthI(SynthI* synth);
- void msgSetSegSize(int, int);
- void msgSetPrefader(AudioTrack*, int);
- void msgSetChannels(AudioTrack*, int);
- void msgSetOff(AudioTrack*, bool);
- void msgSetRecord(AudioTrack*, bool);
- void msgUndo();
- void msgRedo();
- void msgLocalOff();
- void msgInitMidiDevices();
- void msgResetMidiDevices();
- void msgIdle(bool);
- void msgBounce();
- //void msgSetPluginCtrlVal(PluginI* /*plugin*/, int /*param*/, double /*val*/);
- void msgSetPluginCtrlVal(AudioTrack*, int /*param*/, double /*val*/);
- void msgSwapControllerIDX(AudioTrack*, int, int);
- void msgClearControllerEvents(AudioTrack*, int);
- void msgSeekPrevACEvent(AudioTrack*, int);
- void msgSeekNextACEvent(AudioTrack*, int);
- void msgEraseACEvent(AudioTrack*, int, int);
- void msgEraseRangeACEvents(AudioTrack*, int, int, int);
- void msgAddACEvent(AudioTrack*, int, int, double);
- void msgSetSolo(Track*, bool);
- void msgSetHwCtrlState(MidiPort*, int, int, int);
- void msgSetHwCtrlStates(MidiPort*, int, int, int, int);
- void msgSetTrackOutChannel(MidiTrack*, int);
- void msgSetTrackOutPort(MidiTrack*, int);
- void msgRemapPortDrumCtlEvents(int, int, int, int);
- void msgChangeAllPortDrumCtrlEvents(bool, bool);
- void msgSetSendMetronome(AudioTrack*, bool);
-
- void msgPlayMidiEvent(const MidiPlayEvent* event);
- void rescanAlsaPorts();
-
- void midiPortsChanged();
-
- const Pos& pos() const { return _pos; }
- const Pos& getStartRecordPos() const { return startRecordPos; }
- const Pos& getEndRecordPos() const { return endRecordPos; }
- int loopCount() { return _loopCount; } // Number of times we have looped so far
- unsigned loopFrame() { return _loopFrame; }
-
- int tickPos() const { return curTickPos; }
- int timestamp() const;
- void processMidi();
- unsigned curFrame() const;
- void recordStop();
- bool freewheel() const { return _freewheel; }
- void setFreewheel(bool val);
- int getFrameOffset() const { return frameOffset; }
- void initDevices();
-
- AudioOutput* audioMaster() const { return _audioMaster; }
- AudioOutput* audioMonitor() const { return _audioMonitor; }
- void setMaster(AudioOutput* track) { _audioMaster = track; }
- void setMonitor(AudioOutput* track) { _audioMonitor = track; }
- void sendMsgToGui(char c);
- bool bounce() const { return _bounce; }
- };
-
-extern int processAudio(unsigned long, void*);
-extern void processAudio1(void*, void*);
-
-extern Audio* audio;
-extern AudioDevice* audioDevice; // current audio device in use
-#endif
-