Files
FlaxEngine/Source/Engine/Tools/AudioTool/OggVorbisDecoder.h
2023-01-10 15:29:37 +01:00

56 lines
1.3 KiB
C++

// Copyright (c) 2012-2023 Wojciech Figat. All rights reserved.
#pragma once
#if COMPILE_WITH_OGG_VORBIS
#include "AudioDecoder.h"
#include "Engine/Serialization/ReadStream.h"
#include <ThirdParty/vorbis/vorbisfile.h>
/// <summary>
/// Decodes .ogg audio data into raw PCM format.
/// </summary>
/// <seealso cref="AudioDecoder" />
class OggVorbisDecoder : public AudioDecoder
{
public:
ReadStream* Stream;
uint32 Offset;
uint32 ChannelCount;
OggVorbis_File OggVorbisFile;
public:
/// <summary>
/// Initializes a new instance of the <see cref="OggVorbisDecoder"/> class.
/// </summary>
OggVorbisDecoder()
{
Stream = nullptr;
Offset = 0;
ChannelCount = 0;
OggVorbisFile.datasource = nullptr;
}
/// <summary>
/// Finalizes an instance of the <see cref="OggVorbisDecoder"/> class.
/// </summary>
~OggVorbisDecoder()
{
if (OggVorbisFile.datasource != nullptr)
ov_clear(&OggVorbisFile);
}
public:
// [AudioDecoder]
bool Open(ReadStream* stream, AudioDataInfo& info, uint32 offset = 0) override;
void Seek(uint32 offset) override;
void Read(byte* samples, uint32 numSamples) override;
bool IsValid(ReadStream* stream, uint32 offset = 0) override;
};
#endif