30 |
#include <string> |
#include <string> |
31 |
|
|
32 |
#include "global.h" |
#include "global.h" |
|
#include "audioio.h" |
|
33 |
#include "diskthread.h" |
#include "diskthread.h" |
34 |
#include "audiothread.h" |
#include "audiothread.h" |
35 |
|
#include "alsaio.h" |
36 |
|
#include "jackio.h" |
37 |
#include "midiin.h" |
#include "midiin.h" |
38 |
#include "stream.h" |
#include "stream.h" |
39 |
#include "RIFF.h" |
#include "RIFF.h" |
91 |
return EXIT_FAILURE; |
return EXIT_FAILURE; |
92 |
} |
} |
93 |
|
|
94 |
dmsg(1,("Initializing audio output...")); |
#if HAVE_JACK |
95 |
pAudioIO = new AudioIO(); |
dmsg(1,("Initializing audio output (Jack)...")); |
96 |
int error = pAudioIO->Initialize(AUDIO_CHANNELS, AUDIO_SAMPLERATE, num_fragments, fragmentsize); |
pAudioIO = new JackIO(); |
97 |
|
int error = ((JackIO*)pAudioIO)->Initialize(AUDIO_CHANNELS); |
98 |
|
if (error) { |
99 |
|
dmsg(1,("Trying Alsa output instead.\n")); |
100 |
|
dmsg(1,("Initializing audio output (Alsa)...")); |
101 |
|
pAudioIO = new AlsaIO(); |
102 |
|
int error = ((AlsaIO*)pAudioIO)->Initialize(AUDIO_CHANNELS, AUDIO_SAMPLERATE, num_fragments, fragmentsize); |
103 |
|
if (error) return EXIT_FAILURE; |
104 |
|
} |
105 |
|
dmsg(1,("OK\n")); |
106 |
|
#else // Alsa only |
107 |
|
dmsg(1,("Initializing audio output (Alsa)...")); |
108 |
|
pAudioIO = new AlsaIO(); |
109 |
|
int error = ((AlsaIO*)pAudioIO)->Initialize(AUDIO_CHANNELS, AUDIO_SAMPLERATE, num_fragments, fragmentsize); |
110 |
if (error) return EXIT_FAILURE; |
if (error) return EXIT_FAILURE; |
111 |
dmsg(1,("OK\n")); |
dmsg(1,("OK\n")); |
112 |
|
#endif // HAVE_JACK |
113 |
|
|
114 |
// Loading gig file |
// Loading gig file |
115 |
try { |
try { |
135 |
return EXIT_FAILURE; |
return EXIT_FAILURE; |
136 |
} |
} |
137 |
|
|
138 |
DiskThread* pDiskThread = new DiskThread(((pAudioIO->FragmentSize << MAX_PITCH) << 1) + 6); //FIXME: assuming stereo |
DiskThread* pDiskThread = new DiskThread(((pAudioIO->MaxSamplesPerCycle() << MAX_PITCH) << 1) + 6); //FIXME: assuming stereo |
139 |
AudioThread* pAudioThread = new AudioThread(pAudioIO, pDiskThread, pInstrument); |
AudioThread* pAudioThread = new AudioThread(pAudioIO, pDiskThread, pInstrument); |
140 |
MidiIn* pMidiInThread = new MidiIn(pAudioThread); |
MidiIn* pMidiInThread = new MidiIn(pAudioThread); |
141 |
|
|
150 |
sleep(1); |
sleep(1); |
151 |
dmsg(1,("Starting audio thread...")); |
dmsg(1,("Starting audio thread...")); |
152 |
pAudioThread->Volume = volume; |
pAudioThread->Volume = volume; |
153 |
pAudioThread->StartThread(); |
pAudioIO->AssignEngine(pAudioThread); |
154 |
|
pAudioIO->Activate(); |
155 |
dmsg(1,("OK\n")); |
dmsg(1,("OK\n")); |
156 |
|
|
157 |
printf("LinuxSampler initialization completed.\n"); |
printf("LinuxSampler initialization completed.\n"); |
170 |
void signal_handler(int signal) { |
void signal_handler(int signal) { |
171 |
if (pthread_equal(pthread_self(), signalhandlerthread) && signal == SIGINT) { |
if (pthread_equal(pthread_self(), signalhandlerthread) && signal == SIGINT) { |
172 |
// stop all threads |
// stop all threads |
173 |
|
if (pAudioIO) pAudioIO->Close(); |
174 |
if (pMidiInThread) pMidiInThread->StopThread(); |
if (pMidiInThread) pMidiInThread->StopThread(); |
|
if (pAudioThread) pAudioThread->StopThread(); |
|
175 |
if (pDiskThread) pDiskThread->StopThread(); |
if (pDiskThread) pDiskThread->StopThread(); |
176 |
|
|
177 |
// free all resources |
// free all resources |