1 #include "AndroidCsound.hpp"
2 #include <android/log.h>
3 
4 extern "C" {
5 extern int androidplayopen_(CSOUND *csound, const csRtAudioParams *parm);
6 extern int androidrecopen_(CSOUND *csound, const csRtAudioParams *parm);
7 extern void androidrtplay_(CSOUND *csound, const MYFLT *buffer, int nbytes);
8 extern int androidrtrecord_(CSOUND *csound, MYFLT *buffer, int nbytes);
9 extern void androidrtclose_(CSOUND *csound);
10 
androidMessageCallback(CSOUND *,int attr,const char * format,va_list valist)11 static void androidMessageCallback(CSOUND*, int attr, const char *format, va_list valist) {
12     char message[1024];
13     vsnprintf(message, 1024, format, valist);
14     __android_log_print(ANDROID_LOG_INFO,"AndroidCsound","%s", message);
15 }
16 }
17 
18 #include <pthread.h>
setOpenSlCallbacks()19 void AndroidCsound::setOpenSlCallbacks() {
20 
21    __android_log_print(ANDROID_LOG_INFO,"AndroidCsound","setOpenSlCallbacks");
22 
23    if(csoundQueryGlobalVariable(csound,"::async::") == NULL)
24     if (this->CreateGlobalVariable("::async::", sizeof(int)) == 0) {
25       int *p = ((int *)csoundQueryGlobalVariable(csound,"::async::"));
26        *p = asyncProcess;
27     __android_log_print(ANDROID_LOG_INFO,"AndroidCsound","==set callbacks");
28     csoundSetPlayopenCallback(csound, androidplayopen_);
29     csoundSetRecopenCallback(csound, androidrecopen_);
30     csoundSetRtplayCallback(csound, androidrtplay_);
31     csoundSetRtrecordCallback(csound, androidrtrecord_);
32     csoundSetRtcloseCallback(csound, androidrtclose_);
33     csoundSetMessageCallback(csound, androidMessageCallback);
34       __android_log_print(ANDROID_LOG_INFO,"AndroidCsound","==callbacks set");
35     }
36 
37    if(csoundQueryGlobalVariable(csound,"::paused::") == NULL) {
38     if (this->CreateGlobalVariable("::paused::", sizeof(int)) == 0) {
39        int *p = ((int *)csoundQueryGlobalVariable(csound,"::paused::"));
40        *p = 0;
41     }
42    }
43 
44 
45 };
46 
SetGlobalEnv(const char * name,const char * variable)47 int AndroidCsound::SetGlobalEnv(const char* name, const char* variable) {
48     return csoundSetGlobalEnv(name, variable);
49 }
50 
Pause(bool pause)51 void AndroidCsound::Pause(bool pause){
52    int *p = ((int *)csoundQueryGlobalVariable(csound,"::paused::"));
53    *p = pause ?  1  : 0;
54 }
55 
getStreamTime()56 unsigned long AndroidCsound::getStreamTime(){
57 
58   return *((__uint64_t*) csoundQueryGlobalVariable(csound,"::streamtime::"));
59 }
60