annotate base/AudioPlaySource.h @ 1202:3b84f9bd0048 3.0-integration

Merge work on unified spectrogram and colour 3d plot caching renderer
author Chris Cannam
date Fri, 05 Aug 2016 15:05:02 +0100
parents a1cd5abcb38b
children ca43c4b7719c
rev   line source
Chris@49 1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
Chris@0 2
Chris@0 3 /*
Chris@52 4 Sonic Visualiser
Chris@52 5 An audio file viewer and annotation editor.
Chris@52 6 Centre for Digital Music, Queen Mary, University of London.
Chris@52 7 This file copyright 2006 Chris Cannam.
Chris@0 8
Chris@52 9 This program is free software; you can redistribute it and/or
Chris@52 10 modify it under the terms of the GNU General Public License as
Chris@52 11 published by the Free Software Foundation; either version 2 of the
Chris@52 12 License, or (at your option) any later version. See the file
Chris@52 13 COPYING included with this distribution for more information.
Chris@0 14 */
Chris@0 15
Chris@0 16 #ifndef _AUDIO_PLAY_SOURCE_H_
Chris@0 17 #define _AUDIO_PLAY_SOURCE_H_
Chris@0 18
Chris@1040 19 #include "BaseTypes.h"
Chris@1040 20
Chris@389 21 struct Auditionable {
Chris@389 22 virtual ~Auditionable() { }
Chris@389 23 };
Chris@389 24
Chris@0 25 /**
Chris@0 26 * Simple interface for audio playback. This should be all that the
Chris@0 27 * ViewManager needs to know about to synchronise with playback by
Chris@0 28 * sample frame, but it doesn't provide enough to determine what is
Chris@0 29 * actually being played or how. See the audioio directory for a
Chris@0 30 * concrete subclass.
Chris@0 31 */
Chris@0 32
Chris@0 33 class AudioPlaySource
Chris@0 34 {
Chris@0 35 public:
Chris@27 36 virtual ~AudioPlaySource() { }
Chris@27 37
Chris@0 38 /**
Chris@0 39 * Start playing from the given frame. If playback is already
Chris@0 40 * under way, reseek to the given frame and continue.
Chris@0 41 */
Chris@1040 42 virtual void play(sv_frame_t startFrame) = 0;
Chris@0 43
Chris@0 44 /**
Chris@0 45 * Stop playback.
Chris@0 46 */
Chris@0 47 virtual void stop() = 0;
Chris@0 48
Chris@0 49 /**
Chris@0 50 * Return whether playback is currently supposed to be happening.
Chris@0 51 */
Chris@0 52 virtual bool isPlaying() const = 0;
Chris@0 53
Chris@0 54 /**
Chris@0 55 * Return the frame number that is currently expected to be coming
Chris@0 56 * out of the speakers. (i.e. compensating for playback latency.)
Chris@0 57 */
Chris@1040 58 virtual sv_frame_t getCurrentPlayingFrame() = 0;
Chris@0 59
Chris@0 60 /**
Chris@0 61 * Return the current (or thereabouts) output levels in the range
Chris@0 62 * 0.0 -> 1.0, for metering purposes.
Chris@0 63 */
Chris@0 64 virtual bool getOutputLevels(float &left, float &right) = 0;
Chris@40 65
Chris@40 66 /**
Chris@249 67 * Return the sample rate of the source material -- any material
Chris@249 68 * that wants to play at a different rate will sound wrong.
Chris@249 69 */
Chris@1040 70 virtual sv_samplerate_t getSourceSampleRate() const = 0;
Chris@249 71
Chris@249 72 /**
Chris@40 73 * Return the sample rate set by the target audio device (or the
Chris@249 74 * source sample rate if the target hasn't set one). If the
Chris@249 75 * source and target sample rates differ, resampling will occur.
Chris@40 76 */
Chris@1040 77 virtual sv_samplerate_t getTargetSampleRate() const = 0;
Chris@389 78
Chris@389 79 /**
Chris@389 80 * Get the block size of the target audio device. This may be an
Chris@389 81 * estimate or upper bound, if the target has a variable block
Chris@389 82 * size; the source should behave itself even if this value turns
Chris@389 83 * out to be inaccurate.
Chris@389 84 */
Chris@928 85 virtual int getTargetBlockSize() const = 0;
Chris@389 86
Chris@389 87 /**
Chris@389 88 * Get the number of channels of audio that will be provided
Chris@389 89 * to the play target. This may be more than the source channel
Chris@389 90 * count: for example, a mono source will provide 2 channels
Chris@389 91 * after pan.
Chris@389 92 */
Chris@928 93 virtual int getTargetChannelCount() const = 0;
Chris@389 94
Chris@389 95 /**
Chris@389 96 * Set a plugin or other subclass of Auditionable as an
Chris@389 97 * auditioning effect.
Chris@389 98 */
Chris@389 99 virtual void setAuditioningEffect(Auditionable *) = 0;
Chris@389 100
Chris@0 101 };
Chris@0 102
Chris@0 103 #endif