1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
|
#include "AudioReaderWav.h"
#include "AudioLoaderWav.h"
#include "../../Main.h"
#include <cstring>
#include <IO/FileStream.h>
using namespace Death::IO;
namespace nCine
{
AudioReaderWav::AudioReaderWav(std::unique_ptr<Stream> fileHandle)
: fileHandle_(std::move(fileHandle))
{
DEATH_ASSERT(fileHandle_->IsValid());
}
std::int32_t AudioReaderWav::read(void* buffer, std::int32_t bufferSize) const
{
DEATH_ASSERT(buffer);
DEATH_ASSERT(bufferSize > 0);
std::int32_t bytes = 0;
std::int32_t bufferSeek = 0;
do {
// Read up to a buffer's worth of decoded sound data
bytes = fileHandle_->Read(buffer, bufferSize);
bufferSeek += bytes;
} while (bytes > 0 && bufferSize - bufferSeek > 0);
return bufferSeek;
}
void AudioReaderWav::rewind() const
{
fileHandle_->Seek(AudioLoaderWav::HeaderSize, SeekOrigin::Begin);
}
}
|