/*
 * Copyright (c) 2009 by Oleg Trifonov <otrifonow@gmail.com>
 *
 * This file is free software; you can redistribute it and/or modify
 * it under the terms of either the GNU General Public License version 2
 * or the GNU Lesser General Public License version 2.1, both as
 * published by the Free Software Foundation.
 */

#ifndef _WAV_H_
#define _WAV_H_

#include <string>

#include "trStream.h"

class WavFile {
public:
	WavFile();
	~WavFile();

	// открывает файл, возвращает false в случае если возникли ошибки чтения или распознавания
	bool Open(const char* fileName);

	// Возвращает тип файла
	const std::string& GetType() { return iType; };

	// Возвращает количество каналов
	UInt32 GetChannels() { return iChannels; };	

	// Возвращает частоту семплов (Гц)
	UInt32 GetSampleRate() { return iSampleRate; };

	// возвращает количество скорость воспроизведения (байт/сек)
	UInt32 GetBytesPerSec() { return iBpS; };

	// возвращает общее количество сэмплов в файле
	UInt32 GetTotalSamples() { return iTotalSamples; };

	// Возвращает длительность звучания в секундах
	double GetDurability() { return iDurability; };

	// Возвращает массив данных
	TrMemStream& GetData() { return iData; };

	// Возвращает количество байт в сэмпле
	UInt32 GetBitsPerSample() { return iBitsPerSample; };

	// Возвращает строку описания ошибки, если она возникла при загрузке, иначе - пустую строку
	const std::string GetErrorStr() { return iErrorStr; }

private:	
	std::string iType;
	UInt32 iChannels;
	UInt32 iSampleRate;
	UInt32 iBpS;
	UInt32 iTotalSamples;
	double iDurability;
	TrMemStream iData;
	std::string iErrorStr;
	UInt32 iBitsPerSample;
};

#endif // _WAV_H_
