aboutsummaryrefslogtreecommitdiff
path: root/sc4pd/headers/plugin_interface/SC_World.h
diff options
context:
space:
mode:
Diffstat (limited to 'sc4pd/headers/plugin_interface/SC_World.h')
-rw-r--r--sc4pd/headers/plugin_interface/SC_World.h105
1 files changed, 105 insertions, 0 deletions
diff --git a/sc4pd/headers/plugin_interface/SC_World.h b/sc4pd/headers/plugin_interface/SC_World.h
new file mode 100644
index 0000000..8586432
--- /dev/null
+++ b/sc4pd/headers/plugin_interface/SC_World.h
@@ -0,0 +1,105 @@
+/*
+ SuperCollider real time audio synthesis system
+ Copyright (c) 2002 James McCartney. All rights reserved.
+ http://www.audiosynth.com
+
+ 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.
+
+ 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+*/
+
+
+#ifndef _SC_World_
+#define _SC_World_
+
+#include "SC_Types.h"
+#include "SC_Rate.h"
+#include "SC_SndBuf.h"
+#include "SC_RGen.h"
+#include "SC_Lock.h"
+
+struct World
+{
+ // a pointer to private implementation, not available to plug-ins.
+ struct HiddenWorld *hw;
+
+ // a pointer to the table of function pointers that implement the plug-ins'
+ // interface to the server.
+ struct InterfaceTable *ft;
+
+ // data accessible to plug-ins :
+ double mSampleRate;
+ int mBufLength;
+ int mBufCounter;
+
+ uint32 mNumAudioBusChannels;
+ uint32 mNumControlBusChannels;
+ uint32 mNumInputs;
+ uint32 mNumOutputs;
+
+ // vector of samples for all audio busses
+ float *mAudioBus;
+
+ // vector of samples for all control busses
+ float *mControlBus;
+
+ // these tell if a buss has been written to during a control period
+ // if the value is equal to mBufCounter then the buss has been touched
+ // this control period.
+ int32 *mAudioBusTouched;
+ int32 *mControlBusTouched;
+
+ uint32 mNumSndBufs;
+ SndBuf *mSndBufs;
+ SndBuf *mSndBufsNonRealTimeMirror;
+ SndBufUpdates *mSndBufUpdates;
+
+ struct Group *mTopGroup;
+
+ Rate mFullRate, mBufRate;
+
+ uint32 mNumRGens;
+ RGen *mRGen;
+
+ uint32 mNumUnits, mNumGraphs, mNumGroups;
+ int mSampleOffset; // offset in the buffer of current event time.
+
+ SC_Lock* mNRTLock;
+
+ uint32 mNumSharedControls;
+ float *mSharedControls;
+
+ bool mRealTime;
+ bool mRunning;
+ int mDumpOSC;
+};
+
+extern "C" {
+ int scprintf(const char *fmt, ...);
+}
+
+inline SndBuf* World_GetBuf(struct World *inWorld, uint32 index)
+{
+ if (index > inWorld->mNumSndBufs) index = 0;
+ return inWorld->mSndBufs + index;
+}
+
+inline SndBuf* World_GetNRTBuf(struct World *inWorld, uint32 index)
+{
+ if (index > inWorld->mNumSndBufs) index = 0;
+ return inWorld->mSndBufsNonRealTimeMirror + index;
+}
+
+typedef void (*LoadPlugInFunc)(struct InterfaceTable *);
+
+#endif