annotate base/AudioPlaySource.h @ 1337:3dcd83595bc8 3.0-integration

Make writable model updating explicit rather than essentially an arbitrary hidden accident
author Chris Cannam
date Wed, 04 Jan 2017 14:22:39 +0000
parents ca43c4b7719c
children 8541563f1fd3
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@1321 73 * Return the sample rate set by the target audio device (or 0 if
Chris@1321 74 * the target hasn't told us yet). If the source and target
Chris@1321 75 * sample rates differ, resampling will occur.
Chris@1321 76 *
Chris@1321 77 * Note that we don't actually do any processing at the device
Chris@1321 78 * sample rate. All processing happens at the source sample rate,
Chris@1321 79 * and then a resampler is applied if necessary at the interface
Chris@1321 80 * between application and driver layer.
Chris@40 81 */
Chris@1321 82 virtual sv_samplerate_t getDeviceSampleRate() const = 0;
Chris@389 83
Chris@389 84 /**
Chris@389 85 * Get the block size of the target audio device. This may be an
Chris@389 86 * estimate or upper bound, if the target has a variable block
Chris@389 87 * size; the source should behave itself even if this value turns
Chris@389 88 * out to be inaccurate.
Chris@389 89 */
Chris@928 90 virtual int getTargetBlockSize() const = 0;
Chris@389 91
Chris@389 92 /**
Chris@389 93 * Get the number of channels of audio that will be provided
Chris@389 94 * to the play target. This may be more than the source channel
Chris@389 95 * count: for example, a mono source will provide 2 channels
Chris@389 96 * after pan.
Chris@389 97 */
Chris@928 98 virtual int getTargetChannelCount() const = 0;
Chris@389 99
Chris@389 100 /**
Chris@389 101 * Set a plugin or other subclass of Auditionable as an
Chris@389 102 * auditioning effect.
Chris@389 103 */
Chris@389 104 virtual void setAuditioningEffect(Auditionable *) = 0;
Chris@389 105
Chris@0 106 };
Chris@0 107
Chris@0 108 #endif