Browse Source

Merge windows branch back to trunk.

git-svn-id: http://subversion.jackaudio.org/jack/jack2/trunk/jackmp@2661 0c269be4-1314-0410-8aa9-9f06e86f4224
tags/1.90
sletz 17 years ago
parent
commit
dcbaa4ed70
98 changed files with 5493 additions and 1530 deletions
  1. +8
    -0
      ChangeLog
  2. +91
    -92
      Readme_NetJack2.txt
  3. +6
    -6
      common/JackAPI.cpp
  4. +25
    -1
      common/JackAtomic.h
  5. +2
    -1
      common/JackConnectionManager.h
  6. +8
    -6
      common/JackControl.cpp
  7. +7
    -7
      common/JackDriverLoader.cpp
  8. +19
    -17
      common/JackException.h
  9. +11
    -11
      common/JackInternalClient.cpp
  10. +109
    -118
      common/JackNetDriver.cpp
  11. +2
    -4
      common/JackNetDriver.h
  12. +81
    -104
      common/JackNetManager.cpp
  13. +6
    -7
      common/JackNetManager.h
  14. +47
    -0
      common/JackNetSocket.h
  15. +42
    -18
      common/JackNetTool.cpp
  16. +17
    -34
      common/JackNetTool.h
  17. +289
    -0
      common/JackNetUnixSocket.cpp
  18. +101
    -0
      common/JackNetUnixSocket.h
  19. +50
    -0
      common/JackPlatformNetSocket.h
  20. +1
    -1
      common/JackRestartThreadedDriver.cpp
  21. +5
    -5
      common/JackWaitThreadedDriver.cpp
  22. +13
    -9
      common/control_types.h
  23. +30
    -29
      common/jack/types.h
  24. +2
    -0
      common/wscript
  25. +28
    -16
      example-clients/ipload.c
  26. +31
    -282
      macosx/Jackdmp.xcodeproj/project.pbxproj
  27. +6
    -1
      macosx/wscript
  28. BIN
      windows/Debug/bin/JackRouter.dll
  29. +7
    -0
      windows/Debug/bin/JackRouter.ini
  30. BIN
      windows/Debug/bin/portaudio_x86.dll
  31. +336
    -0
      windows/JackNetWinSocket.cpp
  32. +102
    -0
      windows/JackNetWinSocket.h
  33. +294
    -0
      windows/JackPortAudioDevices.cpp
  34. +62
    -0
      windows/JackPortAudioDevices.h
  35. +265
    -439
      windows/JackPortAudioDriver.cpp
  36. +6
    -7
      windows/JackPortAudioDriver.h
  37. +5
    -0
      windows/JackWinNamedPipe.cpp
  38. +54
    -0
      windows/Readme.txt
  39. BIN
      windows/Release/bin/JackRouter.dll
  40. +7
    -0
      windows/Release/bin/JackRouter.ini
  41. BIN
      windows/Release/bin/libsamplerate-0.dll
  42. BIN
      windows/Release/bin/portaudio_x86.dll
  43. +8
    -0
      windows/Setup/Readme.txt
  44. +126
    -0
      windows/Setup/jack.ci
  45. +674
    -0
      windows/Setup/src/COPYING
  46. BIN
      windows/Setup/src/gpl_installer.rtf
  47. BIN
      windows/Setup/src/jack.ico
  48. BIN
      windows/Setup/src/logo_installer.bmp
  49. +13
    -0
      windows/Setup/src/readme_installer.txt
  50. +1
    -1
      windows/getopt1.c
  51. +98
    -0
      windows/jack_audioadapter.cbp
  52. +90
    -0
      windows/jack_connect.cbp
  53. +7
    -10
      windows/jack_connect.dsp
  54. +91
    -0
      windows/jack_disconnect.cbp
  55. +7
    -10
      windows/jack_freeverb.dsp
  56. +86
    -0
      windows/jack_load.cbp
  57. +110
    -0
      windows/jack_load.dsp
  58. +77
    -0
      windows/jack_lsp.cbp
  59. +7
    -32
      windows/jack_lsp.dsp
  60. +83
    -0
      windows/jack_metro.cbp
  61. +7
    -32
      windows/jack_metro.dsp
  62. +93
    -0
      windows/jack_netdriver.cbp
  63. +107
    -0
      windows/jack_netdriver.dsp
  64. +90
    -0
      windows/jack_netmanager.cbp
  65. +107
    -0
      windows/jack_netmanager.dsp
  66. +104
    -0
      windows/jack_portaudio.cbp
  67. +8
    -38
      windows/jack_portaudio.dsp
  68. +7
    -32
      windows/jack_simple_client.dsp
  69. +7
    -10
      windows/jack_test.dsp
  70. +86
    -0
      windows/jack_unload.cbp
  71. +102
    -0
      windows/jack_unload.dsp
  72. +41
    -0
      windows/jackaudioadapter.rc
  73. +104
    -0
      windows/jackdmp.cbp
  74. +6
    -32
      windows/jackdmp.dsp
  75. +88
    -1
      windows/jackdmp.dsw
  76. +48
    -0
      windows/jackdmp.rc
  77. +38
    -0
      windows/jackdmp.workspace
  78. +41
    -0
      windows/jacknetdriver.rc
  79. +41
    -0
      windows/jacknetmanager.rc
  80. +41
    -0
      windows/jackportaudio.rc
  81. +7
    -10
      windows/jdelay.dsp
  82. +136
    -0
      windows/libjackmp.cbp
  83. +7
    -10
      windows/libjackmp.dsp
  84. +41
    -0
      windows/libjackmp.rc
  85. +169
    -0
      windows/libjackservermp.cbp
  86. +14
    -10
      windows/libjackservermp.dsp
  87. +41
    -0
      windows/libjackservermp.rc
  88. BIN
      windows/libsamplerate-0.lib
  89. BIN
      windows/portaudio.lib
  90. BIN
      windows/portaudio_x86.lib
  91. +10
    -9
      windows/regex.c
  92. +3
    -14
      windows/resource.h
  93. +13
    -46
      windows/resource.rc
  94. +15
    -0
      windows/resource_vc.h
  95. +197
    -0
      windows/samplerate.h
  96. +7
    -6
      windows/testSynchoServerClient.dsp
  97. +7
    -6
      windows/testSynchroClient.dsp
  98. +7
    -6
      windows/testSynchroServer.dsp

+ 8
- 0
ChangeLog View File

@@ -21,6 +21,14 @@ Romain Moret
Jackdmp changes log Jackdmp changes log
--------------------------- ---------------------------


2008-07-08 Stephane Letz <letz@grame.fr>

* Merge windows branch back to trunk.

2008-07-05 Stephane Letz <letz@grame.fr>

* Netioadapter renamed in audioadapter.

2008-07-04 Stephane Letz <letz@grame.fr> 2008-07-04 Stephane Letz <letz@grame.fr>


* Netioadapter now adapts for buffer size and sample rate changes. * Netioadapter now adapts for buffer size and sample rate changes.


+ 91
- 92
Readme_NetJack2.txt View File

@@ -1,92 +1,91 @@
-------------------------------
NetJack for Jackmp
-------------------------------

This branche includes a version of netjack designed for jackmp.
This prerelease is far from being complete and doesn't include some of the features proposed by netjack (no transport yet).
Indeed, the original concept has been completely redesigned to better fit to the jackmp architecture, but also in order to provide additional capabilities, and ultimately a greater robustness.

This document describes the major changes between those two systems, then a simple how-to for setting up a basic usage of 'netjackmp'.

-------------------------------
Major changes and architecture
-------------------------------

The biggest difference between netjack and netjackmp is the way of slicing audio and midi streams into network packets.
For one audio cycle, netjack used to take all audio and midi buffers (one per channel), put butt all of them, then send it over the network.
The problem is that a network packet has a fixed maximum size, depending on the network infrastructure (for 100mb, it reaches 1500bytes - MTU of the network).
The solution is then to slice those buffers into smaller ones, and then send as many packets as we need. This cutting up can be done by network equipments, but it's more efficient and secure to include it in the software data management.
Still this slicing brings another issue : all the packets are not pleased with any emission order and are unfortunately received in a random order, thanks to UDP.
So we can't deal with data as it comes, we need to re-bufferize incoming streams in order to rebuild complete audio buffers.

With netjackmp, the main idea is to make this slicing depending on the network capabilities.
If we can put only 128 complete audio frames (128 samples for all audio channels) in a network packet, the elementary packet will so carry 128 frames, and in one cycle, we will transmit as many packet as we need. We take the example of 128 frames because it's the current value for 2 channels. This value is determinated by taking the maximum 'power of 2' frames we can put in a packet.
If we take 2 channels, 4 bytes per sample (float values), we get 8 bytes per frame, with 128 frames, we now have 1024 bytes, so we can put these 1024 bytes in one packet, and add a small header which identify the packet.
This technique allows to separate the packets (in time) so they can be received in the order they have been emitted.
If the master is running at 512 frames per second, four audio packets are sent per cycle and the slave deals with them as they arrive.
With gigabytes networks, the MTU is larger, so we can put more data in one packet (in this example, we can even put the complete cycle in one packet).
For midi data, netjack used to send the whole buffer, in this example, 512 frames * 4 bytes per sample and per midi port. Those 2048 bytes are in 99% of the time filled to a few bytes, but rarely more. This means that if we have 2 audio and 2 midi channels to transmit, everything happens as if we had 4 audio channels, which is quite a waste of bandwidth.
In netjackmp, the idea is to take into account that fact, by sending only the useful bytes, and not more. It's completely unappropriate to overload the network with useless data.
So we now have : 99% of the time one midi packet (of a few dozen of bytes), followed by four audio packets (in this example).
Those five packets are preceded by a synchronization packet, which will make the slave directly synched on the master's cycle rythm.

This way of separating audio and midi is quite important. We deal here with network transmissions, and also need to be 'realtime'. We need a system which allow to carry as many audio and midi data streams as we need and can, as if the distant computer was in fact a simple jack client. With all those constraints, we can't avoid packets loss. The better thing to do is to deal with it.
But to loose an audio packet is different from skipping a midi one. Indeed, an audio loss leads to audio click, or undesirable, but very short side effect. Whereas a midi data loss can be completely disastrous. Imagine that we play some notes, with sustain, and we loose the sustain 0 value, which stops the effect. The sustain keeps going on on all following notes until the next 'sustain off' event. A simple missing byte can put all the midi system offside (that's the purpose of all the big PANIC buttons on midi softwares...).
That's why we need to separate audio (more than one per cycle) from midi (one packet at 99% of the time). If we loose an audio packet, we probably still have an available midi packet, so we can use what we received, even if some audio is missing.

The second main difference between netjack and netjackmp is the way the two computers (master and slave) synchronise their parametering and launch.
In netjack, once the slave configured (by the command line) and launched, it was waiting for the first incoming packet to synchronize (launch its first audio cycle) then run.
The two computers needed to be configured separately but with the same parameters to run correctly.

In netjackmp, the only thing you have to set for the slave is its number of in/out midi and audio channels. No more need to choose and set parameters depending on the master, they are automatically determinated and communicated to the slave.
This first synchronization step uses a multicast communication, no more need to know by advance all the IP addresses. The slave says on a multicast address "hey, I'm available". A master get the message, and communicate parametering to the slave. Once synchronization done, audio transfers can start. Moreover, the master being still listening on the multicast address, it can catch other slaves and manage them (create a jack client to communicate with the slave, and neatily close everything when the slave is gone).
The loaded internal client is no longer only an interface for the slave, like in netjack. It's now called 'network manager', it doesn't deal with audio or midi, just with some kind of 'network logistical messages'. The manager automatically create a new internal client as soon as a new slave is seen on the network (by sending messages on the multicast address the manager is listening on). This manager is also able to remove one of its internal client as soon as a slave has left the network. This conception allow a complete separation of audio exchanges from parametering and management.
The 'unloading' of the internal client (the manager) will cause a full cleaning of the infrastructure. The jack clients are all removed from the server, the slave are all turned available again, ready to be cought by another master etc. When a slave quits, it's also automatically removed from the manager's slaves list.


-------------------------------
Current limitations
-------------------------------

The netjackmp's development has just started. This prerelease is operational, but involve some serious limitations :
- You can't set the bitdepth of the transmitted audio samples. Floating point values are used for now. The possibility to use 16 or 24bits data will be included soon, like in netjack. It's important to notice that change the bitdepth id very expensive in processing ressources (because it is a sample to sample operation).
- The 'inter-slave' communication is not optimized yet. If you connect one slave to another, the network streams go through the master. While sending network addresses to the slaves when they are inter-jack-connected, we could make the slave possibly independant of the master (except for the synchronization, sent over the network). This is the next step of the netjackmp development.
- This is not actually working on windows, because the windows socket API (the network development tools) aren't the same as under unix systems (linux and macosx).
- Because of the current development, the parametering of the whole system is minimalistic. For now you can't set another value of the MTU (allowing larger packets, meaning less packet, so less packet loss). The MTU issue is also a quite big one. In fact, the better thing to do seems to include an automatic detection of the MTU (called path MTU discovery) between master and slave. But this detection is quite controversial because it actually needs ICMP messages, which are more and more often unwanted nay blocked or ignored by network devices such as routers or firewalls (for security reasons). So in a first time, the MTU will possibly be a parameter of the master, like it is now in netjack. The fact is in this version, the MTU is set to 1500bytes, and it works fine on local 100mb networks. Future versions will include the possibility to set the MTU, which can be larger on gigabit networks (9000bytes for jumbo frames).
- Unlike netjack, this version doesn't include transport, this is naturraly planned for the fully operational version.
- Netjackmp can't use audio hardware to capture or play some sound. All these resampling processes will also be developed soon.


-------------------------------
How-to use this ?
-------------------------------

Netjackmp is very simple to use. On the master's side, an internal client deals with the slaves, and the slaves themselves are classical jack servers running under a 'network audio driver'.
The difference between the two versions is that the master now has a manager, which takes care of the slaves, while listening on the multicast address and create a new master as soon as a slave is available. But everything is transparent to the user, that's why it uses multicast (someone says "hello", and anyone who wants to hear it just has to listen).

So, just compile and install jackmp as you are used to, on linux, using 'scons' then 'scons install', on macosx, you can use the xcode project.

On the master, just launch a classical jack server, the period size doesn't matter.
Then, load the network manager using jack_load :

'jack_load netmanager'

This will load the internal client, which will wait for an available slave (see the message window on qjackctl - or the console output).

On the slave, just launch a new jack server using :

'jackd -R -S -d net'

The '-S' (synchronous) option is mandatory. Indeed, the jack server isn't able to deal with the current cycle produced audio data because when the 'send' is called, data are not necessarily already available. So in a given 'n' cycle, the server will send the data produced at the 'n-1' cycle.
In this case, there is no effect on latency because all the subcycles of the slave (the previous 4 subcycles for instance) are run in the given master's cycle.
You can specify some options, like '-n name' (will give a name to the slave, default is the network hostname), '-C input_ports' (the number of master-->slave channels), '-P output_ports' (the number of slave-->master channels), default is 2 ; or '-i midi_in_ports' and '-o midi_out_ports', default is 0. Don't use '-a address' and '-p port', these are here to specify others multicast address and port, but it's not implemented on the master yet.


-------------------------------
What's next ?
-------------------------------

The development of 'netjackmp' continues and some things are going to change soon (see the 'actual limitations' section).
If you use it, please report encountered bugs, ideas or anything you think about.

If you have any question, you can subscribe the jackaudio developpers mailing list at http://www.jackaudio.org/ or join the IRC channel 'jack' on FreeNode.
-------------------------------
NetJack for Jackmp
-------------------------------
This branche includes a version of netjack designed for jackmp.
This prerelease is far from being complete and doesn't include some of the features proposed by netjack (no transport yet).
Indeed, the original concept has been completely redesigned to better fit to the jackmp architecture, but also in order to provide additional capabilities, and ultimately a greater robustness.
This document describes the major changes between those two systems, then a simple how-to for setting up a basic usage of 'netjackmp'.
-------------------------------
Major changes and architecture
-------------------------------
The biggest difference between netjack and netjackmp is the way of slicing audio and midi streams into network packets.
For one audio cycle, netjack used to take all audio and midi buffers (one per channel), put butt all of them, then send it over the network.
The problem is that a network packet has a fixed maximum size, depending on the network infrastructure (for 100mb, it reaches 1500bytes - MTU of the network).
The solution is then to slice those buffers into smaller ones, and then send as many packets as we need. This cutting up can be done by network equipments, but it's more efficient and secure to include it in the software data management.
Still this slicing brings another issue : all the packets are not pleased with any emission order and are unfortunately received in a random order, thanks to UDP.
So we can't deal with data as it comes, we need to re-bufferize incoming streams in order to rebuild complete audio buffers.
With netjackmp, the main idea is to make this slicing depending on the network capabilities.
If we can put only 128 complete audio frames (128 samples for all audio channels) in a network packet, the elementary packet will so carry 128 frames, and in one cycle, we will transmit as many packet as we need. We take the example of 128 frames because it's the current value for 2 channels. This value is determinated by taking the maximum 'power of 2' frames we can put in a packet.
If we take 2 channels, 4 bytes per sample (float values), we get 8 bytes per frame, with 128 frames, we now have 1024 bytes, so we can put these 1024 bytes in one packet, and add a small header which identify the packet.
This technique allows to separate the packets (in time) so they can be received in the order they have been emitted.
If the master is running at 512 frames per second, four audio packets are sent per cycle and the slave deals with them as they arrive.
With gigabytes networks, the MTU is larger, so we can put more data in one packet (in this example, we can even put the complete cycle in one packet).
For midi data, netjack used to send the whole buffer, in this example, 512 frames * 4 bytes per sample and per midi port. Those 2048 bytes are in 99% of the time filled to a few bytes, but rarely more. This means that if we have 2 audio and 2 midi channels to transmit, everything happens as if we had 4 audio channels, which is quite a waste of bandwidth.
In netjackmp, the idea is to take into account that fact, by sending only the useful bytes, and not more. It's completely unappropriate to overload the network with useless data.
So we now have : 99% of the time one midi packet (of a few dozen of bytes), followed by four audio packets (in this example).
Those five packets are preceded by a synchronization packet, which will make the slave directly synched on the master's cycle rythm.
This way of separating audio and midi is quite important. We deal here with network transmissions, and also need to be 'realtime'. We need a system which allow to carry as many audio and midi data streams as we need and can, as if the distant computer was in fact a simple jack client. With all those constraints, we can't avoid packets loss. The better thing to do is to deal with it.
But to loose an audio packet is different from skipping a midi one. Indeed, an audio loss leads to audio click, or undesirable, but very short side effect. Whereas a midi data loss can be completely disastrous. Imagine that we play some notes, with sustain, and we loose the sustain 0 value, which stops the effect. The sustain keeps going on on all following notes until the next 'sustain off' event. A simple missing byte can put all the midi system offside (that's the purpose of all the big PANIC buttons on midi softwares...).
That's why we need to separate audio (more than one per cycle) from midi (one packet at 99% of the time). If we loose an audio packet, we probably still have an available midi packet, so we can use what we received, even if some audio is missing.
The second main difference between netjack and netjackmp is the way the two computers (master and slave) synchronise their parametering and launch.
In netjack, once the slave configured (by the command line) and launched, it was waiting for the first incoming packet to synchronize (launch its first audio cycle) then run.
The two computers needed to be configured separately but with the same parameters to run correctly.
In netjackmp, the only thing you have to set for the slave is its number of in/out midi and audio channels. No more need to choose and set parameters depending on the master, they are automatically determinated and communicated to the slave.
This first synchronization step uses a multicast communication, no more need to know by advance all the IP addresses. The slave says on a multicast address "hey, I'm available". A master get the message, and communicate parametering to the slave. Once synchronization done, audio transfers can start. Moreover, the master being still listening on the multicast address, it can catch other slaves and manage them (create a jack client to communicate with the slave, and neatily close everything when the slave is gone).
The loaded internal client is no longer only an interface for the slave, like in netjack. It's now called 'network manager', it doesn't deal with audio or midi, just with some kind of 'network logistical messages'. The manager automatically create a new internal client as soon as a new slave is seen on the network (by sending messages on the multicast address the manager is listening on). This manager is also able to remove one of its internal client as soon as a slave has left the network. This conception allow a complete separation of audio exchanges from parametering and management.
The 'unloading' of the internal client (the manager) will cause a full cleaning of the infrastructure. The jack clients are all removed from the server, the slave are all turned available again, ready to be cought by another master etc. When a slave quits, it's also automatically removed from the manager's slaves list.
-------------------------------
Current limitations
-------------------------------
The netjackmp's development has just started. This prerelease is operational, but involve some serious limitations :
- You can't set the bitdepth of the transmitted audio samples. Floating point values are used for now. The possibility to use 16 or 24bits data will be included soon, like in netjack. It's important to notice that change the bitdepth id very expensive in processing ressources (because it is a sample to sample operation).
- The 'inter-slave' communication is not optimized yet. If you connect one slave to another, the network streams go through the master. While sending network addresses to the slaves when they are inter-jack-connected, we could make the slave possibly independant of the master (except for the synchronization, sent over the network). This is the next step of the netjackmp development.
- Because of the current development, the parametering of the whole system is minimalistic.
- Unlike netjack, this version doesn't include transport, this is naturally planned for the fully operational version.
- The 'Audio Adapter' is not completely working, there are several improvements to do.
-------------------------------
How-to use this ?
-------------------------------
Netjackmp is very simple to use. On the master's side, an internal client deals with the slaves, and the slaves themselves are classical jack servers running under a 'network audio driver'.
The difference between the two versions is that the master now has a manager, which takes care of the slaves, while listening on the multicast address and create a new master as soon as a slave is available. But everything is transparent to the user, that's why it uses multicast (someone says "hello", and anyone who wants to hear it just has to listen).
So, just compile and install jackmp as you are used to, on linux, using './waf configure', './waf' and './waf install' as root. On macosx, you can use the xcode project.
On Windows, you can use the Code::Blocks workspace (you also have a small script to make an all in one installer).
On the master, just launch a classical jack server, the period size doesn't matter.
Then, load the network manager using jack_load :
'jack_load netmanager'
This will load the internal client, which will wait for an available slave (see the message window on qjackctl - or the console output).
On the slave, just launch a new jack server using :
'jackd -R -S -d net'
The '-S' (synchronous) option is mandatory. Indeed, the jack server isn't able to deal with the current cycle produced audio data because when the 'send' is called, data are not necessarily already available. So in a given 'n' cycle, the server will send the data produced at the 'n-1' cycle.
In this case, there is no effect on latency because all the subcycles of the slave (the previous 4 subcycles for instance) are run in the given master's cycle.
You can specify some options, like '-n name' (will give a name to the slave, default is the network hostname), '-C input_ports' (the number of master-->slave channels), '-P output_ports' (the number of slave-->master channels), default is 2 ; or '-i midi_in_ports' and '-o midi_out_ports', default is 0. Don't use '-a address' and '-p port', these are here to specify others multicast address and port, but it's not implemented on the master yet.
-------------------------------
What's next ?
-------------------------------
The development of 'netjackmp' continues and some things are going to change soon (see the 'actual limitations' section).
If you use it, please report encountered bugs, ideas or anything you think about.
If you have any question, you can subscribe the jackaudio developers mailing list at http://www.jackaudio.org/ or join the IRC channel 'jack' on FreeNode.

+ 6
- 6
common/JackAPI.cpp View File

@@ -13,7 +13,7 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Lesser General Public License for more details. GNU Lesser General Public License for more details.


You should have received a copy of the GNU Lesser General Public License You should have received a copy of the GNU Lesser General Public License
along with this program; if not, write to the Free Software
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.


*/ */
@@ -247,7 +247,7 @@ extern "C"
} }
#endif #endif


#ifdef WIN32
#if defined(WIN32) && !defined(__MINGW32__)
/* missing on Windows : see http://bugs.mysql.com/bug.php?id=15936 */ /* missing on Windows : see http://bugs.mysql.com/bug.php?id=15936 */
inline double rint(double nr) inline double rint(double nr)
{ {
@@ -270,11 +270,11 @@ static inline bool CheckBufferSize(jack_nframes_t buffer_size)
static inline void WaitGraphChange() static inline void WaitGraphChange()
{ {
/* /*
TLS key that is set only in RT thread, so never waits for pending
TLS key that is set only in RT thread, so never waits for pending
graph change in RT context (just read the current graph state). graph change in RT context (just read the current graph state).
*/ */
if (jack_tls_get(gRealTime) == NULL) {
if (jack_tls_get(gRealTime) == NULL) {
JackGraphManager* manager = GetGraphManager(); JackGraphManager* manager = GetGraphManager();
JackEngineControl* control = GetEngineControl(); JackEngineControl* control = GetEngineControl();
assert(manager); assert(manager);
@@ -300,7 +300,7 @@ EXPORT jack_client_t* jack_client_new(const char* client_name)
{ {
jack_error("jack_client_new: deprecated"); jack_error("jack_client_new: deprecated");
int options = JackUseExactName; int options = JackUseExactName;
if (getenv("JACK_START_SERVER") == NULL)
if (getenv("JACK_START_SERVER") == NULL)
options |= JackNoStartServer; options |= JackNoStartServer;
return jack_client_open_aux(client_name, (jack_options_t)options, NULL, NULL); return jack_client_open_aux(client_name, (jack_options_t)options, NULL, NULL);
} }


+ 25
- 1
common/JackAtomic.h View File

@@ -12,7 +12,7 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Lesser General Public License for more details. GNU Lesser General Public License for more details.


You should have received a copy of the GNU Lesser General Public License You should have received a copy of the GNU Lesser General Public License
along with this program; if not, write to the Free Software
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.


*/ */
@@ -134,6 +134,7 @@ static inline char CAS(volatile UInt32 value, UInt32 newvalue, volatile void* ad


#ifdef WIN32 #ifdef WIN32


#ifndef __MINGW32__
#ifdef __SMP__ #ifdef __SMP__
# define LOCK lock # define LOCK lock
#else #else
@@ -162,6 +163,29 @@ inline char CAS(volatile UInt32 value, UInt32 newvalue, volatile void * addr)
return c; return c;
} }


#else

#ifdef __SMP__
# define LOCK "lock ; "
#else
# define LOCK ""
#endif

static inline char CAS(volatile UInt32 value, UInt32 newvalue, volatile void* addr)
{
register char ret;
__asm__ __volatile__ (
"# CAS \n\t"
LOCK "cmpxchg %2, (%1) \n\t"
"sete %0 \n\t"
: "=a" (ret)
: "c" (addr), "d" (newvalue), "a" (value)
);
return ret;
}

#endif

#endif #endif


static inline long INC_ATOMIC(volatile SInt32* val) static inline long INC_ATOMIC(volatile SInt32* val)


+ 2
- 1
common/JackConnectionManager.h View File

@@ -23,6 +23,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#include "JackConstants.h" #include "JackConstants.h"
#include "JackActivationCount.h" #include "JackActivationCount.h"
#include "JackError.h" #include "JackError.h"
#include "JackExports.h"


#include <assert.h> #include <assert.h>


@@ -371,7 +372,7 @@ struct JackClientTiming
</UL> </UL>
*/ */


class JackConnectionManager
class EXPORT JackConnectionManager
{ {


private: private:


+ 8
- 6
common/JackControl.cpp View File

@@ -372,7 +372,7 @@ jackctl_setup_signals(
(void) signal(SIGABRT, do_nothing_handler); (void) signal(SIGABRT, do_nothing_handler);
(void) signal(SIGTERM, do_nothing_handler); (void) signal(SIGTERM, do_nothing_handler);


return waitEvent;
return (sigset_t)waitEvent;
} }


void jackctl_wait_signals(sigset_t signals) void jackctl_wait_signals(sigset_t signals)
@@ -385,7 +385,7 @@ void jackctl_wait_signals(sigset_t signals)
#else #else


static static
void
void
do_nothing_handler(int sig) do_nothing_handler(int sig)
{ {
/* this is used by the child (active) process, but it never /* this is used by the child (active) process, but it never
@@ -451,7 +451,7 @@ jackctl_setup_signals(
sigaddset(&signals, SIGUSR2); sigaddset(&signals, SIGUSR2);


/* all child threads will inherit this mask unless they /* all child threads will inherit this mask unless they
* explicitly reset it
* explicitly reset it
*/ */


pthread_sigmask(SIG_BLOCK, &signals, 0); pthread_sigmask(SIG_BLOCK, &signals, 0);
@@ -470,9 +470,9 @@ jackctl_setup_signals(
if (sigismember (&signals, i)) if (sigismember (&signals, i))
{ {
sigaction(i, &action, 0); sigaction(i, &action, 0);
}
}
} }
return signals; return signals;
} }


@@ -493,7 +493,9 @@ jackctl_wait_signals(sigset_t signals)
case SIGUSR2: case SIGUSR2:
// driver exit // driver exit
waiting = false; waiting = false;
break;
break;
case SIGTTOU:
break;
default: default:
waiting = false; waiting = false;
break; break;


+ 7
- 7
common/JackDriverLoader.cpp View File

@@ -241,14 +241,14 @@ jackctl_parse_driver_params (jackctl_driver *driver_ptr, int argc, char* argv[])
jackctl_parameter_t * param = NULL; jackctl_parameter_t * param = NULL;
union jackctl_parameter_value value; union jackctl_parameter_value value;


if (argc <= 1)
if (argc <= 1)
return 0; return 0;
const JSList * driver_params = jackctl_driver_get_parameters(driver_ptr); const JSList * driver_params = jackctl_driver_get_parameters(driver_ptr);
if (driver_params == NULL) if (driver_params == NULL)
return 1; return 1;


jack_driver_desc_t * desc = jackctl_driver_get_desc(driver_ptr);
jack_driver_desc_t * desc = jackctl_driver_get_desc(driver_ptr);


/* check for help */ /* check for help */
if (strcmp (argv[1], "-h") == 0 || strcmp (argv[1], "--help") == 0) { if (strcmp (argv[1], "-h") == 0 || strcmp (argv[1], "--help") == 0) {
@@ -303,7 +303,7 @@ jackctl_parse_driver_params (jackctl_driver *driver_ptr, int argc, char* argv[])


node_ptr = (JSList *)driver_params; node_ptr = (JSList *)driver_params;
while (node_ptr) { while (node_ptr) {
param = (jackctl_parameter_t*)node_ptr->data;
param = (jackctl_parameter_t*)node_ptr->data;
if (opt == jackctl_parameter_get_id(param)) { if (opt == jackctl_parameter_get_id(param)) {
break; break;
} }
@@ -318,7 +318,7 @@ jackctl_parse_driver_params (jackctl_driver *driver_ptr, int argc, char* argv[])


if (optarg) { if (optarg) {
switch (jackctl_parameter_get_type(param)) { switch (jackctl_parameter_get_type(param)) {
case JackDriverParamInt:
case JackDriverParamInt:
value.i = atoi (optarg); value.i = atoi (optarg);
jackctl_parameter_set_value(param, &value); jackctl_parameter_set_value(param, &value);
break; break;
@@ -360,7 +360,7 @@ jackctl_parse_driver_params (jackctl_driver *driver_ptr, int argc, char* argv[])
value.i = true; value.i = true;
} else { } else {
value = jackctl_parameter_get_default_value(param); value = jackctl_parameter_get_default_value(param);
}
}
jackctl_parameter_set_value(param, &value); jackctl_parameter_set_value(param, &value);
} }
} }
@@ -439,7 +439,7 @@ jack_drivers_get_descriptor (JSList * drivers, const char * sofile)


#ifdef WIN32 #ifdef WIN32
if ((so_get_descriptor == NULL) && (dlerr = GetLastError()) != 0) { if ((so_get_descriptor == NULL) && (dlerr = GetLastError()) != 0) {
jack_error("%ld", dlerr);
jack_log("Jack::jack_drivers_get_descriptor : dll is not a driver, error ld", dlerr);
#else #else
if ((so_get_descriptor == NULL) && (dlerr = dlerror ()) != NULL) { if ((so_get_descriptor == NULL) && (dlerr = dlerror ()) != NULL) {
jack_error("%s", dlerr); jack_error("%s", dlerr);


+ 19
- 17
common/JackException.h View File

@@ -26,45 +26,47 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#include "JackExports.h" #include "JackExports.h"
#include "JackError.h" #include "JackError.h"


namespace Jack
namespace Jack
{ {


class EXPORT JackException : public std::runtime_error { class EXPORT JackException : public std::runtime_error {
public: public:
JackException(const std::string& msg) : runtime_error(msg)
JackException(const std::string& msg) : std::runtime_error(msg)
{} {}
JackException(const char* msg) : runtime_error(msg)
JackException(char* msg) : std::runtime_error(msg)
{} {}
std::string Message()
JackException(const char* msg) : std::runtime_error(msg)
{}

std::string Message()
{ {
return what(); return what();
} }


void PrintMessage()
void PrintMessage()
{ {
std::string str = what(); std::string str = what();
if (str != "") if (str != "")
jack_info(str.c_str()); jack_info(str.c_str());
} }
}; };
class EXPORT JackDriverException : public JackException { class EXPORT JackDriverException : public JackException {
public: public:
JackDriverException(const std::string& msg) : JackException(msg)

JackDriverException(const std::string& msg) : JackException(msg)
{}
JackDriverException(char* msg) : JackException(msg)
{} {}
JackDriverException(const char* msg) : JackException(msg)
JackDriverException(const char* msg) : JackException(msg)
{} {}
JackDriverException() : JackException("")
JackDriverException() : JackException("")
{} {}
}; };


}
}


#endif #endif

+ 11
- 11
common/JackInternalClient.cpp View File

@@ -52,15 +52,15 @@ static void BuildClientPath(char* path_to_so, int path_len, const char* so_name)
snprintf(path_to_so, path_len, ADDON_DIR "/%s.dll", so_name); snprintf(path_to_so, path_len, ADDON_DIR "/%s.dll", so_name);
} }


static void PrintLoadError(const char* so_name)
{
static void PrintLoadError(const char* so_name)
{
// Retrieve the system error message for the last-error code // Retrieve the system error message for the last-error code
LPVOID lpMsgBuf; LPVOID lpMsgBuf;
LPVOID lpDisplayBuf; LPVOID lpDisplayBuf;
DWORD dw = GetLastError();
DWORD dw = GetLastError();


FormatMessage( FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS, FORMAT_MESSAGE_IGNORE_INSERTS,
NULL, NULL,
@@ -70,12 +70,12 @@ static void PrintLoadError(const char* so_name)
0, NULL ); 0, NULL );


// Display the error message and exit the process // Display the error message and exit the process
lpDisplayBuf = (LPVOID)LocalAlloc(LMEM_ZEROINIT,
(lstrlen((LPCTSTR)lpMsgBuf) + lstrlen((LPCTSTR)so_name) + 40) * sizeof(TCHAR));
lpDisplayBuf = (LPVOID)LocalAlloc(LMEM_ZEROINIT,
(lstrlen((LPCTSTR)lpMsgBuf) + lstrlen((LPCTSTR)so_name) + 40) * sizeof(TCHAR));
_snprintf((LPTSTR)lpDisplayBuf, LocalSize(lpDisplayBuf) / sizeof(TCHAR), _snprintf((LPTSTR)lpDisplayBuf, LocalSize(lpDisplayBuf) / sizeof(TCHAR),
TEXT("error loading %s err = %s"), so_name, lpMsgBuf);
jack_error((LPCTSTR)lpDisplayBuf);
TEXT("error loading %s err = %s"), so_name, lpMsgBuf);
jack_error((LPCTSTR)lpDisplayBuf);


LocalFree(lpMsgBuf); LocalFree(lpMsgBuf);
LocalFree(lpDisplayBuf); LocalFree(lpDisplayBuf);
@@ -145,7 +145,7 @@ int JackInternalClient::Open(const char* server_name, const char* name, jack_opt
jack_error("Cannot open client name = %s", name_res); jack_error("Cannot open client name = %s", name_res);
goto error; goto error;
} }
SetupDriverSync(false); SetupDriverSync(false);
return 0; return 0;


@@ -219,7 +219,7 @@ int JackLoadableInternalClient::Open(const char* server_name, const char* name,
JackInternalClient::Close(); JackInternalClient::Close();
fFinish = NULL; fFinish = NULL;
} }
}
}
return res; return res;
} }




+ 109
- 118
common/JackNetDriver.cpp View File

@@ -1,6 +1,6 @@
/* /*
Copyright (C) 2001 Paul Davis Copyright (C) 2001 Paul Davis
Copyright (C) 2008 Grame
Copyright (C) 2008 Romain Moret at Grame


This program is free software; you can redistribute it and/or modify This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
@@ -22,7 +22,6 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#include "JackEngineControl.h" #include "JackEngineControl.h"
#include "JackClientControl.h" #include "JackClientControl.h"
#include "JackGraphManager.h" #include "JackGraphManager.h"
#include "driver_interface.h"
#include "JackDriverLoader.h" #include "JackDriverLoader.h"
#include "JackThreadedDriver.h" #include "JackThreadedDriver.h"
#include "JackWaitThreadedDriver.h" #include "JackWaitThreadedDriver.h"
@@ -36,22 +35,21 @@ namespace Jack
{ {
JackNetDriver::JackNetDriver ( const char* name, const char* alias, JackLockedEngine* engine, JackSynchro* table, JackNetDriver::JackNetDriver ( const char* name, const char* alias, JackLockedEngine* engine, JackSynchro* table,
const char* ip, int port, int mtu, int midi_input_ports, int midi_output_ports, const char* net_name ) const char* ip, int port, int mtu, int midi_input_ports, int midi_output_ports, const char* net_name )
: JackAudioDriver ( name, alias, engine, table )
: JackAudioDriver ( name, alias, engine, table ), fSocket ( ip, port )
{ {
fMulticastIP = new char[strlen ( ip ) + 1]; fMulticastIP = new char[strlen ( ip ) + 1];
strcpy ( fMulticastIP, ip ); strcpy ( fMulticastIP, ip );
fUDPPort = port;
fParams.fMtu = mtu; fParams.fMtu = mtu;
fParams.fSendMidiChannels = midi_input_ports; fParams.fSendMidiChannels = midi_input_ports;
fParams.fReturnMidiChannels = midi_output_ports; fParams.fReturnMidiChannels = midi_output_ports;
strcpy ( fParams.fName, net_name );
fSockfd = 0;
strcpy ( fParams.fName, net_name );
fSocket.GetName ( fParams.fSlaveNetName );
} }


JackNetDriver::~JackNetDriver() JackNetDriver::~JackNetDriver()
{ {
if ( fSockfd )
close ( fSockfd );
fSocket.Close();
SocketAPIEnd();
delete fNetAudioCaptureBuffer; delete fNetAudioCaptureBuffer;
delete fNetAudioPlaybackBuffer; delete fNetAudioPlaybackBuffer;
delete fNetMidiCaptureBuffer; delete fNetMidiCaptureBuffer;
@@ -91,14 +89,15 @@ namespace Jack
bool JackNetDriver::Init() bool JackNetDriver::Init()
{ {
jack_log ( "JackNetDriver::Init()" ); jack_log ( "JackNetDriver::Init()" );
if ( fSockfd )

//new loading, but existing socket, restart the driver
if ( fSocket.IsSocket() )
Restart(); Restart();


//set the parameters to send //set the parameters to send
strcpy ( fParams.fPacketType, "params" ); strcpy ( fParams.fPacketType, "params" );
fParams.fProtocolVersion = 'a'; fParams.fProtocolVersion = 'a';
SetPacketType ( &fParams, SLAVE_AVAILABLE ); SetPacketType ( &fParams, SLAVE_AVAILABLE );
gethostname ( fParams.fSlaveNetName, 255 );
fParams.fSendAudioChannels = fCaptureChannels; fParams.fSendAudioChannels = fCaptureChannels;
fParams.fReturnAudioChannels = fPlaybackChannels; fParams.fReturnAudioChannels = fPlaybackChannels;


@@ -111,10 +110,10 @@ namespace Jack
do do
{ {
status = GetNetMaster(); status = GetNetMaster();
if ( status == SOCKET_ERROR )
if ( status == NET_SOCKET_ERROR )
return false; return false;
} }
while ( status != CONNECTED );
while ( status != NET_CONNECTED );


//then tell the master we are ready //then tell the master we are ready
jack_info ( "Initializing connection with %s...", fParams.fMasterNetName ); jack_info ( "Initializing connection with %s...", fParams.fMasterNetName );
@@ -122,7 +121,7 @@ namespace Jack
if ( status == NET_ERROR ) if ( status == NET_ERROR )
return false; return false;
} }
while ( status != ROLLING );
while ( status != NET_ROLLING );


//driver parametering //driver parametering
if ( SetParams() ) if ( SetParams() )
@@ -141,62 +140,40 @@ namespace Jack
{ {
jack_log ( "JackNetDriver::GetNetMaster()" ); jack_log ( "JackNetDriver::GetNetMaster()" );
//utility //utility
session_params_t params;
struct sockaddr_in mcast_addr, listen_addr;
struct timeval rcv_timeout;
rcv_timeout.tv_sec = 2;
rcv_timeout.tv_usec = 0;
socklen_t addr_len = sizeof ( socket_address_t );
session_params_t params;
int ms_timeout = 2000;
int rx_bytes = 0; int rx_bytes = 0;


//set the multicast address
mcast_addr.sin_family = AF_INET;
mcast_addr.sin_port = htons ( fUDPPort );
inet_aton ( fMulticastIP, &mcast_addr.sin_addr );
memset ( &mcast_addr.sin_zero, 0, 8 );

//set the listening address
listen_addr.sin_family = AF_INET;
listen_addr.sin_port = htons ( fUDPPort );
listen_addr.sin_addr.s_addr = htonl ( INADDR_ANY );
memset ( &listen_addr.sin_zero, 0, 8 );

//set the master address family
fMasterAddr.sin_family = AF_INET;

//socket //socket
if ( fSockfd )
close ( fSockfd );
if ( ( fSockfd = socket ( AF_INET, SOCK_DGRAM, 0 ) ) < 0 )
if ( fSocket.NewSocket() == SOCKET_ERROR )
{ {
jack_error ( "Fatal error : network unreachable - %s", strerror ( errno ) );
return SOCKET_ERROR;
jack_error ( "Fatal error : network unreachable - %s", StrError ( NET_ERROR_CODE ) );
return NET_SOCKET_ERROR;
} }


//bind the socket //bind the socket
if ( bind ( fSockfd, reinterpret_cast<socket_address_t*> ( &listen_addr ), addr_len ) < 0 )
jack_error ( "Can't bind the socket : %s", strerror ( errno ) );
if ( fSocket.Bind() == SOCKET_ERROR )
jack_error ( "Can't bind the socket : %s", StrError ( NET_ERROR_CODE ) );


//timeout on receive
setsockopt ( fSockfd, SOL_SOCKET, SO_RCVTIMEO, &rcv_timeout, sizeof ( rcv_timeout ) );
//timeout on receive
if ( fSocket.SetTimeOut ( ms_timeout ) == SOCKET_ERROR )
jack_error ( "Can't set timeout : %s", StrError ( NET_ERROR_CODE ) );


//send 'AVAILABLE' until 'SLAVE_SETUP' received //send 'AVAILABLE' until 'SLAVE_SETUP' received
jack_info ( "Waiting for a master..." ); jack_info ( "Waiting for a master..." );
do do
{ {
//send 'available' //send 'available'
if ( sendto ( fSockfd, &fParams, sizeof ( session_params_t ), 0,
reinterpret_cast<socket_address_t*> ( &mcast_addr ), addr_len ) < 0 )
jack_error ( "Error in data send : %s", strerror ( errno ) );
if ( fSocket.SendTo ( &fParams, sizeof ( session_params_t ), 0, fMulticastIP ) == SOCKET_ERROR )
jack_error ( "Error in data send : %s", StrError ( NET_ERROR_CODE ) );
//filter incoming packets : don't exit while receiving wrong packets //filter incoming packets : don't exit while receiving wrong packets
do do
{ {
rx_bytes = recvfrom ( fSockfd, &params, sizeof ( session_params_t ), 0,
reinterpret_cast<socket_address_t*> ( &fMasterAddr ), &addr_len );
if ( ( rx_bytes < 0 ) && ( errno != EAGAIN ) )
rx_bytes = fSocket.CatchHost ( &params, sizeof ( session_params_t ), 0 );
if ( ( rx_bytes == SOCKET_ERROR ) && ( fSocket.GetError() != NET_NO_DATA ) )
{ {
jack_error ( "Can't receive : %s", strerror ( errno ) );
return RECV_ERROR;
jack_error ( "Can't receive : %s", StrError ( NET_ERROR_CODE ) );
return NET_RECV_ERROR;
} }
} }
while ( ( rx_bytes > 0 ) && strcmp ( params.fPacketType, fParams.fPacketType ) ); while ( ( rx_bytes > 0 ) && strcmp ( params.fPacketType, fParams.fPacketType ) );
@@ -204,16 +181,16 @@ namespace Jack
while ( ( GetPacketType ( &params ) != SLAVE_SETUP ) ); while ( ( GetPacketType ( &params ) != SLAVE_SETUP ) );


//connect the socket //connect the socket
if ( connect ( fSockfd, reinterpret_cast<socket_address_t*> ( &fMasterAddr ), sizeof ( socket_address_t ) ) < 0 )
if ( fSocket.Connect() == SOCKET_ERROR )
{ {
jack_error ( "Error in connect : %s", strerror ( errno ) );
return CONNECT_ERROR;
jack_error ( "Error in connect : %s", StrError ( NET_ERROR_CODE ) );
return NET_CONNECT_ERROR;
} }


//everything is OK, copy parameters and return //everything is OK, copy parameters and return
fParams = params; fParams = params;


return CONNECTED;
return NET_CONNECTED;
} }


net_status_t JackNetDriver::SendMasterStartSync() net_status_t JackNetDriver::SendMasterStartSync()
@@ -221,18 +198,17 @@ namespace Jack
jack_log ( "JackNetDriver::GetNetMasterStartSync()" ); jack_log ( "JackNetDriver::GetNetMasterStartSync()" );
//tell the master to start //tell the master to start
SetPacketType ( &fParams, START_MASTER ); SetPacketType ( &fParams, START_MASTER );
if ( send ( fSockfd, &fParams, sizeof ( session_params_t ), 0 ) < 0 )
if ( fSocket.Send ( &fParams, sizeof ( session_params_t ), 0 ) == SOCKET_ERROR )
{ {
jack_error ( "Error in send : %s", strerror ( errno ) );
return ( ( errno == ECONNABORTED ) || ( errno == ECONNREFUSED ) || ( errno == ECONNRESET ) ) ? NET_ERROR : SEND_ERROR;
jack_error ( "Error in send : %s", StrError ( NET_ERROR_CODE ) );
return ( fSocket.GetError() == NET_CONN_ERROR ) ? NET_ERROR : NET_SEND_ERROR;
} }
return ROLLING;
return NET_ROLLING;
} }


void JackNetDriver::Restart() void JackNetDriver::Restart()
{ {
jack_info ( "Restarting driver..." ); jack_info ( "Restarting driver..." );
close ( fSockfd );
delete[] fTxBuffer; delete[] fTxBuffer;
delete[] fRxBuffer; delete[] fRxBuffer;
delete fNetAudioCaptureBuffer; delete fNetAudioCaptureBuffer;
@@ -320,14 +296,16 @@ namespace Jack
jack_port_id_t port_id; jack_port_id_t port_id;
char name[JACK_CLIENT_NAME_SIZE + JACK_PORT_NAME_SIZE]; char name[JACK_CLIENT_NAME_SIZE + JACK_PORT_NAME_SIZE];
char alias[JACK_CLIENT_NAME_SIZE + JACK_PORT_NAME_SIZE]; char alias[JACK_CLIENT_NAME_SIZE + JACK_PORT_NAME_SIZE];
unsigned long port_flags;
unsigned long port_flags;
int audio_port_index;
uint midi_port_index;


//audio //audio
port_flags = JackPortIsOutput | JackPortIsPhysical | JackPortIsTerminal; port_flags = JackPortIsOutput | JackPortIsPhysical | JackPortIsTerminal;
for ( int port_index = 0; port_index < fCaptureChannels; port_index++ )
for ( audio_port_index = 0; audio_port_index < fCaptureChannels; audio_port_index++ )
{ {
snprintf ( alias, sizeof ( alias ) - 1, "%s:%s:out%d", fAliasName, fCaptureDriverName, port_index + 1 );
snprintf ( name, sizeof ( name ) - 1, "%s:capture_%d", fClientControl.fName, port_index + 1 );
snprintf ( alias, sizeof ( alias ) - 1, "%s:%s:out%d", fAliasName, fCaptureDriverName, audio_port_index + 1 );
snprintf ( name, sizeof ( name ) - 1, "%s:capture_%d", fClientControl.fName, audio_port_index + 1 );
if ( ( port_id = fGraphManager->AllocatePort ( fClientControl.fRefNum, name, JACK_DEFAULT_AUDIO_TYPE, if ( ( port_id = fGraphManager->AllocatePort ( fClientControl.fRefNum, name, JACK_DEFAULT_AUDIO_TYPE,
static_cast<JackPortFlags> ( port_flags ), fEngineControl->fBufferSize ) ) == NO_PORT ) static_cast<JackPortFlags> ( port_flags ), fEngineControl->fBufferSize ) ) == NO_PORT )
{ {
@@ -337,14 +315,14 @@ namespace Jack
port = fGraphManager->GetPort ( port_id ); port = fGraphManager->GetPort ( port_id );
port->SetAlias ( alias ); port->SetAlias ( alias );
port->SetLatency ( fEngineControl->fBufferSize + fCaptureLatency ); port->SetLatency ( fEngineControl->fBufferSize + fCaptureLatency );
fCapturePortList[port_index] = port_id;
jack_log ( "JackNetDriver::AllocPorts() fCapturePortList[%d] port_index = %ld", port_index, port_id );
fCapturePortList[audio_port_index] = port_id;
jack_log ( "JackNetDriver::AllocPorts() fCapturePortList[%d] audio_port_index = %ld", audio_port_index, port_id );
} }
port_flags = JackPortIsInput | JackPortIsPhysical | JackPortIsTerminal; port_flags = JackPortIsInput | JackPortIsPhysical | JackPortIsTerminal;
for ( int port_index = 0; port_index < fPlaybackChannels; port_index++ )
for ( audio_port_index = 0; audio_port_index < fPlaybackChannels; audio_port_index++ )
{ {
snprintf ( alias, sizeof ( alias ) - 1, "%s:%s:in%d", fAliasName, fPlaybackDriverName, port_index + 1 );
snprintf ( name, sizeof ( name ) - 1, "%s:playback_%d",fClientControl.fName, port_index + 1 );
snprintf ( alias, sizeof ( alias ) - 1, "%s:%s:in%d", fAliasName, fPlaybackDriverName, audio_port_index + 1 );
snprintf ( name, sizeof ( name ) - 1, "%s:playback_%d",fClientControl.fName, audio_port_index + 1 );
if ( ( port_id = fGraphManager->AllocatePort ( fClientControl.fRefNum, name, JACK_DEFAULT_AUDIO_TYPE, if ( ( port_id = fGraphManager->AllocatePort ( fClientControl.fRefNum, name, JACK_DEFAULT_AUDIO_TYPE,
static_cast<JackPortFlags> ( port_flags ), fEngineControl->fBufferSize ) ) == NO_PORT ) static_cast<JackPortFlags> ( port_flags ), fEngineControl->fBufferSize ) ) == NO_PORT )
{ {
@@ -354,38 +332,38 @@ namespace Jack
port = fGraphManager->GetPort ( port_id ); port = fGraphManager->GetPort ( port_id );
port->SetAlias ( alias ); port->SetAlias ( alias );
port->SetLatency ( fEngineControl->fBufferSize + ( ( fEngineControl->fSyncMode ) ? 0 : fEngineControl->fBufferSize ) + fPlaybackLatency ); port->SetLatency ( fEngineControl->fBufferSize + ( ( fEngineControl->fSyncMode ) ? 0 : fEngineControl->fBufferSize ) + fPlaybackLatency );
fPlaybackPortList[port_index] = port_id;
jack_log ( "JackNetDriver::AllocPorts() fPlaybackPortList[%d] port_index = %ld", port_index, port_id );
fPlaybackPortList[audio_port_index] = port_id;
jack_log ( "JackNetDriver::AllocPorts() fPlaybackPortList[%d] audio_port_index = %ld", audio_port_index, port_id );
} }
//midi //midi
port_flags = JackPortIsOutput | JackPortIsPhysical | JackPortIsTerminal; port_flags = JackPortIsOutput | JackPortIsPhysical | JackPortIsTerminal;
for ( uint port_index = 0; port_index < fParams.fSendMidiChannels; port_index++ )
for ( midi_port_index = 0; midi_port_index < fParams.fSendMidiChannels; midi_port_index++ )
{ {
snprintf ( alias, sizeof ( alias ) - 1, "%s:%s:out%d", fAliasName, fCaptureDriverName, port_index + 1 );
snprintf ( name, sizeof ( name ) - 1, "%s:midi_capture_%d", fClientControl.fName, port_index + 1 );
snprintf ( alias, sizeof ( alias ) - 1, "%s:%s:out%d", fAliasName, fCaptureDriverName, midi_port_index + 1 );
snprintf ( name, sizeof ( name ) - 1, "%s:midi_capture_%d", fClientControl.fName, midi_port_index + 1 );
if ( ( port_id = fGraphManager->AllocatePort ( fClientControl.fRefNum, name, JACK_DEFAULT_MIDI_TYPE, if ( ( port_id = fGraphManager->AllocatePort ( fClientControl.fRefNum, name, JACK_DEFAULT_MIDI_TYPE,
static_cast<JackPortFlags> ( port_flags ), fEngineControl->fBufferSize ) ) == NO_PORT ) static_cast<JackPortFlags> ( port_flags ), fEngineControl->fBufferSize ) ) == NO_PORT )
{ {
jack_error ( "driver: cannot register port for %s", name ); jack_error ( "driver: cannot register port for %s", name );
return -1; return -1;
} }
fMidiCapturePortList[port_index] = port_id;
jack_log ( "JackNetDriver::AllocPorts() fMidiCapturePortList[%d] port_index = %ld", port_index, port_id );
fMidiCapturePortList[midi_port_index] = port_id;
jack_log ( "JackNetDriver::AllocPorts() fMidiCapturePortList[%d] midi_port_index = %ld", midi_port_index, port_id );
} }


port_flags = JackPortIsInput | JackPortIsPhysical | JackPortIsTerminal; port_flags = JackPortIsInput | JackPortIsPhysical | JackPortIsTerminal;
for ( uint port_index = 0; port_index < fParams.fReturnMidiChannels; port_index++ )
for ( midi_port_index = 0; midi_port_index < fParams.fReturnMidiChannels; midi_port_index++ )
{ {
snprintf ( alias, sizeof ( alias ) - 1, "%s:%s:in%d", fAliasName, fPlaybackDriverName, port_index + 1 );
snprintf ( name, sizeof ( name ) - 1, "%s:midi_playback_%d", fClientControl.fName, port_index + 1 );
snprintf ( alias, sizeof ( alias ) - 1, "%s:%s:in%d", fAliasName, fPlaybackDriverName, midi_port_index + 1 );
snprintf ( name, sizeof ( name ) - 1, "%s:midi_playback_%d", fClientControl.fName, midi_port_index + 1 );
if ( ( port_id = fGraphManager->AllocatePort ( fClientControl.fRefNum, name, JACK_DEFAULT_MIDI_TYPE, if ( ( port_id = fGraphManager->AllocatePort ( fClientControl.fRefNum, name, JACK_DEFAULT_MIDI_TYPE,
static_cast<JackPortFlags> ( port_flags ), fEngineControl->fBufferSize ) ) == NO_PORT ) static_cast<JackPortFlags> ( port_flags ), fEngineControl->fBufferSize ) ) == NO_PORT )
{ {
jack_error ( "driver: cannot register port for %s", name ); jack_error ( "driver: cannot register port for %s", name );
return -1; return -1;
} }
fMidiPlaybackPortList[port_index] = port_id;
jack_log ( "JackNetDriver::AllocPorts() fMidiPlaybackPortList[%d] port_index = %ld", port_index, port_id );
fMidiPlaybackPortList[midi_port_index] = port_id;
jack_log ( "JackNetDriver::AllocPorts() fMidiPlaybackPortList[%d] midi_port_index = %ld", midi_port_index, port_id );
} }


return 0; return 0;
@@ -393,15 +371,17 @@ namespace Jack


int JackNetDriver::FreePorts() int JackNetDriver::FreePorts()
{ {
jack_log ( "JackNetDriver::FreePorts" );
for ( int port_index = 0; port_index < fCaptureChannels; port_index++ )
fGraphManager->ReleasePort ( fClientControl.fRefNum, fCapturePortList[port_index] );
for ( int port_index = 0; port_index < fPlaybackChannels; port_index++ )
fGraphManager->ReleasePort ( fClientControl.fRefNum, fPlaybackPortList[port_index] );
for ( uint port_index = 0; port_index < fParams.fSendMidiChannels; port_index++ )
fGraphManager->ReleasePort ( fClientControl.fRefNum, fMidiCapturePortList[port_index] );
for ( uint port_index = 0; port_index < fParams.fReturnMidiChannels; port_index++ )
fGraphManager->ReleasePort ( fClientControl.fRefNum, fMidiPlaybackPortList[port_index] );
jack_log ( "JackNetDriver::FreePorts" );
int audio_port_index;
uint midi_port_index;
for ( audio_port_index = 0; audio_port_index < fCaptureChannels; audio_port_index++ )
fGraphManager->ReleasePort ( fClientControl.fRefNum, fCapturePortList[audio_port_index] );
for ( audio_port_index = 0; audio_port_index < fPlaybackChannels; audio_port_index++ )
fGraphManager->ReleasePort ( fClientControl.fRefNum, fPlaybackPortList[audio_port_index] );
for ( midi_port_index = 0; midi_port_index < fParams.fSendMidiChannels; midi_port_index++ )
fGraphManager->ReleasePort ( fClientControl.fRefNum, fMidiCapturePortList[midi_port_index] );
for ( midi_port_index = 0; midi_port_index < fParams.fReturnMidiChannels; midi_port_index++ )
fGraphManager->ReleasePort ( fClientControl.fRefNum, fMidiPlaybackPortList[midi_port_index] );
return 0; return 0;
} }


@@ -418,21 +398,21 @@ namespace Jack
int JackNetDriver::Recv ( size_t size, int flags ) int JackNetDriver::Recv ( size_t size, int flags )
{ {
int rx_bytes; int rx_bytes;
if ( ( rx_bytes = recv ( fSockfd, fRxBuffer, size, flags ) ) < 0 )
if ( ( rx_bytes = fSocket.Recv ( fRxBuffer, size, flags ) ) == SOCKET_ERROR )
{ {
if ( errno == EAGAIN )
net_error_t error = fSocket.GetError();
if ( error == NET_NO_DATA )
{ {
jack_error ( "No incoming data, is the master still running ?" ); jack_error ( "No incoming data, is the master still running ?" );
return 0; return 0;
} }
else if ( ( errno == ECONNABORTED ) || ( errno == ECONNREFUSED ) || ( errno == ECONNRESET ) )
{
jack_error ( "Fatal error : %s.", strerror ( errno ) );
throw JackDriverException();
else if ( error == NET_CONN_ERROR )
{
throw JackDriverException ( "Connection lost." );
} }
else else
{ {
jack_error ( "Error in receive : %s", strerror ( errno ) );
jack_error ( "Error in receive : %s", StrError ( NET_ERROR_CODE ) );
return 0; return 0;
} }
} }
@@ -442,15 +422,15 @@ namespace Jack
int JackNetDriver::Send ( size_t size, int flags ) int JackNetDriver::Send ( size_t size, int flags )
{ {
int tx_bytes; int tx_bytes;
if ( ( tx_bytes = send ( fSockfd, fTxBuffer, size, flags ) ) < 0 )
if ( ( tx_bytes = fSocket.Send ( fTxBuffer, size, flags ) ) == SOCKET_ERROR )
{ {
if ( ( errno == ECONNABORTED ) || ( errno == ECONNREFUSED ) || ( errno == ECONNRESET ) )
net_error_t error = fSocket.GetError();
if ( error == NET_CONN_ERROR )
{ {
jack_error ( "Fatal error : %s.", strerror ( errno ) );
throw JackDriverException();
throw JackDriverException ( "Connection lost." );
} }
else else
jack_error ( "Error in send : %s", strerror ( errno ) );
jack_error ( "Error in send : %s", StrError ( NET_ERROR_CODE ) );
} }
return tx_bytes; return tx_bytes;
} }
@@ -462,18 +442,21 @@ namespace Jack
int rx_bytes; int rx_bytes;
uint recvd_midi_pckt = 0; uint recvd_midi_pckt = 0;
packet_header_t* rx_head = reinterpret_cast<packet_header_t*> ( fRxBuffer ); packet_header_t* rx_head = reinterpret_cast<packet_header_t*> ( fRxBuffer );
fRxHeader.fIsLastPckt = 'n';
fRxHeader.fIsLastPckt = 'n';
uint midi_port_index;
int audio_port_index;


//buffers //buffers
for ( uint port_index = 0; port_index < fParams.fSendMidiChannels; port_index++ )
fNetMidiCaptureBuffer->fPortBuffer[port_index] = GetMidiInputBuffer ( port_index );
for ( int port_index = 0; port_index < fCaptureChannels; port_index++ )
fNetAudioCaptureBuffer->fPortBuffer[port_index] = GetInputBuffer ( port_index );
for ( midi_port_index = 0; midi_port_index < fParams.fSendMidiChannels; midi_port_index++ )
fNetMidiCaptureBuffer->fPortBuffer[midi_port_index] = GetMidiInputBuffer ( midi_port_index );
for ( audio_port_index = 0; audio_port_index < fCaptureChannels; audio_port_index++ )
fNetAudioCaptureBuffer->fPortBuffer[audio_port_index] = GetInputBuffer ( audio_port_index );


//receive sync (launch the cycle) //receive sync (launch the cycle)
do do
{ {
if ( ( rx_bytes = Recv ( sizeof ( packet_header_t ), 0 ) ) < 1 )
rx_bytes = Recv ( sizeof ( packet_header_t ), 0 );
if ( ( rx_bytes == 0 ) || ( rx_bytes == SOCKET_ERROR ) )
return rx_bytes; return rx_bytes;
} }
while ( !rx_bytes && ( rx_head->fDataType != 's' ) ); while ( !rx_bytes && ( rx_head->fDataType != 's' ) );
@@ -493,14 +476,14 @@ namespace Jack
switch ( rx_head->fDataType ) switch ( rx_head->fDataType )
{ {
case 'm': //midi case 'm': //midi
rx_bytes = Recv ( rx_bytes, MSG_DONTWAIT );
rx_bytes = Recv ( rx_bytes, 0 );
fRxHeader.fIsLastPckt = rx_head->fIsLastPckt; fRxHeader.fIsLastPckt = rx_head->fIsLastPckt;
fNetMidiCaptureBuffer->RenderFromNetwork ( rx_head->fSubCycle, rx_bytes - sizeof ( packet_header_t ) ); fNetMidiCaptureBuffer->RenderFromNetwork ( rx_head->fSubCycle, rx_bytes - sizeof ( packet_header_t ) );
if ( ++recvd_midi_pckt == rx_head->fNMidiPckt ) if ( ++recvd_midi_pckt == rx_head->fNMidiPckt )
fNetMidiCaptureBuffer->RenderToJackPorts(); fNetMidiCaptureBuffer->RenderToJackPorts();
break; break;
case 'a': //audio case 'a': //audio
rx_bytes = Recv ( fAudioRxLen, MSG_DONTWAIT );
rx_bytes = Recv ( fAudioRxLen, 0 );
if ( !IsNextPacket ( &fRxHeader, rx_head, fNSubProcess ) ) if ( !IsNextPacket ( &fRxHeader, rx_head, fNSubProcess ) )
jack_error ( "Packet(s) missing..." ); jack_error ( "Packet(s) missing..." );
fRxHeader.fCycle = rx_head->fCycle; fRxHeader.fCycle = rx_head->fCycle;
@@ -526,13 +509,15 @@ namespace Jack
int tx_bytes, copy_size; int tx_bytes, copy_size;
fTxHeader.fCycle = fRxHeader.fCycle; fTxHeader.fCycle = fRxHeader.fCycle;
fTxHeader.fSubCycle = 0; fTxHeader.fSubCycle = 0;
fTxHeader.fIsLastPckt = 'n';
fTxHeader.fIsLastPckt = 'n';
uint midi_port_index;
int audio_port_index;


//buffers //buffers
for ( uint port_index = 0; port_index < fParams.fReturnMidiChannels; port_index++ )
fNetMidiPlaybackBuffer->fPortBuffer[port_index] = GetMidiOutputBuffer ( port_index );
for ( int port_index = 0; port_index < fPlaybackChannels; port_index++ )
fNetAudioPlaybackBuffer->fPortBuffer[port_index] = GetOutputBuffer ( port_index );
for ( midi_port_index = 0; midi_port_index < fParams.fReturnMidiChannels; midi_port_index++ )
fNetMidiPlaybackBuffer->fPortBuffer[midi_port_index] = GetMidiOutputBuffer ( midi_port_index );
for ( audio_port_index = 0; audio_port_index < fPlaybackChannels; audio_port_index++ )
fNetAudioPlaybackBuffer->fPortBuffer[audio_port_index] = GetOutputBuffer ( audio_port_index );


//midi //midi
if ( fParams.fReturnMidiChannels ) if ( fParams.fReturnMidiChannels )
@@ -649,10 +634,15 @@ namespace Jack
} }


EXPORT Jack::JackDriverClientInterface* driver_initialize ( Jack::JackLockedEngine* engine, Jack::JackSynchro* table, const JSList* params ) EXPORT Jack::JackDriverClientInterface* driver_initialize ( Jack::JackLockedEngine* engine, Jack::JackSynchro* table, const JSList* params )
{
{
if ( SocketAPIInit() < 0 )
{
jack_error ( "Can't init Socket API, exiting..." );
return NULL;
}
const char* multicast_ip = DEFAULT_MULTICAST_IP; const char* multicast_ip = DEFAULT_MULTICAST_IP;
char name[JACK_CLIENT_NAME_SIZE]; char name[JACK_CLIENT_NAME_SIZE];
gethostname ( name, JACK_CLIENT_NAME_SIZE );
GetHostName ( name, JACK_CLIENT_NAME_SIZE );
int udp_port = DEFAULT_PORT; int udp_port = DEFAULT_PORT;
int mtu = 1500; int mtu = 1500;
jack_nframes_t period_size = 128; jack_nframes_t period_size = 128;
@@ -697,7 +687,8 @@ namespace Jack
} }


Jack::JackDriverClientInterface* driver = new Jack::JackWaitThreadedDriver ( Jack::JackDriverClientInterface* driver = new Jack::JackWaitThreadedDriver (
new Jack::JackNetDriver ( "system", "net_pcm", engine, table, multicast_ip, udp_port, mtu, midi_input_ports, midi_output_ports, name ) );
new Jack::JackNetDriver ( "system", "net_pcm", engine, table, multicast_ip, udp_port, mtu,
midi_input_ports, midi_output_ports, name ) );
if ( driver->Open ( period_size, sample_rate, 1, 1, audio_capture_ports, audio_playback_ports, if ( driver->Open ( period_size, sample_rate, 1, 1, audio_capture_ports, audio_playback_ports,
monitor, "from_master_", "to_master_", 0, 0 ) == 0 ) monitor, "from_master_", "to_master_", 0, 0 ) == 0 )
return driver; return driver;


+ 2
- 4
common/JackNetDriver.h View File

@@ -1,6 +1,6 @@
/* /*
Copyright (C) 2001 Paul Davis Copyright (C) 2001 Paul Davis
Copyright (C) 2008 Grame
Copyright (C) 2008 Romain Moret at Grame


This program is free software; you can redistribute it and/or modify This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
@@ -31,9 +31,7 @@ namespace Jack
private: private:
session_params_t fParams; session_params_t fParams;
char* fMulticastIP; char* fMulticastIP;
int fUDPPort;
int fSockfd;
struct sockaddr_in fMasterAddr;
JackNetSocket fSocket;
uint fNSubProcess; uint fNSubProcess;


jack_port_id_t* fMidiCapturePortList; jack_port_id_t* fMidiCapturePortList;


+ 81
- 104
common/JackNetManager.cpp View File

@@ -1,5 +1,5 @@
/* /*
Copyright (C) 2008 Grame
Copyright (C) 2008 Romain Moret at Grame


This program is free software; you can redistribute it and/or modify This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
@@ -30,34 +30,33 @@ namespace Jack
{ {
//JackNetMaster****************************************************************************************************** //JackNetMaster******************************************************************************************************


JackNetMaster::JackNetMaster ( JackNetMasterManager* manager, session_params_t& params, struct sockaddr_in& address, struct sockaddr_in& mcast_addr )
JackNetMaster::JackNetMaster ( JackNetMasterManager* manager, session_params_t& params ) : fSocket()
{ {
jack_log ( "JackNetMaster::JackNetMaster" ); jack_log ( "JackNetMaster::JackNetMaster" );
//settings //settings
fMasterManager = manager; fMasterManager = manager;
fParams = params; fParams = params;
fAddr = address;
fMcastAddr = mcast_addr;
fSocket.CopyParams ( &fMasterManager->fSocket );
fNSubProcess = fParams.fPeriodSize / fParams.fFramesPerPacket; fNSubProcess = fParams.fPeriodSize / fParams.fFramesPerPacket;
fClientName = const_cast<char*> ( fParams.fName ); fClientName = const_cast<char*> ( fParams.fName );
fNetJumpCnt = 0; fNetJumpCnt = 0;
fJackClient = NULL; fJackClient = NULL;
fSockfd = 0;
fRunning = false;
fRunning = false;
uint port_index;


//jack audio ports //jack audio ports
fAudioCapturePorts = new jack_port_t* [fParams.fSendAudioChannels]; fAudioCapturePorts = new jack_port_t* [fParams.fSendAudioChannels];
for ( uint port_index = 0; port_index < fParams.fSendAudioChannels; port_index++ )
for ( port_index = 0; port_index < fParams.fSendAudioChannels; port_index++ )
fAudioCapturePorts[port_index] = NULL; fAudioCapturePorts[port_index] = NULL;
fAudioPlaybackPorts = new jack_port_t* [fParams.fReturnAudioChannels]; fAudioPlaybackPorts = new jack_port_t* [fParams.fReturnAudioChannels];
for ( uint port_index = 0; port_index < fParams.fReturnAudioChannels; port_index++ )
for ( port_index = 0; port_index < fParams.fReturnAudioChannels; port_index++ )
fAudioPlaybackPorts[port_index] = NULL; fAudioPlaybackPorts[port_index] = NULL;
//jack midi ports //jack midi ports
fMidiCapturePorts = new jack_port_t* [fParams.fSendMidiChannels]; fMidiCapturePorts = new jack_port_t* [fParams.fSendMidiChannels];
for ( uint port_index = 0; port_index < fParams.fSendMidiChannels; port_index++ )
for ( port_index = 0; port_index < fParams.fSendMidiChannels; port_index++ )
fMidiCapturePorts[port_index] = NULL; fMidiCapturePorts[port_index] = NULL;
fMidiPlaybackPorts = new jack_port_t* [fParams.fReturnMidiChannels]; fMidiPlaybackPorts = new jack_port_t* [fParams.fReturnMidiChannels];
for ( uint port_index = 0; port_index < fParams.fReturnMidiChannels; port_index++ )
for ( port_index = 0; port_index < fParams.fReturnMidiChannels; port_index++ )
fMidiPlaybackPorts[port_index] = NULL; fMidiPlaybackPorts[port_index] = NULL;


//TX header init //TX header init
@@ -108,8 +107,7 @@ namespace Jack
FreePorts(); FreePorts();
jack_client_close ( fJackClient ); jack_client_close ( fJackClient );
} }
if ( fSockfd )
close ( fSockfd );
fSocket.Close();
delete fNetAudioCaptureBuffer; delete fNetAudioCaptureBuffer;
delete fNetAudioPlaybackBuffer; delete fNetAudioPlaybackBuffer;
delete fNetMidiCaptureBuffer; delete fNetMidiCaptureBuffer;
@@ -126,27 +124,25 @@ namespace Jack
{ {
jack_log ( "JackNetMaster::Init, ID %u.", fParams.fID ); jack_log ( "JackNetMaster::Init, ID %u.", fParams.fID );
session_params_t params; session_params_t params;
struct timeval timeout;
timeout.tv_sec = 1;
timeout.tv_usec = 0;
size_t attempt = 0;
int msec_timeout = 1000;
uint attempt = 0;
int rx_bytes = 0; int rx_bytes = 0;


//socket //socket
if ( ( fSockfd = socket ( AF_INET, SOCK_DGRAM, 0 ) ) < 0 )
if ( fSocket.NewSocket() == SOCKET_ERROR )
{ {
jack_error ( "Can't create socket : %s", strerror ( errno ) );
jack_error ( "Can't create socket : %s", StrError ( NET_ERROR_CODE ) );
return false; return false;
} }


//timeout on receive (for init) //timeout on receive (for init)
if ( setsockopt ( fSockfd, SOL_SOCKET, SO_RCVTIMEO, &timeout, sizeof ( timeout ) ) < 0 )
jack_error ( "Can't set timeout : %s", strerror ( errno ) );
if ( fSocket.SetTimeOut ( msec_timeout ) < 0 )
jack_error ( "Can't set timeout : %s", StrError ( NET_ERROR_CODE ) );


//connect //connect
if ( connect ( fSockfd, reinterpret_cast<sockaddr*> ( &fAddr ), sizeof ( struct sockaddr ) ) < 0 )
if ( fSocket.Connect() == SOCKET_ERROR )
{ {
jack_error ( "Can't connect : %s", strerror ( errno ) );
jack_error ( "Can't connect : %s", StrError ( NET_ERROR_CODE ) );
return false; return false;
} }


@@ -155,9 +151,9 @@ namespace Jack
do do
{ {
SetPacketType ( &fParams, SLAVE_SETUP ); SetPacketType ( &fParams, SLAVE_SETUP );
if ( send ( fSockfd, &fParams, sizeof ( session_params_t ), 0 ) < 0 )
jack_error ( "Error in send : ", strerror ( errno ) );
if ( ( ( rx_bytes = recv ( fSockfd, &params, sizeof ( session_params_t ), 0 ) ) < 0 ) && ( errno != EAGAIN ) )
if ( fSocket.Send ( &fParams, sizeof ( session_params_t ), 0 ) == SOCKET_ERROR )
jack_error ( "Error in send : ", StrError ( NET_ERROR_CODE ) );
if ( ( ( rx_bytes = fSocket.Recv ( &params, sizeof ( session_params_t ), 0 ) ) == SOCKET_ERROR ) && ( fSocket.GetError() != NET_NO_DATA ) )
{ {
jack_error ( "Problem with network." ); jack_error ( "Problem with network." );
return false; return false;
@@ -171,9 +167,9 @@ namespace Jack
} }


//set the new timeout for the socket //set the new timeout for the socket
if ( SetRxTimeout ( &fSockfd, &fParams ) < 0 )
if ( SetRxTimeout ( &fSocket, &fParams ) == SOCKET_ERROR )
{ {
jack_error ( "Can't set rx timeout : %s", strerror ( errno ) );
jack_error ( "Can't set rx timeout : %s", StrError ( NET_ERROR_CODE ) );
return false; return false;
} }


@@ -264,30 +260,30 @@ namespace Jack
//send a 'multicast euthanasia request' - new socket is required on macosx //send a 'multicast euthanasia request' - new socket is required on macosx
jack_info ( "Exiting '%s'", fParams.fName ); jack_info ( "Exiting '%s'", fParams.fName );
SetPacketType ( &fParams, KILL_MASTER ); SetPacketType ( &fParams, KILL_MASTER );
int mcast_sockfd = socket ( AF_INET, SOCK_DGRAM, 0 );
if ( mcast_sockfd < 0 )
jack_error ( "Can't create socket : %s", strerror ( errno ) );
if ( sendto ( mcast_sockfd, &fParams, sizeof ( session_params_t ), 0,
reinterpret_cast<socket_address_t*> ( &fMcastAddr ), sizeof ( socket_address_t ) ) < 0 )
jack_error ( "Can't send suicide request : %s", strerror ( errno ) );
close ( mcast_sockfd );
JackNetSocket mcast_socket ( fMasterManager->fMulticastIP, fSocket.GetPort() );
if ( mcast_socket.NewSocket() == SOCKET_ERROR )
jack_error ( "Can't create socket : %s", StrError ( NET_ERROR_CODE ) );
if ( mcast_socket.SendTo ( &fParams, sizeof ( session_params_t ), 0, fMasterManager->fMulticastIP ) == SOCKET_ERROR )
jack_error ( "Can't send suicide request : %s", StrError ( NET_ERROR_CODE ) );
mcast_socket.Close();
} }


int JackNetMaster::Send ( char* buffer, size_t size, int flags ) int JackNetMaster::Send ( char* buffer, size_t size, int flags )
{ {
int tx_bytes; int tx_bytes;
if ( ( tx_bytes = send ( fSockfd, buffer, size, flags ) ) < 0 )
if ( ( tx_bytes = fSocket.Send ( buffer, size, flags ) ) == SOCKET_ERROR )
{ {
if ( ( errno == ECONNABORTED ) || ( errno == ECONNREFUSED ) || ( errno == ECONNRESET ) )
net_error_t error = fSocket.GetError();
if ( error == NET_CONN_ERROR )
{ {
//fatal connection issue, exit //fatal connection issue, exit
jack_error ( "'%s' : %s, please check network connection with '%s'.", jack_error ( "'%s' : %s, please check network connection with '%s'.",
fParams.fName, strerror ( errno ), fParams.fSlaveNetName );
fParams.fName, StrError ( NET_ERROR_CODE ), fParams.fSlaveNetName );
Exit(); Exit();
return 0; return 0;
} }
else else
jack_error ( "Error in send : %s", strerror ( errno ) );
jack_error ( "Error in send : %s", StrError ( NET_ERROR_CODE ) );
} }
return tx_bytes; return tx_bytes;
} }
@@ -295,9 +291,10 @@ namespace Jack
int JackNetMaster::Recv ( size_t size, int flags ) int JackNetMaster::Recv ( size_t size, int flags )
{ {
int rx_bytes; int rx_bytes;
if ( ( rx_bytes = recv ( fSockfd, fRxBuffer, size, flags ) ) < 0 )
if ( ( rx_bytes = fSocket.Recv ( fRxBuffer, size, flags ) ) == SOCKET_ERROR )
{ {
if ( errno == EAGAIN )
net_error_t error = fSocket.GetError();
if ( error == NET_NO_DATA )
{ {
//too much receive failure, react... //too much receive failure, react...
if ( ++fNetJumpCnt == 100 ) if ( ++fNetJumpCnt == 100 )
@@ -307,16 +304,16 @@ namespace Jack
} }
return 0; return 0;
} }
else if ( ( errno == ECONNABORTED ) || ( errno == ECONNREFUSED ) || ( errno == ECONNRESET ) )
else if ( error == NET_CONN_ERROR )
{ {
//fatal connection issue, exit //fatal connection issue, exit
jack_error ( "'%s' : %s, please check network connection with '%s'.", jack_error ( "'%s' : %s, please check network connection with '%s'.",
fParams.fName, strerror ( errno ), fParams.fSlaveNetName );
fParams.fName, StrError ( NET_ERROR_CODE ), fParams.fSlaveNetName );
Exit(); Exit();
return 0; return 0;
} }
else if ( errno != EAGAIN )
jack_error ( "Error in receive : %s", strerror ( errno ) );
else
jack_error ( "Error in receive : %s", StrError ( NET_ERROR_CODE ) );
} }
return rx_bytes; return rx_bytes;
} }
@@ -360,7 +357,7 @@ namespace Jack
if ( !fParams.fSendMidiChannels && !fParams.fSendAudioChannels ) if ( !fParams.fSendMidiChannels && !fParams.fSendAudioChannels )
fTxHeader.fIsLastPckt = 'y'; fTxHeader.fIsLastPckt = 'y';
tx_bytes = Send ( reinterpret_cast<char*> ( &fTxHeader ), sizeof ( packet_header_t ), 0 ); tx_bytes = Send ( reinterpret_cast<char*> ( &fTxHeader ), sizeof ( packet_header_t ), 0 );
if ( tx_bytes < 1 )
if ( ( tx_bytes == 0 ) || ( tx_bytes == SOCKET_ERROR ) )
return tx_bytes; return tx_bytes;


//midi //midi
@@ -412,7 +409,7 @@ namespace Jack
switch ( rx_head->fDataType ) switch ( rx_head->fDataType )
{ {
case 'm': //midi case 'm': //midi
rx_bytes = Recv ( rx_bytes, MSG_DONTWAIT );
rx_bytes = Recv ( rx_bytes, 0 );
fRxHeader.fIsLastPckt = rx_head->fIsLastPckt; fRxHeader.fIsLastPckt = rx_head->fIsLastPckt;
fNetMidiPlaybackBuffer->RenderFromNetwork ( rx_head->fSubCycle, rx_bytes - sizeof ( packet_header_t ) ); fNetMidiPlaybackBuffer->RenderFromNetwork ( rx_head->fSubCycle, rx_bytes - sizeof ( packet_header_t ) );
if ( ++midi_recvd_pckt == rx_head->fNMidiPckt ) if ( ++midi_recvd_pckt == rx_head->fNMidiPckt )
@@ -420,7 +417,7 @@ namespace Jack
fNetJumpCnt = 0; fNetJumpCnt = 0;
break; break;
case 'a': //audio case 'a': //audio
rx_bytes = Recv ( fAudioRxLen, MSG_DONTWAIT );
rx_bytes = Recv ( fAudioRxLen, 0 );
if ( !IsNextPacket ( &fRxHeader, rx_head, fNSubProcess ) ) if ( !IsNextPacket ( &fRxHeader, rx_head, fNSubProcess ) )
jack_error ( "Packet(s) missing from '%s'...", fParams.fName ); jack_error ( "Packet(s) missing from '%s'...", fParams.fName );
fRxHeader.fCycle = rx_head->fCycle; fRxHeader.fCycle = rx_head->fCycle;
@@ -439,13 +436,13 @@ namespace Jack


//JackNetMasterManager*********************************************************************************************** //JackNetMasterManager***********************************************************************************************


JackNetMasterManager::JackNetMasterManager ( jack_client_t* client )
JackNetMasterManager::JackNetMasterManager ( jack_client_t* client ) : fSocket()
{ {
jack_log ( "JackNetMasterManager::JackNetMasterManager" ); jack_log ( "JackNetMasterManager::JackNetMasterManager" );
fManagerClient = client; fManagerClient = client;
fManagerName = jack_get_client_name ( fManagerClient ); fManagerName = jack_get_client_name ( fManagerClient );
fMCastIP = DEFAULT_MULTICAST_IP;
fUDPPort = DEFAULT_PORT;
fMulticastIP = DEFAULT_MULTICAST_IP;
fSocket.SetPort ( DEFAULT_PORT );
fGlobalID = 0; fGlobalID = 0;
fRunning = true; fRunning = true;


@@ -460,7 +457,9 @@ namespace Jack
Exit(); Exit();
master_list_t::iterator it; master_list_t::iterator it;
for ( it = fMasterList.begin(); it != fMasterList.end(); it++ ) for ( it = fMasterList.begin(); it != fMasterList.end(); it++ )
delete ( *it );
delete ( *it );
fSocket.Close();
SocketAPIEnd();
} }


void* JackNetMasterManager::NetManagerThread ( void* arg ) void* JackNetMasterManager::NetManagerThread ( void* arg )
@@ -474,79 +473,58 @@ namespace Jack
void JackNetMasterManager::Run() void JackNetMasterManager::Run()
{ {
jack_log ( "JackNetMasterManager::Run" ); jack_log ( "JackNetMasterManager::Run" );
//utility variables
socklen_t addr_len = sizeof ( socket_address_t );
char disable = 0;
struct timeval timeout;
timeout.tv_sec = 2;
timeout.tv_usec = 0;
//utility variables
int msec_timeout = 2000;
int attempt = 0; int attempt = 0;


//network
int mcast_sockfd;
struct ip_mreq multicast_req;
struct sockaddr_in mcast_addr;
struct sockaddr_in response_addr;

//data //data
session_params_t params; session_params_t params;
int rx_bytes = 0; int rx_bytes = 0;
JackNetMaster* net_master; JackNetMaster* net_master;
//init socket API (win32)
if ( SocketAPIInit() < 0 )
{
jack_error ( "Can't init Socket API, exiting..." );
return;
}


//socket //socket
if ( ( mcast_sockfd = socket ( AF_INET, SOCK_DGRAM, 0 ) ) < 0 )
if ( fSocket.NewSocket() == SOCKET_ERROR )
{ {
jack_error ( "Can't create the network management input socket : %s", strerror ( errno ) );
jack_error ( "Can't create the network management input socket : %s", StrError ( NET_ERROR_CODE ) );
return; return;
} }


//set the multicast address
mcast_addr.sin_family = AF_INET;
mcast_addr.sin_port = htons ( fUDPPort );
if ( inet_aton ( fMCastIP, &mcast_addr.sin_addr ) < 0 )
//bind the socket to the local port
if ( fSocket.Bind () == SOCKET_ERROR )
{ {
jack_error ( "Cant set multicast address : %s", strerror ( errno ) );
close ( mcast_sockfd );
return;
}
memset ( &mcast_addr.sin_zero, 0, 8 );

//bind the socket to the multicast address
if ( bind ( mcast_sockfd, reinterpret_cast<socket_address_t *> ( &mcast_addr ), addr_len ) < 0 )
{
jack_error ( "Can't bind the network manager socket : %s", strerror ( errno ) );
close ( mcast_sockfd );
jack_error ( "Can't bind the network manager socket : %s", StrError ( NET_ERROR_CODE ) );
fSocket.Close();
return; return;
} }


//join multicast group //join multicast group
inet_aton ( fMCastIP, &multicast_req.imr_multiaddr );
multicast_req.imr_interface.s_addr = htonl ( INADDR_ANY );
if ( setsockopt ( mcast_sockfd, IPPROTO_IP, IP_ADD_MEMBERSHIP, &multicast_req, sizeof ( multicast_req ) ) < 0 )
{
jack_error ( "Can't join multicast group : %s", strerror ( errno ) );
close ( mcast_sockfd );
return;
}

//disable local loop
if ( setsockopt ( mcast_sockfd, IPPROTO_IP, IP_MULTICAST_LOOP, &disable, sizeof ( disable ) ) < 0 )
jack_error ( "Can't set multicast loop option : %s", strerror ( errno ) );
if ( fSocket.JoinMCastGroup ( fMulticastIP ) == SOCKET_ERROR )
jack_error ( "Can't join multicast group : %s", StrError ( NET_ERROR_CODE ) );
//local loop
if ( fSocket.SetLocalLoop() == SOCKET_ERROR )
jack_error ( "Can't set local loop : %s", StrError ( NET_ERROR_CODE ) );


//set a timeout on the multicast receive (the thread can now be cancelled) //set a timeout on the multicast receive (the thread can now be cancelled)
if ( setsockopt ( mcast_sockfd, SOL_SOCKET, SO_RCVTIMEO, &timeout, sizeof ( timeout ) ) < 0 )
jack_error ( "Can't set timeout : %s", strerror ( errno ) );
if ( fSocket.SetTimeOut ( msec_timeout ) == SOCKET_ERROR )
jack_error ( "Can't set timeout : %s", StrError ( NET_ERROR_CODE ) );


jack_info ( "Waiting for a slave..." ); jack_info ( "Waiting for a slave..." );


//main loop, wait for data, deal with it and wait again //main loop, wait for data, deal with it and wait again
do do
{ {
rx_bytes = recvfrom ( mcast_sockfd, &params, sizeof ( session_params_t ), 0,
reinterpret_cast<socket_address_t*> ( &response_addr ), &addr_len );
if ( ( rx_bytes < 0 ) && ( errno != EAGAIN ) )
rx_bytes = fSocket.CatchHost ( &params, sizeof ( session_params_t ), 0 );
if ( ( rx_bytes == SOCKET_ERROR ) && ( fSocket.GetError() != NET_NO_DATA ) )
{ {
jack_error ( "Error in receive : %s", strerror ( errno ) );
jack_error ( "Error in receive : %s", StrError ( NET_ERROR_CODE ) );
if ( ++attempt == 10 ) if ( ++attempt == 10 )
{ {
jack_error ( "Can't receive on the socket, exiting net manager." ); jack_error ( "Can't receive on the socket, exiting net manager." );
@@ -558,7 +536,7 @@ namespace Jack
switch ( GetPacketType ( &params ) ) switch ( GetPacketType ( &params ) )
{ {
case SLAVE_AVAILABLE: case SLAVE_AVAILABLE:
if ( ( net_master = MasterInit ( params, response_addr, mcast_addr ) ) )
if ( ( net_master = MasterInit ( params ) ) )
SessionParamsDisplay ( &net_master->fParams ); SessionParamsDisplay ( &net_master->fParams );
else else
jack_error ( "Can't init new net master..." ); jack_error ( "Can't init new net master..." );
@@ -574,22 +552,21 @@ namespace Jack
} }
} }
while ( fRunning ); while ( fRunning );
close ( mcast_sockfd );
} }


void JackNetMasterManager::Exit() void JackNetMasterManager::Exit()
{ {
jack_log ( "JackNetMasterManager::Exit" ); jack_log ( "JackNetMasterManager::Exit" );
fRunning = false; fRunning = false;
pthread_join ( fManagerThread, NULL );
jack_client_stop_thread ( fManagerClient, fManagerThread );
jack_info ( "Exiting net manager..." ); jack_info ( "Exiting net manager..." );
} }


JackNetMaster* JackNetMasterManager::MasterInit ( session_params_t& params, struct sockaddr_in& address, struct sockaddr_in& mcast_addr )
JackNetMaster* JackNetMasterManager::MasterInit ( session_params_t& params )
{ {
jack_log ( "JackNetMasterManager::MasterInit, Slave : %s", params.fName ); jack_log ( "JackNetMasterManager::MasterInit, Slave : %s", params.fName );
//settings //settings
gethostname ( params.fMasterNetName, 255 );
fSocket.GetName ( params.fMasterNetName );
params.fID = ++fGlobalID; params.fID = ++fGlobalID;
params.fSampleRate = jack_get_sample_rate ( fManagerClient ); params.fSampleRate = jack_get_sample_rate ( fManagerClient );
params.fPeriodSize = jack_get_buffer_size ( fManagerClient ); params.fPeriodSize = jack_get_buffer_size ( fManagerClient );
@@ -598,7 +575,7 @@ namespace Jack
SetSlaveName ( params ); SetSlaveName ( params );


//create a new master and add it to the list //create a new master and add it to the list
JackNetMaster* master = new JackNetMaster ( this, params, address, mcast_addr );
JackNetMaster* master = new JackNetMaster ( this, params );
if ( master->Init() ) if ( master->Init() )
{ {
fMasterList.push_back ( master ); fMasterList.push_back ( master );


+ 6
- 7
common/JackNetManager.h View File

@@ -37,9 +37,7 @@ namespace Jack


JackNetMasterManager* fMasterManager; JackNetMasterManager* fMasterManager;
session_params_t fParams; session_params_t fParams;
struct sockaddr_in fAddr;
struct sockaddr_in fMcastAddr;
int fSockfd;
JackNetSocket fSocket;
uint fNSubProcess; uint fNSubProcess;
int fNetJumpCnt; int fNetJumpCnt;
bool fRunning; bool fRunning;
@@ -76,7 +74,7 @@ namespace Jack
int Recv ( size_t size, int flags ); int Recv ( size_t size, int flags );
int Process(); int Process();
public: public:
JackNetMaster ( JackNetMasterManager* manager, session_params_t& params, struct sockaddr_in& address, struct sockaddr_in& mcast_addr );
JackNetMaster ( JackNetMasterManager* manager, session_params_t& params );
~JackNetMaster (); ~JackNetMaster ();
}; };


@@ -85,21 +83,22 @@ namespace Jack


class JackNetMasterManager class JackNetMasterManager
{ {
friend class JackNetMaster;
private: private:
static void* NetManagerThread ( void* arg ); static void* NetManagerThread ( void* arg );
static int SetProcess ( jack_nframes_t nframes, void* arg ); static int SetProcess ( jack_nframes_t nframes, void* arg );


jack_client_t* fManagerClient; jack_client_t* fManagerClient;
const char* fManagerName; const char* fManagerName;
const char* fMCastIP;
int fUDPPort;
const char* fMulticastIP;
JackNetSocket fSocket;
pthread_t fManagerThread; pthread_t fManagerThread;
master_list_t fMasterList; master_list_t fMasterList;
uint32_t fGlobalID; uint32_t fGlobalID;
bool fRunning; bool fRunning;


void Run(); void Run();
JackNetMaster* MasterInit ( session_params_t& params, struct sockaddr_in& address, struct sockaddr_in& mcast_addr );
JackNetMaster* MasterInit ( session_params_t& params );
master_list_it_t FindMaster ( uint32_t client_id ); master_list_it_t FindMaster ( uint32_t client_id );
void KillMaster ( session_params_t* params ); void KillMaster ( session_params_t* params );
void SetSlaveName ( session_params_t& params ); void SetSlaveName ( session_params_t& params );


+ 47
- 0
common/JackNetSocket.h View File

@@ -0,0 +1,47 @@
/*
Copyright (C) 2008 Romain Moret at Grame

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.

*/

#ifndef __JackNetSocket__
#define __JackNetSocket__

#include "JackExports.h"
#include "JackError.h"
#include <cstdlib>
#include <cstdio>
#include <iostream>
#include <errno.h>

namespace Jack
{
//get host name*********************************
EXPORT int GetHostName ( char * name, int size );

//net errors ***********************************
enum _net_error
{
NET_CONN_ERROR = 10000,
NET_OP_ERROR,
NET_NO_DATA,
NET_NO_ERROR
};

typedef enum _net_error net_error_t;
}

#endif

+ 42
- 18
common/JackNetTool.cpp View File

@@ -1,5 +1,5 @@
/* /*
Copyright (C) 2008 Grame
Copyright (C) 2008 Romain Moret at Grame


This program is free software; you can redistribute it and/or modify This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
@@ -18,7 +18,6 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/ */


#include "JackNetTool.h" #include "JackNetTool.h"
#include "JackError.h"


using namespace std; using namespace std;


@@ -177,7 +176,7 @@ namespace Jack


EXPORT void SessionParamsDisplay ( session_params_t* params ) EXPORT void SessionParamsDisplay ( session_params_t* params )
{ {
jack_info ( "********************Params********************" );
jack_info ( "---->Network parameters of '%s'<----", params->fName );
jack_info ( "Protocol revision : %c", params->fProtocolVersion ); jack_info ( "Protocol revision : %c", params->fProtocolVersion );
jack_info ( "MTU : %u", params->fMtu ); jack_info ( "MTU : %u", params->fMtu );
jack_info ( "Master name : %s", params->fMasterNetName ); jack_info ( "Master name : %s", params->fMasterNetName );
@@ -190,8 +189,8 @@ namespace Jack
jack_info ( "Frames per packet : %u", params->fFramesPerPacket ); jack_info ( "Frames per packet : %u", params->fFramesPerPacket );
jack_info ( "Packet per period : %u", params->fPeriodSize / params->fFramesPerPacket ); jack_info ( "Packet per period : %u", params->fPeriodSize / params->fFramesPerPacket );
jack_info ( "Bitdepth (0 for float) : %u", params->fBitdepth ); jack_info ( "Bitdepth (0 for float) : %u", params->fBitdepth );
jack_info ( "Name : %s", params->fName );
jack_info ( "**********************************************" );
jack_info ( "Name : %s", params->fName );
jack_info ( "---------------------------------------------" );
} }


EXPORT sync_packet_type_t GetPacketType ( session_params_t* params ) EXPORT sync_packet_type_t GetPacketType ( session_params_t* params )
@@ -274,13 +273,43 @@ namespace Jack
} }


// Utility ******************************************************************************************************* // Utility *******************************************************************************************************
EXPORT int SocketAPIInit()
{
#ifdef WIN32
WORD wVersionRequested = MAKEWORD ( 2, 2 );
WSADATA wsaData;
if ( WSAStartup(wVersionRequested, &wsaData) != 0 )
{
jack_error ( "WSAStartup error : %s", strerror ( NET_ERROR_CODE ) );
return -1;
}
if ( LOBYTE ( wsaData.wVersion ) != 2 || HIBYTE ( wsaData.wVersion ) != 2 )
{
jack_error ( "Could not find a useable version of Winsock.dll\n" );
WSACleanup();
return -1;
}
#endif
return 0;
}
EXPORT int SocketAPIEnd()
{
#ifdef WIN32
return WSACleanup();
#endif
return 0;
}


EXPORT jack_nframes_t SetFramesPerPacket ( session_params_t* params ) EXPORT jack_nframes_t SetFramesPerPacket ( session_params_t* params )
{ {
if ( !params->fSendAudioChannels && !params->fReturnAudioChannels ) if ( !params->fSendAudioChannels && !params->fReturnAudioChannels )
return ( params->fFramesPerPacket = params->fPeriodSize ); return ( params->fFramesPerPacket = params->fPeriodSize );
size_t period = ( int ) powf ( 2.f, ( int ) log2 ( ( params->fMtu - sizeof ( packet_header_t ) )
/ ( max ( params->fReturnAudioChannels, params->fSendAudioChannels ) * sizeof ( sample_t ) ) ) );
size_t period = ( int ) powf ( 2.f, ( int ) ( log ( ( params->fMtu - sizeof ( packet_header_t ) )
/ ( max ( params->fReturnAudioChannels, params->fSendAudioChannels ) * sizeof ( sample_t ) ) ) / log ( 2 ) ) );
( period > params->fPeriodSize ) ? params->fFramesPerPacket = params->fPeriodSize : params->fFramesPerPacket = period; ( period > params->fPeriodSize ) ? params->fFramesPerPacket = params->fPeriodSize : params->fFramesPerPacket = period;
return params->fFramesPerPacket; return params->fFramesPerPacket;
} }
@@ -298,17 +327,12 @@ namespace Jack
return npckt; return npckt;
} }


EXPORT int SetRxTimeout ( int* sockfd, session_params_t* params )
{
int ret;
struct timeval timeout;
float time = static_cast<float> ( params->fFramesPerPacket ) / static_cast<float> ( params->fSampleRate );
timeout.tv_sec = ( int ) time;
float usec = 1.25 * ( time - timeout.tv_sec ) * 1000000;
timeout.tv_usec = ( int ) usec;
if ( ( ret = setsockopt ( *sockfd, SOL_SOCKET, SO_RCVTIMEO, &timeout, sizeof ( timeout ) ) ) < 0 )
return ret;
return timeout.tv_usec;
EXPORT int SetRxTimeout ( JackNetSocket* socket, session_params_t* params )
{
//time in ms : 1,25 * 'one packet time'
float time = 1250 * ( static_cast<float> ( params->fFramesPerPacket ) / static_cast<float> ( params->fSampleRate ) );
int ms = ( int ) time;
return ( socket->SetTimeOut ( ms ) == SOCKET_ERROR ) ? SOCKET_ERROR : ms;
} }


// Packet ******************************************************************************************************* // Packet *******************************************************************************************************


+ 17
- 34
common/JackNetTool.h View File

@@ -1,5 +1,5 @@
/* /*
Copyright (C) 2008 Grame
Copyright (C) 2008 Romain Moret at Grame


This program is free software; you can redistribute it and/or modify This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
@@ -21,20 +21,12 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#include "JackConstants.h" #include "JackConstants.h"
#include "JackMidiPort.h" #include "JackMidiPort.h"
#include "JackExports.h" #include "JackExports.h"
#include "JackError.h"
#include "JackPlatformNetSocket.h"


#include <string> #include <string>
#include <algorithm> #include <algorithm>
#include <cmath> #include <cmath>
#include <cstdlib>
#include <cstdio>
#include <iostream>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <errno.h>


namespace Jack namespace Jack
{ {
@@ -44,7 +36,6 @@ namespace Jack
typedef struct in_addr address_t; typedef struct in_addr address_t;
typedef jack_default_audio_sample_t sample_t; typedef jack_default_audio_sample_t sample_t;



//session params ****************************************************************************** //session params ******************************************************************************


struct _session_params struct _session_params
@@ -72,28 +63,27 @@ namespace Jack


enum _net_status enum _net_status
{ {
SOCKET_ERROR,
CONNECT_ERROR,
NET_SOCKET_ERROR = 0,
NET_CONNECT_ERROR,
NET_ERROR, NET_ERROR,
SEND_ERROR,
RECV_ERROR,
CONNECTED,
ROLLING
NET_SEND_ERROR,
NET_RECV_ERROR,
NET_CONNECTED,
NET_ROLLING
}; };


typedef enum _net_status net_status_t; typedef enum _net_status net_status_t;



//sync packet type **************************************************************************** //sync packet type ****************************************************************************


enum _sync_packet_type enum _sync_packet_type
{ {
INVALID, //...
INVALID = 0, //...
SLAVE_AVAILABLE, //a slave is available SLAVE_AVAILABLE, //a slave is available
SLAVE_SETUP, //slave configuration SLAVE_SETUP, //slave configuration
START_MASTER, //slave is ready, start master START_MASTER, //slave is ready, start master
START_SLAVE, //master is ready, activate slave START_SLAVE, //master is ready, activate slave
KILL_MASTER //master must stop
KILL_MASTER //master must stop
}; };


typedef enum _sync_packet_type sync_packet_type_t; typedef enum _sync_packet_type sync_packet_type_t;
@@ -116,9 +106,6 @@ namespace Jack
char fFree[13]; //unused char fFree[13]; //unused
}; };


#ifndef __NetMidiBuffer__
#define __NetMidiBuffer__

//midi data *********************************************************************************** //midi data ***********************************************************************************


class EXPORT NetMidiBuffer class EXPORT NetMidiBuffer
@@ -148,13 +135,8 @@ namespace Jack
int RenderToNetwork ( int subcycle, size_t total_size ); int RenderToNetwork ( int subcycle, size_t total_size );
}; };


#endif

// audio data ********************************************************************************* // audio data *********************************************************************************


#ifndef __NetAudioBuffer__
#define __NetAudioBuffer__

class EXPORT NetAudioBuffer class EXPORT NetAudioBuffer
{ {
private: private:
@@ -167,7 +149,7 @@ namespace Jack
NetAudioBuffer ( session_params_t* params, uint32_t nports, char* net_buffer ); NetAudioBuffer ( session_params_t* params, uint32_t nports, char* net_buffer );
~NetAudioBuffer(); ~NetAudioBuffer();


sample_t** fPortBuffer;
sample_t** fPortBuffer;


size_t GetSize(); size_t GetSize();
//jack<->buffer //jack<->buffer
@@ -175,10 +157,11 @@ namespace Jack
void RenderToJackPorts ( int subcycle ); void RenderToJackPorts ( int subcycle );
}; };


#endif

//utility ************************************************************************************* //utility *************************************************************************************

//socket API management
EXPORT int SocketAPIInit();
EXPORT int SocketAPIEnd();
//n<-->h functions //n<-->h functions
EXPORT void SessionParamsHToN ( session_params_t* params ); EXPORT void SessionParamsHToN ( session_params_t* params );
EXPORT void SessionParamsNToH ( session_params_t* params ); EXPORT void SessionParamsNToH ( session_params_t* params );
@@ -197,7 +180,7 @@ namespace Jack
//get the midi packet number for a given cycle //get the midi packet number for a given cycle
EXPORT int GetNMidiPckt ( session_params_t* params, size_t data_size ); EXPORT int GetNMidiPckt ( session_params_t* params, size_t data_size );
//set the recv timeout on a socket //set the recv timeout on a socket
EXPORT int SetRxTimeout ( int* sockfd, session_params_t* params );
EXPORT int SetRxTimeout ( JackNetSocket* socket, session_params_t* params );
//check if 'next' packet is really the next after 'previous' //check if 'next' packet is really the next after 'previous'
EXPORT bool IsNextPacket ( packet_header_t* previous, packet_header_t* next, uint subcycles ); EXPORT bool IsNextPacket ( packet_header_t* previous, packet_header_t* next, uint subcycles );
} }

+ 289
- 0
common/JackNetUnixSocket.cpp View File

@@ -0,0 +1,289 @@
/*
Copyright (C) 2008 Romain Moret at Grame

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.

*/

#include "JackNetUnixSocket.h"

namespace Jack
{
//utility *********************************************************************************************************
int GetHostName ( char * name, int size )
{
if ( gethostname ( name, size) == SOCKET_ERROR )
{
jack_error ( "Can't get 'hostname' : %s", strerror ( NET_ERROR_CODE ) );
strcpy ( name, "default" );
return -1;
}
return 0;
}

//construct/destruct***********************************************************************************************
JackNetUnixSocket::JackNetUnixSocket()
{
fSockfd = 0;
fSendAddr.sin_family = AF_INET;
fSendAddr.sin_addr.s_addr = htonl ( INADDR_ANY );
memset ( &fSendAddr.sin_zero, 0, 8 );
fRecvAddr.sin_family = AF_INET;
fRecvAddr.sin_addr.s_addr = htonl ( INADDR_ANY );
memset ( &fRecvAddr.sin_zero, 0, 8 );
}

JackNetUnixSocket::JackNetUnixSocket ( const char* ip, int port )
{
fSockfd = 0;
fPort = port;
fSendAddr.sin_family = AF_INET;
fSendAddr.sin_port = htons ( port );
inet_aton ( ip, &fSendAddr.sin_addr );
memset ( &fSendAddr.sin_zero, 0, 8 );
fRecvAddr.sin_family = AF_INET;
fRecvAddr.sin_port = htons ( port );
fRecvAddr.sin_addr.s_addr = htonl ( INADDR_ANY );
memset ( &fRecvAddr.sin_zero, 0, 8 );
}

JackNetUnixSocket::~JackNetUnixSocket()
{
Close();
}

//socket***********************************************************************************************************
int JackNetUnixSocket::NewSocket()
{
if ( fSockfd )
{
Close();
Reset();
}
fSockfd = socket ( AF_INET, SOCK_DGRAM, 0 );
return fSockfd;
}

int JackNetUnixSocket::Bind()
{
return bind ( fSockfd, reinterpret_cast<socket_address_t*> ( &fRecvAddr ), sizeof ( socket_address_t ) );
}

int JackNetUnixSocket::BindWith ( const char* ip )
{
int addr_conv = inet_aton ( ip, &fRecvAddr.sin_addr );
if ( addr_conv < 0 )
return addr_conv;
return Bind();
}
int JackNetUnixSocket::BindWith ( int port )
{
fRecvAddr.sin_port = htons ( port );
return Bind();
}

int JackNetUnixSocket::Connect()
{
return connect ( fSockfd, reinterpret_cast<socket_address_t*> ( &fSendAddr ), sizeof ( socket_address_t ) );
}

int JackNetUnixSocket::ConnectTo ( const char* ip )
{
int addr_conv = inet_aton ( ip, &fSendAddr.sin_addr );
if ( addr_conv < 0 )
return addr_conv;
return Connect();
}

void JackNetUnixSocket::Close()
{
if ( fSockfd )
close ( fSockfd );
fSockfd = 0;
}

void JackNetUnixSocket::Reset()
{
fSendAddr.sin_family = AF_INET;
fSendAddr.sin_port = htons ( fPort );
fSendAddr.sin_addr.s_addr = htonl ( INADDR_ANY );
memset ( &fSendAddr.sin_zero, 0, 8 );
fRecvAddr.sin_family = AF_INET;
fRecvAddr.sin_port = htons ( fPort );
fRecvAddr.sin_addr.s_addr = htonl ( INADDR_ANY );
memset ( &fRecvAddr.sin_zero, 0, 8 );
}

bool JackNetUnixSocket::IsSocket()
{
return ( fSockfd ) ? true : false;
}

//IP/PORT***********************************************************************************************************
void JackNetUnixSocket::SetPort ( int port )
{
fPort = port;
fSendAddr.sin_port = htons ( port );
fRecvAddr.sin_port = htons ( port );
}

int JackNetUnixSocket::GetPort()
{
return fPort;
}

//address***********************************************************************************************************
int JackNetUnixSocket::SetAddress ( const char* ip, int port )
{
int addr_conv = inet_aton ( ip, &fSendAddr.sin_addr );
if ( addr_conv < 0 )
return addr_conv;
fSendAddr.sin_port = htons ( port );
return 0;
}

char* JackNetUnixSocket::GetSendIP()
{
return inet_ntoa ( fSendAddr.sin_addr );
}

char* JackNetUnixSocket::GetRecvIP()
{
return inet_ntoa ( fRecvAddr.sin_addr );
}

//utility************************************************************************************************************
int JackNetUnixSocket::GetName ( char* name )
{
return gethostname ( name, 255 );
}

int JackNetUnixSocket::JoinMCastGroup ( const char* ip )
{
struct ip_mreq multicast_req;
inet_aton ( ip, &multicast_req.imr_multiaddr );
multicast_req.imr_interface.s_addr = htonl ( INADDR_ANY );
return SetOption ( IPPROTO_IP, IP_ADD_MEMBERSHIP, &multicast_req, sizeof ( multicast_req ) );
}

void JackNetUnixSocket::CopyParams ( JackNetUnixSocket* socket )
{
fPort = socket->fPort;
fSendAddr = socket->fSendAddr;
fRecvAddr = socket->fRecvAddr;
}

//options************************************************************************************************************
int JackNetUnixSocket::SetOption ( int level, int optname, const void* optval, socklen_t optlen )
{
return setsockopt ( fSockfd, level, optname, optval, optlen );
}

int JackNetUnixSocket::GetOption ( int level, int optname, void* optval, socklen_t* optlen )
{
return getsockopt ( fSockfd, level, optname, optval, optlen );
}
//timeout*************************************************************************************************************
int JackNetUnixSocket::SetTimeOut ( int& msec )
{
//negative timeout, or exceeding 10s, return
if ( ( msec < 0 ) || ( msec > 10000 ) )
return -1;
struct timeval timeout;
//less than 1sec
if ( msec < 1000 )
{
timeout.tv_sec = 0;
timeout.tv_usec = msec * 1000;
return SetOption ( SOL_SOCKET, SO_RCVTIMEO, &timeout, sizeof ( timeout ) );
}
//more than 1sec
if ( msec >= 1000 )
{
float sec = static_cast<float>( msec ) / 1000.0f;
timeout.tv_sec = ( int ) sec;
float usec = ( sec - timeout.tv_sec ) * 1000000;
timeout.tv_usec = ( int ) usec;
return SetOption ( SOL_SOCKET, SO_RCVTIMEO, &timeout, sizeof ( timeout ) );
}
return -1;
}
//local loop**********************************************************************************************************
int JackNetUnixSocket::SetLocalLoop()
{
char disable = 0;
return SetOption ( IPPROTO_IP, IP_MULTICAST_LOOP, &disable, sizeof ( disable ) );
}

//network operations**************************************************************************************************
int JackNetUnixSocket::SendTo ( const void* buffer, size_t nbytes, int flags )
{
return sendto ( fSockfd, buffer, nbytes, flags, reinterpret_cast<socket_address_t*> ( &fSendAddr ), sizeof ( socket_address_t ) );
}

int JackNetUnixSocket::SendTo ( const void* buffer, size_t nbytes, int flags, const char* ip )
{
int addr_conv = inet_aton ( ip, &fSendAddr.sin_addr );
if ( addr_conv < 1 )
return addr_conv;
return SendTo ( buffer, nbytes, flags );
}

int JackNetUnixSocket::Send ( const void* buffer, size_t nbytes, int flags )
{
return send ( fSockfd, buffer, nbytes, flags );
}

int JackNetUnixSocket::RecvFrom ( void* buffer, size_t nbytes, int flags )
{
socklen_t addr_len = sizeof ( socket_address_t );
return recvfrom ( fSockfd, buffer, nbytes, flags, reinterpret_cast<socket_address_t*> ( &fRecvAddr ), &addr_len );
}

int JackNetUnixSocket::Recv ( void* buffer, size_t nbytes, int flags )
{
return recv ( fSockfd, buffer, nbytes, flags );
}

int JackNetUnixSocket::CatchHost ( void* buffer, size_t nbytes, int flags )
{
socklen_t addr_len = sizeof ( socket_address_t );
return recvfrom ( fSockfd, buffer, nbytes, flags, reinterpret_cast<socket_address_t*> ( &fSendAddr ), &addr_len );
}

net_error_t JackNetUnixSocket::GetError()
{
switch ( errno )
{
case EAGAIN:
return NET_NO_DATA;
case ECONNABORTED:
return NET_CONN_ERROR;
case ECONNREFUSED:
return NET_CONN_ERROR;
case ECONNRESET:
return NET_CONN_ERROR;
case EHOSTDOWN:
return NET_CONN_ERROR;
case EHOSTUNREACH:
return NET_CONN_ERROR;
default:
return NET_OP_ERROR;
}
}
}

+ 101
- 0
common/JackNetUnixSocket.h View File

@@ -0,0 +1,101 @@
/*
Copyright (C) 2008 Romain Moret at Grame

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.

*/

#ifndef __JackNetUnixSocket__
#define __JackNetUnixSocket__

#include "JackNetSocket.h"
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
#include <netinet/in.h>
#include <arpa/inet.h>

namespace Jack
{
#define NET_ERROR_CODE errno
#define SOCKET_ERROR -1
#define StrError strerror

typedef struct sockaddr socket_address_t;
typedef struct in_addr address_t;
//JackNetUnixSocket********************************************
class EXPORT JackNetUnixSocket
{
private:
int fSockfd;
int fPort;

struct sockaddr_in fSendAddr;
struct sockaddr_in fRecvAddr;
public:
JackNetUnixSocket();
JackNetUnixSocket ( const char* ip, int port );
~JackNetUnixSocket();

//socket management
int NewSocket();
int Bind();
int BindWith ( const char* ip );
int BindWith ( int port );
int Connect();
int ConnectTo ( const char* ip );
void Close();
void Reset();
bool IsSocket();

//IP/PORT management
void SetPort ( int port );
int GetPort();

//address management
int SetAddress ( const char* ip, int port );
char* GetSendIP();
char* GetRecvIP();

//utility
int GetName ( char* name );
int JoinMCastGroup ( const char* mcast_ip );
void CopyParams ( JackNetUnixSocket* socket );

//options management
int SetOption ( int level, int optname, const void* optval, socklen_t optlen );
int GetOption ( int level, int optname, void* optval, socklen_t* optlen );
//timeout
int SetTimeOut ( int& msec );
//local loop
int SetLocalLoop();

//network operations
int SendTo ( const void* buffer, size_t nbytes, int flags );
int SendTo ( const void* buffer, size_t nbytes, int flags, const char* ip );
int Send ( const void* buffer, size_t nbytes, int flags );
int RecvFrom ( void* buffer, size_t nbytes, int flags );
int Recv ( void* buffer, size_t nbytes, int flags );
int CatchHost ( void* buffer, size_t nbytes, int flags );

//error management
net_error_t GetError();
};
}

#endif

+ 50
- 0
common/JackPlatformNetSocket.h View File

@@ -0,0 +1,50 @@
/*
Copyright (C) 2008 Romain Moret at Grame

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.

*/

#ifndef __JackPlatformNetSocket__
#define __JackPlatformNetSocket__

#ifdef HAVE_CONFIG_H
#include "config.h"
#endif

// OSX and LINUX
#if defined(__APPLE__) || defined (__linux__)
#include "JackNetUnixSocket.h"
#endif

// WINDOWS
#ifdef WIN32
#include "JackNetWinSocket.h"
#endif

namespace Jack
{

#if defined(__APPLE__) || defined(__linux__)
typedef JackNetUnixSocket JackNetSocket;
#endif

#ifdef WIN32
typedef JackNetWinSocket JackNetSocket;
#endif

} // end of namespace

#endif /* __JackPlatformNetSocket__ */

+ 1
- 1
common/JackRestartThreadedDriver.cpp View File

@@ -40,7 +40,7 @@ bool JackRestartThreadedDriver::Execute()
Process(); Process();
} }
return false; return false;
} catch (JackDriverException& e) {
} catch (JackDriverException& e) {
e.PrintMessage(); e.PrintMessage();
jack_log("Driver is restarted"); jack_log("Driver is restarted");
fThread.DropRealTime(); fThread.DropRealTime();


+ 5
- 5
common/JackWaitThreadedDriver.cpp View File

@@ -48,7 +48,7 @@ bool JackWaitThreadedDriver::Execute()
while (!fStarter.fRunning && fThread.GetStatus() == JackThread::kRunning) { while (!fStarter.fRunning && fThread.GetStatus() == JackThread::kRunning) {
fDriver->ProcessNull(); fDriver->ProcessNull();
} }
// Set RT // Set RT
if (fDriver->IsRealTime()) { if (fDriver->IsRealTime()) {
jack_log("JackWaitThreadedDriver::Init IsRealTime"); jack_log("JackWaitThreadedDriver::Init IsRealTime");
@@ -57,16 +57,16 @@ bool JackWaitThreadedDriver::Execute()
if (fThread.AcquireRealTime(GetEngineControl()->fPriority) < 0) { if (fThread.AcquireRealTime(GetEngineControl()->fPriority) < 0) {
jack_error("AcquireRealTime error"); jack_error("AcquireRealTime error");
} else { } else {
set_threaded_log_function();
set_threaded_log_function();
} }
} }
// Switch to keep running even in case of error // Switch to keep running even in case of error
while (fThread.GetStatus() == JackThread::kRunning) { while (fThread.GetStatus() == JackThread::kRunning) {
fDriver->Process(); fDriver->Process();
} }
return false; return false;
} catch (JackDriverException e) {
} catch (JackDriverException& e) {
e.PrintMessage(); e.PrintMessage();
jack_log("Driver is restarted"); jack_log("Driver is restarted");
fThread.DropRealTime(); fThread.DropRealTime();
@@ -79,7 +79,7 @@ bool JackWaitThreadedDriver::Execute()
} else { } else {
return false; return false;
} }
}
}
} }


} // end of namespace } // end of namespace

+ 13
- 9
common/control_types.h View File

@@ -2,7 +2,7 @@
JACK control API JACK control API


Copyright (C) 2008 Nedko Arnaudov Copyright (C) 2008 Nedko Arnaudov
This program is free software; you can redistribute it and/or modify This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
the Free Software Foundation; version 2 of the License. the Free Software Foundation; version 2 of the License.
@@ -21,11 +21,15 @@
#ifndef __control_types__ #ifndef __control_types__
#define __control_types__ #define __control_types__


#include "jslist.h"
#include "JackExports.h"

#ifdef WIN32
typedef HANDLE sigset_t;
#include "jslist.h"
#include "JackExports.h"
#ifdef WIN32
#ifdef __MINGW32__
#include <sys/types.h>
#else
typedef HANDLE sigset_t;
#endif
#endif #endif


/** Parameter types, intentionally similar to jack_driver_param_type_t */ /** Parameter types, intentionally similar to jack_driver_param_type_t */
@@ -81,7 +85,7 @@ jackctl_wait_signals(


EXPORT jackctl_server_t * EXPORT jackctl_server_t *
jackctl_server_create(); jackctl_server_create();
EXPORT void EXPORT void
jackctl_server_destroy( jackctl_server_destroy(
jackctl_server_t * server); jackctl_server_t * server);
@@ -151,7 +155,7 @@ jackctl_parameter_set_value(
EXPORT union jackctl_parameter_value EXPORT union jackctl_parameter_value
jackctl_parameter_get_default_value( jackctl_parameter_get_default_value(
jackctl_parameter_t * parameter); jackctl_parameter_t * parameter);
#if 0 #if 0
{ /* Adjust editor indent */ { /* Adjust editor indent */
#endif #endif
@@ -159,4 +163,4 @@ jackctl_parameter_get_default_value(
} /* extern "C" */ } /* extern "C" */
#endif #endif


#endif
#endif

+ 30
- 29
common/jack/types.h View File

@@ -1,19 +1,19 @@
/* /*
Copyright (C) 2001 Paul Davis Copyright (C) 2001 Paul Davis
Copyright (C) 2004 Jack O'Quin Copyright (C) 2004 Jack O'Quin
This program is free software; you can redistribute it and/or modify This program is free software; you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by it under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation; either version 2.1 of the License, or the Free Software Foundation; either version 2.1 of the License, or
(at your option) any later version. (at your option) any later version.
This program is distributed in the hope that it will be useful, This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Lesser General Public License for more details. GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License You should have received a copy of the GNU Lesser General Public License
along with this program; if not, write to the Free Software
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.


*/ */
@@ -22,21 +22,22 @@
#define __jack_types_h__ #define __jack_types_h__


#ifdef WIN32 #ifdef WIN32
#include <windows.h>
#define vsnprintf _vsnprintf
#define snprintf _snprintf
#ifndef __MINGW32__
typedef long int32_t;
typedef unsigned long uint32_t;
#include <windows.h>
#ifndef __MINGW32__
#define vsnprintf _vsnprintf
#define snprintf _snprintf
typedef char int8_t;
typedef unsigned char uint8_t;
typedef short int16_t;
typedef unsigned short uint16_t;
typedef long int32_t;
typedef unsigned long uint32_t;
typedef LONGLONG int64_t;
typedef ULONGLONG uint64_t;
#else #else
#include <stdint.h> #include <stdint.h>
#endif #endif
typedef char int8_t;
typedef unsigned char uint8_t;
typedef short int16_t;
typedef unsigned short uint16_t;
typedef LONGLONG int64_t;
typedef ULONGLONG uint64_t;

#else #else
#include <inttypes.h> #include <inttypes.h>
#endif #endif
@@ -102,7 +103,7 @@ typedef uint32_t jack_port_id_t;
typedef uint32_t jack_port_type_id_t; typedef uint32_t jack_port_type_id_t;


/** /**
* Prototype for the client supplied function that is called
* Prototype for the client supplied function that is called
* by the engine anytime there is work to be done. * by the engine anytime there is work to be done.
* *
* @pre nframes == jack_get_buffer_size() * @pre nframes == jack_get_buffer_size()
@@ -116,7 +117,7 @@ typedef uint32_t jack_port_type_id_t;
typedef int (*JackProcessCallback)(jack_nframes_t nframes, void *arg); typedef int (*JackProcessCallback)(jack_nframes_t nframes, void *arg);


/** /**
* Prototype for the client thread routine called
* Prototype for the client thread routine called
* by the engine when the client is inserted in the graph. * by the engine when the client is inserted in the graph.
* *
* @param arg pointer to a client supplied structure * @param arg pointer to a client supplied structure
@@ -125,7 +126,7 @@ typedef int (*JackProcessCallback)(jack_nframes_t nframes, void *arg);
typedef void *(*JackThreadCallback)(void* arg); typedef void *(*JackThreadCallback)(void* arg);


/** /**
* Prototype for the client supplied function that is called
* Prototype for the client supplied function that is called
* once after the creation of the thread in which other * once after the creation of the thread in which other
* callbacks will be made. Special thread characteristics * callbacks will be made. Special thread characteristics
* can be set from this callback, for example. This is a * can be set from this callback, for example. This is a
@@ -139,7 +140,7 @@ typedef void *(*JackThreadCallback)(void* arg);
typedef void (*JackThreadInitCallback)(void *arg); typedef void (*JackThreadInitCallback)(void *arg);


/** /**
* Prototype for the client supplied function that is called
* Prototype for the client supplied function that is called
* whenever the processing graph is reordered. * whenever the processing graph is reordered.
* *
* @param arg pointer to a client supplied structure * @param arg pointer to a client supplied structure
@@ -177,7 +178,7 @@ typedef int (*JackXRunCallback)(void *arg);
typedef int (*JackBufferSizeCallback)(jack_nframes_t nframes, void *arg); typedef int (*JackBufferSizeCallback)(jack_nframes_t nframes, void *arg);


/** /**
* Prototype for the client supplied function that is called
* Prototype for the client supplied function that is called
* when the engine sample rate changes. * when the engine sample rate changes.
* *
* @param nframes new engine sample rate * @param nframes new engine sample rate
@@ -188,7 +189,7 @@ typedef int (*JackBufferSizeCallback)(jack_nframes_t nframes, void *arg);
typedef int (*JackSampleRateCallback)(jack_nframes_t nframes, void *arg); typedef int (*JackSampleRateCallback)(jack_nframes_t nframes, void *arg);


/** /**
* Prototype for the client supplied function that is called
* Prototype for the client supplied function that is called
* whenever a port is registered or unregistered. * whenever a port is registered or unregistered.
* *
* @param arg pointer to a client supplied structure * @param arg pointer to a client supplied structure
@@ -196,18 +197,18 @@ typedef int (*JackSampleRateCallback)(jack_nframes_t nframes, void *arg);
typedef void (*JackPortRegistrationCallback)(jack_port_id_t port, int, void *arg); typedef void (*JackPortRegistrationCallback)(jack_port_id_t port, int, void *arg);


/** /**
* Prototype for the client supplied function that is called
* Prototype for the client supplied function that is called
* whenever a client is registered or unregistered. * whenever a client is registered or unregistered.
* *
* @param name a null-terminated string containing the client name
* @param name a null-terminated string containing the client name
* @param register non-zero if the client is being registered, * @param register non-zero if the client is being registered,
* zero if the client is being unregistered * zero if the client is being unregistered
* @param arg pointer to a client supplied structure * @param arg pointer to a client supplied structure
*/
*/
typedef void (*JackClientRegistrationCallback)(const char* name, int val, void *arg); typedef void (*JackClientRegistrationCallback)(const char* name, int val, void *arg);


/** /**
* Prototype for the client supplied function that is called
* Prototype for the client supplied function that is called
* whenever a client is registered or unregistered. * whenever a client is registered or unregistered.
* *
* @param a one of two ports connected or disconnected * @param a one of two ports connected or disconnected
@@ -215,11 +216,11 @@ typedef void (*JackClientRegistrationCallback)(const char* name, int val, void *
* @param connect non-zero if ports were connected * @param connect non-zero if ports were connected
* zero if ports were disconnected * zero if ports were disconnected
* @param arg pointer to a client supplied data * @param arg pointer to a client supplied data
*/
*/
typedef void (*JackPortConnectCallback)(jack_port_id_t a, jack_port_id_t b, int connect, void* arg); typedef void (*JackPortConnectCallback)(jack_port_id_t a, jack_port_id_t b, int connect, void* arg);


/** /**
* Prototype for the client supplied function that is called
* Prototype for the client supplied function that is called
* whenever jackd starts or stops freewheeling. * whenever jackd starts or stops freewheeling.
* *
* @param starting non-zero if we start starting to freewheel, zero otherwise * @param starting non-zero if we start starting to freewheel, zero otherwise
@@ -277,7 +278,7 @@ enum JackPortFlags {
* that data that would be available from an output port (with * that data that would be available from an output port (with
* JackPortIsPhysical set) is sent to a physical output connector * JackPortIsPhysical set) is sent to a physical output connector
* as well, so that it can be heard/seen/whatever. * as well, so that it can be heard/seen/whatever.
*
*
* Clients that do not control physical interfaces * Clients that do not control physical interfaces
* should never create ports with this bit set. * should never create ports with this bit set.
*/ */


+ 2
- 0
common/wscript View File

@@ -136,6 +136,7 @@ def build(bld):
'JackSocketServerChannel.cpp', 'JackSocketServerChannel.cpp',
'JackSocketNotifyChannel.cpp', 'JackSocketNotifyChannel.cpp',
'JackSocketServerNotifyChannel.cpp', 'JackSocketServerNotifyChannel.cpp',
'JackNetUnixSocket.cpp',
] ]


if bld.env()['IS_MACOSX']: if bld.env()['IS_MACOSX']:
@@ -145,6 +146,7 @@ def build(bld):
'../macosx/JackMachServerNotifyChannel.cpp', '../macosx/JackMachServerNotifyChannel.cpp',
'../macosx/JackMacEngineRPC.cpp', '../macosx/JackMacEngineRPC.cpp',
'../macosx/RPC/JackRPCClientUser.c', '../macosx/RPC/JackRPCClientUser.c',
'JackNetUnixSocket.cpp',
] ]


serverlib.vnum = bld.env()['JACK_API_VERSION'] serverlib.vnum = bld.env()['JACK_API_VERSION']


+ 28
- 16
example-clients/ipload.c View File

@@ -17,8 +17,10 @@
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#include <signal.h>
#include <unistd.h>
#include <signal.h>
#ifndef WIN32
#include <unistd.h>
#endif
#include <getopt.h> #include <getopt.h>
#include <jack/jack.h> #include <jack/jack.h>
#include <jack/intclient.h> #include <jack/intclient.h>
@@ -124,7 +126,8 @@ parse_args (int argc, char *argv[])
int int
main (int argc, char *argv[]) main (int argc, char *argv[])
{ {
jack_status_t status;
jack_status_t status;
char* name;


/* parse and validate command arguments */ /* parse and validate command arguments */
if (parse_args (argc, argv)) if (parse_args (argc, argv))
@@ -166,8 +169,8 @@ main (int argc, char *argv[])
} }


fprintf (stdout, "%s is running.\n", load_name); fprintf (stdout, "%s is running.\n", load_name);
char* name = jack_get_internal_client_name(client, intclient);
name = jack_get_internal_client_name(client, intclient);
if (name) { if (name) {
printf("client name = %s\n", name); printf("client name = %s\n", name);
free(name); free(name);
@@ -175,19 +178,28 @@ main (int argc, char *argv[])


if (wait_opt) { if (wait_opt) {
/* define a signal handler to unload the client, then /* define a signal handler to unload the client, then
* wait for it to exit */
signal (SIGQUIT, signal_handler);
signal (SIGTERM, signal_handler);
signal (SIGHUP, signal_handler);
signal (SIGINT, signal_handler);

while (1) {
sleep (1);
* wait for it to exit */
#ifdef WIN32
signal(SIGINT, signal_handler);
signal(SIGABRT, signal_handler);
signal(SIGTERM, signal_handler);
#else
signal(SIGQUIT, signal_handler);
signal(SIGTERM, signal_handler);
signal(SIGHUP, signal_handler);
signal(SIGINT, signal_handler);
#endif

while (1) {
#ifdef WIN32
Sleep(1000);
#else
sleep (1);
#endif
} }
} }
jack_client_close(client); jack_client_close(client);
return 0; return 0;
} }


+ 31
- 282
macosx/Jackdmp.xcodeproj/project.pbxproj View File

@@ -63,7 +63,6 @@
BA222AF20DC883F3001A17F4 /* PBXTargetDependency */, BA222AF20DC883F3001A17F4 /* PBXTargetDependency */,
4BD624D30CBCF55700DE782F /* PBXTargetDependency */, 4BD624D30CBCF55700DE782F /* PBXTargetDependency */,
BA222AF00DC883EF001A17F4 /* PBXTargetDependency */, BA222AF00DC883EF001A17F4 /* PBXTargetDependency */,
4BD07AFC0E1BC3DF0001F7B5 /* PBXTargetDependency */,
4B5A1BE20CD1CD730005BF74 /* PBXTargetDependency */, 4B5A1BE20CD1CD730005BF74 /* PBXTargetDependency */,
4B5A1BCF0CD1CCC80005BF74 /* PBXTargetDependency */, 4B5A1BCF0CD1CCC80005BF74 /* PBXTargetDependency */,
4BFA99440AAAED90009E916C /* PBXTargetDependency */, 4BFA99440AAAED90009E916C /* PBXTargetDependency */,
@@ -534,18 +533,6 @@
4BCC87970D57168300A7FEB1 /* Accelerate.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4BCC87950D57168300A7FEB1 /* Accelerate.framework */; }; 4BCC87970D57168300A7FEB1 /* Accelerate.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4BCC87950D57168300A7FEB1 /* Accelerate.framework */; };
4BCC87980D57168300A7FEB1 /* Accelerate.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4BCC87950D57168300A7FEB1 /* Accelerate.framework */; }; 4BCC87980D57168300A7FEB1 /* Accelerate.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4BCC87950D57168300A7FEB1 /* Accelerate.framework */; };
4BCC87990D57168300A7FEB1 /* Accelerate.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4BCC87950D57168300A7FEB1 /* Accelerate.framework */; }; 4BCC87990D57168300A7FEB1 /* Accelerate.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4BCC87950D57168300A7FEB1 /* Accelerate.framework */; };
4BD07AAF0E1BB8330001F7B5 /* JackResampler.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BD07AAD0E1BB8330001F7B5 /* JackResampler.h */; };
4BD07AB00E1BB8330001F7B5 /* JackResampler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BD07AAE0E1BB8330001F7B5 /* JackResampler.cpp */; };
4BD07AB70E1BB84F0001F7B5 /* JackLibSampleRateResampler.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BD07AB50E1BB84F0001F7B5 /* JackLibSampleRateResampler.h */; };
4BD07AB80E1BB84F0001F7B5 /* JackLibSampleRateResampler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BD07AB60E1BB84F0001F7B5 /* JackLibSampleRateResampler.cpp */; };
4BD337590E1EB7AB0043571E /* JackCoreAudioAdapter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BD337570E1EB7AB0043571E /* JackCoreAudioAdapter.cpp */; };
4BD3375A0E1EB7AB0043571E /* JackCoreAudioAdapter.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BD337580E1EB7AB0043571E /* JackCoreAudioAdapter.h */; };
4BD3375F0E1EB7CB0043571E /* JackAudioAdapterInterface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BD3375B0E1EB7CB0043571E /* JackAudioAdapterInterface.cpp */; };
4BD337600E1EB7CB0043571E /* JackAudioAdapterInterface.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BD3375C0E1EB7CB0043571E /* JackAudioAdapterInterface.h */; };
4BD337610E1EB7CB0043571E /* JackAudioAdapter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BD3375D0E1EB7CB0043571E /* JackAudioAdapter.cpp */; };
4BD337620E1EB7CB0043571E /* JackAudioAdapter.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BD3375E0E1EB7CB0043571E /* JackAudioAdapter.h */; };
4BD337650E1EB8040043571E /* JackCallbackAudioAdapter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BD337630E1EB8040043571E /* JackCallbackAudioAdapter.cpp */; };
4BD337660E1EB8040043571E /* JackCallbackAudioAdapter.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BD337640E1EB8040043571E /* JackCallbackAudioAdapter.h */; };
4BD4B4D809BACD9600750C0F /* JackTransportEngine.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BD4B4D409BACD9600750C0F /* JackTransportEngine.h */; }; 4BD4B4D809BACD9600750C0F /* JackTransportEngine.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BD4B4D409BACD9600750C0F /* JackTransportEngine.h */; };
4BD4B4D909BACD9600750C0F /* JackTransportEngine.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BD4B4D509BACD9600750C0F /* JackTransportEngine.cpp */; }; 4BD4B4D909BACD9600750C0F /* JackTransportEngine.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BD4B4D509BACD9600750C0F /* JackTransportEngine.cpp */; };
4BD4B4E409BACEF300750C0F /* JackTransportEngine.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BD4B4D509BACD9600750C0F /* JackTransportEngine.cpp */; }; 4BD4B4E409BACEF300750C0F /* JackTransportEngine.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BD4B4D509BACD9600750C0F /* JackTransportEngine.cpp */; };
@@ -571,6 +558,14 @@
4BFA82BC0DF6A9E40087B4E1 /* showtime.c in Sources */ = {isa = PBXBuildFile; fileRef = 4B363F3D0DEB0C31001F72D9 /* showtime.c */; }; 4BFA82BC0DF6A9E40087B4E1 /* showtime.c in Sources */ = {isa = PBXBuildFile; fileRef = 4B363F3D0DEB0C31001F72D9 /* showtime.c */; };
4BFA82C80DF6A9E40087B4E1 /* impulse_grabber.c in Sources */ = {isa = PBXBuildFile; fileRef = 4B363F750DEB0D7D001F72D9 /* impulse_grabber.c */; }; 4BFA82C80DF6A9E40087B4E1 /* impulse_grabber.c in Sources */ = {isa = PBXBuildFile; fileRef = 4B363F750DEB0D7D001F72D9 /* impulse_grabber.c */; };
4BFA99AA0AAAF40C009E916C /* jdelay.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BFA99A90AAAF40C009E916C /* jdelay.cpp */; }; 4BFA99AA0AAAF40C009E916C /* jdelay.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BFA99A90AAAF40C009E916C /* jdelay.cpp */; };
BA047C750E14E7830041F3B6 /* JackNetUnixSocket.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BA047C720E14E7540041F3B6 /* JackNetUnixSocket.cpp */; };
BA047C760E14E79D0041F3B6 /* JackNetSocket.h in Headers */ = {isa = PBXBuildFile; fileRef = BA047C710E14E7540041F3B6 /* JackNetSocket.h */; };
BA047C770E14E79D0041F3B6 /* JackNetUnixSocket.h in Headers */ = {isa = PBXBuildFile; fileRef = BA047C730E14E7540041F3B6 /* JackNetUnixSocket.h */; };
BA047C780E14E79D0041F3B6 /* JackPlatformNetSocket.h in Headers */ = {isa = PBXBuildFile; fileRef = BA047C740E14E7540041F3B6 /* JackPlatformNetSocket.h */; };
BA1510900E1D19B9004A8C63 /* JackPortAudioDevices.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BA15108E0E1D19B9004A8C63 /* JackPortAudioDevices.cpp */; };
BA1510910E1D19B9004A8C63 /* JackPortAudioDevices.h in Headers */ = {isa = PBXBuildFile; fileRef = BA15108F0E1D19B9004A8C63 /* JackPortAudioDevices.h */; };
BA1510990E1D1A2C004A8C63 /* JackPortAudioDevices.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BA15108E0E1D19B9004A8C63 /* JackPortAudioDevices.cpp */; };
BA15109A0E1D1A3B004A8C63 /* JackPortAudioDevices.h in Headers */ = {isa = PBXBuildFile; fileRef = BA15108F0E1D19B9004A8C63 /* JackPortAudioDevices.h */; };
BA222AD80DC88268001A17F4 /* JackNetTool.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BA222AD60DC88268001A17F4 /* JackNetTool.cpp */; }; BA222AD80DC88268001A17F4 /* JackNetTool.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BA222AD60DC88268001A17F4 /* JackNetTool.cpp */; };
BA222AD90DC88269001A17F4 /* JackNetTool.h in Headers */ = {isa = PBXBuildFile; fileRef = BA222AD70DC88268001A17F4 /* JackNetTool.h */; }; BA222AD90DC88269001A17F4 /* JackNetTool.h in Headers */ = {isa = PBXBuildFile; fileRef = BA222AD70DC88268001A17F4 /* JackNetTool.h */; };
BA222ADA0DC88269001A17F4 /* JackNetTool.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BA222AD60DC88268001A17F4 /* JackNetTool.cpp */; }; BA222ADA0DC88269001A17F4 /* JackNetTool.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BA222AD60DC88268001A17F4 /* JackNetTool.cpp */; };
@@ -918,13 +913,6 @@
remoteGlobalIDString = 4BA7FEB90D8E76270017FF73; remoteGlobalIDString = 4BA7FEB90D8E76270017FF73;
remoteInfo = "jack_control Universal"; remoteInfo = "jack_control Universal";
}; };
4BD07AFB0E1BC3DF0001F7B5 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
proxyType = 1;
remoteGlobalIDString = 4BD07A9B0E1BB7770001F7B5;
remoteInfo = netioadapter;
};
4BD624D20CBCF55700DE782F /* PBXContainerItemProxy */ = { 4BD624D20CBCF55700DE782F /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy; isa = PBXContainerItemProxy;
containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */; containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
@@ -1212,7 +1200,7 @@
4B3F49070AD8503300491C6E /* jack_cpu.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = jack_cpu.c; path = ../tests/jack_cpu.c; sourceTree = SOURCE_ROOT; }; 4B3F49070AD8503300491C6E /* jack_cpu.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = jack_cpu.c; path = ../tests/jack_cpu.c; sourceTree = SOURCE_ROOT; };
4B4259E5076B635E00C1ECE1 /* JackMacEngineRPC.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = JackMacEngineRPC.cpp; sourceTree = SOURCE_ROOT; }; 4B4259E5076B635E00C1ECE1 /* JackMacEngineRPC.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = JackMacEngineRPC.cpp; sourceTree = SOURCE_ROOT; };
4B44FAE50C7598370033A72C /* JackServerLaunch.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = JackServerLaunch.cpp; path = ../common/JackServerLaunch.cpp; sourceTree = SOURCE_ROOT; }; 4B44FAE50C7598370033A72C /* JackServerLaunch.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = JackServerLaunch.cpp; path = ../common/JackServerLaunch.cpp; sourceTree = SOURCE_ROOT; };
4B464301076CAC7700E5077C /* Jack-Info.plist */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.xml; path = "Jack-Info.plist"; sourceTree = SOURCE_ROOT; };
4B464301076CAC7700E5077C /* Jack-Info.plist */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.plist.xml; path = "Jack-Info.plist"; sourceTree = SOURCE_ROOT; };
4B4CA9730E02CF9600F4BFDA /* JackRestartThreadedDriver.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = JackRestartThreadedDriver.h; path = ../common/JackRestartThreadedDriver.h; sourceTree = SOURCE_ROOT; }; 4B4CA9730E02CF9600F4BFDA /* JackRestartThreadedDriver.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = JackRestartThreadedDriver.h; path = ../common/JackRestartThreadedDriver.h; sourceTree = SOURCE_ROOT; };
4B4CA9740E02CF9600F4BFDA /* JackRestartThreadedDriver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = JackRestartThreadedDriver.cpp; path = ../common/JackRestartThreadedDriver.cpp; sourceTree = SOURCE_ROOT; }; 4B4CA9740E02CF9600F4BFDA /* JackRestartThreadedDriver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = JackRestartThreadedDriver.cpp; path = ../common/JackRestartThreadedDriver.cpp; sourceTree = SOURCE_ROOT; };
4B4F9C8A0DC20C0400706CB0 /* JackMessageBuffer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = JackMessageBuffer.cpp; path = ../common/JackMessageBuffer.cpp; sourceTree = SOURCE_ROOT; }; 4B4F9C8A0DC20C0400706CB0 /* JackMessageBuffer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = JackMessageBuffer.cpp; path = ../common/JackMessageBuffer.cpp; sourceTree = SOURCE_ROOT; };
@@ -1315,19 +1303,6 @@
4BC834990DF4632F00DD1C93 /* JackPlatformSynchro.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = JackPlatformSynchro.h; path = ../common/JackPlatformSynchro.h; sourceTree = SOURCE_ROOT; }; 4BC834990DF4632F00DD1C93 /* JackPlatformSynchro.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = JackPlatformSynchro.h; path = ../common/JackPlatformSynchro.h; sourceTree = SOURCE_ROOT; };
4BC8349A0DF4632F00DD1C93 /* JackPlatformThread.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = JackPlatformThread.h; path = ../common/JackPlatformThread.h; sourceTree = SOURCE_ROOT; }; 4BC8349A0DF4632F00DD1C93 /* JackPlatformThread.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = JackPlatformThread.h; path = ../common/JackPlatformThread.h; sourceTree = SOURCE_ROOT; };
4BCC87950D57168300A7FEB1 /* Accelerate.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Accelerate.framework; path = /System/Library/Frameworks/Accelerate.framework; sourceTree = "<absolute>"; }; 4BCC87950D57168300A7FEB1 /* Accelerate.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Accelerate.framework; path = /System/Library/Frameworks/Accelerate.framework; sourceTree = "<absolute>"; };
4BD07AA50E1BB7770001F7B5 /* audioadapter.so */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = audioadapter.so; sourceTree = BUILT_PRODUCTS_DIR; };
4BD07AAD0E1BB8330001F7B5 /* JackResampler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = JackResampler.h; path = ../common/JackResampler.h; sourceTree = SOURCE_ROOT; };
4BD07AAE0E1BB8330001F7B5 /* JackResampler.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = JackResampler.cpp; path = ../common/JackResampler.cpp; sourceTree = SOURCE_ROOT; };
4BD07AB50E1BB84F0001F7B5 /* JackLibSampleRateResampler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = JackLibSampleRateResampler.h; path = ../common/JackLibSampleRateResampler.h; sourceTree = SOURCE_ROOT; };
4BD07AB60E1BB84F0001F7B5 /* JackLibSampleRateResampler.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = JackLibSampleRateResampler.cpp; path = ../common/JackLibSampleRateResampler.cpp; sourceTree = SOURCE_ROOT; };
4BD337570E1EB7AB0043571E /* JackCoreAudioAdapter.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = JackCoreAudioAdapter.cpp; sourceTree = SOURCE_ROOT; };
4BD337580E1EB7AB0043571E /* JackCoreAudioAdapter.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = JackCoreAudioAdapter.h; sourceTree = SOURCE_ROOT; };
4BD3375B0E1EB7CB0043571E /* JackAudioAdapterInterface.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = JackAudioAdapterInterface.cpp; path = ../common/JackAudioAdapterInterface.cpp; sourceTree = SOURCE_ROOT; };
4BD3375C0E1EB7CB0043571E /* JackAudioAdapterInterface.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = JackAudioAdapterInterface.h; path = ../common/JackAudioAdapterInterface.h; sourceTree = SOURCE_ROOT; };
4BD3375D0E1EB7CB0043571E /* JackAudioAdapter.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = JackAudioAdapter.cpp; path = ../common/JackAudioAdapter.cpp; sourceTree = SOURCE_ROOT; };
4BD3375E0E1EB7CB0043571E /* JackAudioAdapter.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = JackAudioAdapter.h; path = ../common/JackAudioAdapter.h; sourceTree = SOURCE_ROOT; };
4BD337630E1EB8040043571E /* JackCallbackAudioAdapter.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = JackCallbackAudioAdapter.cpp; path = ../common/JackCallbackAudioAdapter.cpp; sourceTree = SOURCE_ROOT; };
4BD337640E1EB8040043571E /* JackCallbackAudioAdapter.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = JackCallbackAudioAdapter.h; path = ../common/JackCallbackAudioAdapter.h; sourceTree = SOURCE_ROOT; };
4BD4B4D409BACD9600750C0F /* JackTransportEngine.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = JackTransportEngine.h; path = ../common/JackTransportEngine.h; sourceTree = SOURCE_ROOT; }; 4BD4B4D409BACD9600750C0F /* JackTransportEngine.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = JackTransportEngine.h; path = ../common/JackTransportEngine.h; sourceTree = SOURCE_ROOT; };
4BD4B4D509BACD9600750C0F /* JackTransportEngine.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = JackTransportEngine.cpp; path = ../common/JackTransportEngine.cpp; sourceTree = SOURCE_ROOT; }; 4BD4B4D509BACD9600750C0F /* JackTransportEngine.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = JackTransportEngine.cpp; path = ../common/JackTransportEngine.cpp; sourceTree = SOURCE_ROOT; };
4BD561C708EEB910006BBC2A /* JackSynchro.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = JackSynchro.h; path = ../common/JackSynchro.h; sourceTree = SOURCE_ROOT; }; 4BD561C708EEB910006BBC2A /* JackSynchro.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = JackSynchro.h; path = ../common/JackSynchro.h; sourceTree = SOURCE_ROOT; };
@@ -1335,7 +1310,7 @@
4BD6240C0CBCF16600DE782F /* inprocess.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = inprocess.c; path = "../example-clients/inprocess.c"; sourceTree = SOURCE_ROOT; }; 4BD6240C0CBCF16600DE782F /* inprocess.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = inprocess.c; path = "../example-clients/inprocess.c"; sourceTree = SOURCE_ROOT; };
4BE4CBFF0CDA153400CCF5BB /* JackTools.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = JackTools.cpp; path = ../common/JackTools.cpp; sourceTree = SOURCE_ROOT; }; 4BE4CBFF0CDA153400CCF5BB /* JackTools.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = JackTools.cpp; path = ../common/JackTools.cpp; sourceTree = SOURCE_ROOT; };
4BE4CC000CDA153400CCF5BB /* JackTools.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = JackTools.h; path = ../common/JackTools.h; sourceTree = SOURCE_ROOT; }; 4BE4CC000CDA153400CCF5BB /* JackTools.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = JackTools.h; path = ../common/JackTools.h; sourceTree = SOURCE_ROOT; };
4BE50F8F0B01EE8000C05E63 /* Jackwrapper-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = "Jackwrapper-Info.plist"; sourceTree = "<group>"; };
4BE50F8F0B01EE8000C05E63 /* Jackwrapper-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "Jackwrapper-Info.plist"; sourceTree = "<group>"; };
4BE6C6A30A3E096F005A203A /* jack_test */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = jack_test; sourceTree = BUILT_PRODUCTS_DIR; }; 4BE6C6A30A3E096F005A203A /* jack_test */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = jack_test; sourceTree = BUILT_PRODUCTS_DIR; };
4BE6C6AC0A3E0A65005A203A /* jack_test.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = jack_test.cpp; path = ../tests/jack_test.cpp; sourceTree = SOURCE_ROOT; }; 4BE6C6AC0A3E0A65005A203A /* jack_test.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = jack_test.cpp; path = ../tests/jack_test.cpp; sourceTree = SOURCE_ROOT; };
4BE99D300AD7A04800C59091 /* jack_cpu */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = jack_cpu; sourceTree = BUILT_PRODUCTS_DIR; }; 4BE99D300AD7A04800C59091 /* jack_cpu */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = jack_cpu; sourceTree = BUILT_PRODUCTS_DIR; };
@@ -1428,6 +1403,12 @@
4BFB73F608AD291A00DB99B8 /* JackGlobals.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = JackGlobals.h; path = ../common/JackGlobals.h; sourceTree = SOURCE_ROOT; }; 4BFB73F608AD291A00DB99B8 /* JackGlobals.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = JackGlobals.h; path = ../common/JackGlobals.h; sourceTree = SOURCE_ROOT; };
4BFB741E08AD2B9900DB99B8 /* JackMachThread.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = JackMachThread.cpp; sourceTree = SOURCE_ROOT; }; 4BFB741E08AD2B9900DB99B8 /* JackMachThread.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = JackMachThread.cpp; sourceTree = SOURCE_ROOT; };
4BFB741F08AD2B9900DB99B8 /* JackMachThread.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = JackMachThread.h; sourceTree = SOURCE_ROOT; }; 4BFB741F08AD2B9900DB99B8 /* JackMachThread.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = JackMachThread.h; sourceTree = SOURCE_ROOT; };
BA047C710E14E7540041F3B6 /* JackNetSocket.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = JackNetSocket.h; path = ../common/JackNetSocket.h; sourceTree = SOURCE_ROOT; };
BA047C720E14E7540041F3B6 /* JackNetUnixSocket.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = JackNetUnixSocket.cpp; path = ../common/JackNetUnixSocket.cpp; sourceTree = SOURCE_ROOT; };
BA047C730E14E7540041F3B6 /* JackNetUnixSocket.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = JackNetUnixSocket.h; path = ../common/JackNetUnixSocket.h; sourceTree = SOURCE_ROOT; };
BA047C740E14E7540041F3B6 /* JackPlatformNetSocket.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = JackPlatformNetSocket.h; path = ../common/JackPlatformNetSocket.h; sourceTree = SOURCE_ROOT; };
BA15108E0E1D19B9004A8C63 /* JackPortAudioDevices.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = JackPortAudioDevices.cpp; path = ../windows/JackPortAudioDevices.cpp; sourceTree = SOURCE_ROOT; };
BA15108F0E1D19B9004A8C63 /* JackPortAudioDevices.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = JackPortAudioDevices.h; path = ../windows/JackPortAudioDevices.h; sourceTree = SOURCE_ROOT; };
BA222ACF0DC88132001A17F4 /* jack_net.so */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = jack_net.so; sourceTree = BUILT_PRODUCTS_DIR; }; BA222ACF0DC88132001A17F4 /* jack_net.so */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = jack_net.so; sourceTree = BUILT_PRODUCTS_DIR; };
BA222AD60DC88268001A17F4 /* JackNetTool.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = JackNetTool.cpp; path = ../common/JackNetTool.cpp; sourceTree = SOURCE_ROOT; }; BA222AD60DC88268001A17F4 /* JackNetTool.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = JackNetTool.cpp; path = ../common/JackNetTool.cpp; sourceTree = SOURCE_ROOT; };
BA222AD70DC88268001A17F4 /* JackNetTool.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = JackNetTool.h; path = ../common/JackNetTool.h; sourceTree = SOURCE_ROOT; }; BA222AD70DC88268001A17F4 /* JackNetTool.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = JackNetTool.h; path = ../common/JackNetTool.h; sourceTree = SOURCE_ROOT; };
@@ -1862,13 +1843,6 @@
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
}; };
4BD07AA00E1BB7770001F7B5 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
4BD623F20CBCF0F000DE782F /* Frameworks */ = { 4BD623F20CBCF0F000DE782F /* Frameworks */ = {
isa = PBXFrameworksBuildPhase; isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
@@ -2085,7 +2059,6 @@
4BFA82B70DF6A9E40087B4E1 /* jack_monitor_client */, 4BFA82B70DF6A9E40087B4E1 /* jack_monitor_client */,
4BFA82C30DF6A9E40087B4E1 /* jack_showtime */, 4BFA82C30DF6A9E40087B4E1 /* jack_showtime */,
4BFA82CF0DF6A9E40087B4E1 /* jack_impulse_grabber */, 4BFA82CF0DF6A9E40087B4E1 /* jack_impulse_grabber */,
4BD07AA50E1BB7770001F7B5 /* audioadapter.so */,
); );
name = Products; name = Products;
sourceTree = "<group>"; sourceTree = "<group>";
@@ -2478,25 +2451,6 @@
name = Channels; name = Channels;
sourceTree = "<group>"; sourceTree = "<group>";
}; };
4BD07AA70E1BB80B0001F7B5 /* adapter */ = {
isa = PBXGroup;
children = (
4BD337630E1EB8040043571E /* JackCallbackAudioAdapter.cpp */,
4BD337640E1EB8040043571E /* JackCallbackAudioAdapter.h */,
4BD07AAD0E1BB8330001F7B5 /* JackResampler.h */,
4BD07AAE0E1BB8330001F7B5 /* JackResampler.cpp */,
4BD07AB50E1BB84F0001F7B5 /* JackLibSampleRateResampler.h */,
4BD07AB60E1BB84F0001F7B5 /* JackLibSampleRateResampler.cpp */,
4BD3375B0E1EB7CB0043571E /* JackAudioAdapterInterface.cpp */,
4BD3375C0E1EB7CB0043571E /* JackAudioAdapterInterface.h */,
4BD3375D0E1EB7CB0043571E /* JackAudioAdapter.cpp */,
4BD3375E0E1EB7CB0043571E /* JackAudioAdapter.h */,
4BD337570E1EB7AB0043571E /* JackCoreAudioAdapter.cpp */,
4BD337580E1EB7AB0043571E /* JackCoreAudioAdapter.h */,
);
name = adapter;
sourceTree = "<group>";
};
4BD56D73079687AD006D44F9 /* External */ = { 4BD56D73079687AD006D44F9 /* External */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
@@ -2545,6 +2499,8 @@
4BF8D22A0834F07D00C94B91 /* JackAudioDriver.cpp */, 4BF8D22A0834F07D00C94B91 /* JackAudioDriver.cpp */,
4B395C9706AEF53800923527 /* JackCoreAudioDriver.h */, 4B395C9706AEF53800923527 /* JackCoreAudioDriver.h */,
4B395C9606AEF53800923527 /* JackCoreAudioDriver.cpp */, 4B395C9606AEF53800923527 /* JackCoreAudioDriver.cpp */,
BA15108F0E1D19B9004A8C63 /* JackPortAudioDevices.h */,
BA15108E0E1D19B9004A8C63 /* JackPortAudioDevices.cpp */,
4B978DEB0A31D099009E2DD1 /* JackPortAudioDriver.h */, 4B978DEB0A31D099009E2DD1 /* JackPortAudioDriver.h */,
4B978DEC0A31D099009E2DD1 /* JackPortAudioDriver.cpp */, 4B978DEC0A31D099009E2DD1 /* JackPortAudioDriver.cpp */,
); );
@@ -2604,7 +2560,10 @@
BA222AEA0DC88379001A17F4 /* Net */ = { BA222AEA0DC88379001A17F4 /* Net */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
4BD07AA70E1BB80B0001F7B5 /* adapter */,
BA047C710E14E7540041F3B6 /* JackNetSocket.h */,
BA047C720E14E7540041F3B6 /* JackNetUnixSocket.cpp */,
BA047C730E14E7540041F3B6 /* JackNetUnixSocket.h */,
BA047C740E14E7540041F3B6 /* JackPlatformNetSocket.h */,
BA222AEB0DC883B3001A17F4 /* JackNetManager.cpp */, BA222AEB0DC883B3001A17F4 /* JackNetManager.cpp */,
BA222AEC0DC883B3001A17F4 /* JackNetManager.h */, BA222AEC0DC883B3001A17F4 /* JackNetManager.h */,
BA222AD60DC88268001A17F4 /* JackNetTool.cpp */, BA222AD60DC88268001A17F4 /* JackNetTool.cpp */,
@@ -2904,6 +2863,7 @@
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
4B35C6210D4731D2000DE7AE /* JackPortAudioDriver.h in Headers */, 4B35C6210D4731D2000DE7AE /* JackPortAudioDriver.h in Headers */,
BA1510910E1D19B9004A8C63 /* JackPortAudioDevices.h in Headers */,
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
}; };
@@ -3095,6 +3055,9 @@
4B5DB9840CD2429B00EBA5EE /* JackDebugClient.h in Headers */, 4B5DB9840CD2429B00EBA5EE /* JackDebugClient.h in Headers */,
4BE4CC040CDA153500CCF5BB /* JackTools.h in Headers */, 4BE4CC040CDA153500CCF5BB /* JackTools.h in Headers */,
BA222AD90DC88269001A17F4 /* JackNetTool.h in Headers */, BA222AD90DC88269001A17F4 /* JackNetTool.h in Headers */,
BA047C760E14E79D0041F3B6 /* JackNetSocket.h in Headers */,
BA047C770E14E79D0041F3B6 /* JackNetUnixSocket.h in Headers */,
BA047C780E14E79D0041F3B6 /* JackPlatformNetSocket.h in Headers */,
4B95BCAE0D913073000F7695 /* control.h in Headers */, 4B95BCAE0D913073000F7695 /* control.h in Headers */,
4B9A26020DBF8584006E9FBC /* jslist.h in Headers */, 4B9A26020DBF8584006E9FBC /* jslist.h in Headers */,
4B4F9C8D0DC20C0400706CB0 /* JackMessageBuffer.h in Headers */, 4B4F9C8D0DC20C0400706CB0 /* JackMessageBuffer.h in Headers */,
@@ -3209,6 +3172,7 @@
isa = PBXHeadersBuildPhase; isa = PBXHeadersBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
BA15109A0E1D1A3B004A8C63 /* JackPortAudioDevices.h in Headers */,
4B978DED0A31D099009E2DD1 /* JackPortAudioDriver.h in Headers */, 4B978DED0A31D099009E2DD1 /* JackPortAudioDriver.h in Headers */,
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
@@ -3234,19 +3198,6 @@
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
}; };
4BD07A9C0E1BB7770001F7B5 /* Headers */ = {
isa = PBXHeadersBuildPhase;
buildActionMask = 2147483647;
files = (
4BD07AAF0E1BB8330001F7B5 /* JackResampler.h in Headers */,
4BD07AB70E1BB84F0001F7B5 /* JackLibSampleRateResampler.h in Headers */,
4BD3375A0E1EB7AB0043571E /* JackCoreAudioAdapter.h in Headers */,
4BD337600E1EB7CB0043571E /* JackAudioAdapterInterface.h in Headers */,
4BD337620E1EB7CB0043571E /* JackAudioAdapter.h in Headers */,
4BD337660E1EB8040043571E /* JackCallbackAudioAdapter.h in Headers */,
);
runOnlyForDeploymentPostprocessing = 0;
};
4BD623EE0CBCF0F000DE782F /* Headers */ = { 4BD623EE0CBCF0F000DE782F /* Headers */ = {
isa = PBXHeadersBuildPhase; isa = PBXHeadersBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
@@ -4433,23 +4384,6 @@
productReference = 4BA7FEC30D8E76270017FF73 /* jack_server_control */; productReference = 4BA7FEC30D8E76270017FF73 /* jack_server_control */;
productType = "com.apple.product-type.tool"; productType = "com.apple.product-type.tool";
}; };
4BD07A9B0E1BB7770001F7B5 /* audioadapter */ = {
isa = PBXNativeTarget;
buildConfigurationList = 4BD07AA10E1BB7770001F7B5 /* Build configuration list for PBXNativeTarget "audioadapter" */;
buildPhases = (
4BD07A9C0E1BB7770001F7B5 /* Headers */,
4BD07A9E0E1BB7770001F7B5 /* Sources */,
4BD07AA00E1BB7770001F7B5 /* Frameworks */,
);
buildRules = (
);
dependencies = (
);
name = audioadapter;
productName = jack_coreaudio;
productReference = 4BD07AA50E1BB7770001F7B5 /* audioadapter.so */;
productType = "com.apple.product-type.library.dynamic";
};
4BD623ED0CBCF0F000DE782F /* inprocess */ = { 4BD623ED0CBCF0F000DE782F /* inprocess */ = {
isa = PBXNativeTarget; isa = PBXNativeTarget;
buildConfigurationList = 4BD623F30CBCF0F000DE782F /* Build configuration list for PBXNativeTarget "inprocess" */; buildConfigurationList = 4BD623F30CBCF0F000DE782F /* Build configuration list for PBXNativeTarget "inprocess" */;
@@ -4742,7 +4676,6 @@
4B699DA6097D421700A18468 /* jack_dummy Universal */, 4B699DA6097D421700A18468 /* jack_dummy Universal */,
BA222AC50DC88132001A17F4 /* jack_net Universal */, BA222AC50DC88132001A17F4 /* jack_net Universal */,
4BD623ED0CBCF0F000DE782F /* inprocess */, 4BD623ED0CBCF0F000DE782F /* inprocess */,
4BD07A9B0E1BB7770001F7B5 /* audioadapter */,
BA222AE00DC882DB001A17F4 /* netmanager */, BA222AE00DC882DB001A17F4 /* netmanager */,
4B35C41B0D4731D1000DE7AE /* jackdmp framework 64bits */, 4B35C41B0D4731D1000DE7AE /* jackdmp framework 64bits */,
4B35C4270D4731D1000DE7AE /* Jackmp.framework 64 bits */, 4B35C4270D4731D1000DE7AE /* Jackmp.framework 64 bits */,
@@ -5537,6 +5470,7 @@
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
4B35C6230D4731D2000DE7AE /* JackPortAudioDriver.cpp in Sources */, 4B35C6230D4731D2000DE7AE /* JackPortAudioDriver.cpp in Sources */,
BA1510900E1D19B9004A8C63 /* JackPortAudioDevices.cpp in Sources */,
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
}; };
@@ -5724,6 +5658,7 @@
4B5DB9830CD2429A00EBA5EE /* JackDebugClient.cpp in Sources */, 4B5DB9830CD2429A00EBA5EE /* JackDebugClient.cpp in Sources */,
4BE4CC030CDA153500CCF5BB /* JackTools.cpp in Sources */, 4BE4CC030CDA153500CCF5BB /* JackTools.cpp in Sources */,
BA222AD80DC88268001A17F4 /* JackNetTool.cpp in Sources */, BA222AD80DC88268001A17F4 /* JackNetTool.cpp in Sources */,
BA047C750E14E7830041F3B6 /* JackNetUnixSocket.cpp in Sources */,
4B95BCAC0D913064000F7695 /* JackControl.cpp in Sources */, 4B95BCAC0D913064000F7695 /* JackControl.cpp in Sources */,
4B9A25B60DBF8330006E9FBC /* JackError.cpp in Sources */, 4B9A25B60DBF8330006E9FBC /* JackError.cpp in Sources */,
4B02069E0DC0BAB400319AF1 /* JackProcessSync.cpp in Sources */, 4B02069E0DC0BAB400319AF1 /* JackProcessSync.cpp in Sources */,
@@ -5852,6 +5787,7 @@
isa = PBXSourcesBuildPhase; isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
BA1510990E1D1A2C004A8C63 /* JackPortAudioDevices.cpp in Sources */,
4B978DEE0A31D099009E2DD1 /* JackPortAudioDriver.cpp in Sources */, 4B978DEE0A31D099009E2DD1 /* JackPortAudioDriver.cpp in Sources */,
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
@@ -5880,19 +5816,6 @@
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
}; };
4BD07A9E0E1BB7770001F7B5 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
4BD07AB00E1BB8330001F7B5 /* JackResampler.cpp in Sources */,
4BD07AB80E1BB84F0001F7B5 /* JackLibSampleRateResampler.cpp in Sources */,
4BD337590E1EB7AB0043571E /* JackCoreAudioAdapter.cpp in Sources */,
4BD3375F0E1EB7CB0043571E /* JackAudioAdapterInterface.cpp in Sources */,
4BD337610E1EB7CB0043571E /* JackAudioAdapter.cpp in Sources */,
4BD337650E1EB8040043571E /* JackCallbackAudioAdapter.cpp in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
4BD623F00CBCF0F000DE782F /* Sources */ = { 4BD623F00CBCF0F000DE782F /* Sources */ = {
isa = PBXSourcesBuildPhase; isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
@@ -6240,11 +6163,6 @@
target = 4BA7FEB90D8E76270017FF73 /* jack_server_control Universal */; target = 4BA7FEB90D8E76270017FF73 /* jack_server_control Universal */;
targetProxy = 4BA7FECC0D8E76810017FF73 /* PBXContainerItemProxy */; targetProxy = 4BA7FECC0D8E76810017FF73 /* PBXContainerItemProxy */;
}; };
4BD07AFC0E1BC3DF0001F7B5 /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = 4BD07A9B0E1BB7770001F7B5 /* audioadapter */;
targetProxy = 4BD07AFB0E1BC3DF0001F7B5 /* PBXContainerItemProxy */;
};
4BD624D30CBCF55700DE782F /* PBXTargetDependency */ = { 4BD624D30CBCF55700DE782F /* PBXTargetDependency */ = {
isa = PBXTargetDependency; isa = PBXTargetDependency;
target = 4BD623ED0CBCF0F000DE782F /* inprocess */; target = 4BD623ED0CBCF0F000DE782F /* inprocess */;
@@ -6750,7 +6668,6 @@
INFOPLIST_FILE = "Jack-Info.plist"; INFOPLIST_FILE = "Jack-Info.plist";
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
LIBRARY_SEARCH_PATHS = /usr/lib/gcc/darwin/3.3; LIBRARY_SEARCH_PATHS = /usr/lib/gcc/darwin/3.3;
OPTIMIZATION_CFLAGS = "-O0";
OTHER_CFLAGS = ( OTHER_CFLAGS = (
"-DUSE_POSIX_SHM", "-DUSE_POSIX_SHM",
"-D__SMP__", "-D__SMP__",
@@ -6940,7 +6857,6 @@
INFOPLIST_FILE = "Jack-Info.plist"; INFOPLIST_FILE = "Jack-Info.plist";
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
LIBRARY_SEARCH_PATHS = /usr/lib/gcc/darwin/3.3; LIBRARY_SEARCH_PATHS = /usr/lib/gcc/darwin/3.3;
OPTIMIZATION_CFLAGS = "-O0";
OTHER_CFLAGS = ( OTHER_CFLAGS = (
"-D__SMP__", "-D__SMP__",
"-DUSE_POSIX_SHM", "-DUSE_POSIX_SHM",
@@ -9035,7 +8951,6 @@
INSTALL_PATH = /usr/local/lib; INSTALL_PATH = /usr/local/lib;
LIBRARY_STYLE = DYNAMIC; LIBRARY_STYLE = DYNAMIC;
MACH_O_TYPE = mh_dylib; MACH_O_TYPE = mh_dylib;
OPTIMIZATION_CFLAGS = "-O0";
OTHER_CFLAGS = ""; OTHER_CFLAGS = "";
OTHER_CPLUSPLUSFLAGS = "-DMACH_RPC_MACH_SEMA"; OTHER_CPLUSPLUSFLAGS = "-DMACH_RPC_MACH_SEMA";
OTHER_LDFLAGS = ( OTHER_LDFLAGS = (
@@ -9180,7 +9095,6 @@
INSTALL_PATH = /usr/local/lib; INSTALL_PATH = /usr/local/lib;
LIBRARY_STYLE = DYNAMIC; LIBRARY_STYLE = DYNAMIC;
MACH_O_TYPE = mh_dylib; MACH_O_TYPE = mh_dylib;
OPTIMIZATION_CFLAGS = "-O0";
OTHER_CFLAGS = ""; OTHER_CFLAGS = "";
OTHER_CPLUSPLUSFLAGS = "-DMACH_RPC_MACH_SEMA"; OTHER_CPLUSPLUSFLAGS = "-DMACH_RPC_MACH_SEMA";
OTHER_LDFLAGS = ( OTHER_LDFLAGS = (
@@ -9330,7 +9244,6 @@
INSTALL_PATH = /usr/local/lib; INSTALL_PATH = /usr/local/lib;
LIBRARY_STYLE = DYNAMIC; LIBRARY_STYLE = DYNAMIC;
MACH_O_TYPE = mh_dylib; MACH_O_TYPE = mh_dylib;
OPTIMIZATION_CFLAGS = "-O0";
OTHER_CFLAGS = ""; OTHER_CFLAGS = "";
OTHER_CPLUSPLUSFLAGS = "-DMACH_RPC_MACH_SEMA"; OTHER_CPLUSPLUSFLAGS = "-DMACH_RPC_MACH_SEMA";
OTHER_LDFLAGS = ( OTHER_LDFLAGS = (
@@ -9471,7 +9384,6 @@
INSTALL_PATH = /usr/local/lib; INSTALL_PATH = /usr/local/lib;
LIBRARY_STYLE = DYNAMIC; LIBRARY_STYLE = DYNAMIC;
MACH_O_TYPE = mh_dylib; MACH_O_TYPE = mh_dylib;
OPTIMIZATION_CFLAGS = "-O0";
OTHER_CFLAGS = ""; OTHER_CFLAGS = "";
OTHER_CPLUSPLUSFLAGS = "$(OTHER_CFLAGS)"; OTHER_CPLUSPLUSFLAGS = "$(OTHER_CFLAGS)";
OTHER_LDFLAGS = ( OTHER_LDFLAGS = (
@@ -9601,7 +9513,6 @@
GCC_ENABLE_FIX_AND_CONTINUE = YES; GCC_ENABLE_FIX_AND_CONTINUE = YES;
GCC_GENERATE_DEBUGGING_SYMBOLS = YES; GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
GCC_OPTIMIZATION_LEVEL = 0; GCC_OPTIMIZATION_LEVEL = 0;
OPTIMIZATION_CFLAGS = "-O0";
OTHER_CFLAGS = ""; OTHER_CFLAGS = "";
OTHER_LDFLAGS = ""; OTHER_LDFLAGS = "";
OTHER_REZFLAGS = ""; OTHER_REZFLAGS = "";
@@ -10546,7 +10457,6 @@
GCC_ENABLE_FIX_AND_CONTINUE = YES; GCC_ENABLE_FIX_AND_CONTINUE = YES;
GCC_GENERATE_DEBUGGING_SYMBOLS = YES; GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
GCC_OPTIMIZATION_LEVEL = 0; GCC_OPTIMIZATION_LEVEL = 0;
OPTIMIZATION_CFLAGS = "-O0";
OTHER_CFLAGS = ""; OTHER_CFLAGS = "";
OTHER_LDFLAGS = ""; OTHER_LDFLAGS = "";
OTHER_REZFLAGS = ""; OTHER_REZFLAGS = "";
@@ -10784,7 +10694,6 @@
INFOPLIST_FILE = "Jack-Info.plist"; INFOPLIST_FILE = "Jack-Info.plist";
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
LIBRARY_SEARCH_PATHS = /usr/lib/gcc/darwin/3.3; LIBRARY_SEARCH_PATHS = /usr/lib/gcc/darwin/3.3;
OPTIMIZATION_CFLAGS = "-O0";
OTHER_CFLAGS = ( OTHER_CFLAGS = (
"-DUSE_POSIX_SHM", "-DUSE_POSIX_SHM",
"-D__SMP__", "-D__SMP__",
@@ -10954,7 +10863,6 @@
INFOPLIST_FILE = "Jack-Info.plist"; INFOPLIST_FILE = "Jack-Info.plist";
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
LIBRARY_SEARCH_PATHS = /usr/lib/gcc/darwin/3.3; LIBRARY_SEARCH_PATHS = /usr/lib/gcc/darwin/3.3;
OPTIMIZATION_CFLAGS = "-O0";
OTHER_CFLAGS = ( OTHER_CFLAGS = (
"-D__SMP__", "-D__SMP__",
"-DUSE_POSIX_SHM", "-DUSE_POSIX_SHM",
@@ -12351,7 +12259,6 @@
INSTALL_PATH = /usr/local/lib; INSTALL_PATH = /usr/local/lib;
LIBRARY_STYLE = DYNAMIC; LIBRARY_STYLE = DYNAMIC;
MACH_O_TYPE = mh_dylib; MACH_O_TYPE = mh_dylib;
OPTIMIZATION_CFLAGS = "-O0";
OTHER_CFLAGS = ""; OTHER_CFLAGS = "";
OTHER_CPLUSPLUSFLAGS = "-DMACH_RPC_MACH_SEMA"; OTHER_CPLUSPLUSFLAGS = "-DMACH_RPC_MACH_SEMA";
OTHER_LDFLAGS = ( OTHER_LDFLAGS = (
@@ -12490,7 +12397,6 @@
INSTALL_PATH = /usr/local/lib; INSTALL_PATH = /usr/local/lib;
LIBRARY_STYLE = DYNAMIC; LIBRARY_STYLE = DYNAMIC;
MACH_O_TYPE = mh_dylib; MACH_O_TYPE = mh_dylib;
OPTIMIZATION_CFLAGS = "-O0";
OTHER_CFLAGS = ""; OTHER_CFLAGS = "";
OTHER_CPLUSPLUSFLAGS = "-DMACH_RPC_MACH_SEMA"; OTHER_CPLUSPLUSFLAGS = "-DMACH_RPC_MACH_SEMA";
OTHER_LDFLAGS = ( OTHER_LDFLAGS = (
@@ -12643,7 +12549,6 @@
INSTALL_PATH = /usr/local/lib; INSTALL_PATH = /usr/local/lib;
LIBRARY_STYLE = DYNAMIC; LIBRARY_STYLE = DYNAMIC;
MACH_O_TYPE = mh_dylib; MACH_O_TYPE = mh_dylib;
OPTIMIZATION_CFLAGS = "-O0";
OTHER_CFLAGS = ""; OTHER_CFLAGS = "";
OTHER_CPLUSPLUSFLAGS = "-DMACH_RPC_MACH_SEMA"; OTHER_CPLUSPLUSFLAGS = "-DMACH_RPC_MACH_SEMA";
OTHER_LDFLAGS = ( OTHER_LDFLAGS = (
@@ -12690,6 +12595,7 @@
GCC_PREPROCESSOR_DEFINITIONS = ""; GCC_PREPROCESSOR_DEFINITIONS = "";
HEADER_SEARCH_PATHS = ../common/; HEADER_SEARCH_PATHS = ../common/;
INSTALL_PATH = /usr/local/lib; INSTALL_PATH = /usr/local/lib;
LD_OPENMP_FLAGS = "-fopenmp";
LIBRARY_STYLE = DYNAMIC; LIBRARY_STYLE = DYNAMIC;
MACH_O_TYPE = mh_dylib; MACH_O_TYPE = mh_dylib;
MACOSX_DEPLOYMENT_TARGET = 10.4; MACOSX_DEPLOYMENT_TARGET = 10.4;
@@ -13038,150 +12944,6 @@
}; };
name = Default; name = Default;
}; };
4BD07AA20E1BB7770001F7B5 /* Development */ = {
isa = XCBuildConfiguration;
buildSettings = {
ARCHS = i386;
COPY_PHASE_STRIP = NO;
DEAD_CODE_STRIPPING = NO;
DEBUGGING_SYMBOLS = YES;
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
EXECUTABLE_EXTENSION = so;
GCC_DYNAMIC_NO_PIC = NO;
GCC_ENABLE_FIX_AND_CONTINUE = YES;
GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
GCC_MODEL_TUNING = G4;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = "";
HEADER_SEARCH_PATHS = ../common;
INSTALL_PATH = /usr/local/lib;
LIBRARY_SEARCH_PATHS = /opt/local/lib;
LIBRARY_STYLE = DYNAMIC;
MACH_O_TYPE = mh_dylib;
OPTIMIZATION_CFLAGS = "-O0";
OTHER_CFLAGS = "";
OTHER_CPLUSPLUSFLAGS = "$(OTHER_CFLAGS)";
OTHER_LDFLAGS = (
/opt/local/lib/libsamplerate.a,
"-framework",
Jackservermp,
"-framework",
CoreAudio,
"-framework",
CoreServices,
"-framework",
AudioUnit,
);
OTHER_REZFLAGS = "";
PREBINDING = NO;
PRODUCT_NAME = netioadapter;
SDKROOT = "";
SECTORDER_FLAGS = "";
WARNING_CFLAGS = (
"-Wmost",
"-Wno-four-char-constants",
"-Wno-unknown-pragmas",
);
ZERO_LINK = YES;
};
name = Development;
};
4BD07AA30E1BB7770001F7B5 /* Deployment */ = {
isa = XCBuildConfiguration;
buildSettings = {
ARCHS = i386;
COPY_PHASE_STRIP = YES;
DEAD_CODE_STRIPPING = NO;
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
EXECUTABLE_EXTENSION = so;
GCC_ENABLE_FIX_AND_CONTINUE = NO;
GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
GCC_MODEL_TUNING = G4;
GCC_PREPROCESSOR_DEFINITIONS = "";
HEADER_SEARCH_PATHS = ../common;
INSTALL_PATH = /usr/local/lib;
LIBRARY_SEARCH_PATHS = /opt/local/lib;
LIBRARY_STYLE = DYNAMIC;
MACH_O_TYPE = mh_dylib;
MACOSX_DEPLOYMENT_TARGET = 10.4;
OTHER_CFLAGS = "";
OTHER_CPLUSPLUSFLAGS = (
"$(OTHER_CFLAGS)",
"-D__SMP__",
);
OTHER_LDFLAGS = (
/opt/local/lib/libsamplerate.a,
"-framework",
Jackservermp,
"-framework",
CoreAudio,
"-framework",
CoreServices,
"-framework",
AudioUnit,
);
OTHER_REZFLAGS = "";
PREBINDING = NO;
PRODUCT_NAME = audioadapter;
SDKROOT = "";
SECTORDER_FLAGS = "";
WARNING_CFLAGS = (
"-Wmost",
"-Wno-four-char-constants",
"-Wno-unknown-pragmas",
);
ZERO_LINK = NO;
};
name = Deployment;
};
4BD07AA40E1BB7770001F7B5 /* Default */ = {
isa = XCBuildConfiguration;
buildSettings = {
ARCHS = (
i386,
ppc,
);
DEAD_CODE_STRIPPING = NO;
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
EXECUTABLE_EXTENSION = so;
GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
GCC_MODEL_TUNING = G4;
GCC_PREPROCESSOR_DEFINITIONS = "";
HEADER_SEARCH_PATHS = ../common;
INSTALL_PATH = /usr/local/lib;
LIBRARY_SEARCH_PATHS = /opt/local/lib;
LIBRARY_STYLE = DYNAMIC;
MACH_O_TYPE = mh_dylib;
OTHER_CFLAGS = "";
OTHER_CPLUSPLUSFLAGS = "$(OTHER_CFLAGS)";
OTHER_LDFLAGS = (
"-framework",
Jackdmp,
"-framework",
AudioToolBox,
"-framework",
CoreAudio,
"-framework",
CoreServices,
"-framework",
AudioUnit,
);
OTHER_REZFLAGS = "";
PREBINDING = NO;
PRODUCT_NAME = inprocess;
SDKROOT = "";
SECTORDER_FLAGS = "";
WARNING_CFLAGS = (
"-Wmost",
"-Wno-four-char-constants",
"-Wno-unknown-pragmas",
);
};
name = Default;
};
4BD623F40CBCF0F000DE782F /* Development */ = { 4BD623F40CBCF0F000DE782F /* Development */ = {
isa = XCBuildConfiguration; isa = XCBuildConfiguration;
buildSettings = { buildSettings = {
@@ -13204,7 +12966,6 @@
INSTALL_PATH = /usr/local/lib; INSTALL_PATH = /usr/local/lib;
LIBRARY_STYLE = DYNAMIC; LIBRARY_STYLE = DYNAMIC;
MACH_O_TYPE = mh_dylib; MACH_O_TYPE = mh_dylib;
OPTIMIZATION_CFLAGS = "-O0";
OTHER_CFLAGS = ""; OTHER_CFLAGS = "";
OTHER_CPLUSPLUSFLAGS = "$(OTHER_CFLAGS)"; OTHER_CPLUSPLUSFLAGS = "$(OTHER_CFLAGS)";
OTHER_LDFLAGS = ( OTHER_LDFLAGS = (
@@ -14338,7 +14099,6 @@
INSTALL_PATH = /usr/local/lib; INSTALL_PATH = /usr/local/lib;
LIBRARY_STYLE = DYNAMIC; LIBRARY_STYLE = DYNAMIC;
MACH_O_TYPE = mh_dylib; MACH_O_TYPE = mh_dylib;
OPTIMIZATION_CFLAGS = "-O0";
OTHER_CFLAGS = ""; OTHER_CFLAGS = "";
OTHER_CPLUSPLUSFLAGS = "-DMACH_RPC_MACH_SEMA"; OTHER_CPLUSPLUSFLAGS = "-DMACH_RPC_MACH_SEMA";
OTHER_LDFLAGS = ( OTHER_LDFLAGS = (
@@ -14473,7 +14233,6 @@
INSTALL_PATH = /usr/local/lib; INSTALL_PATH = /usr/local/lib;
LIBRARY_STYLE = DYNAMIC; LIBRARY_STYLE = DYNAMIC;
MACH_O_TYPE = mh_dylib; MACH_O_TYPE = mh_dylib;
OPTIMIZATION_CFLAGS = "-O0";
OTHER_CFLAGS = ""; OTHER_CFLAGS = "";
OTHER_CPLUSPLUSFLAGS = "$(OTHER_CFLAGS)"; OTHER_CPLUSPLUSFLAGS = "$(OTHER_CFLAGS)";
OTHER_LDFLAGS = ( OTHER_LDFLAGS = (
@@ -15203,16 +14962,6 @@
defaultConfigurationIsVisible = 0; defaultConfigurationIsVisible = 0;
defaultConfigurationName = Default; defaultConfigurationName = Default;
}; };
4BD07AA10E1BB7770001F7B5 /* Build configuration list for PBXNativeTarget "audioadapter" */ = {
isa = XCConfigurationList;
buildConfigurations = (
4BD07AA20E1BB7770001F7B5 /* Development */,
4BD07AA30E1BB7770001F7B5 /* Deployment */,
4BD07AA40E1BB7770001F7B5 /* Default */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Default;
};
4BD623F30CBCF0F000DE782F /* Build configuration list for PBXNativeTarget "inprocess" */ = { 4BD623F30CBCF0F000DE782F /* Build configuration list for PBXNativeTarget "inprocess" */ = {
isa = XCConfigurationList; isa = XCConfigurationList;
buildConfigurations = ( buildConfigurations = (


+ 6
- 1
macosx/wscript View File

@@ -44,8 +44,13 @@ def build(bld):
create_jack_driver_obj(bld, 'dummy', '../common/JackDummyDriver.cpp') create_jack_driver_obj(bld, 'dummy', '../common/JackDummyDriver.cpp')


create_jack_audio_driver_obj(bld, 'coreaudio', 'JackCoreAudioDriver.cpp') create_jack_audio_driver_obj(bld, 'coreaudio', 'JackCoreAudioDriver.cpp')
portaudio_src = [
'../windows/JackPortAudioDriver.cpp',
'../windows/JackPortAudioDevices.cpp',
]


#create_jack_audio_driver_obj(bld, 'portaudio', '../windows/JackPortAudioDriver.cpp')
#create_jack_audio_driver_obj(bld, 'portaudio', portaudio_src)


create_jack_driver_obj(bld, 'net', '../common/JackNetDriver.cpp') create_jack_driver_obj(bld, 'net', '../common/JackNetDriver.cpp')



BIN
windows/Debug/bin/JackRouter.dll View File


+ 7
- 0
windows/Debug/bin/JackRouter.ini View File

@@ -0,0 +1,7 @@
[IO]
input=4
output=4
[AUTO_CONNECT]
input=1
output=1

BIN
windows/Debug/bin/portaudio_x86.dll View File


+ 336
- 0
windows/JackNetWinSocket.cpp View File

@@ -0,0 +1,336 @@
/*
Copyright (C) 2008 Romain Moret at Grame
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#include "JackNetWinSocket.h"
namespace Jack
{
//utility *********************************************************************************************************
EXPORT int GetHostName ( char * name, int size )
{
if ( gethostname ( name, size ) == SOCKET_ERROR )
{
jack_error ( "Can't get 'hostname' : %s", strerror ( NET_ERROR_CODE ) );
strcpy ( name, "default" );
return -1;
}
return 0;
}
struct { int code; char* msg; } NetErrorList[] =
{
E(0, "No error"),
E(WSAEINTR, "Interrupted system call"),
E(WSAEBADF, "Bad file number"),
E(WSAEACCES, "Permission denied"),
E(WSAEFAULT, "Bad address"),
E(WSAEINVAL, "Invalid argument"),
E(WSAEMFILE, "Too many open sockets"),
E(WSAEWOULDBLOCK, "Operation would block"),
E(WSAEINPROGRESS, "Operation now in progress"),
E(WSAEALREADY, "Operation already in progress"),
E(WSAENOTSOCK, "Socket operation on non-socket"),
E(WSAEDESTADDRREQ, "Destination address required"),
E(WSAEMSGSIZE, "Message too long"),
E(WSAEPROTOTYPE, "Protocol wrong type for socket"),
E(WSAENOPROTOOPT, "Bad protocol option"),
E(WSAEPROTONOSUPPORT, "Protocol not supported"),
E(WSAESOCKTNOSUPPORT, "Socket type not supported"),
E(WSAEOPNOTSUPP, "Operation not supported on socket"),
E(WSAEPFNOSUPPORT, "Protocol family not supported"),
E(WSAEAFNOSUPPORT, "Address family not supported"),
E(WSAEADDRINUSE, "Address already in use"),
E(WSAEADDRNOTAVAIL, "Can't assign requested address"),
E(WSAENETDOWN, "Network is down"),
E(WSAENETUNREACH, "Network is unreachable"),
E(WSAENETRESET, "Net connection reset"),
E(WSAECONNABORTED, "Software caused connection abort"),
E(WSAECONNRESET, "Connection reset by peer"),
E(WSAENOBUFS, "No buffer space available"),
E(WSAEISCONN, "Socket is already connected"),
E(WSAENOTCONN, "Socket is not connected"),
E(WSAESHUTDOWN, "Can't send after socket shutdown"),
E(WSAETOOMANYREFS, "Too many references, can't splice"),
E(WSAETIMEDOUT, "Connection timed out"),
E(WSAECONNREFUSED, "Connection refused"),
E(WSAELOOP, "Too many levels of symbolic links"),
E(WSAENAMETOOLONG, "File name too long"),
E(WSAEHOSTDOWN, "Host is down"),
E(WSAEHOSTUNREACH, "No route to host"),
E(WSAENOTEMPTY, "Directory not empty"),
E(WSAEPROCLIM, "Too many processes"),
E(WSAEUSERS, "Too many users"),
E(WSAEDQUOT, "Disc quota exceeded"),
E(WSAESTALE, "Stale NFS file handle"),
E(WSAEREMOTE, "Too many levels of remote in path"),
E(WSASYSNOTREADY, "Network system is unavailable"),
E(WSAVERNOTSUPPORTED, "Winsock version out of range"),
E(WSANOTINITIALISED, "WSAStartup not yet called"),
E(WSAEDISCON, "Graceful shutdown in progress"),
E(WSAHOST_NOT_FOUND, "Host not found"),
E(WSANO_DATA, "No host data of that type was found"),
{ -1, NULL },
};
EXPORT const char* PrintError ( int error )
{
int i;
for ( i = 0; NetErrorList[i].code >= 0; ++i)
{
if ( error == NetErrorList[i].code )
return NetErrorList[i].msg;
}
return strerror ( error );
}
//construct/destruct***********************************************************************************************
JackNetWinSocket::JackNetWinSocket()
{
fSockfd = 0;
fSendAddr.sin_family = AF_INET;
fSendAddr.sin_addr.s_addr = htonl ( INADDR_ANY );
memset ( &fSendAddr.sin_zero, 0, 8 );
fRecvAddr.sin_family = AF_INET;
fRecvAddr.sin_addr.s_addr = htonl ( INADDR_ANY );
memset ( &fRecvAddr.sin_zero, 0, 8 );
}
JackNetWinSocket::JackNetWinSocket ( const char* ip, int port )
{
fSockfd = 0;
fPort = port;
fSendAddr.sin_family = AF_INET;
fSendAddr.sin_port = htons ( port );
fSendAddr.sin_addr.s_addr = inet_addr ( ip );
memset ( &fSendAddr.sin_zero, 0, 8 );
fRecvAddr.sin_family = AF_INET;
fRecvAddr.sin_port = htons ( port );
fRecvAddr.sin_addr.s_addr = htonl ( INADDR_ANY );
memset ( &fRecvAddr.sin_zero, 0, 8 );
}
JackNetWinSocket::~JackNetWinSocket()
{
Close();
}
//socket***********************************************************************************************************
int JackNetWinSocket::NewSocket()
{
if ( fSockfd )
{
Close();
Reset();
}
fSockfd = socket ( AF_INET, SOCK_DGRAM, 0 );
return fSockfd;
}
int JackNetWinSocket::Bind()
{
return bind ( fSockfd, reinterpret_cast<SOCKADDR*> ( &fRecvAddr ), sizeof ( SOCKADDR ) );
}
int JackNetWinSocket::BindWith ( const char* ip )
{
fRecvAddr.sin_addr.s_addr = inet_addr ( ip );
return Bind();
}
int JackNetWinSocket::BindWith ( int port )
{
fRecvAddr.sin_port = htons ( port );
return Bind();
}
int JackNetWinSocket::Connect()
{
return connect ( fSockfd, reinterpret_cast<SOCKADDR*> ( &fSendAddr ), sizeof ( SOCKADDR ) );
}
int JackNetWinSocket::ConnectTo ( const char* ip )
{
fSendAddr.sin_addr.s_addr = inet_addr ( ip );
return Connect();
}
void JackNetWinSocket::Close()
{
if ( fSockfd )
closesocket ( fSockfd );
fSockfd = 0;
}
void JackNetWinSocket::Reset()
{
fSendAddr.sin_family = AF_INET;
fSendAddr.sin_port = htons ( fPort );
fSendAddr.sin_addr.s_addr = htonl ( INADDR_ANY );
memset ( &fSendAddr.sin_zero, 0, 8 );
fRecvAddr.sin_family = AF_INET;
fRecvAddr.sin_port = htons ( fPort );
fRecvAddr.sin_addr.s_addr = htonl ( INADDR_ANY );
memset ( &fRecvAddr.sin_zero, 0, 8 );
}
bool JackNetWinSocket::IsSocket()
{
return ( fSockfd ) ? true : false;
}
//IP/PORT***********************************************************************************************************
void JackNetWinSocket::SetPort ( int port )
{
fPort = port;
fSendAddr.sin_port = htons ( port );
fRecvAddr.sin_port = htons ( port );
}
int JackNetWinSocket::GetPort()
{
return fPort;
}
//address***********************************************************************************************************
int JackNetWinSocket::SetAddress ( const char* ip, int port )
{
fSendAddr.sin_addr.s_addr = inet_addr ( ip );
fSendAddr.sin_port = htons ( port );
return 0;
}
char* JackNetWinSocket::GetSendIP()
{
return inet_ntoa ( fSendAddr.sin_addr );
}
char* JackNetWinSocket::GetRecvIP()
{
return inet_ntoa ( fRecvAddr.sin_addr );
}
//utility************************************************************************************************************
int JackNetWinSocket::GetName ( char* name )
{
return gethostname ( name, 255 );
}
int JackNetWinSocket::JoinMCastGroup ( const char* ip )
{
struct ip_mreq multicast_req;
multicast_req.imr_multiaddr.s_addr = inet_addr ( ip );
multicast_req.imr_interface.s_addr = htonl ( INADDR_ANY );
//12 is IP_ADD_MEMBERSHIP in winsock2 (differs from winsock1...)
return SetOption ( IPPROTO_IP, 12, &multicast_req, sizeof ( multicast_req ) );
}
void JackNetWinSocket::CopyParams ( JackNetWinSocket* socket )
{
fPort = socket->fPort;
fSendAddr = socket->fSendAddr;
fRecvAddr = socket->fRecvAddr;
}
//options************************************************************************************************************
int JackNetWinSocket::SetOption ( int level, int optname, const void* optval, SOCKLEN optlen )
{
return setsockopt ( fSockfd, level, optname, static_cast<const char*>(optval), optlen );
}
int JackNetWinSocket::GetOption ( int level, int optname, void* optval, SOCKLEN* optlen )
{
return getsockopt ( fSockfd, level, optname, static_cast<char*>(optval), optlen );
}
//tiemout************************************************************************************************************
int JackNetWinSocket::SetTimeOut ( int& msec )
{
//negative timeout, or exceeding 10s, return
if ( ( msec < 0 ) || ( msec > 10000 ) )
return -1;
return SetOption ( SOL_SOCKET, SO_RCVTIMEO, &msec, sizeof ( msec ) );
}
//local loop*********************************************************************************************************
int JackNetWinSocket::SetLocalLoop()
{
char enable = 1;
return SetOption ( IPPROTO_IP, IP_MULTICAST_LOOP, &enable, sizeof ( enable ) );
}
//network operations*************************************************************************************************
int JackNetWinSocket::SendTo ( const void* buffer, size_t nbytes, int flags )
{
return sendto ( fSockfd, reinterpret_cast<const char*>(buffer), nbytes, flags, reinterpret_cast<SOCKADDR*> ( &fSendAddr ), sizeof ( SOCKADDR ) );
}
int JackNetWinSocket::SendTo ( const void* buffer, size_t nbytes, int flags, const char* ip )
{
fSendAddr.sin_addr.s_addr = inet_addr ( ip );
return SendTo ( buffer, nbytes, flags );
}
int JackNetWinSocket::Send ( const void* buffer, size_t nbytes, int flags )
{
return send ( fSockfd, reinterpret_cast<const char*>(buffer), nbytes, flags );
}
int JackNetWinSocket::RecvFrom ( void* buffer, size_t nbytes, int flags )
{
SOCKLEN addr_len = sizeof ( SOCKADDR );
return recvfrom ( fSockfd, reinterpret_cast<char*>(buffer), nbytes, flags, reinterpret_cast<SOCKADDR*> ( &fRecvAddr ), &addr_len );
}
int JackNetWinSocket::Recv ( void* buffer, size_t nbytes, int flags )
{
return recv ( fSockfd, reinterpret_cast<char*>(buffer), nbytes, flags );
}
int JackNetWinSocket::CatchHost ( void* buffer, size_t nbytes, int flags )
{
SOCKLEN addr_len = sizeof ( SOCKADDR );
return recvfrom ( fSockfd, reinterpret_cast<char*>(buffer), nbytes, flags, reinterpret_cast<SOCKADDR*> ( &fSendAddr ), &addr_len );
}
net_error_t JackNetWinSocket::GetError()
{
switch ( NET_ERROR_CODE )
{
case WSABASEERR:
return NET_NO_ERROR;
case WSAETIMEDOUT:
return NET_NO_DATA;
case WSAECONNREFUSED:
return NET_CONN_ERROR;
case WSAECONNRESET:
return NET_CONN_ERROR;
case WSAEACCES:
return NET_CONN_ERROR;
case WSAECONNABORTED:
return NET_CONN_ERROR;
case WSAEHOSTDOWN:
return NET_CONN_ERROR;
case WSAEHOSTUNREACH:
return NET_CONN_ERROR;
default:
return NET_OP_ERROR;
}
}
}

+ 102
- 0
windows/JackNetWinSocket.h View File

@@ -0,0 +1,102 @@
/*
Copyright (C) 2008 Romain Moret at Grame
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#ifndef __JackNetWinSocket__
#define __JackNetWinSocket__
#include "JackNetSocket.h"
#ifdef __MINGW32__
#include <winsock2.h>
#include <ws2tcpip.h>
#endif
namespace Jack
{
#define E(code, s) { code, s }
#define NET_ERROR_CODE WSAGetLastError()
#define StrError PrintError
typedef uint32_t uint;
typedef int SOCKLEN;
EXPORT const char* PrintError ( int error );
//JeckNetWinSocket***************************************************************************
class EXPORT JackNetWinSocket
{
private:
int fSockfd;
int fPort;
SOCKADDR_IN fSendAddr;
SOCKADDR_IN fRecvAddr;
public:
JackNetWinSocket();
JackNetWinSocket ( const char* ip, int port );
~JackNetWinSocket();
//socket management
int NewSocket();
int Bind();
int BindWith ( const char* ip );
int BindWith ( int port );
int Connect();
int ConnectTo ( const char* ip );
void Close();
void Reset();
bool IsSocket();
//IP/PORT management
void SetPort ( int port );
int GetPort();
//address management
int SetAddress ( const char* ip, int port );
char* GetSendIP();
char* GetRecvIP();
//utility
int GetName ( char* name );
int JoinMCastGroup ( const char* mcast_ip );
void CopyParams ( JackNetWinSocket* socket );
//options management
int SetOption ( int level, int optname, const void* optval, SOCKLEN optlen );
int GetOption ( int level, int optname, void* optval, SOCKLEN* optlen );
//timeout
int SetTimeOut ( int& msec );
//local loop
int SetLocalLoop();
//network operations
int SendTo ( const void* buffer, size_t nbytes, int flags );
int SendTo ( const void* buffer, size_t nbytes, int flags, const char* ip );
int Send ( const void* buffer, size_t nbytes, int flags );
int RecvFrom ( void* buffer, size_t nbytes, int flags );
int Recv ( void* buffer, size_t nbytes, int flags );
int CatchHost ( void* buffer, size_t nbytes, int flags );
//error management
net_error_t GetError();
};
}
#endif

+ 294
- 0
windows/JackPortAudioDevices.cpp View File

@@ -0,0 +1,294 @@
/*
Copyright (C) 2008 Romain Moret at Grame
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#include "JackPortAudioDevices.h"
#include "JackError.h"
using namespace std;
PortAudioDevices::PortAudioDevices()
{
PaError err;
if ( ( err = Pa_Initialize() ) == paNoError )
{
fNumHostApi = Pa_GetHostApiCount();
fNumDevice = Pa_GetDeviceCount();
fDeviceInfo = new PaDeviceInfo*[fNumDevice];
for ( PaDeviceIndex id = 0; id < fNumDevice; id++ )
fDeviceInfo[id] = const_cast<PaDeviceInfo*>(Pa_GetDeviceInfo(id));
fHostName = new string[fNumHostApi];
for ( PaHostApiIndex id = 0; id < fNumHostApi; id++ )
fHostName[id] = string ( Pa_GetHostApiInfo(id)->name );
}
else
printf("JackPortAudioDriver::Pa_Initialize error = %s\n", Pa_GetErrorText(err));
}
PortAudioDevices::~PortAudioDevices()
{
Pa_Terminate();
delete[] fDeviceInfo;
delete[] fHostName;
}
PaDeviceIndex PortAudioDevices::GetNumDevice()
{
return fNumDevice;
}
PaDeviceInfo* PortAudioDevices::GetDeviceInfo ( PaDeviceIndex id )
{
return fDeviceInfo[id];
}
string PortAudioDevices::GetDeviceName ( PaDeviceIndex id )
{
return string ( fDeviceInfo[id]->name );
}
string PortAudioDevices::GetHostFromDevice ( PaDeviceInfo* device )
{
return fHostName[device->hostApi];
}
string PortAudioDevices::GetHostFromDevice ( PaDeviceIndex id )
{
return fHostName[fDeviceInfo[id]->hostApi];
}
string PortAudioDevices::GetFullName ( PaDeviceIndex id )
{
string hostname = GetHostFromDevice ( id );
string devicename = GetDeviceName ( id );
//some hostname are quite long...use shortcuts
if ( hostname.compare ( "Windows DirectSound" ) == 0 )
hostname = string ( "DirectSound" );
return ( hostname + "::" + devicename );
}
string PortAudioDevices::GetFullName ( std::string hostname, std::string devicename )
{
//some hostname are quite long...use shortcuts
if ( hostname.compare ( "Windows DirectSound" ) == 0 )
hostname = string ( "DirectSound" );
return ( hostname + "::" + devicename );
}
PaDeviceInfo* PortAudioDevices::GetDeviceFromFullName ( string fullname, PaDeviceIndex& id )
{
PaDeviceInfo* ret = NULL;
//no driver to find
if ( fullname.size() == 0 )
return NULL;
//first get host and device names from fullname
string::size_type separator = fullname.find ( "::", 0 );
if ( separator == 0 )
return NULL;
char hostname[separator + 9];
fill_n ( hostname, separator + 9, 0 );
fullname.copy ( hostname, separator );
//we need the entire hostname, replace shortcuts
if ( strcmp ( hostname, "DirectSound" ) == 0 )
strcpy ( hostname, "Windows DirectSound" );
string devicename = fullname.substr ( separator + 2 );
//then find the corresponding device
for ( PaDeviceIndex dev_id = 0; dev_id < fNumDevice; dev_id++ )
{
if ( ( GetHostFromDevice(dev_id).compare(hostname) == 0 ) && ( GetDeviceName(dev_id).compare(devicename) == 0 ) )
{
id = dev_id;
ret = fDeviceInfo[dev_id];
}
}
return ret;
}
void PortAudioDevices::PrintSupportedStandardSampleRates(const PaStreamParameters* inputParameters, const PaStreamParameters* outputParameters)
{
static double standardSampleRates[] =
{
8000.0, 9600.0, 11025.0, 12000.0, 16000.0, 22050.0, 24000.0, 32000.0,
44100.0, 48000.0, 88200.0, 96000.0, 192000.0, -1 /* negative terminated list */
};
int i, printCount;
PaError err;
printCount = 0;
for (i = 0; standardSampleRates[i] > 0; i++)
{
err = Pa_IsFormatSupported(inputParameters, outputParameters, standardSampleRates[i]);
if (err == paFormatIsSupported)
{
if (printCount == 0)
{
printf("\t%8.2f", standardSampleRates[i]);
printCount = 1;
}
else if (printCount == 4)
{
printf(",\n\t%8.2f", standardSampleRates[i]);
printCount = 1;
}
else
{
printf(", %8.2f", standardSampleRates[i]);
++printCount;
}
}
}
if (!printCount)
printf("None\n");
else
printf("\n");
}
int PortAudioDevices::GetInputDeviceFromName(const char* devicename, PaDeviceIndex& id, int& max_input)
{
string fullname = string ( devicename );
PaDeviceInfo* device = GetDeviceFromFullName ( fullname, id );
if ( device )
max_input = device->maxInputChannels;
else
{
id = Pa_GetDefaultInputDevice();
if ( fullname.size() )
printf("Can't open %s, PortAudio will use default input device.\n", devicename);
if ( id == paNoDevice )
return -1;
max_input = GetDeviceInfo(id)->maxInputChannels;
devicename = strdup ( GetDeviceInfo(id)->name );
}
return id;
}
int PortAudioDevices::GetOutputDeviceFromName(const char* devicename, PaDeviceIndex& id, int& max_output)
{
string fullname = string ( devicename );
PaDeviceInfo* device = GetDeviceFromFullName ( fullname, id );
if ( device )
max_output = device->maxOutputChannels;
else
{
id = Pa_GetDefaultOutputDevice();
if ( fullname.size() )
printf("Can't open %s, PortAudio will use default output device.\n", devicename);
if ( id == paNoDevice )
return -1;
max_output = GetDeviceInfo(id)->maxOutputChannels;
devicename = strdup ( GetDeviceInfo(id)->name );
}
return id;
}
void PortAudioDevices::DisplayDevicesNames()
{
int def_display;
PaStreamParameters inputParameters, outputParameters;
printf ( "********************** Devices list, %d detected **********************\n", fNumDevice );
for ( PaDeviceIndex id = 0; id < fNumDevice; id++ )
{
printf ( "-------- device #%d ------------------------------------------------\n", id );
def_display = 0;
if ( id == Pa_GetDefaultInputDevice() )
{
printf("[ Default Input");
def_display = 1;
}
else if ( id == Pa_GetHostApiInfo ( fDeviceInfo[id]->hostApi)->defaultInputDevice )
{
const PaHostApiInfo *host_info = Pa_GetHostApiInfo ( fDeviceInfo[id]->hostApi );
printf ( "[ Default %s Input", host_info->name );
def_display = 1;
}
if ( id == Pa_GetDefaultOutputDevice() )
{
printf ( ( def_display ? "," : "[" ) );
printf ( " Default Output" );
def_display = 1;
}
else if ( id == Pa_GetHostApiInfo ( fDeviceInfo[id]->hostApi )->defaultOutputDevice )
{
const PaHostApiInfo *host_info = Pa_GetHostApiInfo ( fDeviceInfo[id]->hostApi );
printf ( ( def_display ? "," : "[" ) );
printf ( " Default %s Output", host_info->name );
def_display = 1;
}
if ( def_display )
printf ( " ]\n" );
/* print device info fields */
printf ( "Name = %s\n", GetFullName ( id ).c_str() );
printf ( "Max inputs = %d\n", fDeviceInfo[id]->maxInputChannels );
printf ( "Max outputs = %d\n", fDeviceInfo[id]->maxOutputChannels );
#ifdef WIN32
/* ASIO specific latency information */
if ( Pa_GetHostApiInfo(fDeviceInfo[id]->hostApi)->type == paASIO )
{
long minLatency, maxLatency, preferredLatency, granularity;
PaAsio_GetAvailableLatencyValues ( id, &minLatency, &maxLatency, &preferredLatency, &granularity );
printf ( "ASIO minimum buffer size = %ld\n", minLatency );
printf ( "ASIO maximum buffer size = %ld\n", maxLatency );
printf ( "ASIO preferred buffer size = %ld\n", preferredLatency );
if ( granularity == -1 )
printf ( "ASIO buffer granularity = power of 2\n" );
else
printf ( "ASIO buffer granularity = %ld\n", granularity );
}
#endif
printf ( "Default sample rate = %8.2f\n", fDeviceInfo[id]->defaultSampleRate );
/* poll for standard sample rates */
inputParameters.device = id;
inputParameters.channelCount = fDeviceInfo[id]->maxInputChannels;
inputParameters.sampleFormat = paInt16;
inputParameters.suggestedLatency = 0; /* ignored by Pa_IsFormatSupported() */
inputParameters.hostApiSpecificStreamInfo = NULL;
outputParameters.device = id;
outputParameters.channelCount = fDeviceInfo[id]->maxOutputChannels;
outputParameters.sampleFormat = paInt16;
outputParameters.suggestedLatency = 0; /* ignored by Pa_IsFormatSupported() */
outputParameters.hostApiSpecificStreamInfo = NULL;
}
printf ( "**************************** End of list ****************************\n" );
}
bool PortAudioDevices::IsDuplex ( PaDeviceIndex id )
{
//does the device has in and out facilities
if ( fDeviceInfo[id]->maxInputChannels && fDeviceInfo[id]->maxOutputChannels )
return true;
//else is another complementary device ? (search in devices with the same name)
for ( PaDeviceIndex i = 0; i < fNumDevice; i++ )
if ( ( i != id ) && ( GetDeviceName ( i ) == GetDeviceName ( id ) ) )
if ( ( fDeviceInfo[i]->maxInputChannels && fDeviceInfo[id]->maxOutputChannels )
|| ( fDeviceInfo[i]->maxOutputChannels && fDeviceInfo[id]->maxInputChannels ) )
return true;
//then the device isn't full duplex
return false;
}

+ 62
- 0
windows/JackPortAudioDevices.h View File

@@ -0,0 +1,62 @@
/*
Copyright (C) 2008 Romain Moret at Grame
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#ifndef __PortAudioDevices__
#define __PortAudioDevices__
#include <iostream>
#include <cstring>
#include <cstdio>
#include <string>
#include <cstdlib>
#include "portaudio.h"
#include "pa_asio.h"
/*!
\brief A PortAudio Devices manager.
*/
class PortAudioDevices
{
private:
PaHostApiIndex fNumHostApi; //number of hosts
PaDeviceIndex fNumDevice; //number of devices
PaDeviceInfo** fDeviceInfo; //array of device info
std::string* fHostName; //array of host names (matched with host id's)
public:
PortAudioDevices();
~PortAudioDevices();
PaDeviceIndex GetNumDevice();
PaDeviceInfo* GetDeviceInfo(PaDeviceIndex id);
std::string GetDeviceName(PaDeviceIndex id);
std::string GetHostFromDevice(PaDeviceInfo* device);
std::string GetHostFromDevice(PaDeviceIndex id);
std::string GetFullName(PaDeviceIndex id);
std::string GetFullName(std::string hostname, std::string devicename);
PaDeviceInfo* GetDeviceFromFullName(std::string fullname, PaDeviceIndex& id);
void PrintSupportedStandardSampleRates(const PaStreamParameters* inputParameters, const PaStreamParameters* outputParameters);
int GetInputDeviceFromName(const char* name, PaDeviceIndex& device, int& in_max);
int GetOutputDeviceFromName(const char* name, PaDeviceIndex& device, int& out_max);
void DisplayDevicesNames();
bool IsDuplex ( PaDeviceIndex id );
};
#endif

+ 265
- 439
windows/JackPortAudioDriver.cpp View File

@@ -25,7 +25,6 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#pragma warning (disable : 4786) #pragma warning (disable : 4786)
#endif #endif


#include "pa_asio.h"
#include "JackDriverLoader.h" #include "JackDriverLoader.h"
#include "driver_interface.h" #include "driver_interface.h"
#include "JackPortAudioDriver.h" #include "JackPortAudioDriver.h"
@@ -36,417 +35,233 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#include <iostream> #include <iostream>
#include <assert.h> #include <assert.h>


namespace Jack
{
using namespace std;


void JackPortAudioDriver::PrintSupportedStandardSampleRates(const PaStreamParameters* inputParameters, const PaStreamParameters* outputParameters)
namespace Jack
{ {
static double standardSampleRates[] = {
8000.0, 9600.0, 11025.0, 12000.0, 16000.0, 22050.0, 24000.0, 32000.0,
44100.0, 48000.0, 88200.0, 96000.0, 192000.0, -1 /* negative terminated list */
};
int i, printCount;
PaError err;

printCount = 0;
for (i = 0; standardSampleRates[i] > 0; i++) {
err = Pa_IsFormatSupported(inputParameters, outputParameters, standardSampleRates[i]);
if (err == paFormatIsSupported) {
if (printCount == 0) {
printf("\t%8.2f", standardSampleRates[i]);
printCount = 1;
} else if (printCount == 4) {
printf(",\n\t%8.2f", standardSampleRates[i]);
printCount = 1;
} else {
printf(", %8.2f", standardSampleRates[i]);
++printCount;
}
}
int JackPortAudioDriver::Render(const void* inputBuffer, void* outputBuffer,
unsigned long framesPerBuffer,
const PaStreamCallbackTimeInfo* timeInfo,
PaStreamCallbackFlags statusFlags,
void* userData)
{
JackPortAudioDriver* driver = (JackPortAudioDriver*)userData;
driver->fInputBuffer = (float**)inputBuffer;
driver->fOutputBuffer = (float**)outputBuffer;
// Setup threadded based log function
set_threaded_log_function();
driver->CycleTakeBeginTime();
return (driver->Process() == 0) ? paContinue : paAbort;
} }
if (!printCount)
printf("None\n");
else
printf("\n");
}


bool JackPortAudioDriver::GetInputDeviceFromName(const char* name, PaDeviceIndex* device, int* in_max)
{
const PaDeviceInfo* deviceInfo;
PaDeviceIndex numDevices = Pa_GetDeviceCount();

for (int i = 0; i < numDevices; i++) {
deviceInfo = Pa_GetDeviceInfo(i);
if (strcmp(name, deviceInfo->name) == 0) {
*device = i;
*in_max = deviceInfo->maxInputChannels;
return true;
int JackPortAudioDriver::Read()
{
for (int i = 0; i < fCaptureChannels; i++)
{
memcpy(GetInputBuffer(i), fInputBuffer[i], sizeof(float) * fEngineControl->fBufferSize);
} }
return 0;
} }


return false;
}

bool JackPortAudioDriver::GetOutputDeviceFromName(const char* name, PaDeviceIndex* device, int* out_max)
{
const PaDeviceInfo* deviceInfo;
PaDeviceIndex numDevices = Pa_GetDeviceCount();

for (int i = 0; i < numDevices; i++) {
deviceInfo = Pa_GetDeviceInfo(i);
if (strcmp(name, deviceInfo->name) == 0) {
*device = i;
*out_max = deviceInfo->maxOutputChannels;
return true;
int JackPortAudioDriver::Write()
{
for (int i = 0; i < fPlaybackChannels; i++)
{
memcpy(fOutputBuffer[i], GetOutputBuffer(i), sizeof(float) * fEngineControl->fBufferSize);
} }
return 0;
} }


return false;
}

static void DisplayDeviceNames()
{
PaError err;
const PaDeviceInfo* deviceInfo;
PaStreamParameters inputParameters, outputParameters;
int defaultDisplayed;

err = Pa_Initialize();
if (err != paNoError)
return ;

PaDeviceIndex numDevices = Pa_GetDeviceCount();
printf("Number of devices = %d\n", numDevices);

for (int i = 0; i < numDevices; i++) {
deviceInfo = Pa_GetDeviceInfo(i);
printf( "--------------------------------------- device #%d\n", i );

/* Mark global and API specific default devices */
defaultDisplayed = 0;
if (i == Pa_GetDefaultInputDevice()) {
printf("[ Default Input");
defaultDisplayed = 1;
} else if (i == Pa_GetHostApiInfo(deviceInfo->hostApi)->defaultInputDevice) {
const PaHostApiInfo *hostInfo = Pa_GetHostApiInfo(deviceInfo->hostApi);
printf("[ Default %s Input", hostInfo->name);
defaultDisplayed = 1;
int JackPortAudioDriver::Open(jack_nframes_t nframes,
jack_nframes_t samplerate,
bool capturing,
bool playing,
int inchannels,
int outchannels,
bool monitor,
const char* capture_driver_uid,
const char* playback_driver_uid,
jack_nframes_t capture_latency,
jack_nframes_t playback_latency)
{
PaError err;
PaStreamParameters inputParameters;
PaStreamParameters outputParameters;
int in_max = 0;
int out_max = 0;

jack_log("JackPortAudioDriver::Open nframes = %ld in = %ld out = %ld capture name = %s playback name = %s samplerate = %ld",
nframes, inchannels, outchannels, capture_driver_uid, playback_driver_uid, samplerate);

// Generic JackAudioDriver Open
if (JackAudioDriver::Open(nframes, samplerate, capturing, playing, inchannels, outchannels, monitor, capture_driver_uid, playback_driver_uid, capture_latency, playback_latency) != 0)
{
return -1;
} }


if (i == Pa_GetDefaultOutputDevice()) {
printf((defaultDisplayed ? "," : "["));
printf(" Default Output");
defaultDisplayed = 1;
} else if (i == Pa_GetHostApiInfo(deviceInfo->hostApi)->defaultOutputDevice) {
const PaHostApiInfo *hostInfo = Pa_GetHostApiInfo(deviceInfo->hostApi);
printf((defaultDisplayed ? "," : "["));
printf(" Default %s Output", hostInfo->name);
defaultDisplayed = 1;
//get devices
if (capturing)
{
if (fPaDevices->GetInputDeviceFromName(capture_driver_uid, fInputDevice, in_max) < 0)
goto error;
}
if (playing)
{
if (fPaDevices->GetOutputDeviceFromName(playback_driver_uid, fOutputDevice, out_max) < 0)
goto error;
} }


if (defaultDisplayed)
printf(" ]\n");

/* print device info fields */
printf("Name = %s\n", deviceInfo->name);
printf("Host API = %s\n", Pa_GetHostApiInfo(deviceInfo->hostApi)->name);
printf("Max inputs = %d", deviceInfo->maxInputChannels);
printf(", Max outputs = %d\n", deviceInfo->maxOutputChannels);
/*
printf("Default low input latency = %8.3f\n", deviceInfo->defaultLowInputLatency);
printf("Default low output latency = %8.3f\n", deviceInfo->defaultLowOutputLatency);
printf("Default high input latency = %8.3f\n", deviceInfo->defaultHighInputLatency);
printf("Default high output latency = %8.3f\n", deviceInfo->defaultHighOutputLatency);
*/

#ifdef WIN32
#ifndef PA_NO_ASIO
/* ASIO specific latency information */
if (Pa_GetHostApiInfo(deviceInfo->hostApi)->type == paASIO) {
long minLatency, maxLatency, preferredLatency, granularity;

err = PaAsio_GetAvailableLatencyValues(i, &minLatency, &maxLatency, &preferredLatency, &granularity);

printf("ASIO minimum buffer size = %ld\n", minLatency);
printf("ASIO maximum buffer size = %ld\n", maxLatency);
printf("ASIO preferred buffer size = %ld\n", preferredLatency);

if (granularity == -1)
printf("ASIO buffer granularity = power of 2\n");
else
printf("ASIO buffer granularity = %ld\n", granularity);
//default channels number required
if (inchannels == 0)
{
jack_log("JackPortAudioDriver::Open setup max in channels = %ld", in_max);
inchannels = in_max;
}
if (outchannels == 0)
{
jack_log("JackPortAudioDriver::Open setup max out channels = %ld", out_max);
outchannels = out_max;
} }
#endif /* !PA_NO_ASIO */
#endif /* WIN32 */


printf("Default sample rate = %8.2f\n", deviceInfo->defaultSampleRate);
//doesn't have enough in/out channels...exit
if (inchannels > in_max)
{
jack_error("This device hasn't required input channels inchannels = %ld in_max = %ld", inchannels, in_max);
goto error;
}
if (outchannels > out_max)
{
jack_error("This device hasn't required output channels outchannels = %ld out_max = %ld", outchannels, out_max);
goto error;
}


/* poll for standard sample rates */
inputParameters.device = i;
inputParameters.channelCount = deviceInfo->maxInputChannels;
inputParameters.sampleFormat = paInt16;
inputParameters.suggestedLatency = 0; /* ignored by Pa_IsFormatSupported() */
//in/output streams parametering
inputParameters.device = fInputDevice;
inputParameters.channelCount = inchannels;
inputParameters.sampleFormat = paFloat32 | paNonInterleaved; // 32 bit floating point output
inputParameters.suggestedLatency = (fInputDevice != paNoDevice) // TODO: check how to setup this on ASIO
? Pa_GetDeviceInfo(inputParameters.device)->defaultLowInputLatency
: 0;
inputParameters.hostApiSpecificStreamInfo = NULL; inputParameters.hostApiSpecificStreamInfo = NULL;


outputParameters.device = i;
outputParameters.channelCount = deviceInfo->maxOutputChannels;
outputParameters.sampleFormat = paInt16;
outputParameters.suggestedLatency = 0; /* ignored by Pa_IsFormatSupported() */
outputParameters.device = fOutputDevice;
outputParameters.channelCount = outchannels;
outputParameters.sampleFormat = paFloat32 | paNonInterleaved; // 32 bit floating point output
outputParameters.suggestedLatency = (fOutputDevice != paNoDevice) // TODO: check how to setup this on ASIO
? Pa_GetDeviceInfo(outputParameters.device)->defaultLowOutputLatency
: 0;
outputParameters.hostApiSpecificStreamInfo = NULL; outputParameters.hostApiSpecificStreamInfo = NULL;


/*
if (inputParameters.channelCount > 0) {
printf("Supported standard sample rates\n for half-duplex 16 bit %d channel input = \n", inputParameters.channelCount);
PrintSupportedStandardSampleRates(&inputParameters, NULL);
}

if (outputParameters.channelCount > 0) {
printf("Supported standard sample rates\n for half-duplex 16 bit %d channel output = \n", outputParameters.channelCount);
PrintSupportedStandardSampleRates(NULL, &outputParameters);
}

if (inputParameters.channelCount > 0 && outputParameters.channelCount > 0) {
printf("Supported standard sample rates\n for full-duplex 16 bit %d channel input, %d channel output = \n",
inputParameters.channelCount, outputParameters.channelCount );
PrintSupportedStandardSampleRates(&inputParameters, &outputParameters);
}
*/
}

Pa_Terminate();
}

int JackPortAudioDriver::Render(const void* inputBuffer, void* outputBuffer,
unsigned long framesPerBuffer,
const PaStreamCallbackTimeInfo* timeInfo,
PaStreamCallbackFlags statusFlags,
void* userData)
{
JackPortAudioDriver* driver = (JackPortAudioDriver*)userData;
driver->fInputBuffer = (float**)inputBuffer;
driver->fOutputBuffer = (float**)outputBuffer;
// Setup threadded based log function
set_threaded_log_function();
driver->CycleTakeBeginTime();
return (driver->Process() == 0) ? paContinue : paAbort;
}

int JackPortAudioDriver::Read()
{
for (int i = 0; i < fCaptureChannels; i++) {
memcpy(GetInputBuffer(i), fInputBuffer[i], sizeof(float) * fEngineControl->fBufferSize);
}
return 0;
}
err = Pa_OpenStream(&fStream,
(fInputDevice == paNoDevice) ? 0 : &inputParameters,
(fOutputDevice == paNoDevice) ? 0 : &outputParameters,
samplerate,
nframes,
paNoFlag, // Clipping is on...
Render,
this);
if (err != paNoError)
{
jack_error("Pa_OpenStream error = %s\n", Pa_GetErrorText(err));
goto error;
}


int JackPortAudioDriver::Write()
{
for (int i = 0; i < fPlaybackChannels; i++) {
memcpy(fOutputBuffer[i], GetOutputBuffer(i), sizeof(float) * fEngineControl->fBufferSize);
}
return 0;
}
#ifdef __APPLE__
fEngineControl->fPeriod = fEngineControl->fPeriodUsecs * 1000;
fEngineControl->fComputation = 500 * 1000;
fEngineControl->fConstraint = fEngineControl->fPeriodUsecs * 1000;
#endif


int JackPortAudioDriver::Open(jack_nframes_t nframes,
jack_nframes_t samplerate,
bool capturing,
bool playing,
int inchannels,
int outchannels,
bool monitor,
const char* capture_driver_uid,
const char* playback_driver_uid,
jack_nframes_t capture_latency,
jack_nframes_t playback_latency)
{
PaError err;
PaStreamParameters inputParameters;
PaStreamParameters outputParameters;
const PaDeviceInfo* deviceInfo;
int in_max = 0;
int out_max = 0;

jack_log("JackPortAudioDriver::Open nframes = %ld in = %ld out = %ld capture name = %s playback name = %s samplerate = %ld",
nframes, inchannels, outchannels, capture_driver_uid, playback_driver_uid, samplerate);

// Generic JackAudioDriver Open
if (JackAudioDriver::Open(nframes, samplerate, capturing, playing, inchannels, outchannels, monitor, capture_driver_uid, playback_driver_uid, capture_latency, playback_latency) != 0) {
return -1;
}
// Core driver may have changed the in/out values
fCaptureChannels = inchannels;
fPlaybackChannels = outchannels;


err = Pa_Initialize();
if (err != paNoError) {
jack_error("JackPortAudioDriver::Pa_Initialize error = %s\n", Pa_GetErrorText(err));
goto error;
}
assert(strlen(capture_driver_uid) < JACK_CLIENT_NAME_SIZE);
assert(strlen(playback_driver_uid) < JACK_CLIENT_NAME_SIZE);


jack_log("JackPortAudioDriver::Pa_GetDefaultInputDevice %ld", Pa_GetDefaultInputDevice());
jack_log("JackPortAudioDriver::Pa_GetDefaultOutputDevice %ld", Pa_GetDefaultOutputDevice());
strcpy(fCaptureDriverName, capture_driver_uid);
strcpy(fPlaybackDriverName, playback_driver_uid);


if (capturing) {
if (!GetInputDeviceFromName(capture_driver_uid, &fInputDevice, &in_max)) {
jack_log("JackPortAudioDriver::GetInputDeviceFromName cannot open %s", capture_driver_uid);
fInputDevice = Pa_GetDefaultInputDevice();
if (fInputDevice == paNoDevice)
goto error;
deviceInfo = Pa_GetDeviceInfo(fInputDevice);
in_max = deviceInfo->maxInputChannels;
capture_driver_uid = strdup(deviceInfo->name);
}
}
return 0;


if (inchannels > in_max) {
jack_error("This device hasn't required input channels inchannels = %ld in_max = %ld", inchannels, in_max);
goto error;
}

if (playing) {
if (!GetOutputDeviceFromName(playback_driver_uid, &fOutputDevice, &out_max)) {
jack_log("JackPortAudioDriver::GetOutputDeviceFromName cannot open %s", playback_driver_uid);
fOutputDevice = Pa_GetDefaultOutputDevice();
if (fOutputDevice == paNoDevice)
goto error;
deviceInfo = Pa_GetDeviceInfo(fOutputDevice);
out_max = deviceInfo->maxOutputChannels;
playback_driver_uid = strdup(deviceInfo->name);
}
}

if (outchannels > out_max) {
jack_error("This device hasn't required output channels outchannels = %ld out_max = %ld", outchannels, out_max);
goto error;
error:
jack_error ( "Can't open default PortAudio device : %s", Pa_GetErrorText(err) );
return -1;
} }


if (inchannels == 0) {
jack_log("JackPortAudioDriver::Open setup max in channels = %ld", in_max);
inchannels = in_max;
int JackPortAudioDriver::Close()
{
JackAudioDriver::Close();
jack_log("JackPortAudioDriver::Close");
Pa_CloseStream(fStream);
delete fPaDevices;
return 0;
} }


if (outchannels == 0) {
jack_log("JackPortAudioDriver::Open setup max out channels = %ld", out_max);
outchannels = out_max;
int JackPortAudioDriver::Start()
{
jack_log("JackPortAudioDriver::Start");
JackAudioDriver::Start();
PaError err = Pa_StartStream(fStream);
return (err == paNoError) ? 0 : -1;
} }


inputParameters.device = fInputDevice;
inputParameters.channelCount = inchannels;
inputParameters.sampleFormat = paFloat32 | paNonInterleaved; // 32 bit floating point output
inputParameters.suggestedLatency = (fInputDevice != paNoDevice) // TODO: check how to setup this on ASIO
? Pa_GetDeviceInfo(inputParameters.device)->defaultLowInputLatency
: 0;
inputParameters.hostApiSpecificStreamInfo = NULL;

outputParameters.device = fOutputDevice;
outputParameters.channelCount = outchannels;
outputParameters.sampleFormat = paFloat32 | paNonInterleaved; // 32 bit floating point output
outputParameters.suggestedLatency = (fOutputDevice != paNoDevice) // TODO: check how to setup this on ASIO
? Pa_GetDeviceInfo(outputParameters.device)->defaultLowOutputLatency
: 0;
outputParameters.hostApiSpecificStreamInfo = NULL;

err = Pa_OpenStream(&fStream,
(fInputDevice == paNoDevice) ? 0 : &inputParameters,
(fOutputDevice == paNoDevice) ? 0 : &outputParameters,
samplerate,
nframes,
paNoFlag, // Clipping is on...
Render,
this);
if (err != paNoError) {
jack_error("Pa_OpenStream error = %s\n", Pa_GetErrorText(err));
goto error;
int JackPortAudioDriver::Stop()
{
jack_log("JackPortAudioDriver::Stop");
PaError err = Pa_StopStream(fStream);
return (err == paNoError) ? 0 : -1;
} }


#ifdef __APPLE__
fEngineControl->fPeriod = fEngineControl->fPeriodUsecs * 1000;
fEngineControl->fComputation = 500 * 1000;
fEngineControl->fConstraint = fEngineControl->fPeriodUsecs * 1000;
#endif

// Core driver may have changed the in/out values
fCaptureChannels = inchannels;
fPlaybackChannels = outchannels;

assert(strlen(capture_driver_uid) < JACK_CLIENT_NAME_SIZE);
assert(strlen(playback_driver_uid) < JACK_CLIENT_NAME_SIZE);

strcpy(fCaptureDriverName, capture_driver_uid);
strcpy(fPlaybackDriverName, playback_driver_uid);
int JackPortAudioDriver::SetBufferSize(jack_nframes_t buffer_size)
{
PaError err;
PaStreamParameters inputParameters;
PaStreamParameters outputParameters;


return 0;

error:
Pa_Terminate();
return -1;
}

int JackPortAudioDriver::Close()
{
JackAudioDriver::Close();
jack_log("JackPortAudioDriver::Close");
Pa_CloseStream(fStream);
Pa_Terminate();
return 0;
}

int JackPortAudioDriver::Start()
{
jack_log("JackPortAudioDriver::Start");
JackAudioDriver::Start();
PaError err = Pa_StartStream(fStream);
return (err == paNoError) ? 0 : -1;
}

int JackPortAudioDriver::Stop()
{
jack_log("JackPortAudioDriver::Stop");
PaError err = Pa_StopStream(fStream);
return (err == paNoError) ? 0 : -1;
}
if ((err = Pa_CloseStream(fStream)) != paNoError)
{
jack_error("Pa_CloseStream error = %s\n", Pa_GetErrorText(err));
return -1;
}


int JackPortAudioDriver::SetBufferSize(jack_nframes_t buffer_size)
{
PaError err;
PaStreamParameters inputParameters;
PaStreamParameters outputParameters;
//change parametering
inputParameters.device = fInputDevice;
inputParameters.channelCount = fCaptureChannels;
inputParameters.sampleFormat = paFloat32 | paNonInterleaved; // 32 bit floating point output
inputParameters.suggestedLatency = (fInputDevice != paNoDevice) // TODO: check how to setup this on ASIO
? Pa_GetDeviceInfo(inputParameters.device)->defaultLowInputLatency
: 0;
inputParameters.hostApiSpecificStreamInfo = NULL;


if ((err = Pa_CloseStream(fStream)) != paNoError) {
jack_error("Pa_CloseStream error = %s", Pa_GetErrorText(err));
return -1;
}
outputParameters.device = fOutputDevice;
outputParameters.channelCount = fPlaybackChannels;
outputParameters.sampleFormat = paFloat32 | paNonInterleaved; // 32 bit floating point output
outputParameters.suggestedLatency = (fOutputDevice != paNoDevice) // TODO: check how to setup this on ASIO
? Pa_GetDeviceInfo(outputParameters.device)->defaultLowOutputLatency
: 0;
outputParameters.hostApiSpecificStreamInfo = NULL;


inputParameters.device = fInputDevice;
inputParameters.channelCount = fCaptureChannels;
inputParameters.sampleFormat = paFloat32 | paNonInterleaved; // 32 bit floating point output
inputParameters.suggestedLatency = (fInputDevice != paNoDevice) // TODO: check how to setup this on ASIO
? Pa_GetDeviceInfo(inputParameters.device)->defaultLowInputLatency
: 0;
inputParameters.hostApiSpecificStreamInfo = NULL;

outputParameters.device = fOutputDevice;
outputParameters.channelCount = fPlaybackChannels;
outputParameters.sampleFormat = paFloat32 | paNonInterleaved; // 32 bit floating point output
outputParameters.suggestedLatency = (fOutputDevice != paNoDevice) // TODO: check how to setup this on ASIO
? Pa_GetDeviceInfo(outputParameters.device)->defaultLowOutputLatency
: 0;
outputParameters.hostApiSpecificStreamInfo = NULL;

err = Pa_OpenStream(&fStream,
(fInputDevice == paNoDevice) ? 0 : &inputParameters,
(fOutputDevice == paNoDevice) ? 0 : &outputParameters,
fEngineControl->fSampleRate,
buffer_size,
paNoFlag, // Clipping is on...
Render,
this);

if (err != paNoError) {
jack_error("Pa_OpenStream error = %s", Pa_GetErrorText(err));
return -1;
} else {
// Only done when success
return JackAudioDriver::SetBufferSize(buffer_size); // never fails
err = Pa_OpenStream(&fStream,
(fInputDevice == paNoDevice) ? 0 : &inputParameters,
(fOutputDevice == paNoDevice) ? 0 : &outputParameters,
fEngineControl->fSampleRate,
buffer_size,
paNoFlag, // Clipping is on...
Render,
this);

if (err != paNoError)
{
jack_error("Pa_OpenStream error = %s\n", Pa_GetErrorText(err));
return -1;
}
else
{
// Only done when success
return JackAudioDriver::SetBufferSize(buffer_size); // never fails
}
} }
}


} // end of namespace } // end of namespace


@@ -457,7 +272,8 @@ extern "C"


#include "JackExports.h" #include "JackExports.h"


EXPORT jack_driver_desc_t* driver_get_descriptor() {
EXPORT jack_driver_desc_t* driver_get_descriptor()
{
jack_driver_desc_t *desc; jack_driver_desc_t *desc;
unsigned int i; unsigned int i;
desc = (jack_driver_desc_t*)calloc(1, sizeof(jack_driver_desc_t)); desc = (jack_driver_desc_t*)calloc(1, sizeof(jack_driver_desc_t));
@@ -575,98 +391,108 @@ extern "C"
return desc; return desc;
} }


EXPORT Jack::JackDriverClientInterface* driver_initialize(Jack::JackLockedEngine* engine, Jack::JackSynchro* table, const JSList* params) {
EXPORT Jack::JackDriverClientInterface* driver_initialize(Jack::JackLockedEngine* engine, Jack::JackSynchro* table, const JSList* params)
{
jack_nframes_t srate = 44100; jack_nframes_t srate = 44100;
jack_nframes_t frames_per_interrupt = 512; jack_nframes_t frames_per_interrupt = 512;
const char* capture_pcm_name = "";
const char* playback_pcm_name = "";
int capture = FALSE; int capture = FALSE;
int playback = FALSE; int playback = FALSE;
int chan_in = 0; int chan_in = 0;
int chan_out = 0; int chan_out = 0;
bool monitor = false; bool monitor = false;
char* capture_pcm_name = "winmme";
char* playback_pcm_name = "winmme";
const JSList *node; const JSList *node;
const jack_driver_param_t *param; const jack_driver_param_t *param;
jack_nframes_t systemic_input_latency = 0; jack_nframes_t systemic_input_latency = 0;
jack_nframes_t systemic_output_latency = 0; jack_nframes_t systemic_output_latency = 0;
PortAudioDevices* pa_devices = new PortAudioDevices();


for (node = params; node; node = jack_slist_next(node)) {
for (node = params; node; node = jack_slist_next(node))
{
param = (const jack_driver_param_t *) node->data; param = (const jack_driver_param_t *) node->data;


switch (param->character) {
switch (param->character)
{

case 'd':
capture_pcm_name = strdup(param->value.str);
playback_pcm_name = strdup(param->value.str);
break;

case 'D':
capture = TRUE;
playback = TRUE;
break;


case 'd':
case 'c':
chan_in = chan_out = (int) param->value.ui;
break;

case 'i':
chan_in = (int) param->value.ui;
break;

case 'o':
chan_out = (int) param->value.ui;
break;

case 'C':
capture = TRUE;
if (strcmp(param->value.str, "none") != 0)
{
capture_pcm_name = strdup(param->value.str); capture_pcm_name = strdup(param->value.str);
}
break;

case 'P':
playback = TRUE;
if (strcmp(param->value.str, "none") != 0)
{
playback_pcm_name = strdup(param->value.str); playback_pcm_name = strdup(param->value.str);
break;

case 'D':
capture = TRUE;
playback = TRUE;
break;

case 'c':
chan_in = chan_out = (int) param->value.ui;
break;

case 'i':
chan_in = (int) param->value.ui;
break;

case 'o':
chan_out = (int) param->value.ui;
break;

case 'C':
capture = TRUE;
if (strcmp(param->value.str, "none") != 0) {
capture_pcm_name = strdup(param->value.str);
}
break;

case 'P':
playback = TRUE;
if (strcmp(param->value.str, "none") != 0) {
playback_pcm_name = strdup(param->value.str);
}
break;

case 'm':
monitor = param->value.i;
break;

case 'r':
srate = param->value.ui;
break;

case 'p':
frames_per_interrupt = (unsigned int) param->value.ui;
break;

case 'I':
systemic_input_latency = param->value.ui;
break;

case 'O':
systemic_output_latency = param->value.ui;
break;

case 'l':
Jack::DisplayDeviceNames();
break;
}
break;

case 'm':
monitor = param->value.i;
break;

case 'r':
srate = param->value.ui;
break;

case 'p':
frames_per_interrupt = (unsigned int) param->value.ui;
break;

case 'I':
systemic_input_latency = param->value.ui;
break;

case 'O':
systemic_output_latency = param->value.ui;
break;

case 'l':
pa_devices->DisplayDevicesNames();
break;
} }
} }


// duplex is the default // duplex is the default
if (!capture && !playback) {
if (!capture && !playback)
{
capture = TRUE; capture = TRUE;
playback = TRUE; playback = TRUE;
} }


Jack::JackDriverClientInterface* driver = new Jack::JackPortAudioDriver("system", "portaudio", engine, table);
if (driver->Open(frames_per_interrupt, srate, capture, playback, chan_in, chan_out, monitor, capture_pcm_name, playback_pcm_name, systemic_input_latency, systemic_output_latency) == 0) {
Jack::JackDriverClientInterface* driver = new Jack::JackPortAudioDriver("system", "portaudio", engine, table, pa_devices);
if (driver->Open(frames_per_interrupt, srate, capture, playback, chan_in, chan_out, monitor, capture_pcm_name, playback_pcm_name, systemic_input_latency, systemic_output_latency) == 0)
{
return driver; return driver;
} else {
}
else
{
delete driver; delete driver;
return NULL; return NULL;
} }


+ 6
- 7
windows/JackPortAudioDriver.h View File

@@ -21,7 +21,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#define __JackPortAudioDriver__ #define __JackPortAudioDriver__


#include "JackAudioDriver.h" #include "JackAudioDriver.h"
#include "portaudio.h"
#include "JackPortAudioDevices.h"


namespace Jack namespace Jack
{ {
@@ -35,16 +35,13 @@ class JackPortAudioDriver : public JackAudioDriver


private: private:


PortAudioDevices* fPaDevices;
PaStream* fStream; PaStream* fStream;
float** fInputBuffer; float** fInputBuffer;
float** fOutputBuffer; float** fOutputBuffer;
PaDeviceIndex fInputDevice; PaDeviceIndex fInputDevice;
PaDeviceIndex fOutputDevice; PaDeviceIndex fOutputDevice;


void PrintSupportedStandardSampleRates(const PaStreamParameters* inputParameters, const PaStreamParameters* outputParameters);
bool GetInputDeviceFromName(const char* name, PaDeviceIndex* device, int* in_max);
bool GetOutputDeviceFromName(const char* name, PaDeviceIndex* device, int* out_max);

static int Render(const void* inputBuffer, void* outputBuffer, static int Render(const void* inputBuffer, void* outputBuffer,
unsigned long framesPerBuffer, unsigned long framesPerBuffer,
const PaStreamCallbackTimeInfo* timeInfo, const PaStreamCallbackTimeInfo* timeInfo,
@@ -53,10 +50,12 @@ class JackPortAudioDriver : public JackAudioDriver


public: public:


JackPortAudioDriver(const char* name, const char* alias, JackLockedEngine* engine, JackSynchro* table)
JackPortAudioDriver(const char* name, const char* alias, JackLockedEngine* engine, JackSynchro* table, PortAudioDevices* pa_devices)
: JackAudioDriver(name, alias, engine, table), fStream(NULL), fInputBuffer(NULL), fOutputBuffer(NULL), : JackAudioDriver(name, alias, engine, table), fStream(NULL), fInputBuffer(NULL), fOutputBuffer(NULL),
fInputDevice(paNoDevice), fOutputDevice(paNoDevice) fInputDevice(paNoDevice), fOutputDevice(paNoDevice)
{}
{
fPaDevices = pa_devices;
}


virtual ~JackPortAudioDriver() virtual ~JackPortAudioDriver()
{} {}


+ 5
- 0
windows/JackWinNamedPipe.cpp View File

@@ -364,6 +364,11 @@ int JackWinAsyncNamedPipeServer::Bind(const char* dir, const char* name, int whi
} }
} }


bool JackWinAsyncNamedPipeServer::Accept()
{
return false;
}

JackWinNamedPipeClient* JackWinAsyncNamedPipeServer::AcceptClient() JackWinNamedPipeClient* JackWinAsyncNamedPipeServer::AcceptClient()
{ {
if (ConnectNamedPipe(fNamedPipe, NULL)) { if (ConnectNamedPipe(fNamedPipe, NULL)) {


+ 54
- 0
windows/Readme.txt View File

@@ -0,0 +1,54 @@
-------------------------------
Jackmp on windows
-------------------------------
This folder contains all the windows specific sources.
You will also find two sets of files :
- VisualC++6 workspace and project files, in order to compile Jack with MSVC
- Code::Blocks (8.02) workspace and project files, in order to compile Jack with MingW
The built binaries will be located in '/Release/bin' (or '/Debug/bin' if you build the Debug target). Once compiled, you'll find there everything you need :
- the two 'libjackmp.dll' and 'libjackservermp.dll', client and server jack libraries
- the 'jackdmp.exe', main application : the jack server
- the 'jack_xxx.exe' utilities and examples
- in the jackmp directory, you'll find the driver's DLL's ('jack_portaudio.dll' and 'jack_netdriver.dll') and some tools ( 'netmanager.dll' for example )
In Code::Blocks all the projects are automatically built in a correct order (dll's then apps) by doing 'build->build workspace'.
In VC6, you'll have to build the projects one by one.
-------------------------------
Notes about VC and GCC versions
-------------------------------
The Visual Studio workspace is limited to VC6. Jack will not compile on most recent MSVC's. The fact is recent compilers (MSVC7, 8 or 9) don't agree with some of the Jack sources.
But now you can compile Jack using GCC, with MingW.
The project is actually organized in a Code::Blocks workspace. This is a simple and efficient way to compile the whole project.
But for some reasons, you need to compile Jack using a SJLJ version of G++ (available on MingW website).
Current GCC/G++ version (3.4.5) doesn't includes SJLJ so you'll have to use another one.
Jack needs the use of SJLJ exceptions instead of DW2 because exceptions are exchanged between DLL's, and DW2 does not allow to throw an exception out of a DLL, so it wouldn't be cought.
The ressources files has been created with ResEdit (ANSI build). VisualStudio uses 'ressource.rc' and 'ressource_vc.h'. The other files are used by MingW.
You can make a small installer ('setup.exe') with CreateInstallFree, a little freeware. For this you have the little script 'jack.ci'.The installer contains everything jack needs to be intagreted in windows (including register entries and shortcuts).
A binary version of qjackctl is also included.
-------------------------------
Running Jack on windows
-------------------------------
You can use two drivers : PortAudio and NetDriver.
The PortAudio backend allow the use of many soundcards, using ASIO or WMME drivers (any ASIO driver can be seen by PortAudio).
The NetDriver allow you to use NetJack2 on windows. Thus you can easily exchange midi and audio streams bitween computers (Linux, MacOSX or Windows).
In both cases, you have to use the minimalist :
'jackdmp -R -S -d ...'
command. With PortAudio, you can have a list of supported drivers with :
'jackdmp -R -S -d portaudio -l'
Other options still stay the same.
You can also pick a binary of Qjackctl, but this is still in development.
More information at : 'http://www.grame.fr/~letz/jackdmp.html'.
For any question or suggestion, you can refer to the mailing list 'jack-devel@jackaudio.org'
Enjoy Jack on windows... ;-)

BIN
windows/Release/bin/JackRouter.dll View File


+ 7
- 0
windows/Release/bin/JackRouter.ini View File

@@ -0,0 +1,7 @@
[IO]
input=4
output=4
[AUTO_CONNECT]
input=1
output=1

BIN
windows/Release/bin/libsamplerate-0.dll View File


BIN
windows/Release/bin/portaudio_x86.dll View File


+ 8
- 0
windows/Setup/Readme.txt View File

@@ -0,0 +1,8 @@
This folder contains a script to create an installer for windows.
It uses 'CreateInstaller Free', a little software allowing to make simple installers.
You can use the 'jack.ci' script to make the installer. For that, you need to build the Code::Blocks workspace in order to have '.exe' and libraries. You also need 'qjackctl' binaries and libraries ('qjackctl.exe', 'mingwm10.dll', 'QtCore4.dll', 'QtGui.dll' and 'QtXml4.dll'). You can recompile qjackctl with qt4 or directly get the binaries. The five files are expected in the 'qjackctl' folder.
Once all binaries available, just execute the script in 'CreateInstall' to make 'setup.exe'.
The setup will copy all binaries to a specified folder, register the JackRouter (in order to have it in the ASIO drivers list) and create some shortcuts in the start menu.
It's a good and proper way to get jack installed on windows.

+ 126
- 0
windows/Setup/jack.ci View File

@@ -0,0 +1,126 @@
<*project
version = 4 civer = "Free v4.14.3" winver = "2.6/5.1.2600" >
<output> .</>
<exename> Jack_v1.90_setup.exe</>
<digitsign> </>
<appname> Jack v1.90</>
<password> </>
<addlang> </>
<icon> Default - 2</>
<selfextr> 1</>
<voltype> nolimit</>
<volsize> </>
<volpattern> disk%i.pak</>
<load> </>
<loadtime> 1000</>
<checktype> admin</>
<chkname> </>
<chkmsg> </>
<dlgfont> Verdana,8</>
<lang> English</>
<theme> Green</>
<iface> leftlogo</>
<leftlogo> .\src\logo_installer.bmp</>
<logo> </>
<vb> </>
<dao> </>
<background> 0</>
<dlgwelcome> 1</>
<dlgreadme> .\src\readme_installer.txt</>
<dlglic> .\src\gpl_installer.rtf</>
<dlgcustpath> </>
<dlgenfpath> 0</>
<dlgsavepath> 1</>
<dlgautoprog> 1</>
<dlgfinish> 1</>
<comptype> ppmdmax</>
<solid> 1</>
<srcfolder> </>
<ifexist> overnewer</>
<runafter> </>
<runconfirm> 0</>
<uninclude> 1</>
<unicon> Uninstall - 2</>
<unshortcut> 1</>
<unrun> </>
<silent> 0</>
<unfeed> </>
<unautoclose> 1</>
<unfinish> 1</>
<bl> My Demo</>
<blurl> </>
<bghead> </>
<bgfoot> </>
<bgback> </>
<files listview >
<_><src>..\Release\bin\libjackmp.a</><dest>inst</><custom>\lib</><ifexist>overnewer</><recurs>0</></>
<_><src>..\Release\bin\libjackservermp.a</><dest>inst</><custom>\lib</><ifexist>overnewer</><recurs>0</></>
<_><src>..\Release\bin\jack_connect.exe</><dest>inst</><custom></><ifexist>overnewer</><recurs>0</></>
<_><src>..\Release\bin\jack_disconnect.exe</><dest>inst</><custom></><ifexist>overnewer</><recurs>0</></>
<_><src>..\Release\bin\jack_load.exe</><dest>inst</><custom></><ifexist>overnewer</><recurs>0</></>
<_><src>..\Release\bin\jack_lsp.exe</><dest>inst</><custom></><ifexist>overnewer</><recurs>0</></>
<_><src>..\Release\bin\jack_metro.exe</><dest>inst</><custom></><ifexist>overnewer</><recurs>0</></>
<_><src>..\Release\bin\jack_unload.exe</><dest>inst</><custom></><ifexist>overnewer</><recurs>0</></>
<_><src>..\Release\bin\jackdmp.exe</><dest>inst</><custom></><ifexist>overnewer</><recurs>0</></>
<_><src>..\Release\bin\JackRouter.dll</><dest>inst</><custom></><ifexist>overnewer</><recurs>0</></>
<_><src>..\Release\bin\JackRouter.ini</><dest>inst</><custom></><ifexist>overnewer</><recurs>0</></>
<_><src>..\Release\bin\libjackmp.dll</><dest>inst</><custom></><ifexist>overnewer</><recurs>0</></>
<_><src>..\Release\bin\libjackservermp.dll</><dest>inst</><custom></><ifexist>overnewer</><recurs>0</></>
<_><src>..\Release\bin\libsamplerate-0.dll</><dest>inst</><custom></><ifexist>overnewer</><recurs>0</></>
<_><src>..\Release\bin\portaudio_x86.dll</><dest>inst</><custom></><ifexist>overnewer</><recurs>0</></>
<_><src>..\Release\bin\jackmp\jack_net.dll</><dest>inst</><custom>\jackmp</><ifexist>overnewer</><recurs>0</></>
<_><src>..\Release\bin\jackmp\jack_portaudio.dll</><dest>inst</><custom>\jackmp</><ifexist>overnewer</><recurs>0</></>
<_><src>..\Release\bin\jackmp\netmanager.dll</><dest>inst</><custom>\jackmp</><ifexist>overnewer</><recurs>0</></>
<_><src>..\Release\bin\jackmp\audioadapter.dll</><dest>inst</><custom>\jackmp</><ifexist>overnewer</><recurs>0</></>
<_><src>..\..\common\jack\control.h</><dest>inst</><custom>\includes\jack</><ifexist>overnewer</><recurs>0</></>
<_><src>..\..\common\jack\intclient.h</><dest>inst</><custom>\includes\jack</><ifexist>overnewer</><recurs>0</></>
<_><src>..\..\common\jack\jack.h</><dest>inst</><custom>\includes\jack</><ifexist>overnewer</><recurs>0</></>
<_><src>..\..\common\jack\jslist.h</><dest>inst</><custom>\includes\jack</><ifexist>overnewer</><recurs>0</></>
<_><src>..\..\common\jack\midiport.h</><dest>inst</><custom>\includes\jack</><ifexist>overnewer</><recurs>0</></>
<_><src>..\..\common\jack\ringbuffer.h</><dest>inst</><custom>\includes\jack</><ifexist>overnewer</><recurs>0</></>
<_><src>..\..\common\jack\statistics.h</><dest>inst</><custom>\includes\jack</><ifexist>overnewer</><recurs>0</></>
<_><src>..\..\common\jack\thread.h</><dest>inst</><custom>\includes\jack</><ifexist>overnewer</><recurs>0</></>
<_><src>..\..\common\jack\transport.h</><dest>inst</><custom>\includes\jack</><ifexist>overnewer</><recurs>0</></>
<_><src>..\..\common\jack\types.h</><dest>inst</><custom>\includes\jack</><ifexist>overnewer</><recurs>0</></>
<_><src>.\qjackctl\mingwm10.dll</><dest>inst</><custom></><ifexist>overnewer</><recurs>0</></>
<_><src>.\qjackctl\qjackctl.exe</><dest>inst</><custom></><ifexist>overnewer</><recurs>0</></>
<_><src>.\qjackctl\QtCore4.dll</><dest>inst</><custom></><ifexist>overnewer</><recurs>0</></>
<_><src>.\qjackctl\QtGui4.dll</><dest>inst</><custom></><ifexist>overnewer</><recurs>0</></>
<_><src>.\qjackctl\QtXml4.dll</><dest>inst</><custom></><ifexist>overnewer</><recurs>0</></>
<_><src>.\src\COPYING</><dest>inst</><custom></><ifexist>overnewer</><recurs>0</></>
</files>
<runx listview >
</runx>
<registry listview >
</registry>
<shcut listview >
<_><shpath>prog</><shname>Jack NetDriver</><tarpath>inst</><tarname>jackdmp.exe</><cmdline>-R -S -d net</><workpath>inst</><workcust></><icon></></>
<_><shpath>prog</><shname>Jack Portaudio</><tarpath>inst</><tarname>jackdmp.exe</><cmdline>-R -S -d portaudio</><workpath>inst</><workcust></><icon></></>
<_><shpath>prog</><shname>Jack Control</><tarpath>inst</><tarname>qjackctl.exe</><cmdline></><workpath>inst</><workcust></><icon>jackdmp.exe</></>
<_><shpath>prog</><shname>Jack Command</><tarpath>sys</><tarname>cmd.exe</><cmdline></><workpath>inst</><workcust></><icon></></>
</shcut>
<ini listview >
</ini>
<copy listview >
</copy>
<activex listview >
<_><path>inst</><name>JackRouter.dll</></>
</activex>
<font listview >
</font>
<ext listview >
</ext>
<mreg listview >
</mreg>
<macros> Pathadd=</>
</project>

+ 674
- 0
windows/Setup/src/COPYING View File

@@ -0,0 +1,674 @@
GNU GENERAL PUBLIC LICENSE
Version 3, 29 June 2007

Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.

Preamble

The GNU General Public License is a free, copyleft license for
software and other kinds of works.

The licenses for most software and other practical works are designed
to take away your freedom to share and change the works. By contrast,
the GNU General Public License is intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users. We, the Free Software Foundation, use the
GNU General Public License for most of our software; it applies also to
any other work released this way by its authors. You can apply it to
your programs, too.

When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.

To protect your rights, we need to prevent others from denying you
these rights or asking you to surrender the rights. Therefore, you have
certain responsibilities if you distribute copies of the software, or if
you modify it: responsibilities to respect the freedom of others.

For example, if you distribute copies of such a program, whether
gratis or for a fee, you must pass on to the recipients the same
freedoms that you received. You must make sure that they, too, receive
or can get the source code. And you must show them these terms so they
know their rights.

Developers that use the GNU GPL protect your rights with two steps:
(1) assert copyright on the software, and (2) offer you this License
giving you legal permission to copy, distribute and/or modify it.

For the developers' and authors' protection, the GPL clearly explains
that there is no warranty for this free software. For both users' and
authors' sake, the GPL requires that modified versions be marked as
changed, so that their problems will not be attributed erroneously to
authors of previous versions.

Some devices are designed to deny users access to install or run
modified versions of the software inside them, although the manufacturer
can do so. This is fundamentally incompatible with the aim of
protecting users' freedom to change the software. The systematic
pattern of such abuse occurs in the area of products for individuals to
use, which is precisely where it is most unacceptable. Therefore, we
have designed this version of the GPL to prohibit the practice for those
products. If such problems arise substantially in other domains, we
stand ready to extend this provision to those domains in future versions
of the GPL, as needed to protect the freedom of users.

Finally, every program is threatened constantly by software patents.
States should not allow patents to restrict development and use of
software on general-purpose computers, but in those that do, we wish to
avoid the special danger that patents applied to a free program could
make it effectively proprietary. To prevent this, the GPL assures that
patents cannot be used to render the program non-free.

The precise terms and conditions for copying, distribution and
modification follow.

TERMS AND CONDITIONS

0. Definitions.

"This License" refers to version 3 of the GNU General Public License.

"Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.

"The Program" refers to any copyrightable work licensed under this
License. Each licensee is addressed as "you". "Licensees" and
"recipients" may be individuals or organizations.

To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy. The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.

A "covered work" means either the unmodified Program or a work based
on the Program.

To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy. Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.

To "convey" a work means any kind of propagation that enables other
parties to make or receive copies. Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.

An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License. If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.

1. Source Code.

The "source code" for a work means the preferred form of the work
for making modifications to it. "Object code" means any non-source
form of a work.

A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.

The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form. A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.

The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities. However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work. For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.

The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.

The Corresponding Source for a work in source code form is that
same work.

2. Basic Permissions.

All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met. This License explicitly affirms your unlimited
permission to run the unmodified Program. The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work. This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.

You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force. You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright. Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.

Conveying under any other circumstances is permitted solely under
the conditions stated below. Sublicensing is not allowed; section 10
makes it unnecessary.

3. Protecting Users' Legal Rights From Anti-Circumvention Law.

No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.

When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.

4. Conveying Verbatim Copies.

You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.

You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.

5. Conveying Modified Source Versions.

You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:

a) The work must carry prominent notices stating that you modified
it, and giving a relevant date.

b) The work must carry prominent notices stating that it is
released under this License and any conditions added under section
7. This requirement modifies the requirement in section 4 to
"keep intact all notices".

c) You must license the entire work, as a whole, under this
License to anyone who comes into possession of a copy. This
License will therefore apply, along with any applicable section 7
additional terms, to the whole of the work, and all its parts,
regardless of how they are packaged. This License gives no
permission to license the work in any other way, but it does not
invalidate such permission if you have separately received it.

d) If the work has interactive user interfaces, each must display
Appropriate Legal Notices; however, if the Program has interactive
interfaces that do not display Appropriate Legal Notices, your
work need not make them do so.

A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit. Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.

6. Conveying Non-Source Forms.

You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:

a) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by the
Corresponding Source fixed on a durable physical medium
customarily used for software interchange.

b) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by a
written offer, valid for at least three years and valid for as
long as you offer spare parts or customer support for that product
model, to give anyone who possesses the object code either (1) a
copy of the Corresponding Source for all the software in the
product that is covered by this License, on a durable physical
medium customarily used for software interchange, for a price no
more than your reasonable cost of physically performing this
conveying of source, or (2) access to copy the
Corresponding Source from a network server at no charge.

c) Convey individual copies of the object code with a copy of the
written offer to provide the Corresponding Source. This
alternative is allowed only occasionally and noncommercially, and
only if you received the object code with such an offer, in accord
with subsection 6b.

d) Convey the object code by offering access from a designated
place (gratis or for a charge), and offer equivalent access to the
Corresponding Source in the same way through the same place at no
further charge. You need not require recipients to copy the
Corresponding Source along with the object code. If the place to
copy the object code is a network server, the Corresponding Source
may be on a different server (operated by you or a third party)
that supports equivalent copying facilities, provided you maintain
clear directions next to the object code saying where to find the
Corresponding Source. Regardless of what server hosts the
Corresponding Source, you remain obligated to ensure that it is
available for as long as needed to satisfy these requirements.

e) Convey the object code using peer-to-peer transmission, provided
you inform other peers where the object code and Corresponding
Source of the work are being offered to the general public at no
charge under subsection 6d.

A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.

A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling. In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage. For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product. A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.

"Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source. The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.

If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information. But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).

The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed. Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.

Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.

7. Additional Terms.

"Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law. If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.

When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it. (Additional permissions may be written to require their own
removal in certain cases when you modify the work.) You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.

Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:

a) Disclaiming warranty or limiting liability differently from the
terms of sections 15 and 16 of this License; or

b) Requiring preservation of specified reasonable legal notices or
author attributions in that material or in the Appropriate Legal
Notices displayed by works containing it; or

c) Prohibiting misrepresentation of the origin of that material, or
requiring that modified versions of such material be marked in
reasonable ways as different from the original version; or

d) Limiting the use for publicity purposes of names of licensors or
authors of the material; or

e) Declining to grant rights under trademark law for use of some
trade names, trademarks, or service marks; or

f) Requiring indemnification of licensors and authors of that
material by anyone who conveys the material (or modified versions of
it) with contractual assumptions of liability to the recipient, for
any liability that these contractual assumptions directly impose on
those licensors and authors.

All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10. If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term. If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.

If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.

Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.

8. Termination.

You may not propagate or modify a covered work except as expressly
provided under this License. Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).

However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.

Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.

Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License. If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.

9. Acceptance Not Required for Having Copies.

You are not required to accept this License in order to receive or
run a copy of the Program. Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance. However,
nothing other than this License grants you permission to propagate or
modify any covered work. These actions infringe copyright if you do
not accept this License. Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.

10. Automatic Licensing of Downstream Recipients.

Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License. You are not responsible
for enforcing compliance by third parties with this License.

An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations. If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.

You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License. For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.

11. Patents.

A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based. The
work thus licensed is called the contributor's "contributor version".

A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version. For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.

Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.

In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement). To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.

If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients. "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.

If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.

A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License. You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.

Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.

12. No Surrender of Others' Freedom.

If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all. For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.

13. Use with the GNU Affero General Public License.

Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU Affero General Public License into a single
combined work, and to convey the resulting work. The terms of this
License will continue to apply to the part which is the covered work,
but the special requirements of the GNU Affero General Public License,
section 13, concerning interaction through a network will apply to the
combination as such.

14. Revised Versions of this License.

The Free Software Foundation may publish revised and/or new versions of
the GNU General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.

Each version is given a distinguishing version number. If the
Program specifies that a certain numbered version of the GNU General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation. If the Program does not specify a version number of the
GNU General Public License, you may choose any version ever published
by the Free Software Foundation.

If the Program specifies that a proxy can decide which future
versions of the GNU General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.

Later license versions may give you additional or different
permissions. However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.

15. Disclaimer of Warranty.

THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.

16. Limitation of Liability.

IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.

17. Interpretation of Sections 15 and 16.

If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.

END OF TERMS AND CONDITIONS

How to Apply These Terms to Your New Programs

If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.

To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.

<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.

Also add information on how to contact you by electronic and paper mail.

If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:

<program> Copyright (C) <year> <name of author>
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.

The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, your program's commands
might be different; for a GUI interface, you would use an "about box".

You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU GPL, see
<http://www.gnu.org/licenses/>.

The GNU General Public License does not permit incorporating your program
into proprietary programs. If your program is a subroutine library, you
may consider it more useful to permit linking proprietary applications with
the library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License. But first, please read
<http://www.gnu.org/philosophy/why-not-lgpl.html>.

BIN
windows/Setup/src/gpl_installer.rtf View File


BIN
windows/Setup/src/jack.ico View File

Before After

BIN
windows/Setup/src/logo_installer.bmp View File

Before After

+ 13
- 0
windows/Setup/src/readme_installer.txt View File

@@ -0,0 +1,13 @@
To launch Jack with default drivers, start 'Jack Portaudio' or 'Jack NetDriver'.
Once Jack Server Started, you can launch QJackctl with the 'Jack Control' shortcut.
'Jack Command' starts a terminal from your installation folder. You can get a list of available Portaudio drivers with :
'jackdmp -d portaudio -l'
And then just launch :
'jackdmp -R -S -d portaudio -d "your driver's name"
More options with 'jackdmp'.
To use the Jack Router, just select the 'JackRouter' asio driver in your audio software.

+ 1
- 1
windows/getopt1.c View File

@@ -66,7 +66,7 @@
int int
getopt_long (argc, argv, options, long_options, opt_index) getopt_long (argc, argv, options, long_options, opt_index)
int argc; int argc;
char *const *argv;
char **argv;
const char *options; const char *options;
const struct option *long_options; const struct option *long_options;
int *opt_index; int *opt_index;


+ 98
- 0
windows/jack_audioadapter.cbp View File

@@ -0,0 +1,98 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<CodeBlocks_project_file>
<FileVersion major="1" minor="6" />
<Project>
<Option title="jack_audioadapter" />
<Option pch_mode="2" />
<Option compiler="gcc" />
<Build>
<Target title="Win32 Release">
<Option output="Release\bin\jackmp\audioadapter" prefix_auto="1" extension_auto="1" />
<Option object_output="Release\" />
<Option type="3" />
<Option compiler="gcc" />
<Compiler>
<Add option="-O2" />
<Add option="-Wall" />
<Add option="-DBUILD_DLL" />
<Add option="-D__SMP__" />
<Add directory="..\common" />
<Add directory="..\common\jack" />
<Add directory="..\windows" />
</Compiler>
<Linker>
<Add library="kernel32" />
<Add library="user32" />
<Add library="gdi32" />
<Add library="winspool" />
<Add library="comdlg32" />
<Add library="advapi32" />
<Add library="shell32" />
<Add library="ole32" />
<Add library="oleaut32" />
<Add library="uuid" />
<Add library="odbc32" />
<Add library="odbccp32" />
<Add library="portaudio_x86" />
<Add library="libsamplerate-0" />
<Add library="libjackservermp" />
<Add directory="Release\bin" />
</Linker>
</Target>
<Target title="Win32 Debug">
<Option output="Debug\bin\jackmp\netioadapter" prefix_auto="1" extension_auto="1" />
<Option object_output="Debug\" />
<Option type="3" />
<Option compiler="gcc" />
<Option createDefFile="1" />
<Option createStaticLib="1" />
<Compiler>
<Add option="-Wall" />
<Add option="-g" />
<Add option="-DBUILD_DLL" />
<Add directory="..\common" />
<Add directory="..\common\jack" />
<Add directory="..\windows" />
</Compiler>
<Linker>
<Add library="user32" />
<Add library="kernel32" />
<Add library="gdi32" />
<Add library="winspool" />
<Add library="comdlg32" />
<Add library="advapi32" />
<Add library="shell32" />
<Add library="ole32" />
<Add library="oleaut32" />
<Add library="uuid" />
<Add library="odbc32" />
<Add library="odbccp32" />
<Add library="portaudio_x86" />
<Add library="libsamplerate" />
<Add library="libjackservermp" />
<Add library="libsamplerate-0" />
<Add directory="Release\bin" />
</Linker>
</Target>
</Build>
<Unit filename="..\common\JackAudioAdapter.cpp" />
<Unit filename="..\common\JackAudioAdapterInterface.cpp" />
<Unit filename="..\common\JackCallbackAudioAdapter.cpp" />
<Unit filename="..\common\JackLibSampleRateResampler.cpp" />
<Unit filename="..\common\JackResampler.cpp" />
<Unit filename="JackPortAudioAdapter.cpp" />
<Unit filename="jackaudioadapter.rc">
<Option compilerVar="WINDRES" />
</Unit>
<Extensions>
<AutoVersioning>
<Scheme minor_max="10" build_max="0" rev_max="0" rev_rand_max="10" build_times_to_increment_minor="100" />
<Settings autoincrement="1" date_declarations="1" do_auto_increment="0" ask_to_increment="0" language="C++" svn="0" svn_directory="" header_path="version.h" />
<Changes_Log show_changes_editor="0" app_title="released version %M.%m.%b of %p" changeslog_path="ChangesLog.txt" />
</AutoVersioning>
<code_completion />
<envvars />
<debugger />
</Extensions>
</Project>
</CodeBlocks_project_file>

+ 90
- 0
windows/jack_connect.cbp View File

@@ -0,0 +1,90 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<CodeBlocks_project_file>
<FileVersion major="1" minor="6" />
<Project>
<Option title="jack_connect" />
<Option pch_mode="2" />
<Option compiler="gcc" />
<Build>
<Target title="Win32 Release">
<Option output="Release\bin\jack_connect" prefix_auto="1" extension_auto="1" />
<Option object_output="Release\" />
<Option type="1" />
<Option compiler="gcc" />
<Compiler>
<Add option="-O2" />
<Add option="-Wall" />
<Add directory="..\common" />
<Add directory="..\common\jack" />
<Add directory="..\example-clients" />
</Compiler>
<Linker>
<Add library="kernel32" />
<Add library="user32" />
<Add library="gdi32" />
<Add library="winspool" />
<Add library="comdlg32" />
<Add library="advapi32" />
<Add library="shell32" />
<Add library="ole32" />
<Add library="oleaut32" />
<Add library="uuid" />
<Add library="odbc32" />
<Add library="odbccp32" />
<Add library="libjackmp" />
<Add directory="Release\bin" />
</Linker>
</Target>
<Target title="Win32 Debug">
<Option output="Debug\bin\jack_connect" prefix_auto="1" extension_auto="1" />
<Option object_output="Debug\" />
<Option type="1" />
<Option compiler="gcc" />
<Compiler>
<Add option="-Wall" />
<Add option="-g" />
<Add directory="..\windows" />
<Add directory="..\example-clients" />
</Compiler>
<Linker>
<Add library="kernel32" />
<Add library="user32" />
<Add library="gdi32" />
<Add library="winspool" />
<Add library="comdlg32" />
<Add library="advapi32" />
<Add library="shell32" />
<Add library="ole32" />
<Add library="oleaut32" />
<Add library="uuid" />
<Add library="odbc32" />
<Add library="odbccp32" />
<Add library="libjackmp" />
<Add directory="Release\bin" />
</Linker>
</Target>
</Build>
<Compiler>
<Add option="-Wall" />
</Compiler>
<Unit filename="..\example-clients\connect.c">
<Option compilerVar="CC" />
</Unit>
<Unit filename="getopt.c">
<Option compilerVar="CC" />
</Unit>
<Unit filename="getopt1.c">
<Option compilerVar="CC" />
</Unit>
<Extensions>
<code_completion />
<debugger />
<AutoVersioning>
<Scheme minor_max="10" build_max="0" rev_max="0" rev_rand_max="10" build_times_to_increment_minor="100" />
<Settings autoincrement="1" date_declarations="1" do_auto_increment="0" ask_to_increment="0" language="C++" svn="0" svn_directory="" header_path="version.h" />
<Changes_Log show_changes_editor="0" app_title="released version %M.%m.%b of %p" changeslog_path="ChangesLog.txt" />
</AutoVersioning>
<envvars />
</Extensions>
</Project>
</CodeBlocks_project_file>

+ 7
- 10
windows/jack_connect.dsp View File

@@ -37,8 +37,9 @@ RSC=rc.exe
# PROP BASE Target_Dir "" # PROP BASE Target_Dir ""
# PROP Use_MFC 0 # PROP Use_MFC 0
# PROP Use_Debug_Libraries 0 # PROP Use_Debug_Libraries 0
# PROP Output_Dir "Release"
# PROP Intermediate_Dir "Release"
# PROP Output_Dir "./Release"
# PROP Intermediate_Dir "./Release"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir "" # PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c # ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD CPP /nologo /MD /W3 /GX /O2 /I "../common/" /I "." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c # ADD CPP /nologo /MD /W3 /GX /O2 /I "../common/" /I "." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
@@ -49,7 +50,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo # ADD BSC32 /nologo
LINK32=link.exe LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 /libpath:"./Release" /libpath:"./Release/bin"
!ELSEIF "$(CFG)" == "jack_connect - Win32 Debug" !ELSEIF "$(CFG)" == "jack_connect - Win32 Debug"
@@ -60,8 +61,8 @@ LINK32=link.exe
# PROP BASE Target_Dir "" # PROP BASE Target_Dir ""
# PROP Use_MFC 0 # PROP Use_MFC 0
# PROP Use_Debug_Libraries 1 # PROP Use_Debug_Libraries 1
# PROP Output_Dir "Debug"
# PROP Intermediate_Dir "Debug"
# PROP Output_Dir "./Debug"
# PROP Intermediate_Dir "./Debug"
# PROP Ignore_Export_Lib 0 # PROP Ignore_Export_Lib 0
# PROP Target_Dir "" # PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c # ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
@@ -73,7 +74,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo # ADD BSC32 /nologo
LINK32=link.exe LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /out:"./Debug/bin/jack_connect.exe" /pdbtype:sept /libpath:"./Debug" /libpath:"./Debug/bin"
!ENDIF !ENDIF
@@ -105,9 +106,5 @@ SOURCE=.\getopt1.c
# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" # PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
# End Group # End Group
# Begin Source File
SOURCE=.\Release\libjackmp.lib
# End Source File
# End Target # End Target
# End Project # End Project

+ 91
- 0
windows/jack_disconnect.cbp View File

@@ -0,0 +1,91 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<CodeBlocks_project_file>
<FileVersion major="1" minor="6" />
<Project>
<Option title="jack_disconnect" />
<Option pch_mode="2" />
<Option compiler="gcc" />
<Build>
<Target title="Win32 Release">
<Option output="Release\bin\jack_disconnect" prefix_auto="1" extension_auto="1" />
<Option object_output="Release\" />
<Option type="1" />
<Option compiler="gcc" />
<Compiler>
<Add option="-O2" />
<Add option="-Wall" />
<Add directory="..\common" />
<Add directory="..\common\jack" />
<Add directory="..\example-clients" />
</Compiler>
<Linker>
<Add library="kernel32" />
<Add library="user32" />
<Add library="gdi32" />
<Add library="winspool" />
<Add library="comdlg32" />
<Add library="advapi32" />
<Add library="shell32" />
<Add library="ole32" />
<Add library="oleaut32" />
<Add library="uuid" />
<Add library="odbc32" />
<Add library="odbccp32" />
<Add library="libjackmp" />
<Add directory="Release\bin" />
</Linker>
</Target>
<Target title="Win32 Debug">
<Option output="Debug\bin\jack_disconnect" prefix_auto="1" extension_auto="1" />
<Option object_output="Debug\" />
<Option type="1" />
<Option compiler="gcc" />
<Compiler>
<Add option="-Wall" />
<Add option="-g" />
<Add directory="..\common" />
<Add directory="..\common\jack" />
<Add directory="..\example-clients" />
</Compiler>
<Linker>
<Add library="kernel32" />
<Add library="user32" />
<Add library="gdi32" />
<Add library="winspool" />
<Add library="comdlg32" />
<Add library="advapi32" />
<Add library="shell32" />
<Add library="ole32" />
<Add library="oleaut32" />
<Add library="uuid" />
<Add library="odbc32" />
<Add library="odbccp32" />
<Add library="libjackmp" />
<Add directory="Release\bin" />
</Linker>
</Target>
</Build>
<Compiler>
<Add option="-Wall" />
</Compiler>
<Unit filename="..\example-clients\connect.c">
<Option compilerVar="CC" />
</Unit>
<Unit filename="getopt.c">
<Option compilerVar="CC" />
</Unit>
<Unit filename="getopt1.c">
<Option compilerVar="CC" />
</Unit>
<Extensions>
<code_completion />
<debugger />
<envvars />
<AutoVersioning>
<Scheme minor_max="10" build_max="0" rev_max="0" rev_rand_max="10" build_times_to_increment_minor="100" />
<Settings autoincrement="1" date_declarations="1" do_auto_increment="0" ask_to_increment="0" language="C++" svn="0" svn_directory="" header_path="version.h" />
<Changes_Log show_changes_editor="0" app_title="released version %M.%m.%b of %p" changeslog_path="ChangesLog.txt" />
</AutoVersioning>
</Extensions>
</Project>
</CodeBlocks_project_file>

+ 7
- 10
windows/jack_freeverb.dsp View File

@@ -37,8 +37,9 @@ RSC=rc.exe
# PROP BASE Target_Dir "" # PROP BASE Target_Dir ""
# PROP Use_MFC 0 # PROP Use_MFC 0
# PROP Use_Debug_Libraries 0 # PROP Use_Debug_Libraries 0
# PROP Output_Dir "Release"
# PROP Intermediate_Dir "Release"
# PROP Output_Dir "./Release"
# PROP Intermediate_Dir "./Release"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir "" # PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c # ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I "../common/" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /FR /YX /FD /c # ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I "../common/" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /FR /YX /FD /c
@@ -49,7 +50,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo # ADD BSC32 /nologo
LINK32=link.exe LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib libjackmp.lib /nologo /subsystem:console /machine:I386 /out:"./Release/bin/jack_freeverb.exe" /libpath:"./Release" /libpath:"./Release/bin"
!ELSEIF "$(CFG)" == "jack_freeverb - Win32 Debug" !ELSEIF "$(CFG)" == "jack_freeverb - Win32 Debug"
@@ -60,8 +61,8 @@ LINK32=link.exe
# PROP BASE Target_Dir "" # PROP BASE Target_Dir ""
# PROP Use_MFC 0 # PROP Use_MFC 0
# PROP Use_Debug_Libraries 1 # PROP Use_Debug_Libraries 1
# PROP Output_Dir "Debug"
# PROP Intermediate_Dir "Debug"
# PROP Output_Dir "./Debug"
# PROP Intermediate_Dir "./Debug"
# PROP Ignore_Export_Lib 0 # PROP Ignore_Export_Lib 0
# PROP Target_Dir "" # PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c # ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
@@ -73,7 +74,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo # ADD BSC32 /nologo
LINK32=link.exe LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib libjackmp.lib /nologo /subsystem:console /debug /machine:I386 /out:"./Debug/bin/jack_freeverb.exe" /pdbtype:sept /libpath:"./Debug" /libpath:"./Debug/bin"
!ENDIF !ENDIF
@@ -97,9 +98,5 @@ SOURCE="..\example-clients\freeverb.cpp"
# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" # PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
# End Group # End Group
# Begin Source File
SOURCE=.\Release\libjackmp.lib
# End Source File
# End Target # End Target
# End Project # End Project

+ 86
- 0
windows/jack_load.cbp View File

@@ -0,0 +1,86 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<CodeBlocks_project_file>
<FileVersion major="1" minor="6" />
<Project>
<Option title="jack_load" />
<Option pch_mode="2" />
<Option compiler="gcc" />
<Build>
<Target title="Win32 Release">
<Option output="Release\bin\jack_load" prefix_auto="1" extension_auto="1" />
<Option object_output="Release\" />
<Option type="1" />
<Option compiler="gcc" />
<Compiler>
<Add option="-O2" />
<Add option="-Wall" />
<Add directory="..\example-clients" />
<Add directory="..\common" />
<Add directory="..\common\jack" />
<Add directory="..\windows" />
</Compiler>
<Linker>
<Add library="kernel32" />
<Add library="user32" />
<Add library="gdi32" />
<Add library="winspool" />
<Add library="comdlg32" />
<Add library="advapi32" />
<Add library="shell32" />
<Add library="ole32" />
<Add library="oleaut32" />
<Add library="uuid" />
<Add library="odbc32" />
<Add library="odbccp32" />
<Add library="libjackmp" />
<Add directory="Release\bin" />
</Linker>
</Target>
<Target title="Win32 Debug">
<Option output="Debug\bin\jack_load" prefix_auto="1" extension_auto="1" />
<Option object_output="Debug\" />
<Option type="1" />
<Option compiler="gcc" />
<Compiler>
<Add option="-g" />
<Add directory="..\example-clients" />
<Add directory="..\common" />
<Add directory="..\common\jack" />
<Add directory="..\windows" />
</Compiler>
<Linker>
<Add library="kernel32" />
<Add library="user32" />
<Add library="gdi32" />
<Add library="winspool" />
<Add library="comdlg32" />
<Add library="advapi32" />
<Add library="shell32" />
<Add library="ole32" />
<Add library="oleaut32" />
<Add library="uuid" />
<Add library="odbc32" />
<Add library="odbccp32" />
<Add library="libjackmp" />
<Add directory="Debug\bin" />
</Linker>
</Target>
</Build>
<Compiler>
<Add option="-Wall" />
</Compiler>
<Unit filename="..\example-clients\ipload.c">
<Option compilerVar="CC" />
</Unit>
<Extensions>
<code_completion />
<envvars />
<debugger />
<AutoVersioning>
<Scheme minor_max="10" build_max="0" rev_max="0" rev_rand_max="10" build_times_to_increment_minor="100" />
<Settings autoincrement="1" date_declarations="1" do_auto_increment="0" ask_to_increment="0" language="C++" svn="0" svn_directory="" header_path="version.h" />
<Changes_Log show_changes_editor="0" app_title="released version %M.%m.%b of %p" changeslog_path="ChangesLog.txt" />
</AutoVersioning>
</Extensions>
</Project>
</CodeBlocks_project_file>

+ 110
- 0
windows/jack_load.dsp View File

@@ -0,0 +1,110 @@
# Microsoft Developer Studio Project File - Name="jack_load" - Package Owner=<4>
# Microsoft Developer Studio Generated Build File, Format Version 6.00
# ** DO NOT EDIT **
# TARGTYPE "Win32 (x86) Console Application" 0x0103
CFG=jack_load - Win32 Debug
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
!MESSAGE use the Export Makefile command and run
!MESSAGE
!MESSAGE NMAKE /f "jack_load.mak".
!MESSAGE
!MESSAGE You can specify a configuration when running NMAKE
!MESSAGE by defining the macro CFG on the command line. For example:
!MESSAGE
!MESSAGE NMAKE /f "jack_load.mak" CFG="jack_load - Win32 Debug"
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
!MESSAGE "jack_load - Win32 Release" (based on "Win32 (x86) Console Application")
!MESSAGE "jack_load - Win32 Debug" (based on "Win32 (x86) Console Application")
!MESSAGE
# Begin Project
# PROP AllowPerConfigDependencies 0
# PROP Scc_ProjName ""
# PROP Scc_LocalPath ""
CPP=cl.exe
RSC=rc.exe
!IF "$(CFG)" == "jack_load - Win32 Release"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 0
# PROP BASE Output_Dir "jack_load___Win32_Release"
# PROP BASE Intermediate_Dir "jack_load___Win32_Release"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 0
# PROP Output_Dir "./Release"
# PROP Intermediate_Dir "./Release"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I "../common" /I "../common/jack" /I "../example-clients" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /FR /YX /FD /c
# ADD BASE RSC /l 0x40c /d "NDEBUG"
# ADD RSC /l 0x40c /d "NDEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib libjackmp.lib /nologo /subsystem:console /machine:I386 /out:"./Release/bin/jack_load.exe" /libpath:"./Release" /libpath:"./Release/bin"
!ELSEIF "$(CFG)" == "jack_load - Win32 Debug"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "jack_load___Win32_Debug"
# PROP BASE Intermediate_Dir "jack_load___Win32_Debug"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
# PROP Output_Dir "./Debug"
# PROP Intermediate_Dir "./Debug"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "." /I "../common" /I "../common/jack" /I "../example-clients" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
# ADD BASE RSC /l 0x40c /d "_DEBUG"
# ADD RSC /l 0x40c /d "_DEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib libjackmp.lib /nologo /subsystem:console /debug /machine:I386 /out:"./Debug/bin/jack_load.exe" /pdbtype:sept /libpath:"./Debug" /libpath:"./Debug/bin"
!ENDIF
# Begin Target
# Name "jack_load - Win32 Release"
# Name "jack_load - Win32 Debug"
# Begin Group "Source Files"
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
# Begin Source File
SOURCE=.\getopt.c
# End Source File
# Begin Source File
SOURCE=.\getopt1.c
# End Source File
# Begin Source File
SOURCE="..\example-clients\ipload.c"
# End Source File
# End Group
# Begin Group "Header Files"
# PROP Default_Filter "h;hpp;hxx;hm;inl"
# End Group
# Begin Group "Resource Files"
# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
# End Group
# End Target
# End Project

+ 77
- 0
windows/jack_lsp.cbp View File

@@ -0,0 +1,77 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<CodeBlocks_project_file>
<FileVersion major="1" minor="6" />
<Project>
<Option title="jack_lsp" />
<Option pch_mode="2" />
<Option compiler="gcc" />
<Build>
<Target title="Win32 Release">
<Option output="Release\bin\jack_lsp" prefix_auto="1" extension_auto="1" />
<Option object_output="Release\" />
<Option type="1" />
<Option compiler="gcc" />
<Compiler>
<Add option="-O2" />
<Add option="-Wall" />
<Add directory="..\example-clients" />
<Add directory="..\common" />
<Add directory="..\common\jack" />
</Compiler>
<Linker>
<Add library="kernel32" />
<Add library="user32" />
<Add library="gdi32" />
<Add library="winspool" />
<Add library="comdlg32" />
<Add library="shell32" />
<Add library="ole32" />
<Add library="oleaut32" />
<Add library="uuid" />
<Add library="odbc32" />
<Add library="odbccp32" />
<Add library="libjackmp" />
<Add directory="Release\bin" />
</Linker>
</Target>
<Target title="Win32 Debug">
<Option output="Debug\bin\jack_lsp" prefix_auto="1" extension_auto="1" />
<Option object_output="Debug\" />
<Option type="1" />
<Option compiler="gcc" />
<Compiler>
<Add option="-g" />
<Add directory="..\example-clients" />
<Add directory="..\common" />
<Add directory="..\common\jack" />
</Compiler>
<Linker>
<Add library="kernel32" />
<Add library="user32" />
<Add library="gdi32" />
<Add library="winspool" />
<Add library="comdlg32" />
<Add library="shell32" />
<Add library="ole32" />
<Add library="oleaut32" />
<Add library="uuid" />
<Add library="odbc32" />
<Add library="odbccp32" />
<Add library="libjackmp" />
<Add directory="Debug\bin" />
</Linker>
</Target>
</Build>
<Compiler>
<Add option="-Wall" />
</Compiler>
<Unit filename="..\example-clients\lsp.c">
<Option compilerVar="CC" />
</Unit>
<Extensions>
<code_completion />
<envvars />
<debugger />
</Extensions>
</Project>
</CodeBlocks_project_file>

+ 7
- 32
windows/jack_lsp.dsp View File

@@ -37,8 +37,9 @@ RSC=rc.exe
# PROP BASE Target_Dir "" # PROP BASE Target_Dir ""
# PROP Use_MFC 0 # PROP Use_MFC 0
# PROP Use_Debug_Libraries 0 # PROP Use_Debug_Libraries 0
# PROP Output_Dir "Release"
# PROP Intermediate_Dir "Release"
# PROP Output_Dir "./Release"
# PROP Intermediate_Dir "./Release"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir "" # PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c # ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I "../common/" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /FR /YX /FD /c # ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I "../common/" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /FR /YX /FD /c
@@ -49,7 +50,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo # ADD BSC32 /nologo
LINK32=link.exe LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib libjackmp.lib /nologo /subsystem:console /machine:I386 /out:"./Release/bin/jack_lsp.exe" /libpath:"./Release" /libpath:"./Release/bin"
!ELSEIF "$(CFG)" == "jack_lsp - Win32 Debug" !ELSEIF "$(CFG)" == "jack_lsp - Win32 Debug"
@@ -60,8 +61,8 @@ LINK32=link.exe
# PROP BASE Target_Dir "" # PROP BASE Target_Dir ""
# PROP Use_MFC 0 # PROP Use_MFC 0
# PROP Use_Debug_Libraries 1 # PROP Use_Debug_Libraries 1
# PROP Output_Dir "Debug"
# PROP Intermediate_Dir "Debug"
# PROP Output_Dir "./Debug"
# PROP Intermediate_Dir "./Debug"
# PROP Ignore_Export_Lib 0 # PROP Ignore_Export_Lib 0
# PROP Target_Dir "" # PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c # ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
@@ -73,7 +74,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo # ADD BSC32 /nologo
LINK32=link.exe LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib libjackmp.lib /nologo /subsystem:console /debug /machine:I386 /out:"./Debug/bin/jack_lsp.exe" /pdbtype:sept /libpath:"./Debug" /libpath:"./Debug/bin"
!ENDIF !ENDIF
@@ -105,31 +106,5 @@ SOURCE="..\example-clients\lsp.c"
# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" # PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
# End Group # End Group
# Begin Source File
SOURCE=.\Release\libjackmp.lib
!IF "$(CFG)" == "jack_lsp - Win32 Release"
!ELSEIF "$(CFG)" == "jack_lsp - Win32 Debug"
# PROP Exclude_From_Build 1
!ENDIF
# End Source File
# Begin Source File
SOURCE=.\Debug\libjackmp_debug.lib
!IF "$(CFG)" == "jack_lsp - Win32 Release"
# PROP Exclude_From_Build 1
!ELSEIF "$(CFG)" == "jack_lsp - Win32 Debug"
!ENDIF
# End Source File
# End Target # End Target
# End Project # End Project

+ 83
- 0
windows/jack_metro.cbp View File

@@ -0,0 +1,83 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<CodeBlocks_project_file>
<FileVersion major="1" minor="6" />
<Project>
<Option title="jack_metro" />
<Option pch_mode="2" />
<Option compiler="gcc" />
<Build>
<Target title="Win32 Release">
<Option output="Release\bin\jack_metro" prefix_auto="1" extension_auto="1" />
<Option object_output="Release\" />
<Option type="1" />
<Option compiler="gcc" />
<Compiler>
<Add option="-O2" />
<Add option="-Wall" />
<Add directory="..\example-clients" />
<Add directory="..\common" />
<Add directory="..\common\jack" />
<Add directory="..\windows" />
</Compiler>
<Linker>
<Add library="kernel32" />
<Add library="user32" />
<Add library="gdi32" />
<Add library="winspool" />
<Add library="comdlg32" />
<Add library="advapi32" />
<Add library="shell32" />
<Add library="ole32" />
<Add library="oleaut32" />
<Add library="uuid" />
<Add library="odbc32" />
<Add library="odbccp32" />
<Add library="libjackmp" />
<Add directory="Release\bin" />
</Linker>
</Target>
<Target title="Win32 Debug">
<Option output="Debug\bin\jack_metro" prefix_auto="1" extension_auto="1" />
<Option object_output="Debug\" />
<Option type="1" />
<Option compiler="gcc" />
<Compiler>
<Add option="-Wall" />
<Add option="-g" />
<Add directory="..\example-clients" />
<Add directory="..\common" />
<Add directory="..\common\jack" />
<Add directory="..\windows" />
</Compiler>
<Linker>
<Add library="kernel32" />
<Add library="user32" />
<Add library="gdi32" />
<Add library="winspool" />
<Add library="comdlg32" />
<Add library="advapi32" />
<Add library="shell32" />
<Add library="ole32" />
<Add library="oleaut32" />
<Add library="uuid" />
<Add library="odbc32" />
<Add library="odbccp32" />
<Add library="libjackmp" />
<Add directory="Debug\bin" />
</Linker>
</Target>
</Build>
<Compiler>
<Add option="-Wall" />
</Compiler>
<Unit filename="..\example-clients\metro.c">
<Option compilerVar="CC" />
</Unit>
<Extensions>
<code_completion />
<envvars />
<debugger />
<lib_finder disable_auto="1" />
</Extensions>
</Project>
</CodeBlocks_project_file>

+ 7
- 32
windows/jack_metro.dsp View File

@@ -37,8 +37,9 @@ RSC=rc.exe
# PROP BASE Target_Dir "" # PROP BASE Target_Dir ""
# PROP Use_MFC 0 # PROP Use_MFC 0
# PROP Use_Debug_Libraries 0 # PROP Use_Debug_Libraries 0
# PROP Output_Dir "Release"
# PROP Intermediate_Dir "Release"
# PROP Output_Dir "./Release"
# PROP Intermediate_Dir "./Release"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir "" # PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c # ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I "../common/" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c # ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I "../common/" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
@@ -49,7 +50,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo # ADD BSC32 /nologo
LINK32=link.exe LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib libjackmp.lib /nologo /subsystem:console /machine:I386 /out:"./Release/bin/jack_metro.exe" /libpath:"./Release" /libpath:"./Release/bin"
!ELSEIF "$(CFG)" == "jack_metro - Win32 Debug" !ELSEIF "$(CFG)" == "jack_metro - Win32 Debug"
@@ -60,8 +61,8 @@ LINK32=link.exe
# PROP BASE Target_Dir "" # PROP BASE Target_Dir ""
# PROP Use_MFC 0 # PROP Use_MFC 0
# PROP Use_Debug_Libraries 1 # PROP Use_Debug_Libraries 1
# PROP Output_Dir "Debug"
# PROP Intermediate_Dir "Debug"
# PROP Output_Dir "./Debug"
# PROP Intermediate_Dir "./Debug"
# PROP Ignore_Export_Lib 0 # PROP Ignore_Export_Lib 0
# PROP Target_Dir "" # PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c # ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
@@ -73,7 +74,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo # ADD BSC32 /nologo
LINK32=link.exe LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib libjackmp.lib /nologo /subsystem:console /debug /machine:I386 /out:"./Debug/bin/jack_metro.exe" /pdbtype:sept /libpath:"./Debug" /libpath:"./Debug/bin"
!ENDIF !ENDIF
@@ -105,31 +106,5 @@ SOURCE="..\example-clients\metro.c"
# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" # PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
# End Group # End Group
# Begin Source File
SOURCE=.\Release\libjackmp.lib
!IF "$(CFG)" == "jack_metro - Win32 Release"
!ELSEIF "$(CFG)" == "jack_metro - Win32 Debug"
# PROP Exclude_From_Build 1
!ENDIF
# End Source File
# Begin Source File
SOURCE=.\Debug\libjackmp_debug.lib
!IF "$(CFG)" == "jack_metro - Win32 Release"
# PROP Exclude_From_Build 1
!ELSEIF "$(CFG)" == "jack_metro - Win32 Debug"
!ENDIF
# End Source File
# End Target # End Target
# End Project # End Project

+ 93
- 0
windows/jack_netdriver.cbp View File

@@ -0,0 +1,93 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<CodeBlocks_project_file>
<FileVersion major="1" minor="6" />
<Project>
<Option title="jack_netdriver" />
<Option pch_mode="2" />
<Option compiler="gcc" />
<Build>
<Target title="Win32 Release">
<Option output="Release\bin\jackmp\jack_net" prefix_auto="1" extension_auto="1" />
<Option object_output="Release\" />
<Option type="3" />
<Option compiler="gcc" />
<Compiler>
<Add option="-O2" />
<Add option="-Wall" />
<Add option="-DBUILD_DLL" />
<Add directory="..\common" />
<Add directory="..\common\jack" />
<Add directory="..\windows" />
</Compiler>
<Linker>
<Add library="kernel32" />
<Add library="user32" />
<Add library="gdi32" />
<Add library="winspool" />
<Add library="comdlg32" />
<Add library="advapi32" />
<Add library="shell32" />
<Add library="ole32" />
<Add library="oleaut32" />
<Add library="uuid" />
<Add library="odbc32" />
<Add library="odbccp32" />
<Add library="libjackservermp" />
<Add library="ws2_32" />
<Add directory="Release\bin" />
</Linker>
</Target>
<Target title="Win32 Debug">
<Option output="Debug\bin\jackmp\jack_netdriver" prefix_auto="1" extension_auto="1" />
<Option object_output="Debug\" />
<Option type="3" />
<Option compiler="gcc" />
<Option createDefFile="1" />
<Option createStaticLib="1" />
<Compiler>
<Add option="-Wall" />
<Add option="-g" />
<Add option="-DBUILD_DLL" />
<Add directory="..\common" />
<Add directory="..\common\jack" />
<Add directory="..\windows" />
</Compiler>
<Linker>
<Add library="user32" />
<Add library="kernel32" />
<Add library="gdi32" />
<Add library="winspool" />
<Add library="comdlg32" />
<Add library="advapi32" />
<Add library="shell32" />
<Add library="ole32" />
<Add library="oleaut32" />
<Add library="uuid" />
<Add library="odbc32" />
<Add library="odbccp32" />
<Add library="libjackservermp" />
<Add library="ws2_32" />
<Add directory="Debug\bin" />
</Linker>
</Target>
</Build>
<Compiler>
<Add option="-Wall" />
</Compiler>
<Unit filename="..\common\JackNetDriver.cpp" />
<Unit filename="jacknetdriver.rc">
<Option compilerVar="WINDRES" />
</Unit>
<Extensions>
<code_completion />
<envvars />
<debugger />
<lib_finder disable_auto="1" />
<AutoVersioning>
<Scheme minor_max="10" build_max="0" rev_max="0" rev_rand_max="10" build_times_to_increment_minor="100" />
<Settings autoincrement="1" date_declarations="1" do_auto_increment="0" ask_to_increment="0" language="C++" svn="0" svn_directory="" header_path="version.h" />
<Changes_Log show_changes_editor="0" app_title="released version %M.%m.%b of %p" changeslog_path="ChangesLog.txt" />
</AutoVersioning>
</Extensions>
</Project>
</CodeBlocks_project_file>

+ 107
- 0
windows/jack_netdriver.dsp View File

@@ -0,0 +1,107 @@
# Microsoft Developer Studio Project File - Name="jack_netdriver" - Package Owner=<4>
# Microsoft Developer Studio Generated Build File, Format Version 6.00
# ** DO NOT EDIT **
# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
CFG=jack_netdriver - Win32 Debug
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
!MESSAGE use the Export Makefile command and run
!MESSAGE
!MESSAGE NMAKE /f "jack_netdriver.mak".
!MESSAGE
!MESSAGE You can specify a configuration when running NMAKE
!MESSAGE by defining the macro CFG on the command line. For example:
!MESSAGE
!MESSAGE NMAKE /f "jack_netdriver.mak" CFG="jack_netdriver - Win32 Debug"
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
!MESSAGE "jack_netdriver - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
!MESSAGE "jack_netdriver - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
!MESSAGE
# Begin Project
# PROP AllowPerConfigDependencies 0
# PROP Scc_ProjName ""
# PROP Scc_LocalPath ""
CPP=cl.exe
MTL=midl.exe
RSC=rc.exe
!IF "$(CFG)" == "jack_netdriver - Win32 Release"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 0
# PROP BASE Output_Dir "jack_netdriver___Win32_Release"
# PROP BASE Intermediate_Dir "jack_netdriver___Win32_Release"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 0
# PROP Output_Dir "./Release"
# PROP Intermediate_Dir "./Release"
# PROP Ignore_Export_Lib 1
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "JACK_NETDRIVER_EXPORTS" /YX /FD /c
# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I "../common" /I "../common/jack" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "JACK_NETDRIVER_EXPORTS" /YX /FD /c
# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
# ADD BASE RSC /l 0x40c /d "NDEBUG"
# ADD RSC /l 0x40c /d "NDEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib libjackservermp.lib ws2_32.lib /nologo /dll /machine:I386 /out:"./Release/bin/jackmp/jack_netdriver.dll" /libpath:"./Release" /libpath:"./Release/bin"
!ELSEIF "$(CFG)" == "jack_netdriver - Win32 Debug"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "jack_netdriver___Win32_Debug"
# PROP BASE Intermediate_Dir "jack_netdriver___Win32_Debug"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
# PROP Output_Dir "./Debug"
# PROP Intermediate_Dir "./Debug"
# PROP Ignore_Export_Lib 1
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "JACK_NETDRIVER_EXPORTS" /YX /FD /GZ /c
# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "." /I "../common" /I "../common/jack" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "JACK_NETDRIVER_EXPORTS" /YX /FD /GZ /c
# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
# ADD BASE RSC /l 0x40c /d "_DEBUG"
# ADD RSC /l 0x40c /d "_DEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib libjackservermp.lib ws2_32.lib /nologo /dll /debug /machine:I386 /out:"./Debug/bin/jackmp/jack_netdriver.dll" /pdbtype:sept /libpath:"./Debug" /libpath:"./Debug/bin"
!ENDIF
# Begin Target
# Name "jack_netdriver - Win32 Release"
# Name "jack_netdriver - Win32 Debug"
# Begin Group "Source Files"
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
# Begin Source File
SOURCE=..\common\JackNetDriver.cpp
# End Source File
# End Group
# Begin Group "Header Files"
# PROP Default_Filter "h;hpp;hxx;hm;inl"
# End Group
# Begin Group "Resource Files"
# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
# End Group
# End Target
# End Project

+ 90
- 0
windows/jack_netmanager.cbp View File

@@ -0,0 +1,90 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<CodeBlocks_project_file>
<FileVersion major="1" minor="6" />
<Project>
<Option title="jack_netmanager" />
<Option pch_mode="2" />
<Option compiler="gcc" />
<Build>
<Target title="Win32 Release">
<Option output="Release\bin\jackmp\netmanager" prefix_auto="1" extension_auto="1" />
<Option object_output="Release\" />
<Option type="3" />
<Option compiler="gcc" />
<Compiler>
<Add option="-O2" />
<Add option="-Wall" />
<Add directory="..\common" />
<Add directory="..\common\jack" />
<Add directory="..\windows" />
</Compiler>
<Linker>
<Add library="kernel32" />
<Add library="user32" />
<Add library="gdi32" />
<Add library="winspool" />
<Add library="comdlg32" />
<Add library="advapi32" />
<Add library="shell32" />
<Add library="ole32" />
<Add library="oleaut32" />
<Add library="uuid" />
<Add library="odbc32" />
<Add library="odbccp32" />
<Add library="ws2_32" />
<Add library="libjackservermp" />
<Add directory="Release\bin" />
</Linker>
</Target>
<Target title="Win32 Debug">
<Option output="Debug\bin\jackmp\netmanager" prefix_auto="1" extension_auto="1" />
<Option object_output="Debug\" />
<Option type="3" />
<Option compiler="gcc" />
<Option createDefFile="1" />
<Option createStaticLib="1" />
<Compiler>
<Add option="-Wall" />
<Add option="-g" />
<Add directory="..\common" />
<Add directory="..\common\jack" />
<Add directory="..\windows" />
</Compiler>
<Linker>
<Add library="kernel32" />
<Add library="user32" />
<Add library="gdi32" />
<Add library="winspool" />
<Add library="comdlg32" />
<Add library="advapi32" />
<Add library="shell32" />
<Add library="ole32" />
<Add library="oleaut32" />
<Add library="uuid" />
<Add library="odbc32" />
<Add library="odbccp32" />
<Add library="ws2_32" />
<Add library="libjackservermp" />
<Add directory="Debug\bin" />
</Linker>
</Target>
</Build>
<Compiler>
<Add option="-Wall" />
</Compiler>
<Unit filename="..\common\JackNetManager.cpp" />
<Unit filename="jacknetmanager.rc">
<Option compilerVar="WINDRES" />
</Unit>
<Extensions>
<code_completion />
<envvars />
<debugger />
<AutoVersioning>
<Scheme minor_max="10" build_max="0" rev_max="0" rev_rand_max="10" build_times_to_increment_minor="100" />
<Settings autoincrement="1" date_declarations="1" do_auto_increment="0" ask_to_increment="0" language="C++" svn="0" svn_directory="" header_path="version.h" />
<Changes_Log show_changes_editor="0" app_title="released version %M.%m.%b of %p" changeslog_path="ChangesLog.txt" />
</AutoVersioning>
</Extensions>
</Project>
</CodeBlocks_project_file>

+ 107
- 0
windows/jack_netmanager.dsp View File

@@ -0,0 +1,107 @@
# Microsoft Developer Studio Project File - Name="jack_netmanager" - Package Owner=<4>
# Microsoft Developer Studio Generated Build File, Format Version 6.00
# ** DO NOT EDIT **
# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
CFG=jack_netmanager - Win32 Debug
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
!MESSAGE use the Export Makefile command and run
!MESSAGE
!MESSAGE NMAKE /f "jack_netmanager.mak".
!MESSAGE
!MESSAGE You can specify a configuration when running NMAKE
!MESSAGE by defining the macro CFG on the command line. For example:
!MESSAGE
!MESSAGE NMAKE /f "jack_netmanager.mak" CFG="jack_netmanager - Win32 Debug"
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
!MESSAGE "jack_netmanager - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
!MESSAGE "jack_netmanager - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
!MESSAGE
# Begin Project
# PROP AllowPerConfigDependencies 0
# PROP Scc_ProjName ""
# PROP Scc_LocalPath ""
CPP=cl.exe
MTL=midl.exe
RSC=rc.exe
!IF "$(CFG)" == "jack_netmanager - Win32 Release"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 0
# PROP BASE Output_Dir "jack_netmanager___Win32_Release"
# PROP BASE Intermediate_Dir "jack_netmanager___Win32_Release"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 0
# PROP Output_Dir "./Release"
# PROP Intermediate_Dir "./Release"
# PROP Ignore_Export_Lib 1
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "JACK_NETMANAGER_EXPORTS" /YX /FD /c
# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I "../common" /I "../common/jack" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "JACK_NETMANAGER_EXPORTS" /YX /FD /c
# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
# ADD BASE RSC /l 0x40c /d "NDEBUG"
# ADD RSC /l 0x40c /d "NDEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib libjackservermp.lib ws2_32.lib /nologo /dll /machine:I386 /out:"./Release/bin/jackmp/netmanager.dll" /libpath:"./Release" /libpath:"./Release/bin"
!ELSEIF "$(CFG)" == "jack_netmanager - Win32 Debug"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "jack_netmanager___Win32_Debug"
# PROP BASE Intermediate_Dir "jack_netmanager___Win32_Debug"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
# PROP Output_Dir "./Deubg"
# PROP Intermediate_Dir "./Debug"
# PROP Ignore_Export_Lib 1
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "JACK_NETMANAGER_EXPORTS" /YX /FD /GZ /c
# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "." /I "../common" /I "../common/jack" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "JACK_NETMANAGER_EXPORTS" /YX /FD /GZ /c
# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
# ADD BASE RSC /l 0x40c /d "_DEBUG"
# ADD RSC /l 0x40c /d "_DEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib libjackservermp.lib ws2_32.lib /nologo /dll /debug /machine:I386 /out:"./Debug/bin/jackmp/netmanager.dll" /pdbtype:sept /libpath:"./Debug" /libpath:"./Debug/bin"
!ENDIF
# Begin Target
# Name "jack_netmanager - Win32 Release"
# Name "jack_netmanager - Win32 Debug"
# Begin Group "Source Files"
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
# Begin Source File
SOURCE=..\common\JackNetManager.cpp
# End Source File
# End Group
# Begin Group "Header Files"
# PROP Default_Filter "h;hpp;hxx;hm;inl"
# End Group
# Begin Group "Resource Files"
# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
# End Group
# End Target
# End Project

+ 104
- 0
windows/jack_portaudio.cbp View File

@@ -0,0 +1,104 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<CodeBlocks_project_file>
<FileVersion major="1" minor="6" />
<Project>
<Option title="jack_portaudio" />
<Option pch_mode="2" />
<Option compiler="gcc" />
<Build>
<Target title="Win32 Release">
<Option output="Release\bin\jackmp\jack_portaudio" prefix_auto="1" extension_auto="1" />
<Option object_output="Release" />
<Option type="3" />
<Option compiler="gcc" />
<Compiler>
<Add option="-O2" />
<Add option="-Wall" />
<Add option="-DWIN32" />
<Add option="-DNDEBUG" />
<Add option="-D_WINDOWS" />
<Add option="-D_MBCS" />
<Add option="-D_USRDLL" />
<Add option="-DJACK_PORTAUDIO_EXPORTS" />
<Add directory="." />
<Add directory="..\common" />
<Add directory="..\common\jack" />
</Compiler>
<Linker>
<Add library="kernel32" />
<Add library="user32" />
<Add library="gdi32" />
<Add library="winspool" />
<Add library="comdlg32" />
<Add library="advapi32" />
<Add library="shell32" />
<Add library="ole32" />
<Add library="oleaut32" />
<Add library="uuid" />
<Add library="odbc32" />
<Add library="odbccp32" />
<Add library="libjackservermp" />
<Add library="portaudio_x86" />
<Add directory="Release\bin" />
<Add directory="..\windows" />
</Linker>
</Target>
<Target title="Win32 Debug">
<Option output="Debug\bin\jackmp\jack_portaudio_debug" prefix_auto="1" extension_auto="1" />
<Option object_output="Debug" />
<Option type="3" />
<Option compiler="gcc" />
<Compiler>
<Add option="-W" />
<Add option="-g" />
<Add option="-DWIN32" />
<Add option="-D_DEBUG" />
<Add option="-D_WINDOWS" />
<Add option="-D_MBCS" />
<Add option="-D_USRDLL" />
<Add option="-DJACK_PORTAUDIO_EXPORTS" />
<Add directory="." />
<Add directory="..\common" />
<Add directory="..\common\jack" />
</Compiler>
<Linker>
<Add library="kernel32" />
<Add library="user32" />
<Add library="gdi32" />
<Add library="winspool" />
<Add library="comdlg32" />
<Add library="advapi32" />
<Add library="shell32" />
<Add library="ole32" />
<Add library="oleaut32" />
<Add library="uuid" />
<Add library="odbc32" />
<Add library="odbccp32" />
<Add library="libjackservermp" />
<Add library="portaudio_x86" />
<Add directory="Debug\bin" />
<Add directory="..\windows" />
</Linker>
</Target>
</Build>
<Compiler>
<Add option="-Wall" />
</Compiler>
<Unit filename="JackPortAudioDevices.cpp" />
<Unit filename="JackPortAudioDriver.cpp" />
<Unit filename="jackportaudio.rc">
<Option compilerVar="WINDRES" />
</Unit>
<Extensions>
<code_completion />
<envvars />
<debugger />
<lib_finder disable_auto="1" />
<AutoVersioning>
<Scheme minor_max="10" build_max="0" rev_max="0" rev_rand_max="10" build_times_to_increment_minor="100" />
<Settings autoincrement="1" date_declarations="1" do_auto_increment="0" ask_to_increment="0" language="C++" svn="0" svn_directory="" header_path="version.h" />
<Changes_Log show_changes_editor="0" app_title="released version %M.%m.%b of %p" changeslog_path="ChangesLog.txt" />
</AutoVersioning>
</Extensions>
</Project>
</CodeBlocks_project_file>

+ 8
- 38
windows/jack_portaudio.dsp View File

@@ -38,9 +38,9 @@ RSC=rc.exe
# PROP BASE Target_Dir "" # PROP BASE Target_Dir ""
# PROP Use_MFC 0 # PROP Use_MFC 0
# PROP Use_Debug_Libraries 0 # PROP Use_Debug_Libraries 0
# PROP Output_Dir "Release"
# PROP Intermediate_Dir "Release"
# PROP Ignore_Export_Lib 0
# PROP Output_Dir "./Release"
# PROP Intermediate_Dir "./Release"
# PROP Ignore_Export_Lib 1
# PROP Target_Dir "" # PROP Target_Dir ""
# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "JACK_PORTAUDIO_EXPORTS" /YX /FD /c # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "JACK_PORTAUDIO_EXPORTS" /YX /FD /c
# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I "../common" /I "../common/jack" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "JACK_PORTAUDIO_EXPORTS" /YX /FD /c # ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I "../common" /I "../common/jack" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "JACK_PORTAUDIO_EXPORTS" /YX /FD /c
@@ -53,7 +53,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo # ADD BSC32 /nologo
LINK32=link.exe LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib portaudio_x86.lib libjackservermp.lib /nologo /dll /machine:I386 /out:"./Release/bin/jackmp/jack_portaudio.dll" /libpath:"./Release" /libpath:"./Release/bin"
!ELSEIF "$(CFG)" == "jack_portaudio - Win32 Debug" !ELSEIF "$(CFG)" == "jack_portaudio - Win32 Debug"
@@ -64,9 +64,9 @@ LINK32=link.exe
# PROP BASE Target_Dir "" # PROP BASE Target_Dir ""
# PROP Use_MFC 0 # PROP Use_MFC 0
# PROP Use_Debug_Libraries 1 # PROP Use_Debug_Libraries 1
# PROP Output_Dir "Debug"
# PROP Intermediate_Dir "Debug"
# PROP Ignore_Export_Lib 0
# PROP Output_Dir "./Debug"
# PROP Intermediate_Dir "./Debug"
# PROP Ignore_Export_Lib 1
# PROP Target_Dir "" # PROP Target_Dir ""
# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "JACK_PORTAUDIO_EXPORTS" /YX /FD /GZ /c # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "JACK_PORTAUDIO_EXPORTS" /YX /FD /GZ /c
# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "." /I "../common" /I "../common/jack" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "JACK_PORTAUDIO_EXPORTS" /FR /YX /FD /GZ /c # ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "." /I "../common" /I "../common/jack" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "JACK_PORTAUDIO_EXPORTS" /FR /YX /FD /GZ /c
@@ -79,7 +79,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo # ADD BSC32 /nologo
LINK32=link.exe LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /out:"Debug/jack_portaudio_debug.dll" /pdbtype:sept
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib portaudio_x86.lib libjackservermp.lib /nologo /dll /debug /machine:I386 /out:"./Debug/bin/jackmp/jack_portaudio_debug.dll" /pdbtype:sept /libpath:"./Debug" /libpath:"./Debug/bin"
!ENDIF !ENDIF
@@ -107,35 +107,5 @@ SOURCE=.\resource.rc
# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" # PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
# End Group # End Group
# Begin Source File
SOURCE=.\portaudio.lib
# End Source File
# Begin Source File
SOURCE=.\Debug\libjackservermp_debug.lib
!IF "$(CFG)" == "jack_portaudio - Win32 Release"
# PROP Exclude_From_Build 1
!ELSEIF "$(CFG)" == "jack_portaudio - Win32 Debug"
!ENDIF
# End Source File
# Begin Source File
SOURCE=.\Release\libjackservermp.lib
!IF "$(CFG)" == "jack_portaudio - Win32 Release"
!ELSEIF "$(CFG)" == "jack_portaudio - Win32 Debug"
# PROP Exclude_From_Build 1
!ENDIF
# End Source File
# End Target # End Target
# End Project # End Project

+ 7
- 32
windows/jack_simple_client.dsp View File

@@ -37,8 +37,9 @@ RSC=rc.exe
# PROP BASE Target_Dir "" # PROP BASE Target_Dir ""
# PROP Use_MFC 0 # PROP Use_MFC 0
# PROP Use_Debug_Libraries 0 # PROP Use_Debug_Libraries 0
# PROP Output_Dir "Release"
# PROP Intermediate_Dir "Release"
# PROP Output_Dir "./Release"
# PROP Intermediate_Dir "./Release"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir "" # PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c # ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I "../common/" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c # ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I "../common/" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
@@ -49,7 +50,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo # ADD BSC32 /nologo
LINK32=link.exe LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib libjackmp.lib /nologo /subsystem:console /machine:I386 /out:"./Release/bin/jack_simple_client.exe" /libpath:"./Release" /libpath:"./Release/bin"
!ELSEIF "$(CFG)" == "jack_simple_client - Win32 Debug" !ELSEIF "$(CFG)" == "jack_simple_client - Win32 Debug"
@@ -60,8 +61,8 @@ LINK32=link.exe
# PROP BASE Target_Dir "" # PROP BASE Target_Dir ""
# PROP Use_MFC 0 # PROP Use_MFC 0
# PROP Use_Debug_Libraries 1 # PROP Use_Debug_Libraries 1
# PROP Output_Dir "Debug"
# PROP Intermediate_Dir "Debug"
# PROP Output_Dir "./Debug"
# PROP Intermediate_Dir "./Debug"
# PROP Ignore_Export_Lib 0 # PROP Ignore_Export_Lib 0
# PROP Target_Dir "" # PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c # ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
@@ -73,7 +74,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo # ADD BSC32 /nologo
LINK32=link.exe LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib libjackmp.lib /nologo /subsystem:console /debug /machine:I386 /out:"./Debug/bin/jack_simple_client.exe" /pdbtype:sept /libpath:"./Debug" /libpath:"./Debug/bin"
!ENDIF !ENDIF
@@ -97,31 +98,5 @@ SOURCE="..\example-clients\simple_client.c"
# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" # PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
# End Group # End Group
# Begin Source File
SOURCE=.\Release\libjackmp.lib
!IF "$(CFG)" == "jack_simple_client - Win32 Release"
!ELSEIF "$(CFG)" == "jack_simple_client - Win32 Debug"
# PROP Exclude_From_Build 1
!ENDIF
# End Source File
# Begin Source File
SOURCE=.\Debug\libjackmp_debug.lib
!IF "$(CFG)" == "jack_simple_client - Win32 Release"
# PROP Exclude_From_Build 1
!ELSEIF "$(CFG)" == "jack_simple_client - Win32 Debug"
!ENDIF
# End Source File
# End Target # End Target
# End Project # End Project

+ 7
- 10
windows/jack_test.dsp View File

@@ -37,8 +37,9 @@ RSC=rc.exe
# PROP BASE Target_Dir "" # PROP BASE Target_Dir ""
# PROP Use_MFC 0 # PROP Use_MFC 0
# PROP Use_Debug_Libraries 0 # PROP Use_Debug_Libraries 0
# PROP Output_Dir "Release"
# PROP Intermediate_Dir "Release"
# PROP Output_Dir "./Release"
# PROP Intermediate_Dir "./Release"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir "" # PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c # ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I "../common/" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /D "__STDC__" /YX /FD /c # ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I "../common/" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /D "__STDC__" /YX /FD /c
@@ -49,7 +50,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo # ADD BSC32 /nologo
LINK32=link.exe LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib libjackmp.lib /nologo /subsystem:console /machine:I386 /out:"./Release/bin/jack_test.exe" /libpath:"./Release" /libpath:"./Release/bin"
!ELSEIF "$(CFG)" == "jack_test - Win32 Debug" !ELSEIF "$(CFG)" == "jack_test - Win32 Debug"
@@ -60,8 +61,8 @@ LINK32=link.exe
# PROP BASE Target_Dir "" # PROP BASE Target_Dir ""
# PROP Use_MFC 0 # PROP Use_MFC 0
# PROP Use_Debug_Libraries 1 # PROP Use_Debug_Libraries 1
# PROP Output_Dir "Debug"
# PROP Intermediate_Dir "Debug"
# PROP Output_Dir "./Debug"
# PROP Intermediate_Dir "./Debug"
# PROP Ignore_Export_Lib 0 # PROP Ignore_Export_Lib 0
# PROP Target_Dir "" # PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c # ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
@@ -73,7 +74,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo # ADD BSC32 /nologo
LINK32=link.exe LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib libjackmp.lib /nologo /subsystem:console /debug /machine:I386 /out:"./Debug/bin/jack_test.exe" /pdbtype:sept /libpath:"./Debug" /libpath:"./Debug/bin"
!ENDIF !ENDIF
@@ -105,9 +106,5 @@ SOURCE=..\tests\jack_test.cpp
# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" # PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
# End Group # End Group
# Begin Source File
SOURCE=.\Release\libjackmp.lib
# End Source File
# End Target # End Target
# End Project # End Project

+ 86
- 0
windows/jack_unload.cbp View File

@@ -0,0 +1,86 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<CodeBlocks_project_file>
<FileVersion major="1" minor="6" />
<Project>
<Option title="jack_unload" />
<Option pch_mode="2" />
<Option compiler="gcc" />
<Build>
<Target title="Win32 Release">
<Option output="Release\bin\jack_unload" prefix_auto="1" extension_auto="1" />
<Option object_output="Release\" />
<Option type="1" />
<Option compiler="gcc" />
<Compiler>
<Add option="-O2" />
<Add option="-Wall" />
<Add directory="..\common" />
<Add directory="..\common\jack" />
<Add directory="..\windows" />
</Compiler>
<Linker>
<Add library="kernel32" />
<Add library="user32" />
<Add library="gdi32" />
<Add library="winspool" />
<Add library="comdlg32" />
<Add library="advapi32" />
<Add library="shell32" />
<Add library="ole32" />
<Add library="oleaut32" />
<Add library="uuid" />
<Add library="odbc32" />
<Add library="odbccp32" />
<Add library="libjackmp" />
<Add directory="Release\bin" />
</Linker>
</Target>
<Target title="Win32 Debug">
<Option output="Debug\bin\jack_unload" prefix_auto="1" extension_auto="1" />
<Option object_output="Debug\" />
<Option type="1" />
<Option compiler="gcc" />
<Compiler>
<Add option="-Wall" />
<Add option="-g" />
<Add directory="..\common" />
<Add directory="..\common\jack" />
<Add directory="..\windows" />
</Compiler>
<Linker>
<Add library="kernel32" />
<Add library="user32" />
<Add library="gdi32" />
<Add library="winspool" />
<Add library="comdlg32" />
<Add library="advapi32" />
<Add library="shell32" />
<Add library="ole32" />
<Add library="oleaut32" />
<Add library="uuid" />
<Add library="odbc32" />
<Add library="odbccp32" />
<Add library="libjackmp" />
<Add directory="Debug\bin" />
</Linker>
</Target>
</Build>
<Compiler>
<Add option="-Wall" />
</Compiler>
<Unit filename="..\example-clients\ipunload.c">
<Option compilerVar="CC" />
</Unit>
<Extensions>
<code_completion />
<envvars />
<debugger />
<lib_finder disable_auto="1" />
<AutoVersioning>
<Scheme minor_max="10" build_max="0" rev_max="0" rev_rand_max="10" build_times_to_increment_minor="100" />
<Settings autoincrement="1" date_declarations="1" do_auto_increment="0" ask_to_increment="0" language="C++" svn="0" svn_directory="" header_path="version.h" />
<Changes_Log show_changes_editor="0" app_title="released version %M.%m.%b of %p" changeslog_path="ChangesLog.txt" />
</AutoVersioning>
</Extensions>
</Project>
</CodeBlocks_project_file>

+ 102
- 0
windows/jack_unload.dsp View File

@@ -0,0 +1,102 @@
# Microsoft Developer Studio Project File - Name="jack_unload" - Package Owner=<4>
# Microsoft Developer Studio Generated Build File, Format Version 6.00
# ** DO NOT EDIT **
# TARGTYPE "Win32 (x86) Console Application" 0x0103
CFG=jack_unload - Win32 Debug
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
!MESSAGE use the Export Makefile command and run
!MESSAGE
!MESSAGE NMAKE /f "jack_unload.mak".
!MESSAGE
!MESSAGE You can specify a configuration when running NMAKE
!MESSAGE by defining the macro CFG on the command line. For example:
!MESSAGE
!MESSAGE NMAKE /f "jack_unload.mak" CFG="jack_unload - Win32 Debug"
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
!MESSAGE "jack_unload - Win32 Release" (based on "Win32 (x86) Console Application")
!MESSAGE "jack_unload - Win32 Debug" (based on "Win32 (x86) Console Application")
!MESSAGE
# Begin Project
# PROP AllowPerConfigDependencies 0
# PROP Scc_ProjName ""
# PROP Scc_LocalPath ""
CPP=cl.exe
RSC=rc.exe
!IF "$(CFG)" == "jack_unload - Win32 Release"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 0
# PROP BASE Output_Dir "jack_unload___Win32_Release"
# PROP BASE Intermediate_Dir "jack_unload___Win32_Release"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 0
# PROP Output_Dir "./Release"
# PROP Intermediate_Dir "./Release"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I "../common" /I "../common/jack" /I "../example-clients" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD BASE RSC /l 0x40c /d "NDEBUG"
# ADD RSC /l 0x40c /d "NDEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib libjackmp.lib /nologo /subsystem:console /machine:I386 /out:"./Release/bin/jack_unload.exe" /libpath:"./Release" /libpath:"./Release/bin"
!ELSEIF "$(CFG)" == "jack_unload - Win32 Debug"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "jack_unload___Win32_Debug"
# PROP BASE Intermediate_Dir "jack_unload___Win32_Debug"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
# PROP Output_Dir "./Debug"
# PROP Intermediate_Dir "./Debug"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "." /I "../common" /I "../common/jack" /I "../example-clients" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
# ADD BASE RSC /l 0x40c /d "_DEBUG"
# ADD RSC /l 0x40c /d "_DEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib libjackmp.lib /nologo /subsystem:console /debug /machine:I386 /out:"./Debug/bin/jack_unload.exe" /pdbtype:sept /libpath:"./Debug" /libpath:"./Debug/bin"
!ENDIF
# Begin Target
# Name "jack_unload - Win32 Release"
# Name "jack_unload - Win32 Debug"
# Begin Group "Source Files"
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
# Begin Source File
SOURCE="..\example-clients\ipunload.c"
# End Source File
# End Group
# Begin Group "Header Files"
# PROP Default_Filter "h;hpp;hxx;hm;inl"
# End Group
# Begin Group "Resource Files"
# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
# End Group
# End Target
# End Project

+ 41
- 0
windows/jackaudioadapter.rc View File

@@ -0,0 +1,41 @@
// Generated by ResEdit 1.4.3
// Copyright (C) 2006-2008
// http://www.resedit.net
#include "resource.h"
#include "afxres.h"
//
// Version Information resources
//
LANGUAGE LANG_FRENCH, SUBLANG_DEFAULT
1 VERSIONINFO
FILEVERSION 1,9,0,0
PRODUCTVERSION 1,9,0,0
FILEOS VOS_UNKNOWN
FILETYPE VFT_DLL
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "040c04b0"
BEGIN
VALUE "Comments", "\0"
VALUE "CompanyName", "Grame\0"
VALUE "FileDescription", "Jackmp Audio Adapter for Windows\0"
VALUE "FileVersion", "1, 9, 0, 0\0"
VALUE "InternalName", "audioadapter\0"
VALUE "LegalCopyright", "Copyright Grame © 2006-2008\0"
VALUE "LegalTrademarks", "\0"
VALUE "OriginalFilename", "audioadapter.dll\0"
VALUE "PrivateBuild", "\0"
VALUE "ProductName", "audioadapter\0"
VALUE "ProductVersion", "1, 9, 0, 0\0"
VALUE "SpecialBuild", "\0"
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 1036, 1200
END
END

+ 104
- 0
windows/jackdmp.cbp View File

@@ -0,0 +1,104 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<CodeBlocks_project_file>
<FileVersion major="1" minor="6" />
<Project>
<Option title="jackdmp" />
<Option pch_mode="2" />
<Option default_target="Win32 Debug" />
<Option compiler="gcc" />
<Build>
<Target title="Win32 Release">
<Option output="Release\bin\jackdmp" prefix_auto="1" extension_auto="1" />
<Option object_output="Release" />
<Option type="1" />
<Option compiler="gcc" />
<Option parameters="-R -S -d net" />
<Option host_application="jackdmp.exe" />
<Compiler>
<Add option="-O2" />
<Add option="-Wall" />
<Add option="-DWIN32" />
<Add option="-DNDEBUG" />
<Add option="-D_CONSOLE" />
<Add option="-D_MBCS" />
<Add directory="." />
<Add directory="..\common" />
<Add directory="..\common\jack" />
</Compiler>
<Linker>
<Add library="kernel32" />
<Add library="user32" />
<Add library="gdi32" />
<Add library="winspool" />
<Add library="comdlg32" />
<Add library="advapi32" />
<Add library="shell32" />
<Add library="ole32" />
<Add library="oleaut32" />
<Add library="uuid" />
<Add library="odbc32" />
<Add library="odbccp32" />
<Add library="libjackservermp" />
<Add directory="Release\bin" />
</Linker>
</Target>
<Target title="Win32 Debug">
<Option output="Debug\bin\jackdmp" prefix_auto="1" extension_auto="1" />
<Option object_output="Debug" />
<Option type="1" />
<Option compiler="gcc" />
<Option parameters="-R -S -d net" />
<Compiler>
<Add option="-Wall" />
<Add option="-g" />
<Add option="-DWIN32" />
<Add option="-D_DEBUG" />
<Add option="-D_CONSOLE" />
<Add option="-D_MBCS" />
<Add directory="." />
<Add directory="..\common" />
<Add directory="..\common\jack" />
</Compiler>
<Linker>
<Add library="kernel32" />
<Add library="user32" />
<Add library="gdi32" />
<Add library="winspool" />
<Add library="comdlg32" />
<Add library="advapi32" />
<Add library="shell32" />
<Add library="ole32" />
<Add library="oleaut32" />
<Add library="uuid" />
<Add library="odbc32" />
<Add library="odbccp32" />
<Add library="libjackservermp" />
<Add directory="Debug\bin" />
</Linker>
</Target>
</Build>
<Compiler>
<Add option="-Wall" />
</Compiler>
<Unit filename="..\common\Jackdmp.cpp" />
<Unit filename="getopt.c">
<Option compilerVar="CC" />
</Unit>
<Unit filename="getopt1.c">
<Option compilerVar="CC" />
</Unit>
<Unit filename="jackdmp.rc">
<Option compilerVar="WINDRES" />
</Unit>
<Extensions>
<code_completion />
<envvars />
<debugger />
<AutoVersioning>
<Scheme minor_max="10" build_max="0" rev_max="0" rev_rand_max="10" build_times_to_increment_minor="100" />
<Settings autoincrement="1" date_declarations="1" do_auto_increment="0" ask_to_increment="0" language="C++" svn="0" svn_directory="" header_path="version.h" />
<Changes_Log show_changes_editor="0" app_title="released version %M.%m.%b of %p" changeslog_path="ChangesLog.txt" />
</AutoVersioning>
</Extensions>
</Project>
</CodeBlocks_project_file>

+ 6
- 32
windows/jackdmp.dsp View File

@@ -37,8 +37,8 @@ RSC=rc.exe
# PROP BASE Target_Dir "" # PROP BASE Target_Dir ""
# PROP Use_MFC 0 # PROP Use_MFC 0
# PROP Use_Debug_Libraries 0 # PROP Use_Debug_Libraries 0
# PROP Output_Dir "Release"
# PROP Intermediate_Dir "Release"
# PROP Output_Dir "./Release"
# PROP Intermediate_Dir "./Release"
# PROP Ignore_Export_Lib 0 # PROP Ignore_Export_Lib 0
# PROP Target_Dir "" # PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c # ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
@@ -50,7 +50,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo # ADD BSC32 /nologo
LINK32=link.exe LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib libjackservermp.lib /nologo /subsystem:console /machine:I386 /out:"./Release/bin/jackdmp.exe" /libpath:"./Release" /libpath:"./Release/bin"
!ELSEIF "$(CFG)" == "jackdmp - Win32 Debug" !ELSEIF "$(CFG)" == "jackdmp - Win32 Debug"
@@ -61,8 +61,8 @@ LINK32=link.exe
# PROP BASE Target_Dir "" # PROP BASE Target_Dir ""
# PROP Use_MFC 0 # PROP Use_MFC 0
# PROP Use_Debug_Libraries 1 # PROP Use_Debug_Libraries 1
# PROP Output_Dir "Debug"
# PROP Intermediate_Dir "Debug"
# PROP Output_Dir "./Debug"
# PROP Intermediate_Dir "./Debug"
# PROP Ignore_Export_Lib 0 # PROP Ignore_Export_Lib 0
# PROP Target_Dir "" # PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c # ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
@@ -74,7 +74,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo # ADD BSC32 /nologo
LINK32=link.exe LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /out:"./Debug/bin/jackdmp.exe" /pdbtype:sept /libpath:"./Debug" /libpath:"./Debug/bin"
!ENDIF !ENDIF
@@ -106,31 +106,5 @@ SOURCE=..\common\Jackdmp.cpp
# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" # PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
# End Group # End Group
# Begin Source File
SOURCE=.\Release\libjackservermp.lib
!IF "$(CFG)" == "jackdmp - Win32 Release"
!ELSEIF "$(CFG)" == "jackdmp - Win32 Debug"
# PROP Exclude_From_Build 1
!ENDIF
# End Source File
# Begin Source File
SOURCE=.\Debug\libjackservermp_debug.lib
!IF "$(CFG)" == "jackdmp - Win32 Release"
# PROP Exclude_From_Build 1
!ELSEIF "$(CFG)" == "jackdmp - Win32 Debug"
!ENDIF
# End Source File
# End Target # End Target
# End Project # End Project

+ 88
- 1
windows/jackdmp.dsw View File

@@ -11,6 +11,9 @@ Package=<5>
Package=<4> Package=<4>
{{{ {{{
Begin Project Dependency
Project_Dep_Name libjackmp
End Project Dependency
}}} }}}
############################################################################### ###############################################################################
@@ -23,6 +26,24 @@ Package=<5>
Package=<4> Package=<4>
{{{ {{{
Begin Project Dependency
Project_Dep_Name libjackmp
End Project Dependency
}}}
###############################################################################
Project: "jack_load"=".\jack_load.dsp" - Package Owner=<4>
Package=<5>
{{{
}}}
Package=<4>
{{{
Begin Project Dependency
Project_Dep_Name libjackmp
End Project Dependency
}}} }}}
############################################################################### ###############################################################################
@@ -35,6 +56,9 @@ Package=<5>
Package=<4> Package=<4>
{{{ {{{
Begin Project Dependency
Project_Dep_Name libjackmp
End Project Dependency
}}} }}}
############################################################################### ###############################################################################
@@ -47,6 +71,39 @@ Package=<5>
Package=<4> Package=<4>
{{{ {{{
Begin Project Dependency
Project_Dep_Name libjackmp
End Project Dependency
}}}
###############################################################################
Project: "jack_netdriver"=".\jack_netdriver.dsp" - Package Owner=<4>
Package=<5>
{{{
}}}
Package=<4>
{{{
Begin Project Dependency
Project_Dep_Name libjackservermp
End Project Dependency
}}}
###############################################################################
Project: "jack_netmanager"=".\jack_netmanager.dsp" - Package Owner=<4>
Package=<5>
{{{
}}}
Package=<4>
{{{
Begin Project Dependency
Project_Dep_Name libjackservermp
End Project Dependency
}}} }}}
############################################################################### ###############################################################################
@@ -59,6 +116,9 @@ Package=<5>
Package=<4> Package=<4>
{{{ {{{
Begin Project Dependency
Project_Dep_Name libjackservermp
End Project Dependency
}}} }}}
############################################################################### ###############################################################################
@@ -71,6 +131,9 @@ Package=<5>
Package=<4> Package=<4>
{{{ {{{
Begin Project Dependency
Project_Dep_Name libjackmp
End Project Dependency
}}} }}}
############################################################################### ###############################################################################
@@ -83,6 +146,24 @@ Package=<5>
Package=<4> Package=<4>
{{{ {{{
Begin Project Dependency
Project_Dep_Name libjackmp
End Project Dependency
}}}
###############################################################################
Project: "jack_unload"=".\jack_unload.dsp" - Package Owner=<4>
Package=<5>
{{{
}}}
Package=<4>
{{{
Begin Project Dependency
Project_Dep_Name libjackmp
End Project Dependency
}}} }}}
############################################################################### ###############################################################################
@@ -95,11 +176,14 @@ Package=<5>
Package=<4> Package=<4>
{{{ {{{
Begin Project Dependency
Project_Dep_Name libjackservermp
End Project Dependency
}}} }}}
############################################################################### ###############################################################################
Project: "jdelay"="..\..\..\..\Jackdmp\src_win32\windows\jdelay.dsp" - Package Owner=<4>
Project: "jdelay"=".\jdelay.dsp" - Package Owner=<4>
Package=<5> Package=<5>
{{{ {{{
@@ -107,6 +191,9 @@ Package=<5>
Package=<4> Package=<4>
{{{ {{{
Begin Project Dependency
Project_Dep_Name libjackmp
End Project Dependency
}}} }}}
############################################################################### ###############################################################################


+ 48
- 0
windows/jackdmp.rc View File

@@ -0,0 +1,48 @@
// Generated by ResEdit 1.4.3
// Copyright (C) 2006-2008
// http://www.resedit.net
#include "resource.h"
#include "afxres.h"
//
// Version Information resources
//
LANGUAGE LANG_FRENCH, SUBLANG_DEFAULT
1 VERSIONINFO
FILEVERSION 1,9,0,0
PRODUCTVERSION 1,9,0,0
FILEOS VOS_UNKNOWN
FILETYPE VFT_APP
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "040c04b0"
BEGIN
VALUE "Comments", "\0"
VALUE "CompanyName", "Grame\0"
VALUE "FileDescription", "Jackmp server for Windows\0"
VALUE "FileVersion", "1, 9, 0, 0\0"
VALUE "InternalName", "jackdmp\0"
VALUE "LegalCopyright", "Copyright Grame © 2006-2008\0"
VALUE "LegalTrademarks", "\0"
VALUE "OriginalFilename", "jackdmp.exe\0"
VALUE "PrivateBuild", "\0"
VALUE "ProductName", "jackdmp\0"
VALUE "ProductVersion", "1, 9, 0, 0\0"
VALUE "SpecialBuild", "\0"
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 1036, 1200
END
END
//
// Icon resources
//
LANGUAGE LANG_FRENCH, SUBLANG_DEFAULT
IDI_ICON1 ICON ".\\Setup\\src\\jack.ico"

+ 38
- 0
windows/jackdmp.workspace View File

@@ -0,0 +1,38 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<CodeBlocks_workspace_file>
<Workspace title="jackdmp workspace">
<Project filename="libjackservermp.cbp" />
<Project filename="libjackmp.cbp" />
<Project filename="jackdmp.cbp">
<Depends filename="libjackservermp.cbp" />
</Project>
<Project filename="jack_audioadapter.cbp" active="1">
<Depends filename="libjackservermp.cbp" />
</Project>
<Project filename="jack_portaudio.cbp">
<Depends filename="libjackservermp.cbp" />
</Project>
<Project filename="jack_netdriver.cbp">
<Depends filename="libjackservermp.cbp" />
</Project>
<Project filename="jack_netmanager.cbp">
<Depends filename="libjackservermp.cbp" />
</Project>
<Project filename="jack_load.cbp">
<Depends filename="libjackmp.cbp" />
</Project>
<Project filename="jack_unload.cbp">
<Depends filename="libjackmp.cbp" />
</Project>
<Project filename="jack_lsp.cbp">
<Depends filename="libjackmp.cbp" />
</Project>
<Project filename="jack_metro.cbp">
<Depends filename="libjackmp.cbp" />
</Project>
<Project filename="jack_connect.cbp" />
<Project filename="jack_disconnect.cbp">
<Depends filename="libjackmp.cbp" />
</Project>
</Workspace>
</CodeBlocks_workspace_file>

+ 41
- 0
windows/jacknetdriver.rc View File

@@ -0,0 +1,41 @@
// Generated by ResEdit 1.4.3
// Copyright (C) 2006-2008
// http://www.resedit.net
#include "resource.h"
#include "afxres.h"
//
// Version Information resources
//
LANGUAGE LANG_FRENCH, SUBLANG_DEFAULT
1 VERSIONINFO
FILEVERSION 1,9,0,0
PRODUCTVERSION 1,9,0,0
FILEOS VOS_UNKNOWN
FILETYPE VFT_DLL
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "040c04b0"
BEGIN
VALUE "Comments", "\0"
VALUE "CompanyName", "Grame\0"
VALUE "FileDescription", "Jackmp Net Driver for Windows\0"
VALUE "FileVersion", "1, 9, 0, 0\0"
VALUE "InternalName", "jack_netdriver\0"
VALUE "LegalCopyright", "Copyright Grame © 2006-2008\0"
VALUE "LegalTrademarks", "\0"
VALUE "OriginalFilename", "jack_netdriver.dll\0"
VALUE "PrivateBuild", "\0"
VALUE "ProductName", "jack_netdriver\0"
VALUE "ProductVersion", "1, 9, 0, 0\0"
VALUE "SpecialBuild", "\0"
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 1036, 1200
END
END

+ 41
- 0
windows/jacknetmanager.rc View File

@@ -0,0 +1,41 @@
// Generated by ResEdit 1.4.3
// Copyright (C) 2006-2008
// http://www.resedit.net
#include "resource.h"
#include "afxres.h"
//
// Version Information resources
//
LANGUAGE LANG_FRENCH, SUBLANG_DEFAULT
1 VERSIONINFO
FILEVERSION 1,9,0,0
PRODUCTVERSION 1,9,0,0
FILEOS VOS_UNKNOWN
FILETYPE VFT_DLL
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "040c04b0"
BEGIN
VALUE "Comments", "\0"
VALUE "CompanyName", "Grame\0"
VALUE "FileDescription", "Jackmp Net Manager for Windows\0"
VALUE "FileVersion", "1, 9, 0, 0\0"
VALUE "InternalName", "netmanager\0"
VALUE "LegalCopyright", "Copyright Grame © 2006-2008\0"
VALUE "LegalTrademarks", "\0"
VALUE "OriginalFilename", "netmanager.dll\0"
VALUE "PrivateBuild", "\0"
VALUE "ProductName", "netmanager\0"
VALUE "ProductVersion", "1, 9, 0, 0\0"
VALUE "SpecialBuild", "\0"
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 1036, 1200
END
END

+ 41
- 0
windows/jackportaudio.rc View File

@@ -0,0 +1,41 @@
// Generated by ResEdit 1.4.3
// Copyright (C) 2006-2008
// http://www.resedit.net
#include "resource.h"
#include "afxres.h"
//
// Version Information resources
//
LANGUAGE LANG_FRENCH, SUBLANG_DEFAULT
1 VERSIONINFO
FILEVERSION 1,9,0,0
PRODUCTVERSION 1,9,0,0
FILEOS VOS_UNKNOWN
FILETYPE VFT_DLL
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "040c04b0"
BEGIN
VALUE "Comments", "\0"
VALUE "CompanyName", "Grame\0"
VALUE "FileDescription", "Jackmp PortAudio Driver for Windows\0"
VALUE "FileVersion", "1, 9, 0, 0\0"
VALUE "InternalName", "jack_portaudio\0"
VALUE "LegalCopyright", "Copyright Grame © 2006-2008\0"
VALUE "LegalTrademarks", "\0"
VALUE "OriginalFilename", "jack_portaudio.dll\0"
VALUE "PrivateBuild", "\0"
VALUE "ProductName", "jack_portaudio\0"
VALUE "ProductVersion", "1, 9, 0, 0\0"
VALUE "SpecialBuild", "\0"
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 1036, 1200
END
END

+ 7
- 10
windows/jdelay.dsp View File

@@ -37,8 +37,9 @@ RSC=rc.exe
# PROP BASE Target_Dir "" # PROP BASE Target_Dir ""
# PROP Use_MFC 0 # PROP Use_MFC 0
# PROP Use_Debug_Libraries 0 # PROP Use_Debug_Libraries 0
# PROP Output_Dir "Release"
# PROP Intermediate_Dir "Release"
# PROP Output_Dir "./Release"
# PROP Intermediate_Dir "./Release"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir "" # PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c # ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD CPP /nologo /MD /W3 /GX /O2 /I "../common" /I "." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c # ADD CPP /nologo /MD /W3 /GX /O2 /I "../common" /I "." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
@@ -49,7 +50,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo # ADD BSC32 /nologo
LINK32=link.exe LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib libjackmp.lib /nologo /subsystem:console /machine:I386 /out:"./Release/bin/jdelay.exe" /libpath:"./Release" /libpath:"./Release/bin"
!ELSEIF "$(CFG)" == "jdelay - Win32 Debug" !ELSEIF "$(CFG)" == "jdelay - Win32 Debug"
@@ -60,8 +61,8 @@ LINK32=link.exe
# PROP BASE Target_Dir "" # PROP BASE Target_Dir ""
# PROP Use_MFC 0 # PROP Use_MFC 0
# PROP Use_Debug_Libraries 1 # PROP Use_Debug_Libraries 1
# PROP Output_Dir "Debug"
# PROP Intermediate_Dir "Debug"
# PROP Output_Dir "./Debug"
# PROP Intermediate_Dir "./Debug"
# PROP Ignore_Export_Lib 0 # PROP Ignore_Export_Lib 0
# PROP Target_Dir "" # PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c # ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
@@ -73,7 +74,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo # ADD BSC32 /nologo
LINK32=link.exe LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /out:"./Debug/bin/jdelay.exe" /pdbtype:sept /libpath:"./Debug" /libpath:"./Debug/bin"
!ENDIF !ENDIF
@@ -97,9 +98,5 @@ SOURCE=..\tests\jdelay.cpp
# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" # PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
# End Group # End Group
# Begin Source File
SOURCE=.\Release\libjackmp.lib
# End Source File
# End Target # End Target
# End Project # End Project

+ 136
- 0
windows/libjackmp.cbp View File

@@ -0,0 +1,136 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<CodeBlocks_project_file>
<FileVersion major="1" minor="6" />
<Project>
<Option title="libjackmp" />
<Option pch_mode="2" />
<Option compiler="gcc" />
<Build>
<Target title="Win32 Release">
<Option output="Release\bin\libjackmp" prefix_auto="1" extension_auto="1" />
<Option object_output="Release" />
<Option type="3" />
<Option compiler="gcc" />
<Option createStaticLib="1" />
<Compiler>
<Add option="-O2" />
<Add option="-Wall" />
<Add option="-DWIN32" />
<Add option="-DNDEBUG" />
<Add option="-D_WINDOWS" />
<Add option="-D_MBCS" />
<Add option="-D_USRDLL" />
<Add option="-DLIBJACKMP_EXPORTS" />
<Add option="-DREGEX_MALLOC" />
<Add option="-DSTDC_HEADERS" />
<Add option="-D__SMP__" />
<Add directory="." />
<Add directory="..\common" />
<Add directory="..\common\jack" />
</Compiler>
<Linker>
<Add library="kernel32" />
<Add library="user32" />
<Add library="gdi32" />
<Add library="winspool" />
<Add library="comdlg32" />
<Add library="advapi32" />
<Add library="shell32" />
<Add library="ole32" />
<Add library="oleaut32" />
<Add library="uuid" />
<Add library="odbc32" />
<Add library="odbccp32" />
</Linker>
</Target>
<Target title="Win32 Debug">
<Option output="Debug\bin\libjackmp" prefix_auto="1" extension_auto="1" />
<Option object_output="Debug" />
<Option type="3" />
<Option compiler="gcc" />
<Option createDefFile="1" />
<Option createStaticLib="1" />
<Compiler>
<Add option="-Wall" />
<Add option="-g" />
<Add option="-DWIN32" />
<Add option="-D_DEBUG" />
<Add option="-D_WINDOWS" />
<Add option="-D_MBCS" />
<Add option="-D_USRDLL" />
<Add option="-DLIBJACKMP_EXPORTS" />
<Add option="-DREGEX_MALLOC" />
<Add option="-DSTDC_HEADERS" />
<Add option="-D__SMP__" />
<Add directory="." />
<Add directory="..\common" />
<Add directory="..\common\jack" />
</Compiler>
<Linker>
<Add library="kernel32" />
<Add library="user32" />
<Add library="gdi32" />
<Add library="winspool" />
<Add library="comdlg32" />
<Add library="advapi32" />
<Add library="shell32" />
<Add library="ole32" />
<Add library="oleaut32" />
<Add library="uuid" />
<Add library="odbc32" />
<Add library="odbccp32" />
</Linker>
</Target>
</Build>
<Compiler>
<Add option="-Wall" />
</Compiler>
<Unit filename="..\common\JackAPI.cpp" />
<Unit filename="..\common\JackActivationCount.cpp" />
<Unit filename="..\common\JackAudioPort.cpp" />
<Unit filename="..\common\JackClient.cpp" />
<Unit filename="..\common\JackConnectionManager.cpp" />
<Unit filename="..\common\JackEngineControl.cpp" />
<Unit filename="..\common\JackError.cpp" />
<Unit filename="..\common\JackFrameTimer.cpp" />
<Unit filename="..\common\JackGlobals.cpp" />
<Unit filename="..\common\JackGraphManager.cpp" />
<Unit filename="..\common\JackLibAPI.cpp" />
<Unit filename="..\common\JackLibClient.cpp" />
<Unit filename="..\common\JackMessageBuffer.cpp" />
<Unit filename="..\common\JackMidiAPI.cpp" />
<Unit filename="..\common\JackMidiPort.cpp" />
<Unit filename="..\common\JackPort.cpp" />
<Unit filename="..\common\JackPortType.cpp" />
<Unit filename="..\common\JackShmMem.cpp" />
<Unit filename="..\common\JackTime.c">
<Option compilerVar="CC" />
</Unit>
<Unit filename="..\common\JackTools.cpp" />
<Unit filename="..\common\JackTransportEngine.cpp" />
<Unit filename="..\common\shm.c">
<Option compilerVar="CC" />
</Unit>
<Unit filename="JackWinNamedPipe.cpp" />
<Unit filename="JackWinNamedPipeClientChannel.cpp" />
<Unit filename="JackWinProcessSync.cpp" />
<Unit filename="JackWinSemaphore.cpp" />
<Unit filename="JackWinThread.cpp" />
<Unit filename="libjackmp.rc">
<Option compilerVar="WINDRES" />
</Unit>
<Unit filename="regex.c">
<Option compilerVar="CC" />
</Unit>
<Extensions>
<code_completion />
<envvars />
<debugger />
<AutoVersioning>
<Scheme minor_max="10" build_max="0" rev_max="0" rev_rand_max="10" build_times_to_increment_minor="100" />
<Settings autoincrement="1" date_declarations="1" do_auto_increment="0" ask_to_increment="0" language="C++" svn="0" svn_directory="" header_path="version.h" />
<Changes_Log show_changes_editor="0" app_title="released version %M.%m.%b of %p" changeslog_path="ChangesLog.txt" />
</AutoVersioning>
</Extensions>
</Project>
</CodeBlocks_project_file>

+ 7
- 10
windows/libjackmp.dsp View File

@@ -38,8 +38,9 @@ RSC=rc.exe
# PROP BASE Target_Dir "" # PROP BASE Target_Dir ""
# PROP Use_MFC 0 # PROP Use_MFC 0
# PROP Use_Debug_Libraries 0 # PROP Use_Debug_Libraries 0
# PROP Output_Dir "Release"
# PROP Intermediate_Dir "Release"
# PROP Output_Dir "./Release"
# PROP Intermediate_Dir "./Release"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir "" # PROP Target_Dir ""
# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBJACKMP_EXPORTS" /YX /FD /c # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBJACKMP_EXPORTS" /YX /FD /c
# ADD CPP /nologo /MD /W3 /GR /GX /O2 /I "." /I "../common" /I "../common/jack" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBJACKMP_EXPORTS" /D "__STDC__" /D "REGEX_MALLOC" /D "STDC_HEADERS" /D "__SMP__" /FR /YX /FD /c # ADD CPP /nologo /MD /W3 /GR /GX /O2 /I "." /I "../common" /I "../common/jack" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBJACKMP_EXPORTS" /D "__STDC__" /D "REGEX_MALLOC" /D "STDC_HEADERS" /D "__SMP__" /FR /YX /FD /c
@@ -52,7 +53,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo # ADD BSC32 /nologo
LINK32=link.exe LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /entry:"DllEntryPoint" /dll /machine:I386
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /entry:"DllEntryPoint" /dll /machine:I386 /out:"./Release/bin/libjackmp.dll" /libpath:"./Release" /libpath:"./Release/bin"
!ELSEIF "$(CFG)" == "libjackmp - Win32 Debug" !ELSEIF "$(CFG)" == "libjackmp - Win32 Debug"
@@ -63,8 +64,8 @@ LINK32=link.exe
# PROP BASE Target_Dir "" # PROP BASE Target_Dir ""
# PROP Use_MFC 0 # PROP Use_MFC 0
# PROP Use_Debug_Libraries 1 # PROP Use_Debug_Libraries 1
# PROP Output_Dir "Debug"
# PROP Intermediate_Dir "Debug"
# PROP Output_Dir "./Debug"
# PROP Intermediate_Dir "./Debug"
# PROP Ignore_Export_Lib 0 # PROP Ignore_Export_Lib 0
# PROP Target_Dir "" # PROP Target_Dir ""
# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBJACKMP_EXPORTS" /YX /FD /GZ /c # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBJACKMP_EXPORTS" /YX /FD /GZ /c
@@ -78,7 +79,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo # ADD BSC32 /nologo
LINK32=link.exe LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /out:"Debug/libjackmp_debug.dll" /pdbtype:sept
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /out:"./Debug/bin/libjackmp.dll" /pdbtype:sept /libpath:"./Debug" /libpath:"./Debug/bin"
!ENDIF !ENDIF
@@ -214,9 +215,5 @@ SOURCE=..\common\shm.c
# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" # PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
# End Group # End Group
# Begin Source File
SOURCE="..\..\..\..\pthreads-win32\pthreadVC2.lib"
# End Source File
# End Target # End Target
# End Project # End Project

+ 41
- 0
windows/libjackmp.rc View File

@@ -0,0 +1,41 @@
// Generated by ResEdit 1.4.3
// Copyright (C) 2006-2008
// http://www.resedit.net
#include "resource.h"
#include "afxres.h"
//
// Version Information resources
//
LANGUAGE LANG_FRENCH, SUBLANG_DEFAULT
1 VERSIONINFO
FILEVERSION 1,9,0,0
PRODUCTVERSION 1,9,0,0
FILEOS VOS_UNKNOWN
FILETYPE VFT_DLL
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "040c04b0"
BEGIN
VALUE "Comments", "\0"
VALUE "CompanyName", "Grame\0"
VALUE "FileDescription", "Jackmp client library for Windows\0"
VALUE "FileVersion", "1, 9, 0, 0\0"
VALUE "InternalName", "libjackmp\0"
VALUE "LegalCopyright", "Copyright Grame © 2006-2008\0"
VALUE "LegalTrademarks", "\0"
VALUE "OriginalFilename", "libjackmp.dll\0"
VALUE "PrivateBuild", "\0"
VALUE "ProductName", "libjackmp\0"
VALUE "ProductVersion", "1, 9, 0, 0\0"
VALUE "SpecialBuild", "\0"
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 1036, 1200
END
END

+ 169
- 0
windows/libjackservermp.cbp View File

@@ -0,0 +1,169 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<CodeBlocks_project_file>
<FileVersion major="1" minor="6" />
<Project>
<Option title="libjackservermp" />
<Option pch_mode="2" />
<Option compiler="gcc" />
<Build>
<Target title="Win32 Release">
<Option output="Release\bin\libjackservermp" prefix_auto="1" extension_auto="1" />
<Option object_output="Release" />
<Option type="3" />
<Option compiler="gcc" />
<Option createStaticLib="1" />
<Compiler>
<Add option="-O2" />
<Add option="-Wall" />
<Add option="-DWIN32" />
<Add option="-DNDEBUG" />
<Add option="-D_WINDOWS" />
<Add option="-D_MBCS" />
<Add option="-D_USRDLL" />
<Add option="-DLIBJACKDMP_EXPORTS" />
<Add option="-DREGEX_MALLOC" />
<Add option="-DSTDC_HEADERS" />
<Add option="-D__SMP__" />
<Add directory="." />
<Add directory="..\common" />
<Add directory="..\common\jack" />
</Compiler>
<Linker>
<Add library="kernel32" />
<Add library="user32" />
<Add library="gdi32" />
<Add library="winspool" />
<Add library="comdlg32" />
<Add library="advapi32" />
<Add library="shell32" />
<Add library="ole32" />
<Add library="oleaut32" />
<Add library="uuid" />
<Add library="odbc32" />
<Add library="odbccp32" />
<Add library="ws2_32" />
</Linker>
</Target>
<Target title="Win32 Debug">
<Option output="Debug\bin\libjackservermp" prefix_auto="1" extension_auto="1" />
<Option object_output="Debug" />
<Option type="3" />
<Option compiler="gcc" />
<Option createDefFile="1" />
<Option createStaticLib="1" />
<Compiler>
<Add option="-Wall" />
<Add option="-g" />
<Add option="-DWIN32" />
<Add option="-D_DEBUG" />
<Add option="-D_WINDOWS" />
<Add option="-D_MBCS" />
<Add option="-D_USRDLL" />
<Add option="-DLIBJACKDMP_EXPORTS" />
<Add option="-DREGEX_MALLOC" />
<Add option="-DSTDC_HEADERS" />
<Add option="-D__SMP__" />
<Add directory="." />
<Add directory="..\common" />
<Add directory="..\common\jack" />
</Compiler>
<Linker>
<Add library="kernel32" />
<Add library="user32" />
<Add library="gdi32" />
<Add library="winspool" />
<Add library="comdlg32" />
<Add library="advapi32" />
<Add library="shell32" />
<Add library="ole32" />
<Add library="oleaut32" />
<Add library="uuid" />
<Add library="odbc32" />
<Add library="odbccp32" />
<Add library="ws2_32" />
</Linker>
</Target>
</Build>
<Compiler>
<Add option="-Wall" />
<Add option="-fexceptions" />
</Compiler>
<Linker>
<Add directory="Release\bin" />
</Linker>
<Unit filename="..\common\JackAPI.cpp" />
<Unit filename="..\common\JackActivationCount.cpp" />
<Unit filename="..\common\JackAudioDriver.cpp" />
<Unit filename="..\common\JackAudioPort.cpp" />
<Unit filename="..\common\JackClient.cpp" />
<Unit filename="..\common\JackConnectionManager.cpp" />
<Unit filename="..\common\JackControl.cpp" />
<Unit filename="..\common\JackDriver.cpp" />
<Unit filename="..\common\JackDriverLoader.cpp" />
<Unit filename="..\common\JackEngine.cpp" />
<Unit filename="..\common\JackEngineControl.cpp" />
<Unit filename="..\common\JackError.cpp" />
<Unit filename="..\common\JackExternalClient.cpp" />
<Unit filename="..\common\JackFrameTimer.cpp" />
<Unit filename="..\common\JackFreewheelDriver.cpp" />
<Unit filename="..\common\JackGlobals.cpp" />
<Unit filename="..\common\JackGraphManager.cpp" />
<Unit filename="..\common\JackInternalClient.cpp" />
<Unit filename="..\common\JackLoopbackDriver.cpp" />
<Unit filename="..\common\JackMessageBuffer.cpp" />
<Unit filename="..\common\JackMidiAPI.cpp" />
<Unit filename="..\common\JackMidiPort.cpp" />
<Unit filename="..\common\JackNetTool.cpp" />
<Unit filename="..\common\JackPort.cpp" />
<Unit filename="..\common\JackPortType.cpp" />
<Unit filename="..\common\JackRestartThreadedDriver.cpp" />
<Unit filename="..\common\JackServer.cpp" />
<Unit filename="..\common\JackServerAPI.cpp" />
<Unit filename="..\common\JackServerGlobals.cpp" />
<Unit filename="..\common\JackShmMem.cpp" />
<Unit filename="..\common\JackThreadedDriver.cpp" />
<Unit filename="..\common\JackTime.c">
<Option compilerVar="CC" />
</Unit>
<Unit filename="..\common\JackTools.cpp" />
<Unit filename="..\common\JackTransportEngine.cpp" />
<Unit filename="..\common\JackWaitThreadedDriver.cpp" />
<Unit filename="..\common\ringbuffer.c">
<Option compilerVar="CC" />
</Unit>
<Unit filename="..\common\shm.c">
<Option compilerVar="CC" />
</Unit>
<Unit filename="JackNetWinSocket.cpp" />
<Unit filename="JackWinNamedPipe.cpp" />
<Unit filename="JackWinNamedPipeClientChannel.cpp" />
<Unit filename="JackWinNamedPipeNotifyChannel.cpp" />
<Unit filename="JackWinNamedPipeServerChannel.cpp" />
<Unit filename="JackWinNamedPipeServerNotifyChannel.cpp" />
<Unit filename="JackWinProcessSync.cpp" />
<Unit filename="JackWinSemaphore.cpp" />
<Unit filename="JackWinThread.cpp" />
<Unit filename="getopt.c">
<Option compilerVar="CC" />
</Unit>
<Unit filename="getopt1.c">
<Option compilerVar="CC" />
</Unit>
<Unit filename="libjackservermp.rc">
<Option compilerVar="WINDRES" />
</Unit>
<Unit filename="regex.c">
<Option compilerVar="CC" />
</Unit>
<Extensions>
<code_completion />
<envvars />
<debugger />
<AutoVersioning>
<Scheme minor_max="10" build_max="0" rev_max="0" rev_rand_max="10" build_times_to_increment_minor="100" />
<Settings autoincrement="0" date_declarations="0" do_auto_increment="0" ask_to_increment="0" language="C++" svn="0" svn_directory="" header_path="version.h" />
<Changes_Log show_changes_editor="0" app_title="released version %M.%m.%b of %p" changeslog_path="ChangesLog.txt" />
</AutoVersioning>
</Extensions>
</Project>
</CodeBlocks_project_file>

+ 14
- 10
windows/libjackservermp.dsp View File

@@ -38,8 +38,8 @@ RSC=rc.exe
# PROP BASE Target_Dir "" # PROP BASE Target_Dir ""
# PROP Use_MFC 0 # PROP Use_MFC 0
# PROP Use_Debug_Libraries 0 # PROP Use_Debug_Libraries 0
# PROP Output_Dir "Release"
# PROP Intermediate_Dir "Release"
# PROP Output_Dir "./Release"
# PROP Intermediate_Dir "./Release"
# PROP Ignore_Export_Lib 0 # PROP Ignore_Export_Lib 0
# PROP Target_Dir "" # PROP Target_Dir ""
# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBJACKDMP_EXPORTS" /YX /FD /c # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBJACKDMP_EXPORTS" /YX /FD /c
@@ -53,7 +53,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo # ADD BSC32 /nologo
LINK32=link.exe LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /entry:"DllEntryPoint" /dll /machine:I386
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ws2_32.lib /nologo /entry:"DllEntryPoint" /dll /machine:I386 /out:"./Release/bin/libjackservermp.dll" /libpath:"./Release" /libpath:"./Release/bin"
!ELSEIF "$(CFG)" == "libjackservermp - Win32 Debug" !ELSEIF "$(CFG)" == "libjackservermp - Win32 Debug"
@@ -64,8 +64,8 @@ LINK32=link.exe
# PROP BASE Target_Dir "" # PROP BASE Target_Dir ""
# PROP Use_MFC 0 # PROP Use_MFC 0
# PROP Use_Debug_Libraries 1 # PROP Use_Debug_Libraries 1
# PROP Output_Dir "Debug"
# PROP Intermediate_Dir "Debug"
# PROP Output_Dir "./Debug"
# PROP Intermediate_Dir "./Debug"
# PROP Ignore_Export_Lib 0 # PROP Ignore_Export_Lib 0
# PROP Target_Dir "" # PROP Target_Dir ""
# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBJACKDMP_EXPORTS" /YX /FD /GZ /c # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBJACKDMP_EXPORTS" /YX /FD /GZ /c
@@ -79,7 +79,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo # ADD BSC32 /nologo
LINK32=link.exe LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /out:"Debug/libjackservermp_debug.dll" /pdbtype:sept
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ws2_32.lib /nologo /dll /debug /machine:I386 /out:"./Debug/bin/libjackservermp.dll" /pdbtype:sept /libpath:"./Debug" /libpath:"./Debug/bin"
!ENDIF !ENDIF
@@ -188,6 +188,14 @@ SOURCE=..\common\JackMidiPort.cpp
# End Source File # End Source File
# Begin Source File # Begin Source File
SOURCE=..\common\JackNetTool.cpp
# End Source File
# Begin Source File
SOURCE=.\JackNetWinSocket.cpp
# End Source File
# Begin Source File
SOURCE=..\common\JackPort.cpp SOURCE=..\common\JackPort.cpp
# End Source File # End Source File
# Begin Source File # Begin Source File
@@ -291,9 +299,5 @@ SOURCE=..\common\JackMidiPort.h
# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" # PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
# End Group # End Group
# Begin Source File
SOURCE=.\portaudio.lib
# End Source File
# End Target # End Target
# End Project # End Project

+ 41
- 0
windows/libjackservermp.rc View File

@@ -0,0 +1,41 @@
// Generated by ResEdit 1.4.3
// Copyright (C) 2006-2008
// http://www.resedit.net
#include "resource.h"
#include "afxres.h"
//
// Version Information resources
//
LANGUAGE LANG_FRENCH, SUBLANG_DEFAULT
1 VERSIONINFO
FILEVERSION 1,9,0,0
PRODUCTVERSION 1,9,0,0
FILEOS VOS_UNKNOWN
FILETYPE VFT_DLL
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "040c04b0"
BEGIN
VALUE "Comments", "\0"
VALUE "CompanyName", "Grame\0"
VALUE "FileDescription", "Jackmp server library for Windows\0"
VALUE "FileVersion", "1, 9, 0, 0\0"
VALUE "InternalName", "libjackservermp\0"
VALUE "LegalCopyright", "Copyright Grame © 2006-2008\0"
VALUE "LegalTrademarks", "\0"
VALUE "OriginalFilename", "libjackservermp.dll\0"
VALUE "PrivateBuild", "\0"
VALUE "ProductName", "libjackservermp\0"
VALUE "ProductVersion", "1, 9, 0, 0\0"
VALUE "SpecialBuild", "\0"
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 1036, 1200
END
END

BIN
windows/libsamplerate-0.lib View File


BIN
windows/portaudio.lib View File


BIN
windows/portaudio_x86.lib View File


+ 10
- 9
windows/regex.c View File

@@ -478,7 +478,8 @@ static int debug = 0;
if (debug) print_double_string (w, s1, sz1, s2, sz2) if (debug) print_double_string (w, s1, sz1, s2, sz2)




extern void printchar ();
//extern void printchar ();
void printchar( int i ) {}


/* Print the fastmap in human-readable form. */ /* Print the fastmap in human-readable form. */


@@ -4873,24 +4874,24 @@ regexec (preg, string, nmatch, pmatch, eflags)
from either regcomp or regexec. We don't use PREG here. */ from either regcomp or regexec. We don't use PREG here. */


size_t size_t
regerror (errcode, preg, errbuf, errbuf_size)
int errcode;
const regex_t *preg;
char *errbuf;
size_t errbuf_size;
regerror (errcode_vc, preg, errbuf, errbuf_size)
int errcode_vc;
const regex_t *preg;
char *errbuf;
size_t errbuf_size;
{ {
const char *msg; const char *msg;
size_t msg_size; size_t msg_size;


if (errcode < 0
|| errcode >= (sizeof (re_error_msg) / sizeof (re_error_msg[0])))
if (errcode_vc < 0
|| errcode_vc >= (sizeof (re_error_msg) / sizeof (re_error_msg[0])))
/* Only error codes returned by the rest of the code should be passed /* Only error codes returned by the rest of the code should be passed
to this routine. If we are given anything else, or if other regex to this routine. If we are given anything else, or if other regex
code generates an invalid error code, then the program has a bug. code generates an invalid error code, then the program has a bug.
Dump core so we can fix it. */ Dump core so we can fix it. */
abort (); abort ();


msg = re_error_msg[errcode];
msg = re_error_msg[errcode_vc];


/* POSIX doesn't require that we do anything in this case, but why /* POSIX doesn't require that we do anything in this case, but why
not be nice. */ not be nice. */


+ 3
- 14
windows/resource.h View File

@@ -1,15 +1,4 @@
//{{NO_DEPENDENCIES}}
// Microsoft Developer Studio generated include file.
// Used by resource.rc
//

// Next default values for new objects
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 102
#define _APS_NEXT_COMMAND_VALUE 40001
#define _APS_NEXT_CONTROL_VALUE 1000
#define _APS_NEXT_SYMED_VALUE 101
#endif
#ifndef IDC_STATIC
#define IDC_STATIC (-1)
#endif #endif


+ 13
- 46
windows/resource.rc View File

@@ -1,32 +1,18 @@
//Microsoft Developer Studio generated resource script.
//
#include "resource.h"

#include "resource_vc.h"


#define APSTUDIO_READONLY_SYMBOLS #define APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 2 resource.
//
#include "afxres.h" #include "afxres.h"

/////////////////////////////////////////////////////////////////////////////
#undef APSTUDIO_READONLY_SYMBOLS #undef APSTUDIO_READONLY_SYMBOLS


/////////////////////////////////////////////////////////////////////////////
// French (France) resources

#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_FRA) #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_FRA)

#ifdef _WIN32 #ifdef _WIN32
LANGUAGE LANG_FRENCH, SUBLANG_FRENCH LANGUAGE LANG_FRENCH, SUBLANG_FRENCH
#pragma code_page(1252) #pragma code_page(1252)
#endif //_WIN32
#endif


#ifndef _MAC #ifndef _MAC
/////////////////////////////////////////////////////////////////////////////
//
// Version
//

VS_VERSION_INFO VERSIONINFO VS_VERSION_INFO VERSIONINFO
FILEVERSION 1,9,0,0 FILEVERSION 1,9,0,0
PRODUCTVERSION 1,9,0,0 PRODUCTVERSION 1,9,0,0
@@ -46,7 +32,7 @@ BEGIN
BEGIN BEGIN
VALUE "Comments", "\0" VALUE "Comments", "\0"
VALUE "CompanyName", "Grame\0" VALUE "CompanyName", "Grame\0"
VALUE "FileDescription", "Jackmp library for Windows\0"
VALUE "FileDescription", "Jackmp for Windows\0"
VALUE "FileVersion", "1, 9, 0, 0\0" VALUE "FileVersion", "1, 9, 0, 0\0"
VALUE "InternalName", "libjackmp\0" VALUE "InternalName", "libjackmp\0"
VALUE "LegalCopyright", "Copyright Grame © 2006-2008\0" VALUE "LegalCopyright", "Copyright Grame © 2006-2008\0"
@@ -63,47 +49,28 @@ BEGIN
VALUE "Translation", 0x40c, 1200 VALUE "Translation", 0x40c, 1200
END END
END END

#endif // !_MAC

#endif


#ifdef APSTUDIO_INVOKED #ifdef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// TEXTINCLUDE
//

1 TEXTINCLUDE DISCARDABLE
1 TEXTINCLUDE DISCARDABLE
BEGIN BEGIN
"resource.h\0"
"resource_vc.h\0"
END END


2 TEXTINCLUDE DISCARDABLE
2 TEXTINCLUDE DISCARDABLE
BEGIN BEGIN
"#include ""afxres.h""\r\n" "#include ""afxres.h""\r\n"
"\0" "\0"
END END


3 TEXTINCLUDE DISCARDABLE
3 TEXTINCLUDE DISCARDABLE
BEGIN BEGIN
"\r\n" "\r\n"
"\0" "\0"
END END
#endif


#endif // APSTUDIO_INVOKED

#endif // French (France) resources
/////////////////////////////////////////////////////////////////////////////


#endif


#ifndef APSTUDIO_INVOKED #ifndef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 3 resource.
//


/////////////////////////////////////////////////////////////////////////////
#endif // not APSTUDIO_INVOKED

#endif

+ 15
- 0
windows/resource_vc.h View File

@@ -0,0 +1,15 @@
//{{NO_DEPENDENCIES}}
// Microsoft Developer Studio generated include file.
// Used by resource.rc
//
// Next default values for new objects
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 102
#define _APS_NEXT_COMMAND_VALUE 40001
#define _APS_NEXT_CONTROL_VALUE 1000
#define _APS_NEXT_SYMED_VALUE 101
#endif
#endif

+ 197
- 0
windows/samplerate.h View File

@@ -0,0 +1,197 @@
/*
** Copyright (C) 2002-2008 Erik de Castro Lopo <erikd@mega-nerd.com>
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
** the Free Software Foundation; either version 2 of the License, or
** (at your option) any later version.
**
** This program is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
** GNU General Public License for more details.
**
** You should have received a copy of the GNU General Public License
** along with this program; if not, write to the Free Software
** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
*/

/*
** This code is part of Secret Rabibt Code aka libsamplerate. A commercial
** use license for this code is available, please see:
** http://www.mega-nerd.com/SRC/procedure.html
*/

/*
** API documentation is available here:
** http://www.mega-nerd.com/SRC/api.html
*/

#ifndef SAMPLERATE_H
#define SAMPLERATE_H

#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */


/* Opaque data type SRC_STATE. */
typedef struct SRC_STATE_tag SRC_STATE ;

/* SRC_DATA is used to pass data to src_simple() and src_process(). */
typedef struct
{ float *data_in, *data_out ;

long input_frames, output_frames ;
long input_frames_used, output_frames_gen ;

int end_of_input ;

double src_ratio ;
} SRC_DATA ;

/* SRC_CB_DATA is used with callback based API. */
typedef struct
{ long frames ;
float *data_in ;
} SRC_CB_DATA ;

/*
** User supplied callback function type for use with src_callback_new()
** and src_callback_read(). First parameter is the same pointer that was
** passed into src_callback_new(). Second parameter is pointer to a
** pointer. The user supplied callback function must modify *data to
** point to the start of the user supplied float array. The user supplied
** function must return the number of frames that **data points to.
*/

typedef long (*src_callback_t) (void *cb_data, float **data) ;

/*
** Standard initialisation function : return an anonymous pointer to the
** internal state of the converter. Choose a converter from the enums below.
** Error returned in *error.
*/

SRC_STATE* src_new (int converter_type, int channels, int *error) ;

/*
** Initilisation for callback based API : return an anonymous pointer to the
** internal state of the converter. Choose a converter from the enums below.
** The cb_data pointer can point to any data or be set to NULL. Whatever the
** value, when processing, user supplied function "func" gets called with
** cb_data as first parameter.
*/

SRC_STATE* src_callback_new (src_callback_t func, int converter_type, int channels,
int *error, void* cb_data) ;

/*
** Cleanup all internal allocations.
** Always returns NULL.
*/

SRC_STATE* src_delete (SRC_STATE *state) ;

/*
** Standard processing function.
** Returns non zero on error.
*/

int src_process (SRC_STATE *state, SRC_DATA *data) ;

/*
** Callback based processing function. Read up to frames worth of data from
** the converter int *data and return frames read or -1 on error.
*/
long src_callback_read (SRC_STATE *state, double src_ratio, long frames, float *data) ;

/*
** Simple interface for performing a single conversion from input buffer to
** output buffer at a fixed conversion ratio.
** Simple interface does not require initialisation as it can only operate on
** a single buffer worth of audio.
*/

int src_simple (SRC_DATA *data, int converter_type, int channels) ;

/*
** This library contains a number of different sample rate converters,
** numbered 0 through N.
**
** Return a string giving either a name or a more full description of each
** sample rate converter or NULL if no sample rate converter exists for
** the given value. The converters are sequentially numbered from 0 to N.
*/

const char *src_get_name (int converter_type) ;
const char *src_get_description (int converter_type) ;
const char *src_get_version (void) ;

/*
** Set a new SRC ratio. This allows step responses
** in the conversion ratio.
** Returns non zero on error.
*/

int src_set_ratio (SRC_STATE *state, double new_ratio) ;

/*
** Reset the internal SRC state.
** Does not modify the quality settings.
** Does not free any memory allocations.
** Returns non zero on error.
*/

int src_reset (SRC_STATE *state) ;

/*
** Return TRUE if ratio is a valid conversion ratio, FALSE
** otherwise.
*/

int src_is_valid_ratio (double ratio) ;

/*
** Return an error number.
*/

int src_error (SRC_STATE *state) ;

/*
** Convert the error number into a string.
*/
const char* src_strerror (int error) ;

/*
** The following enums can be used to set the interpolator type
** using the function src_set_converter().
*/

enum
{
SRC_SINC_BEST_QUALITY = 0,
SRC_SINC_MEDIUM_QUALITY = 1,
SRC_SINC_FASTEST = 2,
SRC_ZERO_ORDER_HOLD = 3,
SRC_LINEAR = 4,
} ;

/*
** Extra helper functions for converting from short to float and
** back again.
*/

void src_short_to_float_array (const short *in, float *out, int len) ;
void src_float_to_short_array (const float *in, short *out, int len) ;

void src_int_to_float_array (const int *in, float *out, int len) ;
void src_float_to_int_array (const float *in, int *out, int len) ;


#ifdef __cplusplus
} /* extern "C" */
#endif /* __cplusplus */

#endif /* SAMPLERATE_H */


+ 7
- 6
windows/testSynchoServerClient.dsp View File

@@ -37,8 +37,9 @@ RSC=rc.exe
# PROP BASE Target_Dir "" # PROP BASE Target_Dir ""
# PROP Use_MFC 0 # PROP Use_MFC 0
# PROP Use_Debug_Libraries 0 # PROP Use_Debug_Libraries 0
# PROP Output_Dir "Release"
# PROP Intermediate_Dir "Release"
# PROP Output_Dir "./Release"
# PROP Intermediate_Dir "./Release"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir "" # PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c # ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I "../common" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c # ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I "../common" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
@@ -49,7 +50,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo # ADD BSC32 /nologo
LINK32=link.exe LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 /out:"./Release/bin/testSynchoServerClient.exe" /libpath:"./Release" /libpath:"./Release/bin"
!ELSEIF "$(CFG)" == "testSynchoServerClient - Win32 Debug" !ELSEIF "$(CFG)" == "testSynchoServerClient - Win32 Debug"
@@ -60,8 +61,8 @@ LINK32=link.exe
# PROP BASE Target_Dir "" # PROP BASE Target_Dir ""
# PROP Use_MFC 0 # PROP Use_MFC 0
# PROP Use_Debug_Libraries 1 # PROP Use_Debug_Libraries 1
# PROP Output_Dir "Debug"
# PROP Intermediate_Dir "Debug"
# PROP Output_Dir "./Debug"
# PROP Intermediate_Dir "./Debug"
# PROP Ignore_Export_Lib 0 # PROP Ignore_Export_Lib 0
# PROP Target_Dir "" # PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c # ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
@@ -73,7 +74,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo # ADD BSC32 /nologo
LINK32=link.exe LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /out:"./Debug/bin/testSynchoServerClient.exe" /pdbtype:sept /libpath:"./Debug" /libpath:"./Debug/bin"
!ENDIF !ENDIF


+ 7
- 6
windows/testSynchroClient.dsp View File

@@ -37,8 +37,9 @@ RSC=rc.exe
# PROP BASE Target_Dir "" # PROP BASE Target_Dir ""
# PROP Use_MFC 0 # PROP Use_MFC 0
# PROP Use_Debug_Libraries 0 # PROP Use_Debug_Libraries 0
# PROP Output_Dir "Release"
# PROP Intermediate_Dir "Release"
# PROP Output_Dir "./Release"
# PROP Intermediate_Dir "./Release"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir "" # PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c # ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I "../common" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c # ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I "../common" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
@@ -49,7 +50,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo # ADD BSC32 /nologo
LINK32=link.exe LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 /out:"./Release/bin/testSynchroClient.exe" /libpath:"./Release" /libpath:"./Release/bin"
!ELSEIF "$(CFG)" == "testSynchroClient - Win32 Debug" !ELSEIF "$(CFG)" == "testSynchroClient - Win32 Debug"
@@ -60,8 +61,8 @@ LINK32=link.exe
# PROP BASE Target_Dir "" # PROP BASE Target_Dir ""
# PROP Use_MFC 0 # PROP Use_MFC 0
# PROP Use_Debug_Libraries 1 # PROP Use_Debug_Libraries 1
# PROP Output_Dir "Debug"
# PROP Intermediate_Dir "Debug"
# PROP Output_Dir "./Debug"
# PROP Intermediate_Dir "./Debug"
# PROP Ignore_Export_Lib 0 # PROP Ignore_Export_Lib 0
# PROP Target_Dir "" # PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c # ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
@@ -73,7 +74,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo # ADD BSC32 /nologo
LINK32=link.exe LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /out:"./Debug/bin/testSynchroClient.exe" /pdbtype:sept /libpath:"./Debug" /libpath:"./Debug/bin"
!ENDIF !ENDIF


+ 7
- 6
windows/testSynchroServer.dsp View File

@@ -37,8 +37,9 @@ RSC=rc.exe
# PROP BASE Target_Dir "" # PROP BASE Target_Dir ""
# PROP Use_MFC 0 # PROP Use_MFC 0
# PROP Use_Debug_Libraries 0 # PROP Use_Debug_Libraries 0
# PROP Output_Dir "Release"
# PROP Intermediate_Dir "Release"
# PROP Output_Dir "./Release"
# PROP Intermediate_Dir "./Release"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir "" # PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c # ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I "../common" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c # ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I "../common" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
@@ -49,7 +50,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo # ADD BSC32 /nologo
LINK32=link.exe LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 /out:"./Release/bin/testSynchroServer.exe" /libpath:"./Release" /libpath:"./Release/bin"
!ELSEIF "$(CFG)" == "testSynchroServer - Win32 Debug" !ELSEIF "$(CFG)" == "testSynchroServer - Win32 Debug"
@@ -60,8 +61,8 @@ LINK32=link.exe
# PROP BASE Target_Dir "" # PROP BASE Target_Dir ""
# PROP Use_MFC 0 # PROP Use_MFC 0
# PROP Use_Debug_Libraries 1 # PROP Use_Debug_Libraries 1
# PROP Output_Dir "Debug"
# PROP Intermediate_Dir "Debug"
# PROP Output_Dir "./Debug"
# PROP Intermediate_Dir "./Debug"
# PROP Ignore_Export_Lib 0 # PROP Ignore_Export_Lib 0
# PROP Target_Dir "" # PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c # ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
@@ -73,7 +74,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo # ADD BSC32 /nologo
LINK32=link.exe LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /out:"./Debug/bin/testSynchroServer.exe" /pdbtype:sept /libpath:"./Debug" /libpath:"./Debug/bin"
!ENDIF !ENDIF


Loading…
Cancel
Save