| @@ -0,0 +1,124 @@ | |||||
| /* | |||||
| ============================================================================== | |||||
| This file is part of the JUCE library - "Jules' Utility Class Extensions" | |||||
| Copyright 2004-7 by Raw Material Software ltd. | |||||
| ------------------------------------------------------------------------------ | |||||
| JUCE can be redistributed and/or modified 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. | |||||
| JUCE 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 JUCE; if not, visit www.gnu.org/licenses or write to the | |||||
| Free Software Foundation, Inc., 59 Temple Place, Suite 330, | |||||
| Boston, MA 02111-1307 USA | |||||
| ------------------------------------------------------------------------------ | |||||
| If you'd like to release a closed-source product which uses JUCE, commercial | |||||
| licenses are also available: visit www.rawmaterialsoftware.com/juce for | |||||
| more information. | |||||
| ============================================================================== | |||||
| */ | |||||
| #ifndef __JUCE_AUDIOPLAYHEAD_JUCEHEADER__ | |||||
| #define __JUCE_AUDIOPLAYHEAD_JUCEHEADER__ | |||||
| //============================================================================== | |||||
| /** | |||||
| A subclass of AudioPlayHead can supply information about the position and | |||||
| status of a moving play head during audio playback. | |||||
| One of these can be supplied to an AudioProcessor object so that it can find | |||||
| out about the position of the audio that it is rendering. | |||||
| @see AudioProcessor::setPlayHead, AudioProcessor::getPlayHead | |||||
| */ | |||||
| class JUCE_API AudioPlayHead | |||||
| { | |||||
| protected: | |||||
| //============================================================================== | |||||
| AudioPlayHead() {} | |||||
| public: | |||||
| virtual ~AudioPlayHead() {} | |||||
| //============================================================================== | |||||
| /** Frame rate types. */ | |||||
| enum FrameRateType | |||||
| { | |||||
| fps24 = 0, | |||||
| fps25 = 1, | |||||
| fps2997 = 2, | |||||
| fps30 = 3, | |||||
| fps2997drop = 4, | |||||
| fps30drop = 5, | |||||
| fpsUnknown = 99 | |||||
| }; | |||||
| //============================================================================== | |||||
| /** This structure is filled-in by the AudioPlayHead::getCurrentPosition() method. | |||||
| */ | |||||
| struct CurrentPositionInfo | |||||
| { | |||||
| /** The tempo in BPM */ | |||||
| double bpm; | |||||
| /** Time signature numerator, e.g. the 3 of a 3/4 time sig */ | |||||
| int timeSigNumerator; | |||||
| /** Time signature denominator, e.g. the 4 of a 3/4 time sig */ | |||||
| int timeSigDenominator; | |||||
| /** The current play position, in seconds from the start of the edit. */ | |||||
| double timeInSeconds; | |||||
| /** For timecode, the position of the start of the edit, in seconds from 00:00:00:00. */ | |||||
| double editOriginTime; | |||||
| /** The current play position in pulses-per-quarter-note. | |||||
| This is the number of quarter notes since the edit start. | |||||
| */ | |||||
| double ppqPosition; | |||||
| /** The position of the start of the last bar, in pulses-per-quarter-note. | |||||
| This is the number of quarter notes from the start of the edit to the | |||||
| start of the current bar. | |||||
| Note - this value may be unavailable on some hosts, e.g. Pro-Tools. If | |||||
| it's not available, the value will be 0. | |||||
| */ | |||||
| double ppqPositionOfLastBarStart; | |||||
| /** The video frame rate, if applicable. */ | |||||
| FrameRateType frameRate; | |||||
| /** True if the transport is currently playing. */ | |||||
| bool isPlaying; | |||||
| /** True if the transport is currently recording. | |||||
| (When isRecording is true, then isPlaying will also be true). | |||||
| */ | |||||
| bool isRecording; | |||||
| }; | |||||
| //============================================================================== | |||||
| /** Fills-in the given structure with details about the transport's | |||||
| position at the start of the current processing block. | |||||
| */ | |||||
| virtual bool getCurrentPosition (CurrentPositionInfo& result) = 0; | |||||
| }; | |||||
| #endif // __JUCE_AUDIOPLAYHEAD_JUCEHEADER__ | |||||