Eric Oulashin's C++ Audio Mixer 1.0
AudioFile.h
Go to the documentation of this file.
1#ifndef __EO_UTILS_AUDIO_FILE_H__
2#define __EO_UTILS_AUDIO_FILE_H__
3
4#include <string>
5#include <fstream>
6#include <map>
7#include <sstream>
8
10#include "AudioFileInfo.h"
11
12namespace EOUtils
13{
20
22 {
23 public:
28 explicit AudioFile(const std::string& pFilename);
29
30 explicit AudioFile(const std::string& pFilename, AudioFileModes pFileMode);
31
32 AudioFile(const AudioFile& pAudioFile);
33
34 virtual ~AudioFile();
35
36 virtual void setAudioFileInfo(const AudioFileInfo& pAudioFileInfo) = 0;
37
38 virtual AudioFileResultType open(AudioFileModes pOpenMode);
39
43 virtual bool isOpen() const;
44
48 virtual bool hasReadMode() const;
49
53 virtual bool hasWriteMode() const;
54
58 virtual void close();
59
67 virtual AudioFileResultType getNextSample_int64(int64_t& pAudioSample) = 0;
68
77 virtual AudioFileResultType writeSample_int64(int64_t pAudioSample) = 0;
78
86 virtual AudioFileResultType getHighestSampleValue_int64(int64_t& pHighestAudioSample) = 0;
87
92
96 virtual size_t numSamples() const = 0;
97
101 virtual int64_t maxValueForSampleSize() const = 0;
102
106 const std::string& Filename() const;
107
113 void Filename(const std::string& pFilename);
114
121 void setMetadata(const std::string& pName, const std::string& pValue);
122
130 template<typename T>
131 void setMetadataFromVal(const std::string& pName, const T& pValue)
132 {
133 std::ostringstream oss;
134 oss << pValue;
135 mMetadata[pName] = oss.str();
136 }
137
146 AudioFileResultType getMetadata(const std::string& pName, std::string& pValue) const;
147
156 template<typename T>
157 AudioFileResultType getMetadataAs(const std::string& pName, T& pValue) const
158 {
160 std::map<std::string, std::string>::const_iterator iterator = mMetadata.find(pName);
161 if (iterator != mMetadata.end())
162 {
163 std::istringstream iss(iterator->second);
164 iss >> pValue;
165 }
166 else
167 result.addError("Audio flie metadata with name " + pName + " was not found");
168 return result;
169 }
170
178 std::string getMetadata(const std::string& pName) const;
179
180 template<typename T>
181 T getMetadataAs(const std::string& pName) const
182 {
183 T value;
184 std::map<std::string, std::string>::const_iterator iterator = mMetadata.find(pName);
185 if (iterator != mMetadata.end())
186 {
187 std::istringstream iss(iterator->second);
188 iss >> value;
189 }
190 return value;
191 }
192
200 template<typename T>
201 T getMetadataAs(const std::string& pName, const T& pDefaultVal) const
202 {
203 T value = pDefaultVal;
204 std::map<std::string, std::string>::const_iterator iterator = mMetadata.find(pName);
205 if (iterator != mMetadata.end())
206 {
207 std::istringstream iss(iterator->second);
208 iss >> value;
209 }
210 return value;
211 }
212
220 bool hasMetadata(const std::string& pName) const;
221
225 virtual AudioFileInfo getAudioFileInfo() const = 0;
226
227 virtual void seekOutputToSampleNum(size_t pSampleNum) = 0;
228
229 protected:
230 std::string mFilename;
231 std::fstream mFileStream;
232 std::ios_base::openmode mFileOpenMode;
234 std::map<std::string, std::string> mMetadata;
235
236 virtual std::streampos fileSizeAccordingToStream();
237
238 virtual void setFileMode(AudioFileModes pFileMode);
239 };
240}
241
242#endif
AudioFileResultType * result
Definition FLACFileInfo.cpp:24
Definition AudioFileInfo.h:14
Definition AudioFileResultType.h:13
Definition AudioFile.h:22
virtual int64_t maxValueForSampleSize() const =0
Returns the maximum possible positive value of the audio file's sample size.
std::string getMetadata(const std::string &pName) const
Gets a metadata value.
virtual AudioFileResultType getHighestSampleValue_int64(int64_t &pHighestAudioSample)=0
Gets the highest audio sample value from the file, cast to a 64-bit integer.
std::ios_base::openmode mFileOpenMode
Definition AudioFile.h:232
virtual void setAudioFileInfo(const AudioFileInfo &pAudioFileInfo)=0
virtual void setFileMode(AudioFileModes pFileMode)
Definition AudioFile.cpp:127
AudioFileResultType getMetadata(const std::string &pName, std::string &pValue) const
Gets a metadata value as a string.
virtual void close()
Closes the audio file.
Definition AudioFile.cpp:69
T getMetadataAs(const std::string &pName) const
Definition AudioFile.h:181
size_t mDataSizeBytes
Definition AudioFile.h:233
virtual AudioFileResultType open(AudioFileModes pOpenMode)
Definition AudioFile.cpp:38
void setMetadata(const std::string &pName, const std::string &pValue)
Adds a piece of metadata for the audio file.
Definition AudioFile.cpp:85
AudioFile(const std::string &pFilename, AudioFileModes pFileMode)
AudioFileResultType getMetadataAs(const std::string &pName, T &pValue) const
Gets a metadata value. Templatized to capture the value as any type.
Definition AudioFile.h:157
virtual bool hasWriteMode() const
Returns whether or not write mode is enabled for the file.
Definition AudioFile.cpp:64
void setMetadataFromVal(const std::string &pName, const T &pValue)
Adds a piece of metadata for the audio file. Templatized for any value type. The value will be conver...
Definition AudioFile.h:131
std::map< std::string, std::string > mMetadata
Definition AudioFile.h:234
AudioFile(const std::string &pFilename)
Constructor.
virtual bool hasReadMode() const
Returns whether or not read mode is enabled for the file.
Definition AudioFile.cpp:59
virtual AudioFileResultType writeSample_int64(int64_t pAudioSample)=0
Writes an audio sample to the file. The parameter is a 64-bit integer but will be cast to the bitness...
virtual size_t numSamples() const =0
Returns the number of audio samples in the audio file.
virtual AudioFileResultType getNextSample_int64(int64_t &pAudioSample)=0
Gets the next sample from the file, cast to a 64-bit integer.
void Filename(const std::string &pFilename)
Setter for the filename of the audio file.
virtual bool isOpen() const
Returns whether or not the audio file is open.
Definition AudioFile.cpp:54
T getMetadataAs(const std::string &pName, const T &pDefaultVal) const
Gets a metadata value. Templatized to return it as any type.
Definition AudioFile.h:201
virtual std::streampos fileSizeAccordingToStream()
Definition AudioFile.cpp:116
const std::string & Filename() const
Gets the filename of the audio file.
Definition AudioFile.cpp:75
std::string mFilename
Definition AudioFile.h:230
virtual AudioFileResultType goToAudioDataPos()=0
Goes to the audio data position in the audio file.
std::fstream mFileStream
Definition AudioFile.h:231
bool hasMetadata(const std::string &pName) const
Returns whether or not a metadata item exists.
Definition AudioFile.cpp:111
virtual void seekOutputToSampleNum(size_t pSampleNum)=0
virtual ~AudioFile()
Definition AudioFile.cpp:32
virtual AudioFileInfo getAudioFileInfo() const =0
Returns an AudioFile object with information about the audio file.
Definition StringUtils.cpp:6
AudioFileModes
Definition AudioFile.h:15
@ AUDIO_FILE_WRITE
Definition AudioFile.h:17
@ AUDIO_FILE_READ
Definition AudioFile.h:16
@ AUDIO_FILE_READ_WRITE
Definition AudioFile.h:18