mirror of
https://gitlab.com/then-try-this/samplebrain.git
synced 2026-06-03 21:41:38 +00:00
89 lines
2.3 KiB
C++
89 lines
2.3 KiB
C++
/**
|
|
* @file SoundBufferAdapter.cpp
|
|
*
|
|
* A wrapper around SignalSource to use as a sound buffer in SFML.
|
|
*
|
|
* This file is part of the Aquila DSP library.
|
|
* Aquila is free software, licensed under the MIT/X11 License. A copy of
|
|
* the license is provided with the library in the LICENSE file.
|
|
*
|
|
* @package Aquila
|
|
* @version 3.0.0-dev
|
|
* @author Zbigniew Siciarz
|
|
* @date 2007-2014
|
|
* @license http://www.opensource.org/licenses/mit-license.php MIT
|
|
* @since 3.0.0
|
|
*/
|
|
|
|
#include "SoundBufferAdapter.h"
|
|
#include "../source/SignalSource.h"
|
|
#include <SFML/System.hpp>
|
|
#include <algorithm>
|
|
|
|
namespace Aquila
|
|
{
|
|
/**
|
|
* Creates the buffer with no initial data.
|
|
*/
|
|
SoundBufferAdapter::SoundBufferAdapter():
|
|
SoundBuffer()
|
|
{
|
|
}
|
|
|
|
/**
|
|
* Copy constructor.
|
|
*
|
|
* @param other buffer instance to copy from
|
|
*/
|
|
SoundBufferAdapter::SoundBufferAdapter(const SoundBufferAdapter &other):
|
|
SoundBuffer(other)
|
|
{
|
|
}
|
|
|
|
/**
|
|
* Creates the buffer with initial data provided by signal source.
|
|
*
|
|
* @param source signal source
|
|
*/
|
|
SoundBufferAdapter::SoundBufferAdapter(const SignalSource &source):
|
|
SoundBuffer()
|
|
{
|
|
loadFromSignalSource(source);
|
|
}
|
|
|
|
/**
|
|
* Destructor - does nothing by itself.
|
|
*
|
|
* Relies on virtual call to the destructor of the parent class.
|
|
*/
|
|
SoundBufferAdapter::~SoundBufferAdapter()
|
|
{
|
|
}
|
|
|
|
/**
|
|
* Loads sound data from an instance of SignalSource-subclass.
|
|
*
|
|
* Data read from source are converted to SFML-compatible sample array
|
|
* and loaded into the buffer.
|
|
*
|
|
* Name capitalized for consistency with SFML coding style.
|
|
*
|
|
* @todo get rid of copying data around, let's come up with some better way
|
|
*
|
|
* @param source signal source
|
|
* @return true if successfully loaded
|
|
*/
|
|
bool SoundBufferAdapter::loadFromSignalSource(const SignalSource &source)
|
|
{
|
|
sf::Int16* samples = new sf::Int16[source.getSamplesCount()];
|
|
std::copy(source.begin(), source.end(), samples);
|
|
bool result = loadFromSamples(samples,
|
|
source.getSamplesCount(),
|
|
1,
|
|
static_cast<unsigned int>(source.getSampleFrequency()));
|
|
delete [] samples;
|
|
|
|
return result;
|
|
}
|
|
}
|