Music.hpp
1 //
3 // SFML - Simple and Fast Multimedia Library
4 // Copyright (C) 2007-2018 Laurent Gomila (laurent@sfml-dev.org)
5 //
6 // This software is provided 'as-is', without any express or implied warranty.
7 // In no event will the authors be held liable for any damages arising from the use of this software.
8 //
9 // Permission is granted to anyone to use this software for any purpose,
10 // including commercial applications, and to alter it and redistribute it freely,
11 // subject to the following restrictions:
12 //
13 // 1. The origin of this software must not be misrepresented;
14 // you must not claim that you wrote the original software.
15 // If you use this software in a product, an acknowledgment
16 // in the product documentation would be appreciated but is not required.
17 //
18 // 2. Altered source versions must be plainly marked as such,
19 // and must not be misrepresented as being the original software.
20 //
21 // 3. This notice may not be removed or altered from any source distribution.
22 //
24 
25 #ifndef SFML_MUSIC_HPP
26 #define SFML_MUSIC_HPP
27 
29 // Headers
31 #include <SFML/Audio/Export.hpp>
32 #include <SFML/Audio/SoundStream.hpp>
33 #include <SFML/Audio/InputSoundFile.hpp>
34 #include <SFML/System/Mutex.hpp>
35 #include <SFML/System/Time.hpp>
36 #include <string>
37 #include <vector>
38 
39 
40 namespace sf
41 {
42 class InputStream;
43 
48 class SFML_AUDIO_API Music : public SoundStream
49 {
50 public:
51 
56  template <typename T>
57  struct Span
58  {
63  Span()
64  {
65 
66  }
67 
75  Span(T off, T len):
76  offset(off),
77  length(len)
78  {
79 
80  }
81 
82  T offset;
83  T length;
84  };
85 
86  // Define the relevant Span types
87  typedef Span<Time> TimeSpan;
88 
93  Music();
94 
99  ~Music();
100 
120  bool openFromFile(const std::string& filename);
121 
143  bool openFromMemory(const void* data, std::size_t sizeInBytes);
144 
165 
172  Time getDuration() const;
173 
190 
211  void setLoopPoints(TimeSpan timePoints);
212 
213 protected:
214 
226  virtual bool onGetData(Chunk& data);
227 
234  virtual void onSeek(Time timeOffset);
235 
246  virtual Int64 onLoop();
247 
248 private:
249 
254  void initialize();
255 
264  Uint64 timeToSamples(Time position) const;
265 
274  Time samplesToTime(Uint64 samples) const;
275 
277  // Member data
279  InputSoundFile m_file;
280  std::vector<Int16> m_samples;
281  Mutex m_mutex;
282  Span<Uint64> m_loopSpan;
283 };
284 
285 } // namespace sf
286 
287 
288 #endif // SFML_MUSIC_HPP
289 
290 
Provide read access to sound files.
Abstract class for custom file input streams.
Definition: InputStream.hpp:42
Streamed music played from an audio file.
Definition: Music.hpp:49
Music()
Default constructor.
virtual void onSeek(Time timeOffset)
Change the current playing position in the stream source.
Time getDuration() const
Get the total duration of the music.
bool openFromFile(const std::string &filename)
Open a music from an audio file.
~Music()
Destructor.
bool openFromStream(InputStream &stream)
Open a music from an audio file in a custom stream.
virtual Int64 onLoop()
Change the current playing position in the stream source to the loop offset.
TimeSpan getLoopPoints() const
Get the positions of the of the sound's looping sequence.
virtual bool onGetData(Chunk &data)
Request a new chunk of audio samples from the stream source.
void setLoopPoints(TimeSpan timePoints)
Sets the beginning and end of the sound's looping sequence using sf::Time.
bool openFromMemory(const void *data, std::size_t sizeInBytes)
Open a music from an audio file in memory.
Blocks concurrent access to shared resources from multiple threads.
Definition: Mutex.hpp:48
Abstract base class for streamed audio sources.
Definition: SoundStream.hpp:46
Represents a time value.
Definition: Time.hpp:41
Structure defining a time range using the template type.
Definition: Music.hpp:58
T offset
The beginning offset of the time range.
Definition: Music.hpp:82
T length
The length of the time range.
Definition: Music.hpp:83
Span()
Default constructor.
Definition: Music.hpp:63
Span(T off, T len)
Initialization constructor.
Definition: Music.hpp:75
Structure defining a chunk of audio data to stream.
Definition: SoundStream.hpp:54