SoundRecorder.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_SOUNDRECORDER_HPP
26 #define SFML_SOUNDRECORDER_HPP
27 
29 // Headers
31 #include <SFML/Audio/Export.hpp>
32 #include <SFML/Audio/AlResource.hpp>
33 #include <SFML/System/Thread.hpp>
34 #include <SFML/System/Time.hpp>
35 #include <vector>
36 #include <string>
37 
38 
39 namespace sf
40 {
45 class SFML_AUDIO_API SoundRecorder : AlResource
46 {
47 public:
48 
53  virtual ~SoundRecorder();
54 
77  bool start(unsigned int sampleRate = 44100);
78 
85  void stop();
86 
97  unsigned int getSampleRate() const;
98 
108  static std::vector<std::string> getAvailableDevices();
109 
120  static std::string getDefaultDevice();
121 
137  bool setDevice(const std::string& name);
138 
145  const std::string& getDevice() const;
146 
160  void setChannelCount(unsigned int channelCount);
161 
173  unsigned int getChannelCount() const;
174 
186  static bool isAvailable();
187 
188 protected:
189 
197 
214  void setProcessingInterval(Time interval);
215 
227  virtual bool onStart();
228 
243  virtual bool onProcessSamples(const Int16* samples, std::size_t sampleCount) = 0;
244 
254  virtual void onStop();
255 
256 private:
257 
265  void record();
266 
275  void processCapturedSamples();
276 
283  void cleanup();
284 
286  // Member data
288  Thread m_thread;
289  std::vector<Int16> m_samples;
290  unsigned int m_sampleRate;
291  Time m_processingInterval;
292  bool m_isCapturing;
293  std::string m_deviceName;
294  unsigned int m_channelCount;
295 };
296 
297 } // namespace sf
298 
299 
300 #endif // SFML_SOUNDRECORDER_HPP
301 
302 
Base class for classes that require an OpenAL context.
Definition: AlResource.hpp:41
Abstract base class for capturing sound data.
static std::vector< std::string > getAvailableDevices()
Get a list of the names of all available audio capture devices.
virtual bool onProcessSamples(const Int16 *samples, std::size_t sampleCount)=0
Process a new chunk of recorded samples.
SoundRecorder()
Default constructor.
unsigned int getChannelCount() const
Get the number of channels used by this recorder.
bool start(unsigned int sampleRate=44100)
Start the capture.
virtual bool onStart()
Start capturing audio data.
void setProcessingInterval(Time interval)
Set the processing interval.
void stop()
Stop the capture.
bool setDevice(const std::string &name)
Set the audio capture device.
static bool isAvailable()
Check if the system supports audio capture.
const std::string & getDevice() const
Get the name of the current audio capture device.
virtual ~SoundRecorder()
destructor
static std::string getDefaultDevice()
Get the name of the default audio capture device.
void setChannelCount(unsigned int channelCount)
Set the channel count of the audio capture device.
unsigned int getSampleRate() const
Get the sample rate.
virtual void onStop()
Stop capturing audio data.
Utility class to manipulate threads.
Definition: Thread.hpp:49
Represents a time value.
Definition: Time.hpp:41