Eric Oulashin's C++ Audio Mixer 1.0
SndFileBackedMetadataAudioFile.h
Go to the documentation of this file.
1#ifndef __EO_UTILS_SNDFILE_BACKED_METADATA_AUDIO_FILE_H__
2#define __EO_UTILS_SNDFILE_BACKED_METADATA_AUDIO_FILE_H__
3
4#include <cstddef>
5#include <cstdint>
6
7#include <string>
8#include <vector>
9
10#include <sndfile.h>
11
12#include "MetadataAudioFile.h"
13#include "AudioFileResultType.h"
14
15namespace EOUtils
16{
21 {
22 public:
23 void setAudioFileInfo(const AudioFileInfo& pAudioFileInfo) override;
24
25 AudioFileResultType open(AudioFileModes pOpenMode) override;
26
27 void close() override;
28
29 bool isOpen() const override;
30
31 AudioFileResultType getNextSample_int64(std::int64_t& pAudioSample) override;
32
33 AudioFileResultType writeSample_int64(std::int64_t pAudioSample) override;
34
35 AudioFileResultType getHighestSampleValue_int64(std::int64_t& pHighestAudioSample) override;
36
38
39 std::size_t numSamples() const override;
40
41 std::int64_t maxValueForSampleSize() const override;
42
43 void seekOutputToSampleNum(std::size_t pSampleNum) override;
44
45 AudioFileInfo getAudioFileInfo() const override;
46
47 AudioFileResultType setTitle(const std::string& pTitle) override;
48 AudioFileResultType setArtist(const std::string& pArtist) override;
49 AudioFileResultType setAlbum(const std::string& pAlbum) override;
50 AudioFileResultType setGenre(const std::string& pGenre) override;
51 AudioFileResultType setTrackNumber(std::uint32_t pTrackNumber, std::uint32_t pTotalTracks = 0) override;
52 AudioFileResultType setYear(const std::string& pYear) override;
53 AudioFileResultType setComment(const std::string& pComment) override;
54
55 AudioFileResultType getTitle(std::string& pTitle) const override;
56 AudioFileResultType getArtist(std::string& pArtist) const override;
57 AudioFileResultType getAlbum(std::string& pAlbum) const override;
58 AudioFileResultType getGenre(std::string& pGenre) const override;
59 AudioFileResultType getTrackNumber(std::uint32_t& pTrackNumber, std::uint32_t& pTotalTracks) const override;
60 AudioFileResultType getYear(std::string& pYear) const override;
61 AudioFileResultType getComment(std::string& pComment) const override;
62
64
65 protected:
66 explicit SndFileBackedMetadataAudioFile(const std::string& pFilename);
67
68 explicit SndFileBackedMetadataAudioFile(const std::string& pFilename, AudioFileModes pFileMode);
69
71
73
74 explicit SndFileBackedMetadataAudioFile(const std::string& pFilename, const AudioFileInfo& pLayoutHint);
75
76 virtual bool readFormatMatches(int pSfFullFormat) const = 0;
77
78 virtual int newFileSfFormatMask() const = 0;
79
80 virtual const char* formatLabel() const = 0;
81
83 virtual void configureSndfileEncoderForWrite(SNDFILE* /*pSnd*/)
84 {}
85
87
88 private:
89 SNDFILE* mSnd = nullptr;
90 SF_INFO mSf{};
91 std::vector<int> mFrameBuf;
92 std::size_t mChannelIndexInPump = 0;
93 std::vector<int> mWriteAccum;
94
95 void finalizePartialWriteFrames();
96
97 AudioFileResultType getSfStringField(int pStrKind, std::string& pOut) const;
98
99 AudioFileResultType setSfStringField(int pStrKind, const std::string& pVal);
100
101 void syncLayoutBytesFromSf();
102
103 void bumpDataSizeEstimate();
104
105 void resetReadPump();
106 };
107}
108
109#endif
Definition AudioFileInfo.h:14
Definition AudioFileResultType.h:13
MetadataAudioFile(const std::string &pFilename)
AudioFileResultType setTrackNumber(std::uint32_t pTrackNumber, std::uint32_t pTotalTracks=0) override
Definition SndFileBackedMetadataAudioFile.cpp:580
AudioFileResultType setComment(const std::string &pComment) override
Sets the comment metadata tag.
Definition SndFileBackedMetadataAudioFile.cpp:575
AudioFileResultType setArtist(const std::string &pArtist) override
Sets the artist metadata tag.
Definition SndFileBackedMetadataAudioFile.cpp:555
AudioFileInfo getAudioFileInfo() const override
Returns an AudioFile object with information about the audio file.
Definition SndFileBackedMetadataAudioFile.cpp:455
void seekOutputToSampleNum(std::size_t pSampleNum) override
Definition SndFileBackedMetadataAudioFile.cpp:434
virtual bool readFormatMatches(int pSfFullFormat) const =0
AudioFileResultType getHighestSampleValue_int64(std::int64_t &pHighestAudioSample) override
Definition SndFileBackedMetadataAudioFile.cpp:367
std::size_t numSamples() const override
Returns the number of audio samples in the audio file.
Definition SndFileBackedMetadataAudioFile.cpp:417
AudioFileResultType getAlbum(std::string &pAlbum) const override
Gets the album metadata tag.
Definition SndFileBackedMetadataAudioFile.cpp:600
void setAudioFileInfo(const AudioFileInfo &pAudioFileInfo) override
Definition SndFileBackedMetadataAudioFile.cpp:124
AudioFileResultType getGenre(std::string &pGenre) const override
Gets the genre metadata tag.
Definition SndFileBackedMetadataAudioFile.cpp:605
AudioFileResultType getTitle(std::string &pTitle) const override
Gets the title metadata tag.
Definition SndFileBackedMetadataAudioFile.cpp:590
AudioFileResultType getYear(std::string &pYear) const override
Gets the year/date metadata tag.
Definition SndFileBackedMetadataAudioFile.cpp:610
AudioFileResultType getArtist(std::string &pArtist) const override
Gets the artist metadata tag.
Definition SndFileBackedMetadataAudioFile.cpp:595
AudioFileResultType getComment(std::string &pComment) const override
Gets the comment metadata tag.
Definition SndFileBackedMetadataAudioFile.cpp:615
AudioFileResultType getTrackNumber(std::uint32_t &pTrackNumber, std::uint32_t &pTotalTracks) const override
Definition SndFileBackedMetadataAudioFile.cpp:620
bool isOpen() const override
Returns whether or not the audio file is open.
Definition SndFileBackedMetadataAudioFile.cpp:262
virtual const char * formatLabel() const =0
AudioFileInfo mFileLayout
Definition SndFileBackedMetadataAudioFile.h:86
std::int64_t maxValueForSampleSize() const override
Returns the maximum possible positive value of the audio file's sample size.
Definition SndFileBackedMetadataAudioFile.cpp:429
virtual int newFileSfFormatMask() const =0
virtual void configureSndfileEncoderForWrite(SNDFILE *)
Definition SndFileBackedMetadataAudioFile.h:83
AudioFileResultType setTitle(const std::string &pTitle) override
Sets the title metadata tag.
Definition SndFileBackedMetadataAudioFile.cpp:550
AudioFileResultType setYear(const std::string &pYear) override
Sets the year/date metadata tag.
Definition SndFileBackedMetadataAudioFile.cpp:570
AudioFileResultType setGenre(const std::string &pGenre) override
Sets the genre metadata tag.
Definition SndFileBackedMetadataAudioFile.cpp:565
SndFileBackedMetadataAudioFile(const std::string &pFilename)
Definition SndFileBackedMetadataAudioFile.cpp:73
AudioFileResultType writeSample_int64(std::int64_t pAudioSample) override
Definition SndFileBackedMetadataAudioFile.cpp:332
~SndFileBackedMetadataAudioFile() override
Definition SndFileBackedMetadataAudioFile.cpp:119
AudioFileResultType open(AudioFileModes pOpenMode) override
Definition SndFileBackedMetadataAudioFile.cpp:130
AudioFileResultType setAlbum(const std::string &pAlbum) override
Sets the album metadata tag.
Definition SndFileBackedMetadataAudioFile.cpp:560
AudioFileResultType goToAudioDataPos() override
Goes to the audio data position in the audio file.
Definition SndFileBackedMetadataAudioFile.cpp:403
void close() override
Closes the audio file.
Definition SndFileBackedMetadataAudioFile.cpp:247
AudioFileResultType getNextSample_int64(std::int64_t &pAudioSample) override
Definition SndFileBackedMetadataAudioFile.cpp:294
Definition StringUtils.cpp:6
AudioFileModes
Definition AudioFile.h:15