25 |
#include <unistd.h> |
#include <unistd.h> |
26 |
#include <getopt.h> |
#include <getopt.h> |
27 |
#include <signal.h> |
#include <signal.h> |
28 |
|
#include <pthread.h> |
29 |
|
|
30 |
#include "global.h" |
#include "global.h" |
31 |
#include "audioio.h" |
#include "audioio.h" |
56 |
gig::Instrument* pInstrument; |
gig::Instrument* pInstrument; |
57 |
int num_fragments; |
int num_fragments; |
58 |
int fragmentsize; |
int fragmentsize; |
59 |
|
pthread_t signalhandlerthread; |
60 |
|
|
61 |
void parse_options(int argc, char **argv); |
void parse_options(int argc, char **argv); |
62 |
void signal_handler(int signal); |
void signal_handler(int signal); |
67 |
pGig = NULL; |
pGig = NULL; |
68 |
|
|
69 |
// setting signal handler for catching SIGINT (thus e.g. <CTRL><C>) |
// setting signal handler for catching SIGINT (thus e.g. <CTRL><C>) |
70 |
|
signalhandlerthread = pthread_self(); |
71 |
signal(SIGINT, signal_handler); |
signal(SIGINT, signal_handler); |
72 |
|
|
73 |
patch_format = patch_format_unknown; |
patch_format = patch_format_unknown; |
108 |
return EXIT_FAILURE; |
return EXIT_FAILURE; |
109 |
} |
} |
110 |
|
|
111 |
DiskThread* pDiskThread = new DiskThread(((pAudioIO->FragmentSize << MAX_PITCH) << 1) + 3); //FIXME: assuming stereo |
DiskThread* pDiskThread = new DiskThread(((pAudioIO->FragmentSize << MAX_PITCH) << 1) + 6); //FIXME: assuming stereo |
112 |
AudioThread* pAudioThread = new AudioThread(pAudioIO, pDiskThread, pInstrument); |
AudioThread* pAudioThread = new AudioThread(pAudioIO, pDiskThread, pInstrument); |
113 |
MidiIn* pMidiInThread = new MidiIn(pAudioThread); |
MidiIn* pMidiInThread = new MidiIn(pAudioThread); |
114 |
|
|
127 |
printf("LinuxSampler initialization completed.\n"); |
printf("LinuxSampler initialization completed.\n"); |
128 |
|
|
129 |
while(true) { |
while(true) { |
130 |
printf("Voices: %3.3d Streams: %3.3d \r",pAudioThread->ActiveVoiceCount, pDiskThread->ActiveStreamCount); fflush(stdout); |
printf("Voices: %3.3d (Max: %3.3d) Streams: %3.3d (Max: %3.3d, Unused: %3.3d)\r", |
131 |
|
pAudioThread->ActiveVoiceCount, pAudioThread->ActiveVoiceCountMax, |
132 |
|
pDiskThread->ActiveStreamCount, pDiskThread->ActiveStreamCountMax, Stream::GetUnusedStreams()); |
133 |
|
fflush(stdout); |
134 |
usleep(500000); |
usleep(500000); |
135 |
} |
} |
136 |
|
|
138 |
} |
} |
139 |
|
|
140 |
void signal_handler(int signal) { |
void signal_handler(int signal) { |
141 |
if (signal == SIGINT) { |
if (pthread_equal(pthread_self(), signalhandlerthread) && signal == SIGINT) { |
142 |
// stop all threads |
// stop all threads |
143 |
if (pMidiInThread) pMidiInThread->StopThread(); |
if (pMidiInThread) pMidiInThread->StopThread(); |
144 |
if (pAudioThread) pAudioThread->StopThread(); |
if (pAudioThread) pAudioThread->StopThread(); |
145 |
if (pDiskThread) pDiskThread->StopThread(); |
if (pDiskThread) pDiskThread->StopThread(); |
146 |
|
|
|
sleep(1); |
|
|
|
|
147 |
// free all resources |
// free all resources |
148 |
if (pMidiInThread) delete pMidiInThread; |
if (pMidiInThread) delete pMidiInThread; |
149 |
if (pAudioThread) delete pAudioThread; |
if (pAudioThread) delete pAudioThread; |