added: Missing files from last commit
[xbmc:xbmc-antiquated.git] / XBMC / xbmc / cores / AudioRenderers / WaveFileRenderer.h
1 /*
2  *      Copyright (C) 2009 Team XBMC
3  *      http://www.xbmc.org
4  *
5  *  This Program is free software; you can redistribute it and/or modify
6  *  it under the terms of the GNU General Public License as published by
7  *  the Free Software Foundation; either version 2, or (at your option)
8  *  any later version.
9  *
10  *  This Program is distributed in the hope that it will be useful,
11  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
12  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  *  GNU General Public License for more details.
14  *
15  *  You should have received a copy of the GNU General Public License
16  *  along with XBMC; see the file COPYING.  If not, write to
17  *  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
18  *  http://www.gnu.org/copyleft/gpl.html
19  *
20  */
21
22 #ifndef __WAVE_FILE_RENDERER_H__
23 #define __WAVE_FILE_RENDERER_H__
24
25 #if _MSC_VER > 1000
26 #pragma once
27 #endif // _MSC_VER > 1000
28
29 #include <iostream>
30 #include <fstream>
31
32 using namespace std;
33
34 typedef struct tag_WAVE_FILE_HEADER
35 {
36   // Chunk Header
37   unsigned int chunkId;
38   unsigned int chunkSize;
39   unsigned int chunkFormat;
40   // Sub-Chunk 1 (Format)
41   unsigned int subChunk1Id;
42   unsigned int subChunk1Size;
43   unsigned short audioFormat;
44   unsigned short numChannels;
45   unsigned int samplesPerSec;
46   unsigned int bytesPerSec;  
47   unsigned short blockAlign; 
48   unsigned short bitsPerSample;
49   // Sub-Chunk 2 (Data)
50   unsigned int subChunk2Id;
51   unsigned int subChunk2Size;
52 } WAVEFILEHEADER, *LPWAVEFILEHEADER;
53
54 class CWaveFileRenderer
55 {
56 public:
57   CWaveFileRenderer();
58   virtual ~CWaveFileRenderer();
59   bool Open(const char* filePath, unsigned int bufferSize, unsigned int sampleRate);
60   unsigned int GetSpace();
61   unsigned int WriteData(short* pSamples, size_t len);
62   bool Save();
63   void Close(bool saveData);
64
65 private:
66   fstream m_OutputStream;
67   BYTE* m_pOutputBuffer;
68   unsigned int m_OutputBufferSize;
69   unsigned int m_OutputBufferPos;
70
71   WAVEFILEHEADER m_FileHeader;
72
73   void UpdateHeader();
74 };
75
76 #endif // __WAVE_FILE_RENDERER_H__