Chris@49: /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*-  vi:set ts=8 sts=4 sw=4: */
Chris@0: 
Chris@0: /*
Chris@52:     Sonic Visualiser
Chris@52:     An audio file viewer and annotation editor.
Chris@52:     Centre for Digital Music, Queen Mary, University of London.
Chris@52:     This file copyright 2006 Chris Cannam.
Chris@0:     
Chris@52:     This program is free software; you can redistribute it and/or
Chris@52:     modify it under the terms of the GNU General Public License as
Chris@52:     published by the Free Software Foundation; either version 2 of the
Chris@52:     License, or (at your option) any later version.  See the file
Chris@52:     COPYING included with this distribution for more information.
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@40: 
Chris@40:     /**
Chris@40:      * Return the sample rate set by the target audio device (or the
Chris@40:      * source sample rate if the target hasn't set one).
Chris@40:      */
Chris@40:     virtual size_t getTargetSampleRate() const = 0;
Chris@0: };
Chris@0: 
Chris@0: #endif