9 #if __has_include(<filesystem>)
13 #include <experimental/filesystem>
15 namespace filesystem = experimental::filesystem;
18 #if defined(_WIN32) || defined(WIN32)
24 #define SAMPLE_RATE 48000
26 #define CHANNEL_COUNT 2
28 using namespace std::chrono_literals;
30 void Usage(
const char *progname)
32 std::cerr <<
"Usage: " << progname << std::endl;;
33 std::cerr <<
" Reads audio from stdin and return processed audio in stdout" << std::endl;
34 std::cerr <<
"Environment:"<< std::endl;;
35 std::cerr <<
" - S4STORE_PATH : path to store config [default: ./state]"<< std::endl;;
36 std::cerr <<
" - S4LOGINKEY : SOUND4 Login key (or S4USERID)"<< std::endl;;
37 std::cerr <<
" - RADIO_NAME : SOUND4 Radio Name"<< std::endl;;
38 std::cerr <<
" - S4_AWS_ACCESS_KEY_ID : SOUND4 Access Key ID"<< std::endl;;
39 std::cerr <<
" - S4_AWS_SECRET_ACCESS_KEY: SOUND4 Access Key Secret"<< std::endl;;
40 std::cerr << std::endl;
41 std::cerr <<
"Example:"<< std::endl;
43 #if defined(_WIN32) || defined(WIN32)
52 std::cerr << str << std::endl;
58 void sigint(
int signum [[maybe_unused]])
60 std::cerr <<
"Signal for quit" << std::endl;
62 signal(SIGTERM, NULL);
66 int main(
int argc,
char *
const argv[])
68 const char *store_path=getenv(
"S4STORE_PATH");
70 char *pLoginKey=getenv(
"S4LOGINKEY");
72 pLoginKey=getenv(
"S4USERID");
74 char *pRadioName=getenv(
"RADIO_NAME");
75 char *pKeyId=getenv(
"S4_AWS_ACCESS_KEY_ID");
76 char *pAccessKey=getenv(
"S4_AWS_SECRET_ACCESS_KEY");
77 #if (CLOUDX1_HAS_WEBSERVER)
83 const char *progname=argv[0];
86 if ((strcasecmp(argv[1],
"-h")==0) || (strcasecmp(argv[1],
"--help")==0)) {
91 if (!pLoginKey || !pRadioName || !pKeyId || !pAccessKey) {
92 std::cerr <<
"Missing credentials in environment" << std::endl;
99 if (!std::filesystem::exists(store_path) || !std::filesystem::is_directory(store_path)) {
100 std::cerr <<
"Storage folder '"<<store_path<<
"' is not a valid directory" << std::endl;
131 std::cerr <<
"Creating instance" << std::endl;
134 std::cerr <<
"Failed to create the process instance"<< std::endl;
139 std::thread updater([pInstance](){
141 std::cerr <<
"cloudx1_StartUpdateThread (no json port)" << std::endl;
143 std::cerr <<
"cloudx1_StartUpdateThread END" << std::endl;
147 std::cerr <<
"Waiting update thread" << std::endl;
149 std::cerr <<
"Timeout to create the process instance"<< std::endl;
151 std::cerr <<
"Waiting update thread DONE" << std::endl;
153 #if (CLOUDX1_HAS_WEBSERVER)
155 uint64_t webserver=-1;
157 std::cerr <<
"Starting web server" << std::endl;
159 std::cerr <<
"Starting web server DONE" << std::endl;
164 std::cout <<
"Type r(eload) or q(uit) + ENTER" << std::endl;
180 #if (CLOUDX1_HAS_WEBSERVER)
183 std::cerr <<
"Stopping web server" << std::endl;
185 std::cerr <<
"Stopping web server DONE" << std::endl;
190 std::cerr <<
"Stopping Update thread" << std::endl;
192 std::cerr <<
"Stopping Update thread DONE" << std::endl;
194 std::cerr <<
"waiting update thread" << std::endl;
197 std::cerr <<
"Destorying instance" << std::endl;
const char * cloudx1_GetVersion()
unsigned int cloudx1_GetChunkSizeInFrames()
unsigned int cloudx1_GetChannelCount()
unsigned int cloudx1_GetSampleRate()
void cloudx1_SetLogSeverity(enum cloudx1_LogSeverity severity)
struct cloudx1_CInstance * cloudx1_InitProcess(const char *LoginKey, const char *RadioName, const char *AWS_Access_ID, const char *AWS_Access_Secret, const char *save_path)
void cloudx1_ExitProcess(struct cloudx1_CInstance *instance)
void cloudx1_StartUpdateThread(struct cloudx1_CInstance *instance, unsigned int port)
int cloudx1_WaitUpdateThreadReady(struct cloudx1_CInstance *instance, int milliseconds)
void cloudx1_StopUpdateThread(struct cloudx1_CInstance *instance)
uint64_t cloudx1_Webserver(unsigned int listenport, unsigned int listenport_secure, struct cloudx1_CInstance *instance)
int cloudx1_Webserver_Stop(uint64_t id, int timeout_ms)
void sigint(int signum[[maybe_unused]])
void Usage(const char *progname)
void MyLogger(cloudx1_LogSeverity severe[[maybe_unused]], const char *str)
volatile bool gs_request_quit
int main(int argc, char *const argv[])