Switchboard Extension SDK
Loading...
Searching...
No Matches
SwitchboardCore.hpp
1//
2// SwitchboardCore.hpp
3// SwitchboardSDK
4//
5// Created by Balázs Kiss on 2022. 02. 22..
6// Copyright © 2022. Synervoz Inc. All rights reserved.
7//
8
9#pragma once
10
11#include "SwitchboardVersion.hpp"
12#include "Platform.hpp"
13
14#include <algorithm>
15#include <atomic>
16#include <cassert>
17#include <cstdio>
18#include <cstdlib>
19#include <cstring>
20#include <memory>
21#include <string>
22
23// MARK: - Types
24
25// Check if data sizes are standard
26static_assert(sizeof(char) == 1);
27static_assert(sizeof(short) == 2);
28static_assert(sizeof(int) == 4);
29static_assert(sizeof(long long) == 8);
30
31// Define fixed-size data types
32using int8 = char;
33using uint8 = unsigned char;
34using int16 = short;
35using uint16 = unsigned short;
36using int64 = long long;
37using uint64 = unsigned long long;
38using uint = unsigned int;
39
40// MARK: - Constants
41
42namespace switchboard::constants {
43
44static constexpr uint DEFAULT_SAMPLERATE = 44100;
45static constexpr uint MAX_SAMPLERATE = 48000;
46static constexpr uint MAX_BUFFER_DURATION_MS = 1000;
47static constexpr uint MAX_NUMBER_OF_FRAMES = MAX_SAMPLERATE * MAX_BUFFER_DURATION_MS / 1000;
48// ~85ms@48kHz or ~93ms@44.1kHz
49static constexpr uint LEGACY_MAX_NUMBER_OF_FRAMES = 4096;
50
51static constexpr uint NUM_CHANNELS_UNDEFINED = 0;
52static constexpr uint MONO = 1;
53static constexpr uint STEREO = 2;
54static constexpr uint QUAD = 4;
55
56static constexpr uint LEFT = 0;
57static constexpr uint RIGHT = 1;
58
59static constexpr uint SAMPLE_RATE_UNDEFINED = 0;
60static constexpr uint SAMPLE_RATE_8KHz = 8000;
61static constexpr uint SAMPLE_RATE_10KHz = 10000;
62static constexpr uint SAMPLE_RATE_16KHz = 16000;
63static constexpr uint SAMPLE_RATE_24KHz = 24000;
64static constexpr uint SAMPLE_RATE_44_1KHz = 44100;
65static constexpr uint SAMPLE_RATE_48KHz = 48000;
66
67}
68
69// MARK: - Preprocessor directives
70
71// Web-specific defines
72#if defined(SWITCHBOARD_WEB)
73#include <emscripten.h>
74#define SB_WASM EMSCRIPTEN_KEEPALIVE
75#define SB_WASM_EXPORT(CLASS_NAME) \
76 SB_WASM static size_t getObjectSize() { \
77 return sizeof(CLASS_NAME); \
78 }
79#else
80#define SB_WASM
81#define SB_WASM_EXPORT(CLASS_NAME)
82#endif
83
84#if NETWORKING_ENABLED && SWITCHBOARD_LICENSE_VALIDATION_ENABLED
85#define LICENSE_VALIDATION_ENABLED true
86#else
87#define LICENSE_VALIDATION_ENABLED false
88#endif
89
90#if !defined(M_PI)
91#define M_PI 3.1415926535897932384626433832
92#endif
93
94#if !defined(M_PI_2)
95#define M_PI_2 M_PI / 2
96#endif
97
98#if defined(__has_cpp_attribute) && __has_cpp_attribute(clang::nonblocking)
99#define NONBLOCKING [[clang::nonblocking]]
100#else
101#define NONBLOCKING
102#endif