|
- //------------------------------------------------------------------------
- // Project : VST SDK
- // Version : 3.6.7
- //
- // 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"
- //------------------------------------------------------------------------
|