Chris@0: /* -*- c-basic-offset: 4 -*- vi:set ts=8 sts=4 sw=4: */ Chris@0: Chris@0: /* Chris@0: A waveform viewer and audio annotation editor. Chris@2: Chris Cannam, Queen Mary University of London, 2005-2006 Chris@0: Chris@0: This is experimental software. Not for distribution. Chris@0: */ Chris@0: Chris@0: #ifndef _AUDIO_PLAY_SOURCE_H_ Chris@0: #define _AUDIO_PLAY_SOURCE_H_ Chris@0: Chris@0: /** Chris@0: * Simple interface for audio playback. This should be all that the Chris@0: * ViewManager needs to know about to synchronise with playback by Chris@0: * sample frame, but it doesn't provide enough to determine what is Chris@0: * actually being played or how. See the audioio directory for a Chris@0: * concrete subclass. Chris@0: */ Chris@0: Chris@0: class AudioPlaySource Chris@0: { Chris@0: public: Chris@27: virtual ~AudioPlaySource() { } Chris@27: Chris@0: /** Chris@0: * Start playing from the given frame. If playback is already Chris@0: * under way, reseek to the given frame and continue. Chris@0: */ Chris@0: virtual void play(size_t startFrame) = 0; Chris@0: Chris@0: /** Chris@0: * Stop playback. Chris@0: */ Chris@0: virtual void stop() = 0; Chris@0: Chris@0: /** Chris@0: * Return whether playback is currently supposed to be happening. Chris@0: */ Chris@0: virtual bool isPlaying() const = 0; Chris@0: Chris@0: /** Chris@0: * Return the frame number that is currently expected to be coming Chris@0: * out of the speakers. (i.e. compensating for playback latency.) Chris@0: */ Chris@0: virtual size_t getCurrentPlayingFrame() = 0; Chris@0: Chris@0: /** Chris@0: * Return the current (or thereabouts) output levels in the range Chris@0: * 0.0 -> 1.0, for metering purposes. Chris@0: */ Chris@0: virtual bool getOutputLevels(float &left, float &right) = 0; Chris@0: }; Chris@0: Chris@0: #endif