/[svn]/linuxsampler/trunk/src/linuxsampler.cpp
ViewVC logotype

Diff of /linuxsampler/trunk/src/linuxsampler.cpp

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 9 by schoenebeck, Wed Nov 5 14:47:10 2003 UTC revision 13 by schoenebeck, Fri Nov 21 15:07:23 2003 UTC
# Line 25  Line 25 
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"
# Line 50  AudioIO*         pAudioIO; Line 51  AudioIO*         pAudioIO;
51  DiskThread*      pDiskThread;  DiskThread*      pDiskThread;
52  AudioThread*     pAudioThread;  AudioThread*     pAudioThread;
53  MidiIn*          pMidiInThread;  MidiIn*          pMidiInThread;
   
54  RIFF::File*      pRIFF;  RIFF::File*      pRIFF;
55  gig::File*       pGig;  gig::File*       pGig;
56  gig::Instrument* pInstrument;  gig::Instrument* pInstrument;
57    int              num_fragments;
58    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);
63    
 int midi_non_blocking;  
 int num_fragments;  
 int fragmentsize;  
 bool instrument_is_DLS;  
 bool instruemtn_is_gig;  
 char midi_device[40];  
   
64  int main(int argc, char **argv) {  int main(int argc, char **argv) {
65      pAudioIO = NULL;      pAudioIO = NULL;
66      pRIFF    = NULL;      pRIFF    = NULL;
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;
     midi_non_blocking = 1;  
74      num_fragments     = AUDIO_FRAGMENTS;      num_fragments     = AUDIO_FRAGMENTS;
75      fragmentsize      = AUDIO_FRAGMENTSIZE;      fragmentsize      = AUDIO_FRAGMENTSIZE;
     strcpy(midi_device, "/dev/midi00");  
76    
77      // parse and assign command line options      // parse and assign command line options
78      parse_options(argc, argv);      parse_options(argc, argv);
79    
80      if (patch_format != patch_format_gig) {      if (patch_format != patch_format_gig) {
81          printf("Sorry only Gigasampler loading migrated in LinuxSampler so far, use --gig\n");          printf("Sorry only Gigasampler loading migrated in LinuxSampler so far, use --gig to load a .gig file!\n");
         printf("to load a .gig file!\n");  
82          return EXIT_FAILURE;          return EXIT_FAILURE;
83      }      }
84    
85      dmsg(("Initializing audio output..."));      dmsg(1,("Initializing audio output..."));
86      pAudioIO = new AudioIO();      pAudioIO = new AudioIO();
87      int error = pAudioIO->Initialize(AUDIO_CHANNELS, AUDIO_SAMPLERATE, num_fragments, fragmentsize);      int error = pAudioIO->Initialize(AUDIO_CHANNELS, AUDIO_SAMPLERATE, num_fragments, fragmentsize);
88      if (error) return EXIT_FAILURE;      if (error) return EXIT_FAILURE;
89      dmsg(("OK\n"));      dmsg(1,("OK\n"));
90    
91      // Loading gig file      // Loading gig file
92      try {      try {
# Line 118  int main(int argc, char **argv) { Line 112  int main(int argc, char **argv) {
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    
115      dmsg(("Starting disk thread..."));      dmsg(1,("Starting disk thread..."));
116      pDiskThread->StartThread();      pDiskThread->StartThread();
117      dmsg(("OK\n"));      dmsg(1,("OK\n"));
118      dmsg(("Starting MIDI in thread..."));      dmsg(1,("Starting MIDI in thread..."));
119      pMidiInThread->StartThread();      pMidiInThread->StartThread();
120      dmsg(("OK\n"));      dmsg(1,("OK\n"));
121    
122      sleep(1);      sleep(1);
123      dmsg(("Starting audio thread..."));      dmsg(1,("Starting audio thread..."));
124      pAudioThread->StartThread();      pAudioThread->StartThread();
125      dmsg(("OK\n"));      dmsg(1,("OK\n"));
126    
127      printf("LinuxSampler initialization completed.\n");      printf("LinuxSampler initialization completed.\n");
128    
129      while(true) sleep(1000);      while(true)  {
130          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);
135        }
136    
137      return EXIT_SUCCESS;      return EXIT_SUCCESS;
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;

Legend:
Removed from v.9  
changed lines
  Added in v.13

  ViewVC Help
Powered by ViewVC