1 /*******************************************************************************
2 * Copyright 2015-2016 Juan Francisco Crespo Galán
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 MutableSound.h
21 * @ingroup fx
22 * The MutableSound class.
23 */
24 
25 #include "ISound.h"
26 
27 #include <memory>
28 
29 AUD_NAMESPACE_BEGIN
30 
31 /**
32 * Ths class allows to create MutableReaders for any sound.
33 */
34 class AUD_API MutableSound : public ISound
35 {
36 private:
37 	/**
38 	* A pointer to a sound.
39 	*/
40 	std::shared_ptr<ISound> m_sound;
41 
42 	// delete copy constructor and operator=
43 	MutableSound(const MutableSound&) = delete;
44 	MutableSound& operator=(const MutableSound&) = delete;
45 
46 public:
47 	/**
48 	* Creates a new MutableSound.
49 	* \param sound The sound in which the MutabeReaders created with the createReader() method will be based.
50 	*		If shared pointer to a SoundList object is used in several mutable sounds the sequential
51 	*		playback will not work properly. A copy of the SoundList object must be made in this case.
52 	*/
53 	MutableSound(std::shared_ptr<ISound> sound);
54 
55 	virtual std::shared_ptr<IReader> createReader();
56 };
57 
58 AUD_NAMESPACE_END