SFML 3.1.0
Loading...
Searching...
No Matches
Classes | Public Member Functions | List of all members
sf::SoundFileReader Class Referenceabstract
Audio module

Abstract base class for sound file decoding. More...

`#include <SFML/Audio/SoundFileReader.hpp>`

## Classes
struct | Info
| Structure holding the audio properties of a sound file. More...

## Public Member Functions
virtual | ~SoundFileReader ()=default
| Virtual destructor.
virtual std::optional< Info > | open (InputStream &stream)=0
| Open a sound file for reading.
virtual void | seek (std::uint64_t sampleOffset)=0
| Change the current read position to the given sample offset.
virtual std::uint64_t | read (std::int16_t *samples, std::uint64_t maxCount)=0
| Read audio samples from the open file.

## Detailed Description

Abstract base class for sound file decoding.

This class allows users to read audio file formats not natively supported by SFML, and thus extend the set of supported readable audio formats.

A valid sound file reader must override the open, seek and write functions, as well as providing a static check function; the latter is used by SFML to find a suitable writer for a given input file.

To register a new reader, use the sf::SoundFileFactory::registerReader template function.

Usage example:

class MySoundFileReader : public sf::SoundFileReader
{
public:
[[nodiscard]] static bool check(sf::InputStream& stream)
{
// typically, read the first few header bytes and check fields that identify the format
// return true if the reader can handle the format
}
[[nodiscard]] std::optional<sf::SoundFileReader::Info> open(sf::InputStream& stream) override
{
// read the sound file header and fill the sound attributes
// (channel count, sample count and sample rate)
// return true on success
}
void seek(std::uint64_t sampleOffset) override
{
// advance to the sampleOffset-th sample from the beginning of the
sound
}
std::uint64_t read(std::int16_t* samples, std::uint64_t maxCount) override
{
// read up to 'maxCount' samples into the 'samples' array,
// convert them (for example from normalized float) if they are not stored
// as 16-bits signed integers in the file
// return the actual number of samples read
}
};
sf::SoundFileFactory::registerReader<MySoundFileReader>();
sf::InputStream
Abstract class for custom file input streams.
Definition InputStream.hpp:46
sf::SoundFileFactory::registerReader
static void registerReader()
Register a new reader.
sf::SoundFileReader
Abstract base class for sound file decoding.
Definition SoundFileReader.hpp:49
sf::SoundFileReader::open
virtual std::optional< Info > open(InputStream &stream)=0
Open a sound file for reading.
sf::SoundFileReader::seek
virtual void seek(std::uint64_t sampleOffset)=0
Change the current read position to the given sample offset.
sf::SoundFileReader::read
virtual std::uint64_t read(std::int16_t *samples, std::uint64_t maxCount)=0
Read audio samples from the open file.

See also
  sf::InputSoundFile, sf::SoundFileFactory, sf::SoundFileWriter

Definition at line 48 of file SoundFileReader.hpp.

## Constructor & Destructor Documentation

## ◆ ~SoundFileReader()

virtual sf::SoundFileReader::~SoundFileReader | ( |  | ) |
| virtual default

Virtual destructor.

## Member Function Documentation

## ◆ open()

virtual std::optional< Info > sf::SoundFileReader::open | ( | InputStream & | stream | ) |
| nodiscard pure virtual

Open a sound file for reading.

The provided stream reference is valid as long as the SoundFileReader is alive, so it is safe to use/store it during the whole lifetime of the reader.

Parameters

  stream | Source stream to read from

Returns
  Properties of the loaded sound if the file was successfully opened, std::nullopt otherwise

## ◆ read()

virtual std::uint64_t sf::SoundFileReader::read | ( | std::int16_t * | samples,
|  | std::uint64_t | maxCount )
| nodiscard pure virtual

Read audio samples from the open file.

Parameters

  samples | Pointer to the sample array to fill
  maxCount | Maximum number of samples to read

Returns
  Number of samples actually read (may be less than maxCount)

## ◆ seek()

virtual void sf::SoundFileReader::seek | ( | std::uint64_t | sampleOffset | ) |
| pure virtual

Change the current read position to the given sample offset.

The sample offset takes the channels into account. If you have a time offset instead, you can easily find the corresponding sample offset with the following formula: timeInSeconds * sampleRate * channelCount If the given offset exceeds to total number of samples, this function must jump to the end of the file.

Parameters

  sampleOffset | Index of the sample to jump to, relative to the beginning

The documentation for this class was generated from the following file:

- SoundFileReader.hpp