Eric Oulashin's C++ Audio Mixer 1.0
OggFile.h
Go to the documentation of this file.
1#ifndef __EO_UTILS_OGG_FILE_H__
2#define __EO_UTILS_OGG_FILE_H__
3
4#include <cstdint>
5
6#include <string>
7#include <utility>
8
10#include "OggFileInfo.h"
11
12namespace EOUtils
13{
16 {
17 explicit OggWriteQuality(double pQualityBestOneWorstZero);
18
20 };
21
27 {
28 explicit OggWriteApproxBitrateKbps(std::uint32_t pApproxNominalBitrateKbps);
29
31 };
32
33 inline OggWriteQuality::OggWriteQuality(double pQualityBestOneWorstZero)
34 : QualityBestOneWorstZero(pQualityBestOneWorstZero)
35 {
36 }
37
38 inline OggWriteApproxBitrateKbps::OggWriteApproxBitrateKbps(std::uint32_t pApproxNominalBitrateKbps)
39 : ApproxNominalBitrateKbps(pApproxNominalBitrateKbps)
40 {
41 }
42
44 {
45 public:
46 explicit OggFile(const std::string& pFilename);
47
48 explicit OggFile(const std::string& pFilename, const OggFileInfo& pFileInfo);
49
50 explicit OggFile(const std::string& pFilename, AudioFileModes pFileMode);
51
52 explicit OggFile(const std::string& pFilename, OggWriteQuality pQuality);
53
54 explicit OggFile(const std::string& pFilename, OggWriteApproxBitrateKbps pApproxBitrate);
55
56 OggFile(const OggFile& pOther);
57
58 OggFile(OggFile&& pOther) noexcept;
59
60 ~OggFile() override;
61
62 AudioFileResultType open(AudioFileModes pOpenMode) override;
63
64 void setAudioFileInfo(const AudioFileInfo& pAudioFileInfo) override;
65
66 const OggFileInfo& getFileInfo() const;
67
68 void setOggWriteQualityBestOneWorstZero(double pQuality);
69
70 void setOggWriteApproxNominalBitrateKbps(std::uint32_t pKbps);
71
73
74 protected:
75 bool readFormatMatches(int pSfFullFormat) const override;
76
77 int newFileSfFormatMask() const override;
78
79 const char* formatLabel() const override;
80
81 void configureSndfileEncoderForWrite(SNDFILE* pSnd) override;
82
83 private:
84 enum class OggWriteEncodeStyle : std::uint8_t
85 {
86 LibsndfileDefault = 0,
87 QualityVbr,
88 ApproxBitrateHeuristic,
89 };
90
91 OggFileInfo mOggInfo;
92 OggWriteEncodeStyle mOggWriteEncodeStyle = OggWriteEncodeStyle::LibsndfileDefault;
93 double mOggWriteQualityBestOne = 1.0;
94 std::uint32_t mOggWriteApproxKbps = 192;
95 };
96}
97
98#endif
Definition AudioFileInfo.h:14
Definition AudioFileResultType.h:13
Definition OggFileInfo.h:10
AudioFileResultType open(AudioFileModes pOpenMode) override
Definition OggFile.cpp:113
OggFile(const std::string &pFilename)
Definition OggFile.cpp:30
void setAudioFileInfo(const AudioFileInfo &pAudioFileInfo) override
Definition OggFile.cpp:107
int newFileSfFormatMask() const override
Definition OggFile.cpp:131
void setOggWriteQualityBestOneWorstZero(double pQuality)
Definition OggFile.cpp:88
bool readFormatMatches(int pSfFullFormat) const override
Definition OggFile.cpp:126
~OggFile() override
void configureSndfileEncoderForWrite(SNDFILE *pSnd) override
Definition OggFile.cpp:141
const OggFileInfo & getFileInfo() const
Definition OggFile.cpp:121
const char * formatLabel() const override
Definition OggFile.cpp:136
void clearOggWriteEncodingOverrides()
Definition OggFile.cpp:100
void setOggWriteApproxNominalBitrateKbps(std::uint32_t pKbps)
Definition OggFile.cpp:94
SndFileBackedMetadataAudioFile(const std::string &pFilename)
Definition SndFileBackedMetadataAudioFile.cpp:73
Definition StringUtils.cpp:6
AudioFileModes
Definition AudioFile.h:15
Definition OggFile.h:27
std::uint32_t ApproxNominalBitrateKbps
Definition OggFile.h:30
OggWriteApproxBitrateKbps(std::uint32_t pApproxNominalBitrateKbps)
Definition OggFile.h:38
Definition OggFile.h:16
OggWriteQuality(double pQualityBestOneWorstZero)
Definition OggFile.h:33
double QualityBestOneWorstZero
Definition OggFile.h:19