Audio plugin host https://kx.studio/carla
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

263 lines
6.9KB

  1. /*
  2. * Carla Tests
  3. * Copyright (C) 2014 Filipe Coelho <falktx@falktx.com>
  4. *
  5. * This program is free software; you can redistribute it and/or
  6. * modify it under the terms of the GNU General Public License as
  7. * published by the Free Software Foundation; either version 2 of
  8. * the License, or any later version.
  9. *
  10. * This program is distributed in the hope that it will be useful,
  11. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  13. * GNU General Public License for more details.
  14. *
  15. * For a full copy of the GNU General Public License see the doc/GPL.txt file.
  16. */
  17. #include "CarlaString.hpp"
  18. #include "rewire/ReWireAPI.h"
  19. #include "rewire/ReWirePanelAPI.h"
  20. // -----------------------------------------------------------------------
  21. // remove this
  22. namespace ReWire {
  23. extern "C" {
  24. typedef const char* TReWireFileSpec;
  25. }
  26. }
  27. // static ReWire::TReWireFileSpec kDeviceSpec = "/home/falktx/.wine32/drive_c/Program Files/Image-Line/FL Studio 11/System/Plugin/ReWire/FLReWire.dll";
  28. //static ReWire::TReWireFileSpec kDeviceSpec = "C:\\Program Files\\Waves\\ReWire\\WavesReWireDevice.dll";
  29. static const ReWire::TReWireFileSpec kDeviceSpec = "C:\\Program Files\\AudioGL\\AudioGL.dll";
  30. static const char* const kDeviceName = "AudioGL";
  31. static const char* const kSinature = "Ahem";
  32. // -----------------------------------------------------------------------
  33. // try to figure this out...
  34. using namespace ReWire;
  35. // RWM2OpenImp
  36. typedef ReWireError (*TRWM2OpenProc)(void); //long reWireLibVersion
  37. typedef ReWireError (*TRWM2CloseProc)(void);
  38. static const char kRWM2OpenProcName[] = "RWM2OpenImp";
  39. static const char kRWM2CloseProcName[] = "RWM2CloseImp";
  40. static TRWM2OpenProc gRWM2OpenProc = NULL;
  41. static TRWM2CloseProc gRWM2CloseProc = NULL;
  42. // -----------------------------------------------------------------------
  43. class RewireThing
  44. {
  45. public:
  46. RewireThing()
  47. : fIsOpen(false),
  48. fIsRegistered(false),
  49. fIsLoaded(false),
  50. fHandle(0)
  51. {
  52. }
  53. ~RewireThing()
  54. {
  55. close();
  56. }
  57. bool open()
  58. {
  59. CARLA_SAFE_ASSERT_RETURN(! fIsOpen, true);
  60. const ReWire::ReWireError result(ReWire::RWPOpen());
  61. if (result == ReWire::kReWireError_NoError)
  62. {
  63. fIsOpen = true;
  64. carla_stderr("rewire open ok");
  65. }
  66. else
  67. {
  68. carla_stderr2("rewire open failed %i", result);
  69. }
  70. // get func pointers
  71. gRWM2OpenProc = (TRWM2OpenProc)ReWireFindReWireSharedLibraryFunction(kRWM2OpenProcName);
  72. gRWM2CloseProc = (TRWM2CloseProc)ReWireFindReWireSharedLibraryFunction(kRWM2CloseProcName);
  73. CARLA_SAFE_ASSERT_RETURN(gRWM2OpenProc != nullptr, true);
  74. CARLA_SAFE_ASSERT_RETURN(gRWM2CloseProc != nullptr, true);
  75. return fIsOpen;
  76. }
  77. bool start()
  78. {
  79. ReWire::ReWireError result = (gRWM2OpenProc)();
  80. if (result == ReWire::kReWireError_NoError)
  81. {
  82. fIsLoaded = true;
  83. carla_stderr("rewire load app ok");
  84. }
  85. else
  86. {
  87. carla_stderr2("rewire load app failed %i", result);
  88. }
  89. return true;
  90. }
  91. #if 0
  92. bool start()
  93. {
  94. char isRunningFlag = 0;
  95. ReWire::ReWireError result = ReWire::RWPIsReWireMixerAppRunning(&isRunningFlag);
  96. if (isRunningFlag == 0)
  97. {
  98. carla_stderr("rewire mixer is NOT running");
  99. result = ReWire::RWPRegisterDevice(kDeviceSpec);
  100. if (result == ReWire::kReWireError_NoError)
  101. {
  102. fIsRegistered = true;
  103. carla_stderr("rewire register ok");
  104. }
  105. else if (result == ReWire::kReWireError_AlreadyExists)
  106. {
  107. fIsRegistered = true;
  108. carla_stderr("rewire register already in place");
  109. }
  110. else
  111. {
  112. carla_stderr2("rewire register failed %i", result);
  113. }
  114. }
  115. else
  116. {
  117. carla_stderr("rewire mixer is running");
  118. }
  119. result = ReWire::RWPLoadDevice(kDeviceName);
  120. if (result == ReWire::kReWireError_NoError)
  121. {
  122. fIsLoaded = true;
  123. carla_stderr("rewire load device ok");
  124. }
  125. else
  126. {
  127. carla_stderr2("rewire load device failed %i", result);
  128. }
  129. result = ReWire::RWPComConnect(kSinature, &fHandle);
  130. if (result == ReWire::kReWireError_NoError)
  131. {
  132. carla_stderr("rewire connect ok | %i", fHandle);
  133. }
  134. else
  135. {
  136. carla_stderr2("rewire connect failed %i | %i", result, fHandle);
  137. }
  138. return false;
  139. }
  140. #endif
  141. void close()
  142. {
  143. if (! fIsOpen)
  144. {
  145. CARLA_SAFE_ASSERT(! fIsLoaded);
  146. CARLA_SAFE_ASSERT(fHandle == 0);
  147. return;
  148. }
  149. if (fIsLoaded)
  150. {
  151. const ReWire::ReWireError result((gRWM2CloseProc)());
  152. fIsLoaded = false;
  153. if (result == ReWire::kReWireError_NoError)
  154. carla_stderr("rewire unload app ok");
  155. else
  156. carla_stderr2("rewire unload app failed %i", result);
  157. }
  158. #if 0
  159. if (fHandle != 0)
  160. {
  161. const ReWire::ReWireError result(ReWire::RWPComDisconnect(fHandle));
  162. fHandle = 0;
  163. if (result == ReWire::kReWireError_NoError)
  164. carla_stderr("rewire disconnect ok");
  165. else
  166. carla_stderr2("rewire disconnect failed %i", result);
  167. }
  168. if (fIsLoaded)
  169. {
  170. const ReWire::ReWireError result(ReWire::RWPUnloadDevice(kDeviceName));
  171. fIsLoaded = false;
  172. if (result == ReWire::kReWireError_NoError)
  173. carla_stderr("rewire unload device ok");
  174. else
  175. carla_stderr2("rewire unload device failed %i", result);
  176. }
  177. if (fIsRegistered)
  178. {
  179. const ReWire::ReWireError result(ReWire::RWPUnregisterDevice(kDeviceSpec));
  180. fIsRegistered = false;
  181. if (result == ReWire::kReWireError_NoError)
  182. carla_stderr("rewire unregister ok");
  183. else
  184. carla_stderr2("rewire unregister failed %i", result);
  185. }
  186. #endif
  187. const ReWire::ReWireError result(ReWire::RWPClose());
  188. if (result == ReWire::kReWireError_NoError)
  189. carla_stderr("rewire close ok");
  190. else
  191. carla_stderr2("rewire close failed %i", result);
  192. fIsOpen = false;
  193. }
  194. private:
  195. bool fIsOpen;
  196. bool fIsRegistered;
  197. bool fIsLoaded;
  198. ReWire::TRWPPortHandle fHandle;
  199. };
  200. // -----------------------------------------------------------------------
  201. int main(/*int argc, char* argv[]*/)
  202. {
  203. RewireThing re;
  204. if (! re.open())
  205. return 1;
  206. re.start();
  207. re.close();
  208. return 0;
  209. }
  210. // -----------------------------------------------------------------------