13
0
livetrax/libs/vst3/pluginterfaces/vst/ivstprocesscontext.h

143 lines
6.2 KiB
C
Raw Normal View History

2019-09-03 09:45:25 -04:00
//------------------------------------------------------------------------
// Project : VST SDK
//
// Category : Interfaces
// Filename : pluginterfaces/vst/ivstprocesscontext.h
// Created by : Steinberg, 10/2005
// Description : VST Processing Context Interfaces
//
//-----------------------------------------------------------------------------
// This file is part of a Steinberg SDK. It is subject to the license terms
// in the LICENSE file found in the top-level directory of this distribution
// and at www.steinberg.net/sdklicenses.
// No part of the SDK, including this file, may be copied, modified, propagated,
// or distributed except according to the terms contained in the LICENSE file.
//-----------------------------------------------------------------------------
#pragma once
#include "pluginterfaces/base/funknown.h"
#include "vsttypes.h"
//------------------------------------------------------------------------
#include "pluginterfaces/base/falignpush.h"
//------------------------------------------------------------------------
//------------------------------------------------------------------------
namespace Steinberg {
namespace Vst {
//------------------------------------------------------------------------
/** Frame Rate */
//------------------------------------------------------------------------
struct FrameRate
{
//------------------------------------------------------------------------
enum FrameRateFlags
{
kPullDownRate = 1 << 0, ///< for ex. HDTV: 23.976 fps with 24 as frame rate
kDropRate = 1 << 1 ///< for ex. 29.97 fps drop with 30 as frame rate
};
//------------------------------------------------------------------------
uint32 framesPerSecond; ///< frame rate
uint32 flags; ///< flags #FrameRateFlags
//------------------------------------------------------------------------
};
//------------------------------------------------------------------------
/** Description of a chord.
A chord is described with a key note, a root note and the
\copydoc chordMask
\see ProcessContext*/
//------------------------------------------------------------------------
struct Chord
{
//------------------------------------------------------------------------
uint8 keyNote; ///< key note in chord
uint8 rootNote; ///< lowest note in chord
/** Bitmask of a chord.
1st bit set: minor second; 2nd bit set: major second, and so on. \n
There is \b no bit for the keynote (root of the chord) because it is inherently always present. \n
Examples:
- XXXX 0000 0100 1000 (= 0x0048) -> major chord\n
- XXXX 0000 0100 0100 (= 0x0044) -> minor chord\n
- XXXX 0010 0100 0100 (= 0x0244) -> minor chord with minor seventh */
int16 chordMask;
enum Masks {
kChordMask = 0x0FFF, ///< mask for chordMask
kReservedMask = 0xF000 ///< reserved for future use
};
//------------------------------------------------------------------------
};
//------------------------------------------------------------------------
/** Audio processing context.
For each processing block the host provides timing information and
musical parameters that can change over time. For a host that supports jumps
(like cycle) it is possible to split up a processing block into multiple parts in
order to provide a correct project time inside of every block, but this behaviour
is not mandatory. Since the timing will be correct at the beginning of the next block
again, a host that is dependent on a fixed processing block size can choose to neglect
this problem.
\see IAudioProcessor, ProcessData*/
//------------------------------------------------------------------------
struct ProcessContext
{
//------------------------------------------------------------------------
/** Transport state & other flags */
enum StatesAndFlags
{
kPlaying = 1 << 1, ///< currently playing
kCycleActive = 1 << 2, ///< cycle is active
kRecording = 1 << 3, ///< currently recording
kSystemTimeValid = 1 << 8, ///< systemTime contains valid information
kContTimeValid = 1 << 17, ///< continousTimeSamples contains valid information
kProjectTimeMusicValid = 1 << 9,///< projectTimeMusic contains valid information
kBarPositionValid = 1 << 11, ///< barPositionMusic contains valid information
kCycleValid = 1 << 12, ///< cycleStartMusic and barPositionMusic contain valid information
kTempoValid = 1 << 10, ///< tempo contains valid information
kTimeSigValid = 1 << 13, ///< timeSigNumerator and timeSigDenominator contain valid information
kChordValid = 1 << 18, ///< chord contains valid information
kSmpteValid = 1 << 14, ///< smpteOffset and frameRate contain valid information
kClockValid = 1 << 15 ///< samplesToNextClock valid
};
uint32 state; ///< a combination of the values from \ref StatesAndFlags
double sampleRate; ///< current sample rate (always valid)
TSamples projectTimeSamples; ///< project time in samples (always valid)
int64 systemTime; ///< system time in nanoseconds (optional)
TSamples continousTimeSamples; ///< project time, without loop (optional)
TQuarterNotes projectTimeMusic; ///< musical position in quarter notes (1.0 equals 1 quarter note)
TQuarterNotes barPositionMusic; ///< last bar start position, in quarter notes
TQuarterNotes cycleStartMusic; ///< cycle start in quarter notes
TQuarterNotes cycleEndMusic; ///< cycle end in quarter notes
double tempo; ///< tempo in BPM (Beats Per Minute)
int32 timeSigNumerator; ///< time signature numerator (e.g. 3 for 3/4)
int32 timeSigDenominator; ///< time signature denominator (e.g. 4 for 3/4)
Chord chord; ///< musical info
int32 smpteOffsetSubframes; ///< SMPTE (sync) offset in subframes (1/80 of frame)
FrameRate frameRate; ///< frame rate
int32 samplesToNextClock; ///< MIDI Clock Resolution (24 Per Quarter Note), can be negative (nearest)
//------------------------------------------------------------------------
};
//------------------------------------------------------------------------
} // namespace Vst
} // namespace Steinberg
//------------------------------------------------------------------------
#include "pluginterfaces/base/falignpop.h"
//------------------------------------------------------------------------