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 BitrateIsAdjustable() const = 0;
44
48 virtual bool isOpen() const;
49
53 virtual bool hasReadMode() const;
54
58 virtual bool hasWriteMode() const;
59
63 virtual void close();
64
72 virtual AudioFileResultType getNextSample_int64(int64_t& pAudioSample) = 0;
73
82 virtual AudioFileResultType writeSample_int64(int64_t pAudioSample) = 0;
83
91 virtual AudioFileResultType getHighestSampleValue_int64(int64_t& pHighestAudioSample) = 0;
92
97
101 virtual size_t numSamples() const = 0;
102
106 virtual int64_t maxValueForSampleSize() const = 0;
107
111 const std::string& Filename() const;
112
118 void Filename(const std::string& pFilename);
119
126 void setMetadata(const std::string& pName, const std::string& pValue);
127
135 template<typename T>
136 void setMetadataFromVal(const std::string& pName, const T& pValue)
137 {
138 std::ostringstream oss;
139 oss << pValue;
140 mMetadata[pName] = oss.str();
141 }
142
151 AudioFileResultType getMetadata(const std::string& pName, std::string& pValue) const;
152
161 template<typename T>
162 AudioFileResultType getMetadataAs(const std::string& pName, T& pValue) const
163 {
164 AudioFileResultType result;
165 std::map<std::string, std::string>::const_iterator iterator = mMetadata.find(pName);
166 if (iterator != mMetadata.end())
167 {
168 std::istringstream iss(iterator->second);
169 iss >> pValue;
170 }
171 else
172 result.addError("Audio flie metadata with name " + pName + " was not found");
173 return result;
174 }
175
183 std::string getMetadata(const std::string& pName) const;
184
185 template<typename T>
186 T getMetadataAs(const std::string& pName) const
187 {
188 T value{};
189 std::map<std::string, std::string>::const_iterator iterator = mMetadata.find(pName);
190 if (iterator != mMetadata.end())
191 {
192 std::istringstream iss(iterator->second);
193 iss >> value;
194 }
195 return value;
196 }
197
205 template<typename T>
206 T getMetadataAs(const std::string& pName, const T& pDefaultVal) const
207 {
208 T value = pDefaultVal;
209 std::map<std::string, std::string>::const_iterator iterator = mMetadata.find(pName);
210 if (iterator != mMetadata.end())
211 {
212 std::istringstream iss(iterator->second);
213 iss >> value;
214 }
215 return value;
216 }
217
225 bool hasMetadata(const std::string& pName) const;
226
230 virtual AudioFileInfo getAudioFileInfo() const = 0;
231
232 virtual void seekOutputToSampleNum(size_t pSampleNum) = 0;
233
234 protected:
235 std::string mFilename;
236 std::fstream mFileStream;
237 std::ios_base::openmode mFileOpenMode;
239 std::map<std::string, std::string> mMetadata;
240
241 virtual std::streampos fileSizeAccordingToStream();
242
243 virtual void setFileMode(AudioFileModes pFileMode);
244 };
245}
246
247#endif
AudioFile(const std::string &pFilename)
Constructor.
Definition AudioFileInfo.h:14
Definition AudioFileResultType.h:13
void addError(const std::string &pError)
Definition AudioFileResultType.cpp:19
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:237
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:186
virtual bool BitrateIsAdjustable() const =0
Returns whether or not the audio file bitrate is adjustable.
size_t mDataSizeBytes
Definition AudioFile.h:238
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:162
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:136
std::map< std::string, std::string > mMetadata
Definition AudioFile.h:239
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:206
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:235
virtual AudioFileResultType goToAudioDataPos()=0
Goes to the audio data position in the audio file.
std::fstream mFileStream
Definition AudioFile.h:236
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