]> git.mxchange.org Git - simgear.git/blob - simgear/sound/sample_queue.hxx
Remove duplicate members in SGSampleQueue.
[simgear.git] / simgear / sound / sample_queue.hxx
1 // queue.hxx -- Sample Queue encapsulation class
2 // 
3 // based on sample.hxx
4 // 
5 // Copyright (C) 2010 Erik Hofman <erik@ehofman.com>
6 //
7 // This program is free software; you can redistribute it and/or
8 // modify it under the terms of the GNU General Public License as
9 // published by the Free Software Foundation; either version 2 of the
10 // License, or (at your option) any later version.
11 //
12 // This program is distributed in the hope that it will be useful, but
13 // WITHOUT ANY WARRANTY; without even the implied warranty of
14 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15 // General Public License for more details.
16 //
17 // You should have received a copy of the GNU General Public License
18 // along with this program; if not, write to the Free Software Foundation,
19 // Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
20 //
21 // $Id$
22
23 /**
24  * \file audio sample.hxx
25  * Provides a sample queue encapsulation
26  */
27
28 #ifndef _SG_QUEUE_HXX
29 #define _SG_QUEUE_HXX 1
30
31 #ifndef __cplusplus
32 # error This library requires C++
33 #endif
34
35 #include <string>
36 #include <vector>
37
38 #include <simgear/compiler.h>
39 #include <simgear/structure/SGReferenced.hxx>
40 #include <simgear/structure/SGSharedPtr.hxx>
41
42 #include "sample_openal.hxx"
43
44 /**
45  * manages everything we need to know for an individual audio sample
46  */
47
48 class SGSampleQueue : public SGSoundSample {
49 public:
50
51
52      /**
53       * Empty constructor, can be used to read data to the systems
54       * memory and not to the driver.
55       * @param freq sample frequentie of the samples
56       * @param format OpenAL format id of the data
57       */
58     SGSampleQueue(int freq, int format = AL_FORMAT_MONO8);
59
60     /**
61      * Destructor
62      */
63     ~SGSampleQueue ();
64
65     /**
66      * Schedule this audio sample to stop playing.
67      */
68     virtual void stop();
69
70     /**
71      * Queue new data for this audio sample
72      * @param data Pointer to a memory block containg this audio sample data.
73      * @param len length of the sample buffer in bytes
74      */
75     void add( const void* smp_data, size_t len );
76
77     /**
78      * Set the source id of this source
79      * @param sid OpenAL source-id
80      */
81     virtual void set_source(unsigned int sid);
82
83     /**
84      * Test if the buffer-id of this audio sample may be passed to OpenAL.
85      * @return false for sample queue
86      */
87     inline bool is_valid_buffer() const { return false; }
88
89     inline virtual bool is_queue() const { return true; }
90
91 private:
92     std::string _refname;       // sample name
93     std::vector<unsigned int> _buffers;
94     unsigned int _buffer;
95
96     bool _playing;
97
98     std::string random_string();
99 };
100
101
102 #endif // _SG_QUEUE_HXX
103
104