ape  0.5.0
Audio Programming Environment
audiofile.h
Go to the documentation of this file.
1 #ifndef CPPAPE_AUDIOFILE_H
2 #define CPPAPE_AUDIOFILE_H
3 
4 #include "baselib.h"
5 #include "misc.h"
6 
7 namespace ape
8 {
12  class AudioFile : public umatrix<const float>
13  {
14  public:
15 
18 
25  AudioFile(const char* relativePath) : AudioFile(loadFile(relativePath)) { }
26 
31  explicit operator bool() const noexcept { return loadedOk() && data && samples(); }
32 
36  bool loadedOk() const noexcept { return fileLoadedOk; }
40  double sampleRate() const noexcept { return fileSampleRate; }
44  const char* name() const noexcept { return fileName; }
45 
46  protected:
47 
48  static APE_AudioFile loadFile(const char* relativePath, double sampleRate = APE_SampleRate_Retain)
49  {
50  APE_AudioFile file;
51  getInterface().loadAudioFile(&getInterface(), relativePath, sampleRate, &file);
52 
53  return file;
54  }
55 
56  AudioFile(const APE_AudioFile& audioFile)
57  : umatrix<const float>{audioFile.data, audioFile.channels, audioFile.samples}
58  , fileLoadedOk(audioFile.name)
59  , fileSampleRate(audioFile.sampleRate)
60  , fileName(audioFile.name)
61  , preciseLength(audioFile.fractionalLength)
62  {
63 
64  }
65 
66  protected:
67 
68  double preciseLength;
69 
70  private:
71 
72  bool fileLoadedOk;
73  double fileSampleRate;
74  const char* fileName;
75  };
76 
81  {
82  using AudioFile::loadFile;
83  public:
84 
88  constexpr static double AdoptProjectRate = APE_SampleRate_Adopt;
93  constexpr static double OriginalSampleRate = APE_SampleRate_Retain;
94 
105  ResampledAudioFile(const char* relativePath, double targetSampleRate = AdoptProjectRate) : AudioFile(loadFile(relativePath, targetSampleRate)) { }
106 
110  double fractionalLength() const noexcept { return this->preciseLength; }
111  };
112 
113 }
114 
115 #endif
ape::getInterface
APE_SharedInterface & getInterface()
Acquire the low-level C API.
APE_SampleRate_Adopt
Definition: APE.h:86
ape::ResampledAudioFile::OriginalSampleRate
constexpr static double OriginalSampleRate
Retain this file in it's original sample rate. Equivalent to a normal AudioFile
Definition: audiofile.h:93
APE_AudioFile::samples
unsigned long long samples
Definition: SharedInterface.h:84
ape::umatrix
A container representing a 2d rectangular array (and can be used syntactically like one)....
Definition: misc.h:212
ape::ResampledAudioFile
An AudioFile that can be automatically resampled to the project sample rate.
Definition: audiofile.h:80
APE_SampleRate_Retain
Definition: APE.h:87
ape::ResampledAudioFile::AdoptProjectRate
constexpr static double AdoptProjectRate
Resample this file to the project sample rate
Definition: audiofile.h:88
ape::AudioFile::sampleRate
double sampleRate() const noexcept
Returns the original sample rate of this file
Definition: audiofile.h:40
misc.h
ape::AudioFile::AudioFile
AudioFile(const APE_AudioFile &audioFile)
Definition: audiofile.h:56
ape
Definition: audiofile.h:7
ape::AudioFile
Represents a loaded audio file from disk, as a umatrix
Definition: audiofile.h:12
ape::AudioFile::loadedOk
bool loadedOk() const noexcept
Test whether the file was technically loaded okay.
Definition: audiofile.h:36
ape::umatrix< const float >::data
const float *const * data
Definition: misc.h:353
ape::umatrix< const float >::samples
std::size_t samples() const noexcept
Definition: misc.h:324
APE_AudioFile::data
const float *const * data
Definition: SharedInterface.h:88
ape::AudioFile::loadFile
static APE_AudioFile loadFile(const char *relativePath, double sampleRate=APE_SampleRate_Retain)
Definition: audiofile.h:48
ape::AudioFile::preciseLength
double preciseLength
Definition: audiofile.h:68
baselib.h
APE_AudioFile::channels
unsigned int channels
Definition: SharedInterface.h:85
ape::ResampledAudioFile::ResampledAudioFile
ResampledAudioFile(const char *relativePath, double targetSampleRate=AdoptProjectRate)
Load a resampled audio file.
Definition: audiofile.h:105
ape::AudioFile::AudioFile
AudioFile(const char *relativePath)
Load the file into memory, entirely.
Definition: audiofile.h:25
ape::ResampledAudioFile::fractionalLength
double fractionalLength() const noexcept
Length in fractional samples (if resampled)
Definition: audiofile.h:110
APE_AudioFile
Definition: SharedInterface.h:81
ape::AudioFile::name
const char * name() const noexcept
Returns the local file name of this file
Definition: audiofile.h:44