00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #include "JackAudioAdapter.h"
00021 #include "JackArgParser.h"
00022 #include <stdio.h>
00023 #include <stdlib.h>
00024 #include <assert.h>
00025
00026 #include "driver_interface.h"
00027
00028 #ifdef __linux__
00029 #include "JackAlsaAdapter.h"
00030 #endif
00031
00032 #ifdef __APPLE__
00033 #include "JackCoreAudioAdapter.h"
00034 #endif
00035
00036 #ifdef WIN32
00037 #include "JackPortAudioAdapter.h"
00038 #endif
00039
00040 #ifdef __cplusplus
00041 extern "C"
00042 {
00043 #endif
00044
00045 using namespace Jack;
00046
00047 SERVER_EXPORT int jack_internal_initialize(jack_client_t* jack_client, const JSList* params)
00048 {
00049 jack_log("Loading audioadapter");
00050
00051 Jack::JackAudioAdapter* adapter;
00052 jack_nframes_t buffer_size = jack_get_buffer_size(jack_client);
00053 jack_nframes_t sample_rate = jack_get_sample_rate(jack_client);
00054
00055 try {
00056
00057 #ifdef __linux__
00058 adapter = new Jack::JackAudioAdapter(jack_client, new Jack::JackAlsaAdapter(buffer_size, sample_rate, params));
00059 #endif
00060
00061 #ifdef WIN32
00062 adapter = new Jack::JackAudioAdapter(jack_client, new Jack::JackPortAudioAdapter(buffer_size, sample_rate, params));
00063 #endif
00064
00065 #ifdef __APPLE__
00066 adapter = new Jack::JackAudioAdapter(jack_client, new Jack::JackCoreAudioAdapter(buffer_size, sample_rate, params));
00067 #endif
00068 assert(adapter);
00069
00070 if (adapter->Open() == 0)
00071 return 0;
00072 else
00073 {
00074 delete adapter;
00075 return 1;
00076 }
00077
00078 } catch (...) {
00079 return 1;
00080 }
00081 }
00082
00083 SERVER_EXPORT int jack_initialize(jack_client_t* jack_client, const char* load_init)
00084 {
00085 JSList* params = NULL;
00086 bool parse_params = true;
00087 int res = 1;
00088 jack_driver_desc_t* desc = jack_get_descriptor();
00089
00090 Jack::JackArgParser parser ( load_init );
00091 if ( parser.GetArgc() > 0 )
00092 parse_params = parser.ParseParams ( desc, ¶ms );
00093
00094 if (parse_params) {
00095 res = jack_internal_initialize ( jack_client, params );
00096 parser.FreeParams ( params );
00097 }
00098 return res;
00099 }
00100
00101 SERVER_EXPORT void jack_finish(void* arg)
00102 {
00103 Jack::JackAudioAdapter* adapter = static_cast<Jack::JackAudioAdapter*>(arg);
00104
00105 if (adapter) {
00106 jack_log("Unloading audioadapter");
00107 adapter->Close();
00108 delete adapter;
00109 }
00110 }
00111
00112 #ifdef __cplusplus
00113 }
00114 #endif