annotate base/AudioPlaySource.h @ 1804:343ef2a866a4

Implement missing TabularModel editing methods. Also made these pure in TabularModel, since almost all subclasses want them and (clearly) forgetting to implement them is a problem!
author Chris Cannam
date Mon, 14 Oct 2019 14:17:37 +0100
parents 8541563f1fd3
children 618326c4ce4b
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@1338 16 #ifndef SV_AUDIO_PLAY_SOURCE_H
Chris@1338 17 #define SV_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@1338 62 * 0.0 -> 1.0, for metering purposes. The values returned are
Chris@1338 63 * peak values since the last call to this function was made
Chris@1338 64 * (i.e. calling this function also resets them).
Chris@0 65 */
Chris@0 66 virtual bool getOutputLevels(float &left, float &right) = 0;
Chris@40 67
Chris@40 68 /**
Chris@249 69 * Return the sample rate of the source material -- any material
Chris@249 70 * that wants to play at a different rate will sound wrong.
Chris@249 71 */
Chris@1040 72 virtual sv_samplerate_t getSourceSampleRate() const = 0;
Chris@249 73
Chris@249 74 /**
Chris@1321 75 * Return the sample rate set by the target audio device (or 0 if
Chris@1321 76 * the target hasn't told us yet). If the source and target
Chris@1321 77 * sample rates differ, resampling will occur.
Chris@1321 78 *
Chris@1321 79 * Note that we don't actually do any processing at the device
Chris@1321 80 * sample rate. All processing happens at the source sample rate,
Chris@1321 81 * and then a resampler is applied if necessary at the interface
Chris@1321 82 * between application and driver layer.
Chris@40 83 */
Chris@1321 84 virtual sv_samplerate_t getDeviceSampleRate() const = 0;
Chris@389 85
Chris@389 86 /**
Chris@389 87 * Get the block size of the target audio device. This may be an
Chris@389 88 * estimate or upper bound, if the target has a variable block
Chris@389 89 * size; the source should behave itself even if this value turns
Chris@389 90 * out to be inaccurate.
Chris@389 91 */
Chris@928 92 virtual int getTargetBlockSize() const = 0;
Chris@389 93
Chris@389 94 /**
Chris@389 95 * Get the number of channels of audio that will be provided
Chris@389 96 * to the play target. This may be more than the source channel
Chris@389 97 * count: for example, a mono source will provide 2 channels
Chris@389 98 * after pan.
Chris@389 99 */
Chris@928 100 virtual int getTargetChannelCount() const = 0;
Chris@389 101
Chris@389 102 /**
Chris@389 103 * Set a plugin or other subclass of Auditionable as an
Chris@389 104 * auditioning effect.
Chris@389 105 */
Chris@389 106 virtual void setAuditioningEffect(Auditionable *) = 0;
Chris@389 107
Chris@0 108 };
Chris@0 109
Chris@0 110 #endif