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 "JackTools.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 jack_driver_desc_t *desc = jack_get_descriptor();
00087
00088 JackArgParser parser(load_init);
00089 if (parser.GetArgc() > 0)
00090 parser.ParseParams(desc, ¶ms);
00091
00092 int res = jack_internal_initialize(jack_client, params);
00093 parser.FreeParams(params);
00094 return res;
00095 }
00096
00097 SERVER_EXPORT void jack_finish(void* arg)
00098 {
00099 Jack::JackAudioAdapter* adapter = static_cast<Jack::JackAudioAdapter*>(arg);
00100
00101 if (adapter) {
00102 jack_log("Unloading audioadapter");
00103 adapter->Close();
00104 delete adapter;
00105 }
00106 }
00107
00108 #ifdef __cplusplus
00109 }
00110 #endif