Loading...
Searching...
No Matches
SoundRecorder.hpp
Go to the documentation of this file.
1
2//
3// SFML - Simple and Fast Multimedia Library
4// Copyright (C) 2007-2024 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#pragma once
26
28// Headers
30#include <SFML/Audio/Export.hpp>
31
33
34#include <memory>
35#include <string>
36#include <vector>
37
38#include <cstddef>
39#include <cstdint>
40
41
42namespace sf
43{
49{
50public:
55 virtual ~SoundRecorder();
56
79 [[nodiscard]] bool start(unsigned int sampleRate = 44100);
80
87 void stop();
88
99 [[nodiscard]] unsigned int getSampleRate() const;
100
110 [[nodiscard]] static std::vector<std::string> getAvailableDevices();
111
122 [[nodiscard]] static std::string getDefaultDevice();
123
139 [[nodiscard]] bool setDevice(const std::string& name);
140
147 [[nodiscard]] const std::string& getDevice() const;
148
162 void setChannelCount(unsigned int channelCount);
163
175 [[nodiscard]] unsigned int getChannelCount() const;
176
186 [[nodiscard]] const std::vector<SoundChannel>& getChannelMap() const;
187
199 [[nodiscard]] static bool isAvailable();
200
201protected:
209
221 virtual bool onStart();
222
237 [[nodiscard]] virtual bool onProcessSamples(const std::int16_t* samples, std::size_t sampleCount) = 0;
238
248 virtual void onStop();
249
250private:
252 // Member data
254 struct Impl;
255 const std::unique_ptr<Impl> m_impl;
256};
257
258} // namespace sf
259
260
#define SFML_AUDIO_API
Abstract base class for capturing sound data.
const std::string & getDevice() const
Get the name of the current audio capture device.
const std::vector< SoundChannel > & getChannelMap() const
Get the map of position in sample frame to sound channel.
static std::vector< std::string > getAvailableDevices()
Get a list of the names of all available audio capture devices.
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 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.
virtual bool onProcessSamples(const std::int16_t *samples, std::size_t sampleCount)=0
Process a new chunk of recorded samples.
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.