blob: 5db3d4bd1ab6870dfe360a2cffdb712d4675d4e8 (
plain) (
blame)
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
|
#ifndef WAV_HPP
#define WAV_HPP
#include "FourCC.hpp"
#include <io.h>
#include <exception>
#include <string>
#include <iosfwd>
#include <vector>
namespace WAV
{
class FileError : public exception
{
public:
explicit FileError(const char* message);
const char* what() const;
private:
const std::string message;
};
struct Format
{
unsigned short formatTag;
unsigned short nChannels;
unsigned long samplesPerSec;
unsigned long avgBytesPerSec;
unsigned short blockAlign;
unsigned short bitsPerSample;
typedef std::vector<unsigned char> ByteArray;
ByteArray extra;
};
std::ostream& operator<<(std::ostream&, const Format&);
typedef __int64 offset_t;
class File
{
public:
enum mode_t { in, out, inout };
File();
File(const char* name, mode_t mode);
~File();
void open(const char* name, mode_t mode);
void close();
bool isOpen() const;
bool eof() const;
//size_t sampleNum() const;
//size_t sampleCount() const;
//void seekSample(size_t sampleNum) const;
offset_t offset() const;
void seekOffset(offset_t) const;
size_t read(void* buffer, size_t size) const;
void write(const void* buffer, size_t size);
mode_t mode() const;
const char* name() const;
const Format& format() const;
Format& format();
void seekFormat() const;
//void readFormat() const;
void readFormatChunk() const;
void readFactChunk() const;
void setFactSize(size_t);
size_t factSize() const;
void seekFact() const;
void writeFact(const void*, size_t);
void readFact(void* buffer, size_t size) const;
void writeFormat();
void writeFormatChunk();
size_t dataSize() const;
private:
File(const File&);
File& operator=(const File&);
void init();
void seek(__int64, int) const;
const FourCC queryId() const;
const FourCC readId() const;
void writeId(const char* id);
void writeSize(size_t size);
size_t readSize() const;
int handle_;
__int64 dataPosn;
size_t m_dataSize;
//size_t m_sampleCount;
char name_[_MAX_PATH];
mode_t mode_;
mutable Format format_;
mutable size_t m_factSize;
};
}
#endif
|