annotate base/AudioPlaySource.h @ 429:6036b38177e2

* Fix crash when running Generator
author Chris Cannam
date Wed, 18 Jun 2008 13:40:10 +0000
parents a1b6d2e33cab
children cb5eb032c28b 6a94bb528e9d
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@389 19 struct Auditionable {
Chris@389 20 virtual ~Auditionable() { }
Chris@389 21 };
Chris@389 22
Chris@0 23 /**
Chris@0 24 * Simple interface for audio playback. This should be all that the
Chris@0 25 * ViewManager needs to know about to synchronise with playback by
Chris@0 26 * sample frame, but it doesn't provide enough to determine what is
Chris@0 27 * actually being played or how. See the audioio directory for a
Chris@0 28 * concrete subclass.
Chris@0 29 */
Chris@0 30
Chris@0 31 class AudioPlaySource
Chris@0 32 {
Chris@0 33 public:
Chris@27 34 virtual ~AudioPlaySource() { }
Chris@27 35
Chris@0 36 /**
Chris@0 37 * Start playing from the given frame. If playback is already
Chris@0 38 * under way, reseek to the given frame and continue.
Chris@0 39 */
Chris@0 40 virtual void play(size_t startFrame) = 0;
Chris@0 41
Chris@0 42 /**
Chris@0 43 * Stop playback.
Chris@0 44 */
Chris@0 45 virtual void stop() = 0;
Chris@0 46
Chris@0 47 /**
Chris@0 48 * Return whether playback is currently supposed to be happening.
Chris@0 49 */
Chris@0 50 virtual bool isPlaying() const = 0;
Chris@0 51
Chris@0 52 /**
Chris@0 53 * Return the frame number that is currently expected to be coming
Chris@0 54 * out of the speakers. (i.e. compensating for playback latency.)
Chris@0 55 */
Chris@0 56 virtual size_t getCurrentPlayingFrame() = 0;
Chris@0 57
Chris@0 58 /**
Chris@0 59 * Return the current (or thereabouts) output levels in the range
Chris@0 60 * 0.0 -> 1.0, for metering purposes.
Chris@0 61 */
Chris@0 62 virtual bool getOutputLevels(float &left, float &right) = 0;
Chris@40 63
Chris@40 64 /**
Chris@249 65 * Return the sample rate of the source material -- any material
Chris@249 66 * that wants to play at a different rate will sound wrong.
Chris@249 67 */
Chris@249 68 virtual size_t getSourceSampleRate() const = 0;
Chris@249 69
Chris@249 70 /**
Chris@40 71 * Return the sample rate set by the target audio device (or the
Chris@249 72 * source sample rate if the target hasn't set one). If the
Chris@249 73 * source and target sample rates differ, resampling will occur.
Chris@40 74 */
Chris@40 75 virtual size_t getTargetSampleRate() const = 0;
Chris@389 76
Chris@389 77 /**
Chris@389 78 * Get the block size of the target audio device. This may be an
Chris@389 79 * estimate or upper bound, if the target has a variable block
Chris@389 80 * size; the source should behave itself even if this value turns
Chris@389 81 * out to be inaccurate.
Chris@389 82 */
Chris@389 83 virtual size_t getTargetBlockSize() const = 0;
Chris@389 84
Chris@389 85 /**
Chris@389 86 * Get the number of channels of audio that will be provided
Chris@389 87 * to the play target. This may be more than the source channel
Chris@389 88 * count: for example, a mono source will provide 2 channels
Chris@389 89 * after pan.
Chris@389 90 */
Chris@389 91 virtual size_t getTargetChannelCount() const = 0;
Chris@389 92
Chris@389 93 /**
Chris@389 94 * Set a plugin or other subclass of Auditionable as an
Chris@389 95 * auditioning effect.
Chris@389 96 */
Chris@389 97 virtual void setAuditioningEffect(Auditionable *) = 0;
Chris@389 98
Chris@0 99 };
Chris@0 100
Chris@0 101 #endif