Jack2 1.9.6
|
00001 /* 00002 Copyright (C) 2008 Grame 00003 00004 This program is free software; you can redistribute it and/or modify 00005 it under the terms of the GNU General Public License as published by 00006 the Free Software Foundation; either version 2 of the License, or 00007 (at your option) any later version. 00008 00009 This program is distributed in the hope that it will be useful, 00010 but WITHOUT ANY WARRANTY; without even the implied warranty of 00011 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00012 GNU General Public License for more details. 00013 00014 You should have received a copy of the GNU General Public License 00015 along with this program; if not, write to the Free Software 00016 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 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 #ifdef __linux__ 00027 #include "JackAlsaAdapter.h" 00028 #endif 00029 00030 #ifdef __APPLE__ 00031 #include "JackCoreAudioAdapter.h" 00032 #endif 00033 00034 #ifdef WIN32 00035 #include "JackPortAudioAdapter.h" 00036 #endif 00037 00038 #if defined(__sun__) || defined(sun) 00039 #include "JackOSSAdapter.h" 00040 #endif 00041 00042 #ifdef __cplusplus 00043 extern "C" 00044 { 00045 #endif 00046 00047 using namespace Jack; 00048 00049 SERVER_EXPORT int jack_internal_initialize(jack_client_t* jack_client, const JSList* params) 00050 { 00051 jack_log("Loading audioadapter"); 00052 00053 Jack::JackAudioAdapter* adapter; 00054 jack_nframes_t buffer_size = jack_get_buffer_size(jack_client); 00055 jack_nframes_t sample_rate = jack_get_sample_rate(jack_client); 00056 00057 try { 00058 00059 #ifdef __linux__ 00060 adapter = new Jack::JackAudioAdapter(jack_client, new Jack::JackAlsaAdapter(buffer_size, sample_rate, params)); 00061 #endif 00062 00063 #ifdef WIN32 00064 adapter = new Jack::JackAudioAdapter(jack_client, new Jack::JackPortAudioAdapter(buffer_size, sample_rate, params)); 00065 #endif 00066 00067 #ifdef __APPLE__ 00068 adapter = new Jack::JackAudioAdapter(jack_client, new Jack::JackCoreAudioAdapter(buffer_size, sample_rate, params)); 00069 #endif 00070 00071 #if defined(__sun__) || defined(sun) 00072 adapter = new Jack::JackAudioAdapter(jack_client, new Jack::JackOSSAdapter(buffer_size, sample_rate, params)); 00073 #endif 00074 00075 assert(adapter); 00076 00077 if (adapter->Open() == 0) 00078 return 0; 00079 else 00080 { 00081 delete adapter; 00082 return 1; 00083 } 00084 00085 } catch (...) { 00086 return 1; 00087 } 00088 } 00089 00090 SERVER_EXPORT int jack_initialize(jack_client_t* jack_client, const char* load_init) 00091 { 00092 JSList* params = NULL; 00093 bool parse_params = true; 00094 int res = 1; 00095 jack_driver_desc_t* desc = jack_get_descriptor(); 00096 00097 Jack::JackArgParser parser ( load_init ); 00098 if ( parser.GetArgc() > 0 ) 00099 parse_params = parser.ParseParams ( desc, ¶ms ); 00100 00101 if (parse_params) { 00102 res = jack_internal_initialize ( jack_client, params ); 00103 parser.FreeParams ( params ); 00104 } 00105 return res; 00106 } 00107 00108 SERVER_EXPORT void jack_finish(void* arg) 00109 { 00110 Jack::JackAudioAdapter* adapter = static_cast<Jack::JackAudioAdapter*>(arg); 00111 00112 if (adapter) { 00113 jack_log("Unloading audioadapter"); 00114 adapter->Close(); 00115 delete adapter; 00116 } 00117 } 00118 00119 #ifdef __cplusplus 00120 } 00121 #endif