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.

182 lines
4.5KB

  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/ReWirePanelAPI.h"
  19. // -----------------------------------------------------------------------
  20. // remove this
  21. namespace ReWire {
  22. extern "C" {
  23. typedef const char* TReWireFileSpec;
  24. }
  25. }
  26. ReWire::TReWireFileSpec kDeviceSpec = "/home/falktx/.wine32/drive_c/Program Files/Image-Line/FL Studio 11/System/Plugin/ReWire/FLReWire.dll";
  27. // -----------------------------------------------------------------------
  28. class RewireThing
  29. {
  30. public:
  31. RewireThing()
  32. : fIsOpen(false),
  33. fIsRegistered(false),
  34. fIsLoaded(false),
  35. fHandle(0)
  36. {
  37. fDevName = "";
  38. }
  39. ~RewireThing()
  40. {
  41. close();
  42. }
  43. bool open()
  44. {
  45. CARLA_SAFE_ASSERT_RETURN(! fIsOpen, true);
  46. const ReWire::ReWireError result(ReWire::RWPOpen());
  47. if (result == ReWire::kReWireError_NoError)
  48. {
  49. fIsOpen = true;
  50. carla_stderr("rewire open ok");
  51. }
  52. else
  53. {
  54. carla_stderr2("rewire open failed");
  55. }
  56. return fIsOpen;
  57. }
  58. bool start()
  59. {
  60. char isRunningFlag = 0;
  61. ReWire::ReWireError result = ReWire::RWPIsReWireMixerAppRunning(&isRunningFlag);
  62. if (isRunningFlag == 0)
  63. {
  64. carla_stderr("rewire mixer is NOT running");
  65. result = ReWire::RWPRegisterDevice(kDeviceSpec);
  66. if (result == ReWire::kReWireError_NoError)
  67. {
  68. fIsRegistered = true;
  69. carla_stderr("rewire register ok");
  70. }
  71. else if (result == ReWire::kReWireError_AlreadyExists)
  72. {
  73. fIsRegistered = true;
  74. carla_stderr("rewire register already in place");
  75. }
  76. else
  77. {
  78. carla_stderr2("rewire register failed %i", result);
  79. }
  80. }
  81. else
  82. {
  83. carla_stderr("rewire mixer is running");
  84. }
  85. return false;
  86. }
  87. void close()
  88. {
  89. if (! fIsOpen)
  90. {
  91. CARLA_SAFE_ASSERT(! fIsLoaded);
  92. CARLA_SAFE_ASSERT(fHandle == 0);
  93. return;
  94. }
  95. if (fHandle != 0)
  96. {
  97. const ReWire::ReWireError result(ReWire::RWPComDisconnect(fHandle));
  98. fHandle = 0;
  99. if (result == ReWire::kReWireError_NoError)
  100. carla_stderr("rewire disconnect ok");
  101. else
  102. carla_stderr2("rewire disconnect failed");
  103. }
  104. if (fIsLoaded)
  105. {
  106. const ReWire::ReWireError result(ReWire::RWPUnloadDevice(fDevName.getBuffer()));
  107. fIsLoaded = false;
  108. if (result == ReWire::kReWireError_NoError)
  109. carla_stderr("rewire unload ok");
  110. else
  111. carla_stderr2("rewire unload failed");
  112. }
  113. if (fIsRegistered)
  114. {
  115. const ReWire::ReWireError result(ReWire::RWPUnregisterDevice(kDeviceSpec));
  116. fIsRegistered = false;
  117. if (result == ReWire::kReWireError_NoError)
  118. carla_stderr("rewire unregister ok");
  119. else
  120. carla_stderr2("rewire unregister failed");
  121. }
  122. const ReWire::ReWireError result(ReWire::RWPClose());
  123. if (result == ReWire::kReWireError_NoError)
  124. carla_stderr("rewire close ok");
  125. else
  126. carla_stderr2("rewire close failed");
  127. fIsOpen = false;
  128. }
  129. private:
  130. bool fIsOpen;
  131. bool fIsRegistered;
  132. bool fIsLoaded;
  133. ReWire::TRWPPortHandle fHandle;
  134. CarlaString fDevName;
  135. };
  136. // -----------------------------------------------------------------------
  137. int main(/*int argc, char* argv[]*/)
  138. {
  139. RewireThing re;
  140. if (! re.open())
  141. return 1;
  142. re.start();
  143. re.close();
  144. return 0;
  145. }
  146. // -----------------------------------------------------------------------