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

Annotation of /linuxsampler/trunk/src/network/lscpinstrumentloader.cpp

Parent Directory Parent Directory | Revision Log Revision Log


Revision 411 - (hide annotations) (download)
Sat Feb 26 02:01:14 2005 UTC (19 years, 2 months ago) by schoenebeck
File size: 3273 byte(s)
* design change: using now one sampler engine instance and one disk thread
  instance for all sampler channels that are connected to the same audio
  output device (and are using the same engine type of course)
* added EngineFactory / EngineChannelFactory to remove the annoying build
  dependencies e.g. of the lscpserver to the actual sampler engine
  implementations
* bumped version to 0.3.0 (current CVS state is still quite broken,
  previous, stable CVS version was tagged as "v0_2_0" and is also available
  as source tarball)

1 schoenebeck 385 /***************************************************************************
2     * *
3     * Copyright (C) 2005 Christian Schoenebeck *
4     * *
5     * This library is free software; you can redistribute it and/or modify *
6     * it under the terms of the GNU General Public License as published by *
7     * the Free Software Foundation; either version 2 of the License, or *
8     * (at your option) any later version. *
9     * *
10     * This library is distributed in the hope that it will be useful, *
11     * but WITHOUT ANY WARRANTY; without even the implied warranty of *
12     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
13     * GNU General Public License for more details. *
14     * *
15     * You should have received a copy of the GNU General Public License *
16     * along with this library; if not, write to the Free Software *
17     * Foundation, Inc., 59 Temple Place, Suite 330, Boston, *
18     * MA 02111-1307 USA *
19     ***************************************************************************/
20    
21     #include "lscpinstrumentloader.h"
22    
23 schoenebeck 392 LSCPInstrumentLoader::LSCPInstrumentLoader() : Thread(true, false, 0, -4) {
24 schoenebeck 385 pQueue = new RingBuffer<command_t>(INSTRUMENT_LOADER_QUEUE_SIZE);
25     }
26    
27     LSCPInstrumentLoader::~LSCPInstrumentLoader() {
28     if (pQueue) delete pQueue;
29     }
30    
31     /**
32     * @brief Order loading of a new instrument.
33     * The request will go into a queue waiting to be processed by the loader
34     * thread. This method will immediately return and the instrument will be
35     * loaded in the background.
36     *
37     * @param Filename - file name of the instrument
38     * @param uiInstrumentIndex - index of the instrument within the file
39 schoenebeck 411 * @param pEngineChannel - engine channel on which the instrument should be loaded
40 schoenebeck 385 */
41 schoenebeck 411 void LSCPInstrumentLoader::StartNewLoad(String Filename, uint uiInstrumentIndex, EngineChannel* pEngineChannel) {
42 schoenebeck 392 // already tell the engine which instrument to load
43 schoenebeck 411 pEngineChannel->PrepareLoadInstrument(Filename.c_str(), uiInstrumentIndex);
44 schoenebeck 392
45 schoenebeck 385 command_t cmd;
46 schoenebeck 411 cmd.pEngineChannel = pEngineChannel;
47 schoenebeck 385 pQueue->push(&cmd);
48 schoenebeck 390 StartThread(); // ensure thread is running
49     conditionJobsLeft.Set(true); // wake up thread
50 schoenebeck 385 }
51    
52     // Entry point for the InstrumentLoader Thread.
53     int LSCPInstrumentLoader::Main() {
54 schoenebeck 390 while (true) {
55     while (pQueue->read_space()) {
56     command_t cmd;
57     pQueue->pop(&cmd);
58     try {
59 schoenebeck 411 cmd.pEngineChannel->LoadInstrument();
60 schoenebeck 390 }
61     catch (LinuxSamplerException e) {
62     e.PrintMessage();
63     }
64 schoenebeck 385 }
65 schoenebeck 390
66     // nothing left to do, sleep until new jobs arrive
67     conditionJobsLeft.WaitIf(false);
68     // reset flag
69     conditionJobsLeft.Set(false);
70     // unlock condition object so it can be turned again by other thread
71     conditionJobsLeft.Unlock();
72 schoenebeck 385 }
73     }

  ViewVC Help
Powered by ViewVC