HephAudio v3.1.0
A cross-platform C++ library for recording, playing, and processing audio on Windows, Android, Linux, iOS, and macOS.
Loading...
Searching...
No Matches
HephAudioShared.h
Go to the documentation of this file.
1#pragma once
2#include "HephShared.h"
3#include <cmath>
4
7#if !defined(HEPH_ENV_64_BIT)
8#error 32-bit is not supported!
9#endif
10
15#define HEPHAUDIO_VERSION_MAJOR 3
16
21#define HEPHAUDIO_VERSION_MINOR 1
22
27#define HEPHAUDIO_VERSION_PATCH 0
28
33#define HEPHAUDIO_VERSION "v" \
34 HEPH_TOSTRING(HEPHAUDIO_VERSION_MAJOR) "." \
35 HEPH_TOSTRING(HEPHAUDIO_VERSION_MINOR) "." \
36 HEPH_TOSTRING(HEPHAUDIO_VERSION_PATCH)
37
38#define HEPHAUDIO_FORMAT_TAG_PCM (0x0001)
39#define HEPHAUDIO_FORMAT_TAG_IEEE_FLOAT (0x0003)
40#define HEPHAUDIO_FORMAT_TAG_ALAW (0x0006)
41#define HEPHAUDIO_FORMAT_TAG_MULAW (0x0007)
42#define HEPHAUDIO_FORMAT_TAG_WMA (0x0161)
43#define HEPHAUDIO_FORMAT_TAG_WMAUDIO_LOSSLESS (0x0163)
44#define HEPHAUDIO_FORMAT_TAG_WMAVOICE (0x000A)
45#define HEPHAUDIO_FORMAT_TAG_MPEG (0x0050)
46#define HEPHAUDIO_FORMAT_TAG_MP3 (0x0055)
47#define HEPHAUDIO_FORMAT_TAG_AAC (0xA106)
48#define HEPHAUDIO_FORMAT_TAG_ALAC (0x6C61)
49#define HEPHAUDIO_FORMAT_TAG_FLAC (0xF1AC)
50#define HEPHAUDIO_FORMAT_TAG_OPUS (0x704F)
51#define HEPHAUDIO_FORMAT_TAG_VORBIS (0x674F)
52#define HEPHAUDIO_FORMAT_TAG_EXTENSIBLE (0xFFFE)
53
59#if defined(HEPHAUDIO_INFO_LOGGING)
60#define HEPHAUDIO_LOG(logMessage, logType) Heph::ConsoleLogger::Log(logMessage, logType, "HephAudio")
61#else
62#define HEPHAUDIO_LOG(logMessage, logType)
63#endif
64
65#define UINT24_MAX (16777215)
66#define INT24_MIN (-8388608)
67#define INT24_MAX (8388607)
68
101#if defined(HEPH_AUDIO_SAMPLE_TYPE_DBL)
102typedef double heph_audio_sample_t;
103#define HEPH_AUDIO_SAMPLE_MIN (-1.0)
104#define HEPH_AUDIO_SAMPLE_MAX (1.0)
105#define HEPHAUDIO_FORMAT_TAG_HEPHAUDIO_INTERNAL HEPHAUDIO_FORMAT_TAG_IEEE_FLOAT
106#elif defined(HEPH_AUDIO_SAMPLE_TYPE_FLT)
107typedef float heph_audio_sample_t;
108#define HEPH_AUDIO_SAMPLE_MIN (-1.0f)
109#define HEPH_AUDIO_SAMPLE_MAX (1.0f)
110#define HEPHAUDIO_FORMAT_TAG_HEPHAUDIO_INTERNAL HEPHAUDIO_FORMAT_TAG_IEEE_FLOAT
111#elif defined(HEPH_AUDIO_SAMPLE_TYPE_S64)
112typedef int64_t heph_audio_sample_t;
113#define HEPH_AUDIO_SAMPLE_MIN (INT64_MIN)
114#define HEPH_AUDIO_SAMPLE_MAX (INT64_MAX)
115#define HEPHAUDIO_FORMAT_TAG_HEPHAUDIO_INTERNAL HEPHAUDIO_FORMAT_TAG_PCM
116#elif defined(HEPH_AUDIO_SAMPLE_TYPE_S32)
117typedef int32_t heph_audio_sample_t;
118#define HEPH_AUDIO_SAMPLE_MIN (INT32_MIN)
119#define HEPH_AUDIO_SAMPLE_MAX (INT32_MAX)
120#define HEPHAUDIO_FORMAT_TAG_HEPHAUDIO_INTERNAL HEPHAUDIO_FORMAT_TAG_PCM
121#elif defined(HEPH_AUDIO_SAMPLE_TYPE_S16)
122typedef int16_t heph_audio_sample_t;
123#define HEPH_AUDIO_SAMPLE_MIN (INT16_MIN)
124#define HEPH_AUDIO_SAMPLE_MAX (INT16_MAX)
125#define HEPHAUDIO_FORMAT_TAG_HEPHAUDIO_INTERNAL HEPHAUDIO_FORMAT_TAG_PCM
126#else
128#define HEPH_AUDIO_SAMPLE_MIN (-1.0f)
129#define HEPH_AUDIO_SAMPLE_MAX (1.0f)
130#define HEPHAUDIO_FORMAT_TAG_HEPHAUDIO_INTERNAL HEPHAUDIO_FORMAT_TAG_IEEE_FLOAT
131#endif
132
133#if HEPHAUDIO_FORMAT_TAG_HEPHAUDIO_INTERNAL == HEPHAUDIO_FORMAT_TAG_PCM
134
135#define HEPH_AUDIO_SAMPLE_TO_IEEE_FLT(sample) (((double)sample) / (-((double)HEPH_AUDIO_SAMPLE_MIN)))
136#define HEPH_AUDIO_SAMPLE_FROM_IEEE_FLT(fltSample) ((heph_audio_sample_t)((fltSample) * (-((double)HEPH_AUDIO_SAMPLE_MIN))))
137
138#elif HEPHAUDIO_FORMAT_TAG_HEPHAUDIO_INTERNAL == HEPHAUDIO_FORMAT_TAG_IEEE_FLOAT
139
140#define HEPH_AUDIO_SAMPLE_TO_IEEE_FLT(sample) (sample)
141#define HEPH_AUDIO_SAMPLE_FROM_IEEE_FLT(fltSample) (fltSample)
142
143#else
144#error heph_audio_sample_t/ieee_float conversions are not implemented for this internal format yet.
145#endif
146
151#define HEPHAUDIO_ANDROID_OPENSL_MIN_API_LEVEL (21)
152
157#define HEPHAUDIO_ANDROID_AAUDIO_MIN_API_LEVEL (26)
158
159namespace HephAudio
160{
161 HEPH_API const char* GetVersion();
162 HEPH_API unsigned int GetVersionMajor();
163 HEPH_API unsigned int GetVersionMinor();
164 HEPH_API unsigned int GetVersionPatch();
165
170 inline double DecibelToGain(double decibel)
171 {
172 return pow(10.0, decibel * 0.05);
173 }
174
179 inline double GainToDecibel(double gain)
180 {
181 return (gain == 0) ? (-120.0) : (20.0 * log10(fabs(gain)));
182 }
183
188 inline constexpr double SemitoneToCent(double semitone)
189 {
190 return semitone * 100.0;
191 }
192
197 inline constexpr double SemitoneToOctave(double semitone)
198 {
199 return semitone / 12.0;
200 }
201
206 inline constexpr double CentToSemitone(double cent)
207 {
208 return cent / 100.0;
209 }
210
215 inline constexpr double CentToOctave(double cent)
216 {
217 return cent / 1200.0;
218 }
219
224 inline constexpr double OctaveToSemitone(double octave)
225 {
226 return octave * 12.0;
227 }
228
233 inline constexpr double OctaveToCent(double octave)
234 {
235 return octave * 1200.0;
236 }
237}
constexpr double SemitoneToOctave(double semitone)
Definition HephAudioShared.h:197
double GainToDecibel(double gain)
Definition HephAudioShared.h:179
constexpr double CentToSemitone(double cent)
Definition HephAudioShared.h:206
float heph_audio_sample_t
Definition HephAudioShared.h:127
constexpr double OctaveToCent(double octave)
Definition HephAudioShared.h:233
double DecibelToGain(double decibel)
Definition HephAudioShared.h:170
constexpr double CentToOctave(double cent)
Definition HephAudioShared.h:215
constexpr double SemitoneToCent(double semitone)
Definition HephAudioShared.h:188
constexpr double OctaveToSemitone(double octave)
Definition HephAudioShared.h:224
#define HEPH_API
Definition HephShared.h:124