00001 //------------------------------------------------------------------------ 00002 // Project : VST SDK 00003 // Version : 3.0 00004 // 00005 // Category : Interfaces 00006 // Filename : ivstprocesscontext.h 00007 // Created by : Steinberg, 10/2005 00008 // Modified : $Date: 2008/01/15 13:58:31 $ 00009 // Description : VST Processing Context Interfaces 00010 // 00011 //----------------------------------------------------------------------------- 00012 // LICENSE 00013 // © 2008, Steinberg Media Technologies GmbH, All Rights Reserved 00014 //----------------------------------------------------------------------------- 00015 // This Software Development Kit may not be distributed in parts or its entirety 00016 // without prior written agreement by Steinberg Media Technologies GmbH. 00017 // This SDK must not be used to re-engineer or manipulate any technology used 00018 // in any Steinberg or Third-party application or software module, 00019 // unless permitted by law. 00020 // Neither the name of the Steinberg Media Technologies nor the names of its 00021 // contributors may be used to endorse or promote products derived from this 00022 // software without specific prior written permission. 00023 // 00024 // THIS SDK IS PROVIDED BY STEINBERG MEDIA TECHNOLOGIES GMBH "AS IS" AND 00025 // ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 00026 // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 00027 // IN NO EVENT SHALL STEINBERG MEDIA TECHNOLOGIES GMBH BE LIABLE FOR ANY DIRECT, 00028 // INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 00029 // BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 00030 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 00031 // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 00032 // OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 00033 // OF THE POSSIBILITY OF SUCH DAMAGE. 00034 //---------------------------------------------------------------------------------- 00035 00036 #ifndef __ivstprocesscontext__ 00037 #define __ivstprocesscontext__ 00038 00039 #include "pluginterfaces/base/funknown.h" 00040 #include "vsttypes.h" 00041 00042 //------------------------------------------------------------------------ 00043 #include "pluginterfaces/base/falignpush.h" 00044 //------------------------------------------------------------------------ 00045 00046 //------------------------------------------------------------------------ 00047 namespace Steinberg { 00048 namespace Vst { 00049 00050 //------------------------------------------------------------------------ 00052 //------------------------------------------------------------------------ 00053 struct FrameRate 00054 { 00055 //------------------------------------------------------------------------ 00056 enum FrameRateFlags 00057 { 00058 kPullDownRate = 1 << 0, 00059 kDropRate = 1 << 1 00060 }; 00061 //------------------------------------------------------------------------ 00062 uint32 framesPerSecond; 00063 uint32 flags; 00064 //------------------------------------------------------------------------ 00065 }; 00066 00067 //------------------------------------------------------------------------ 00076 //------------------------------------------------------------------------ 00077 struct Chord 00078 { 00079 //------------------------------------------------------------------------ 00080 uint8 keyNote; 00081 uint8 rootNote; 00082 int16 chordMask; 00083 00084 enum Mask { 00085 kChordMask = 0x0FFF, 00086 kReservedMask = 0xF000 00087 }; 00088 00089 //------------------------------------------------------------------------ 00090 }; 00091 00092 //------------------------------------------------------------------------ 00094 //------------------------------------------------------------------------ 00095 struct ProcessContext 00096 { 00097 //------------------------------------------------------------------------ 00099 enum TransportStates 00100 { 00101 kPlaying = 1 << 1, 00102 kCycleActive = 1 << 2, 00103 kRecording = 1 << 3, 00104 00105 kSystemTimeValid = 1 << 8, 00106 kContTimeValid = 1 << 17, 00107 00108 kProjectTimeMusicValid = 1 << 9, 00109 kBarPositionValid = 1 << 11, 00110 kCycleValid = 1 << 12, 00111 00112 kTempoValid = 1 << 10, 00113 kTimeSigValid = 1 << 13, 00114 kChordValid = 1 << 18, 00115 00116 kSmpteValid = 1 << 14, 00117 kClockValid = 1 << 15 00118 }; 00119 00120 uint32 state; 00121 00122 double sampleRate; 00123 TSamples projectTimeSamples; 00124 00125 int64 systemTime; 00126 TSamples continousTimeSamples; 00127 00128 TQuarterNotes projectTimeMusic; 00129 TQuarterNotes barPositionMusic; 00130 TQuarterNotes cycleStartMusic; 00131 TQuarterNotes cycleEndMusic; 00132 00133 double tempo; 00134 int32 timeSigNumerator; 00135 int32 timeSigDenominator; 00136 00137 Chord chord; 00138 00139 int32 smpteOffsetSubframes; 00140 FrameRate frameRate; 00141 00142 int32 samplesToNextClock; 00143 //------------------------------------------------------------------------ 00144 }; 00145 00146 //------------------------------------------------------------------------ 00147 } // namespace Vst 00148 } // namespace Steinberg 00149 00150 //------------------------------------------------------------------------ 00151 #include "pluginterfaces/base/falignpop.h" 00152 //------------------------------------------------------------------------ 00153 00154 #endif // __ivstprocesscontext__