tmp
[blender.git] / extern / audaspace / include / devices / NULLDevice.h
1 /*******************************************************************************
2  * Copyright 2009-2016 Jörg Müller
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *   http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  ******************************************************************************/
16
17 #pragma once
18
19 /**
20  * @file NULLDevice.h
21  * @ingroup devices
22  * The NULLDevice class.
23  */
24
25 #include "devices/IDevice.h"
26 #include "devices/IHandle.h"
27
28 AUD_NAMESPACE_BEGIN
29
30 class IReader;
31
32 /**
33  * This device plays nothing.
34  * It is similar to the linux device /dev/null.
35  */
36 class AUD_API NULLDevice : public IDevice
37 {
38 private:
39         class AUD_LOCAL NULLHandle : public IHandle
40         {
41         private:
42                 // delete copy constructor and operator=
43                 NULLHandle(const NULLHandle&) = delete;
44                 NULLHandle& operator=(const NULLHandle&) = delete;
45
46         public:
47
48                 NULLHandle();
49
50                 virtual ~NULLHandle() {}
51                 virtual bool pause();
52                 virtual bool resume();
53                 virtual bool stop();
54                 virtual bool getKeep();
55                 virtual bool setKeep(bool keep);
56                 virtual bool seek(float position);
57                 virtual float getPosition();
58                 virtual Status getStatus();
59                 virtual float getVolume();
60                 virtual bool setVolume(float volume);
61                 virtual float getPitch();
62                 virtual bool setPitch(float pitch);
63                 virtual int getLoopCount();
64                 virtual bool setLoopCount(int count);
65                 virtual bool setStopCallback(stopCallback callback = 0, void* data = 0);
66         };
67
68         // delete copy constructor and operator=
69         NULLDevice(const NULLDevice&) = delete;
70         NULLDevice& operator=(const NULLDevice&) = delete;
71
72 public:
73         /**
74          * Creates a new NULLDevice.
75          */
76         NULLDevice();
77
78         virtual ~NULLDevice();
79
80         virtual DeviceSpecs getSpecs() const;
81         virtual std::shared_ptr<IHandle> play(std::shared_ptr<IReader> reader, bool keep = false);
82         virtual std::shared_ptr<IHandle> play(std::shared_ptr<ISound> sound, bool keep = false);
83         virtual void stopAll();
84         virtual void lock();
85         virtual void unlock();
86         virtual float getVolume() const;
87         virtual void setVolume(float volume);
88         virtual ISynchronizer* getSynchronizer();
89
90         /**
91          * Registers this plugin.
92          */
93         static void registerPlugin();
94 };
95
96 AUD_NAMESPACE_END