/* -----------------------------------------------------------------------------
	GSFramework
	Copyright 2001-2013 Emmanuel Julien. All Rights Reserved.
----------------------------------------------------------------------------- */


		#include "audio/audio_io.h"
		#include "filesystem/filesystem.h"
		#include "platform.h"
		#include "log/log.h"

		using namespace GS;

		template<> AudioIO *Singleton <AudioIO> ::i = NULL;


//------------------------------------------------------------------------------
void			AudioIO::RegisterStreamFactory(IAudioStreamFactory *f)
{	stream_factories.Add(f);	}
void			AudioIO::RegisterSampleFactory(ISampleFactory *f)
{	sample_factories.Add(f);	}
//------------------------------------------------------------------------------

//------------------------------------------------------------------------------
ISample				*AudioIO::LoadSample(const char *path, const char *format)
{
	String fmt(format);
	if	(Platform::Get().io->Exists(path))
		ListForeachPtr(ISampleFactory *, codec, sample_factories)
			if	(ISample *sample = codec->Load(path))
			{
				if	(!fmt || (fmt == sample->GetFormat()))
					return sample;
				_safe_delete(sample);
			}

	return NULL;
}
IAudioStream				*AudioIO::OpenStream(const char *path, const char *format)
{
	String fmt(format);
	if	(Platform::Get().io->Exists(path))
		ListForeachPtr(IAudioStreamFactory *, codec, stream_factories)
			if	(IAudioStream *stream = codec->Open(path))
			{
				if	(!fmt || (fmt == stream->GetFormat()))
					return stream;
				_safe_delete(stream);
			}
	return NULL;
}
//------------------------------------------------------------------------------
