InputSoundFile.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_INPUTSOUNDFILE_HPP
26 #define SFML_INPUTSOUNDFILE_HPP
27 
29 // Headers
31 #include <SFML/Audio/Export.hpp>
32 #include <SFML/System/NonCopyable.hpp>
33 #include <SFML/System/Time.hpp>
34 #include <string>
35 #include <algorithm>
36 
37 
38 namespace sf
39 {
40 class InputStream;
41 class SoundFileReader;
42 
47 class SFML_AUDIO_API InputSoundFile : NonCopyable
48 {
49 public:
50 
56 
62 
74  bool openFromFile(const std::string& filename);
75 
88  bool openFromMemory(const void* data, std::size_t sizeInBytes);
89 
102 
109  Uint64 getSampleCount() const;
110 
117  unsigned int getChannelCount() const;
118 
125  unsigned int getSampleRate() const;
126 
136  Time getDuration() const;
137 
145 
152  Uint64 getSampleOffset() const;
153 
171  void seek(Uint64 sampleOffset);
172 
185  void seek(Time timeOffset);
186 
196  Uint64 read(Int16* samples, Uint64 maxCount);
197 
198 private:
199 
204  void close();
205 
207  // Member data
209  SoundFileReader* m_reader;
210  InputStream* m_stream;
211  bool m_streamOwned;
212  Uint64 m_sampleOffset;
213  Uint64 m_sampleCount;
214  unsigned int m_channelCount;
215  unsigned int m_sampleRate;
216 };
217 
218 } // namespace sf
219 
220 
221 #endif // SFML_INPUTSOUNDFILE_HPP
222 
223 
Provide read access to sound files.
~InputSoundFile()
Destructor.
bool openFromStream(InputStream &stream)
Open a sound file from a custom stream for reading.
InputSoundFile()
Default constructor.
bool openFromMemory(const void *data, std::size_t sizeInBytes)
Open a sound file in memory for reading.
unsigned int getChannelCount() const
Get the number of channels used by the sound.
Uint64 getSampleCount() const
Get the total number of audio samples in the file.
unsigned int getSampleRate() const
Get the sample rate of the sound.
Uint64 getSampleOffset() const
Get the read offset of the file in samples.
Uint64 read(Int16 *samples, Uint64 maxCount)
Read audio samples from the open file.
void seek(Time timeOffset)
Change the current read position to the given time offset.
Time getDuration() const
Get the total duration of the sound file.
void seek(Uint64 sampleOffset)
Change the current read position to the given sample offset.
Time getTimeOffset() const
Get the read offset of the file in time.
bool openFromFile(const std::string &filename)
Open a sound file from the disk for reading.
Abstract class for custom file input streams.
Definition: InputStream.hpp:42
Utility class that makes any derived class non-copyable.
Definition: NonCopyable.hpp:42
Abstract base class for sound file decoding.
Represents a time value.
Definition: Time.hpp:41