git-svn-id: http://subversion.jackaudio.org/jack/jack2/trunk/jackmp@3089 0c269be4-1314-0410-8aa9-9f06e86f4224tags/1.9.1
@@ -274,7 +274,6 @@ | |||||
4B35C5490D4731D1000DE7AE /* connect.c in Sources */ = {isa = PBXBuildFile; fileRef = 4B60CE480AAABA31004956AA /* connect.c */; }; | 4B35C5490D4731D1000DE7AE /* connect.c in Sources */ = {isa = PBXBuildFile; fileRef = 4B60CE480AAABA31004956AA /* connect.c */; }; | ||||
4B35C5570D4731D2000DE7AE /* freewheel.c in Sources */ = {isa = PBXBuildFile; fileRef = 4BF8D1710834EE0F00C94B91 /* freewheel.c */; }; | 4B35C5570D4731D2000DE7AE /* freewheel.c in Sources */ = {isa = PBXBuildFile; fileRef = 4BF8D1710834EE0F00C94B91 /* freewheel.c */; }; | ||||
4B35C5630D4731D2000DE7AE /* jdelay.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BFA99A90AAAF40C009E916C /* jdelay.cpp */; }; | 4B35C5630D4731D2000DE7AE /* jdelay.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BFA99A90AAAF40C009E916C /* jdelay.cpp */; }; | ||||
4B35C56F0D4731D2000DE7AE /* external_metro.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BF8D1750834EE3600C94B91 /* external_metro.cpp */; }; | |||||
4B35C57D0D4731D2000DE7AE /* testAtomic.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BF8D23E0834F1C300C94B91 /* testAtomic.cpp */; }; | 4B35C57D0D4731D2000DE7AE /* testAtomic.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BF8D23E0834F1C300C94B91 /* testAtomic.cpp */; }; | ||||
4B35C58D0D4731D2000DE7AE /* testSem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BF8D2470834F20600C94B91 /* testSem.cpp */; }; | 4B35C58D0D4731D2000DE7AE /* testSem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BF8D2470834F20600C94B91 /* testSem.cpp */; }; | ||||
4B35C59F0D4731D2000DE7AE /* zombie.c in Sources */ = {isa = PBXBuildFile; fileRef = 4BF8D1670834EDD900C94B91 /* zombie.c */; }; | 4B35C59F0D4731D2000DE7AE /* zombie.c in Sources */ = {isa = PBXBuildFile; fileRef = 4BF8D1670834EDD900C94B91 /* zombie.c */; }; | ||||
@@ -449,7 +448,6 @@ | |||||
4B699CB4097D421600A18468 /* metro.c in Sources */ = {isa = PBXBuildFile; fileRef = 4BF8D16B0834EDF000C94B91 /* metro.c */; }; | 4B699CB4097D421600A18468 /* metro.c in Sources */ = {isa = PBXBuildFile; fileRef = 4BF8D16B0834EDF000C94B91 /* metro.c */; }; | ||||
4B699CC4097D421600A18468 /* lsp.c in Sources */ = {isa = PBXBuildFile; fileRef = 4BF8D1690834EDE600C94B91 /* lsp.c */; }; | 4B699CC4097D421600A18468 /* lsp.c in Sources */ = {isa = PBXBuildFile; fileRef = 4BF8D1690834EDE600C94B91 /* lsp.c */; }; | ||||
4B699CF6097D421600A18468 /* freewheel.c in Sources */ = {isa = PBXBuildFile; fileRef = 4BF8D1710834EE0F00C94B91 /* freewheel.c */; }; | 4B699CF6097D421600A18468 /* freewheel.c in Sources */ = {isa = PBXBuildFile; fileRef = 4BF8D1710834EE0F00C94B91 /* freewheel.c */; }; | ||||
4B699D06097D421600A18468 /* external_metro.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BF8D1750834EE3600C94B91 /* external_metro.cpp */; }; | |||||
4B699D18097D421600A18468 /* testAtomic.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BF8D23E0834F1C300C94B91 /* testAtomic.cpp */; }; | 4B699D18097D421600A18468 /* testAtomic.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BF8D23E0834F1C300C94B91 /* testAtomic.cpp */; }; | ||||
4B699D2C097D421600A18468 /* testSem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BF8D2470834F20600C94B91 /* testSem.cpp */; }; | 4B699D2C097D421600A18468 /* testSem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BF8D2470834F20600C94B91 /* testSem.cpp */; }; | ||||
4B699D42097D421600A18468 /* zombie.c in Sources */ = {isa = PBXBuildFile; fileRef = 4BF8D1670834EDD900C94B91 /* zombie.c */; }; | 4B699D42097D421600A18468 /* zombie.c in Sources */ = {isa = PBXBuildFile; fileRef = 4BF8D1670834EDD900C94B91 /* zombie.c */; }; | ||||
@@ -1351,7 +1349,6 @@ | |||||
4BF8D1690834EDE600C94B91 /* lsp.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = lsp.c; path = "..//example-clients/lsp.c"; sourceTree = SOURCE_ROOT; }; | 4BF8D1690834EDE600C94B91 /* lsp.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = lsp.c; path = "..//example-clients/lsp.c"; sourceTree = SOURCE_ROOT; }; | ||||
4BF8D16B0834EDF000C94B91 /* metro.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = metro.c; path = "../example-clients/metro.c"; sourceTree = SOURCE_ROOT; }; | 4BF8D16B0834EDF000C94B91 /* metro.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = metro.c; path = "../example-clients/metro.c"; sourceTree = SOURCE_ROOT; }; | ||||
4BF8D1710834EE0F00C94B91 /* freewheel.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = freewheel.c; path = "../example-clients/freewheel.c"; sourceTree = SOURCE_ROOT; }; | 4BF8D1710834EE0F00C94B91 /* freewheel.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = freewheel.c; path = "../example-clients/freewheel.c"; sourceTree = SOURCE_ROOT; }; | ||||
4BF8D1750834EE3600C94B91 /* external_metro.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = external_metro.cpp; path = "../example-clients/external_metro.cpp"; sourceTree = SOURCE_ROOT; }; | |||||
4BF8D1770834EE4800C94B91 /* JackError.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = JackError.h; path = ../common/JackError.h; sourceTree = SOURCE_ROOT; }; | 4BF8D1770834EE4800C94B91 /* JackError.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = JackError.h; path = ../common/JackError.h; sourceTree = SOURCE_ROOT; }; | ||||
4BF8D1830834EE5800C94B91 /* JackTime.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = JackTime.h; path = ../common/JackTime.h; sourceTree = SOURCE_ROOT; }; | 4BF8D1830834EE5800C94B91 /* JackTime.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = JackTime.h; path = ../common/JackTime.h; sourceTree = SOURCE_ROOT; }; | ||||
4BF8D1870834EE7900C94B91 /* JackShmMem.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = JackShmMem.h; path = ../common/JackShmMem.h; sourceTree = SOURCE_ROOT; }; | 4BF8D1870834EE7900C94B91 /* JackShmMem.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = JackShmMem.h; path = ../common/JackShmMem.h; sourceTree = SOURCE_ROOT; }; | ||||
@@ -2111,7 +2108,6 @@ | |||||
4BF8D1690834EDE600C94B91 /* lsp.c */, | 4BF8D1690834EDE600C94B91 /* lsp.c */, | ||||
4BF8D16B0834EDF000C94B91 /* metro.c */, | 4BF8D16B0834EDF000C94B91 /* metro.c */, | ||||
4BF8D1710834EE0F00C94B91 /* freewheel.c */, | 4BF8D1710834EE0F00C94B91 /* freewheel.c */, | ||||
4BF8D1750834EE3600C94B91 /* external_metro.cpp */, | |||||
4B363F3D0DEB0C31001F72D9 /* showtime.c */, | 4B363F3D0DEB0C31001F72D9 /* showtime.c */, | ||||
); | ); | ||||
name = "Simple clients"; | name = "Simple clients"; | ||||
@@ -5454,7 +5450,6 @@ | |||||
isa = PBXSourcesBuildPhase; | isa = PBXSourcesBuildPhase; | ||||
buildActionMask = 2147483647; | buildActionMask = 2147483647; | ||||
files = ( | files = ( | ||||
4B35C56F0D4731D2000DE7AE /* external_metro.cpp in Sources */, | |||||
); | ); | ||||
runOnlyForDeploymentPostprocessing = 0; | runOnlyForDeploymentPostprocessing = 0; | ||||
}; | }; | ||||
@@ -5809,7 +5804,6 @@ | |||||
isa = PBXSourcesBuildPhase; | isa = PBXSourcesBuildPhase; | ||||
buildActionMask = 2147483647; | buildActionMask = 2147483647; | ||||
files = ( | files = ( | ||||
4B699D06097D421600A18468 /* external_metro.cpp in Sources */, | |||||
); | ); | ||||
runOnlyForDeploymentPostprocessing = 0; | runOnlyForDeploymentPostprocessing = 0; | ||||
}; | }; | ||||
@@ -17,12 +17,13 @@ | |||||
*/ | */ | ||||
#include "external_metro.h" | #include "external_metro.h" | ||||
#include <stdio.h> | |||||
typedef jack_default_audio_sample_t sample_t; | typedef jack_default_audio_sample_t sample_t; | ||||
const double PI = 3.14; | const double PI = 3.14; | ||||
static int process_audio (jack_nframes_t nframes, void* arg) | |||||
int ExternalMetro::process_audio (jack_nframes_t nframes, void* arg) | |||||
{ | { | ||||
ExternalMetro* metro = (ExternalMetro*)arg; | ExternalMetro* metro = (ExternalMetro*)arg; | ||||
sample_t *buffer = (sample_t *) jack_port_get_buffer (metro->output_port, nframes); | sample_t *buffer = (sample_t *) jack_port_get_buffer (metro->output_port, nframes); | ||||
@@ -41,6 +42,11 @@ static int process_audio (jack_nframes_t nframes, void* arg) | |||||
return 0; | return 0; | ||||
} | } | ||||
void ExternalMetro::shutdown (void* arg) | |||||
{ | |||||
printf("shutdown called..\n"); | |||||
} | |||||
ExternalMetro::ExternalMetro(int freq, double max_amp, int dur_arg, int bpm, char* client_name) | ExternalMetro::ExternalMetro(int freq, double max_amp, int dur_arg, int bpm, char* client_name) | ||||
{ | { | ||||
sample_t scale; | sample_t scale; | ||||
@@ -48,6 +54,8 @@ ExternalMetro::ExternalMetro(int freq, double max_amp, int dur_arg, int bpm, cha | |||||
double *amp; | double *amp; | ||||
int attack_percent = 1, decay_percent = 10; | int attack_percent = 1, decay_percent = 10; | ||||
char *bpm_string = "bpm"; | char *bpm_string = "bpm"; | ||||
jack_options_t options = JackNullOption; | |||||
jack_status_t status; | |||||
offset = 0; | offset = 0; | ||||
@@ -56,12 +64,13 @@ ExternalMetro::ExternalMetro(int freq, double max_amp, int dur_arg, int bpm, cha | |||||
client_name = (char *) malloc (9 * sizeof (char)); | client_name = (char *) malloc (9 * sizeof (char)); | ||||
strcpy (client_name, "metro"); | strcpy (client_name, "metro"); | ||||
} | } | ||||
if ((client = jack_client_new (client_name)) == 0) { | |||||
if ((client = jack_client_open (client_name, options, &status)) == 0) { | |||||
fprintf (stderr, "jack server not running?\n"); | fprintf (stderr, "jack server not running?\n"); | ||||
return ; | |||||
return; | |||||
} | } | ||||
jack_set_process_callback (client, process_audio, this); | jack_set_process_callback (client, process_audio, this); | ||||
jack_on_shutdown (client, shutdown, this); | |||||
output_port = jack_port_register (client, bpm_string, JACK_DEFAULT_AUDIO_TYPE, JackPortIsOutput, 0); | output_port = jack_port_register (client, bpm_string, JACK_DEFAULT_AUDIO_TYPE, JackPortIsOutput, 0); | ||||
input_port = jack_port_register (client, "metro_in", JACK_DEFAULT_AUDIO_TYPE, JackPortIsInput, 0); | input_port = jack_port_register (client, "metro_in", JACK_DEFAULT_AUDIO_TYPE, JackPortIsInput, 0); | ||||
@@ -127,14 +136,16 @@ int main (int argc, char *argv[]) | |||||
ExternalMetro* client3 = NULL; | ExternalMetro* client3 = NULL; | ||||
ExternalMetro* client4 = NULL; | ExternalMetro* client4 = NULL; | ||||
ExternalMetro* client5 = NULL; | ExternalMetro* client5 = NULL; | ||||
printf("Testing multiple Jack clients in one process: open 5 metro clients...\n"); | |||||
client1 = new ExternalMetro(1200, 0.4, 20, 80, "t1"); | client1 = new ExternalMetro(1200, 0.4, 20, 80, "t1"); | ||||
client2 = new ExternalMetro(600, 0.4, 20, 150, "t2"); | client2 = new ExternalMetro(600, 0.4, 20, 150, "t2"); | ||||
client3 = new ExternalMetro(1000, 0.4, 20, 110, "t3"); | client3 = new ExternalMetro(1000, 0.4, 20, 110, "t3"); | ||||
client4 = new ExternalMetro(400, 0.4, 20, 200, "t4"); | client4 = new ExternalMetro(400, 0.4, 20, 200, "t4"); | ||||
client5 = new ExternalMetro(1500, 0.4, 20, 150, "t5"); | client5 = new ExternalMetro(1500, 0.4, 20, 150, "t5"); | ||||
while ((getchar() != 'q')) { | |||||
printf("Type 'c' to close alls client and go to next test...\n"); | |||||
while ((getchar() != 'c')) { | |||||
sleep(1); | sleep(1); | ||||
}; | }; | ||||
@@ -143,4 +154,32 @@ int main (int argc, char *argv[]) | |||||
delete client3; | delete client3; | ||||
delete client4; | delete client4; | ||||
delete client5; | delete client5; | ||||
printf("Testing quiting the server while a client is running...\n"); | |||||
client1 = new ExternalMetro(1200, 0.4, 20, 80, "t1"); | |||||
printf("Now quit the server, shutdown callback should be called...\n"); | |||||
printf("Type 'c' move on...\n"); | |||||
while ((getchar() != 'c')) { | |||||
sleep(1); | |||||
}; | |||||
printf("Closing client...\n"); | |||||
delete client1; | |||||
printf("Now start the server again...\n"); | |||||
printf("Type 'c' move on...\n"); | |||||
while ((getchar() != 'c')) { | |||||
sleep(1); | |||||
}; | |||||
printf("Opening a new client....\n"); | |||||
client1 = new ExternalMetro(1200, 0.4, 20, 80, "t1"); | |||||
printf("Type 'q' to quit...\n"); | |||||
while ((getchar() != 'q')) { | |||||
sleep(1); | |||||
}; | |||||
delete client1; | |||||
return 0; | |||||
} | } |
@@ -58,6 +58,8 @@ extern "C" | |||||
ExternalMetro(int freq, double max_amp, int dur_arg, int bpm, char* client_name); | ExternalMetro(int freq, double max_amp, int dur_arg, int bpm, char* client_name); | ||||
virtual ~ExternalMetro(); | virtual ~ExternalMetro(); | ||||
static int process_audio (jack_nframes_t nframes, void* arg); | |||||
static void shutdown (void* arg); | |||||
}; | }; | ||||
#ifdef __cplusplus | #ifdef __cplusplus |
@@ -9,6 +9,7 @@ test_programs = { | |||||
'jack_test': ['jack_test.cpp'], | 'jack_test': ['jack_test.cpp'], | ||||
'jack_cpu': ['jack_cpu.c'], | 'jack_cpu': ['jack_cpu.c'], | ||||
'jdelay': ['jdelay.cpp'], | 'jdelay': ['jdelay.cpp'], | ||||
'multiple_metro' : ['external_metro.cpp'], | |||||
} | } | ||||
def build(bld): | def build(bld): | ||||