/[svn]/qsampler/trunk/src/qsamplerInstrument.cpp
ViewVC logotype

Annotation of /qsampler/trunk/src/qsamplerInstrument.cpp

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1505 - (hide annotations) (download)
Wed Nov 21 18:37:40 2007 UTC (16 years, 5 months ago) by capela
File size: 7786 byte(s)
- Qt4 migration: small step to squash bug leftovers,
  plenty still in the horizon.

1 capela 964 // qsamplerInstrument.cpp
2     //
3     /****************************************************************************
4 schoenebeck 1386 Copyright (C) 2004-2007, rncbc aka Rui Nuno Capela. All rights reserved.
5 capela 1464 Copyright (C) 2007, Christian Schoenebeck
6 capela 964
7     This program is free software; you can redistribute it and/or
8     modify it under the terms of the GNU General Public License
9     as published by the Free Software Foundation; either version 2
10     of the License, or (at your option) any later version.
11    
12     This program is distributed in the hope that it will be useful,
13     but WITHOUT ANY WARRANTY; without even the implied warranty of
14     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15     GNU General Public License for more details.
16    
17     You should have received a copy of the GNU General Public License along
18     with this program; if not, write to the Free Software Foundation, Inc.,
19     51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
20    
21     *****************************************************************************/
22    
23     #include "qsamplerAbout.h"
24     #include "qsamplerInstrument.h"
25 capela 1499 #include "qsamplerUtilities.h"
26 capela 964
27     #include "qsamplerMainForm.h"
28    
29 capela 1499
30 schoenebeck 1461 using namespace QSampler;
31 capela 964
32     //-------------------------------------------------------------------------
33     // qsamplerInstrument - MIDI instrument map structure.
34     //
35    
36     // Constructor.
37 capela 980 qsamplerInstrument::qsamplerInstrument ( int iMap, int iBank, int iProg )
38 capela 964 {
39 capela 980 m_iMap = iMap;
40 capela 964 m_iBank = iBank;
41 capela 980 m_iProg = iProg;
42 capela 964 m_iInstrumentNr = 0;;
43     m_fVolume = 1.0f;
44     m_iLoadMode = 0;
45     }
46    
47     // Default destructor.
48     qsamplerInstrument::~qsamplerInstrument (void)
49     {
50     }
51    
52    
53     // Instrument accessors.
54 capela 980 void qsamplerInstrument::setMap ( int iMap )
55     {
56     m_iMap = iMap;
57     }
58    
59     int qsamplerInstrument::map (void) const
60     {
61     return m_iMap;
62     }
63    
64    
65 capela 964 void qsamplerInstrument::setBank ( int iBank )
66     {
67     m_iBank = iBank;
68     }
69    
70     int qsamplerInstrument::bank (void) const
71     {
72     return m_iBank;
73     }
74    
75    
76 capela 980 void qsamplerInstrument::setProg ( int iProg )
77 capela 964 {
78 capela 980 m_iProg = iProg;
79 capela 964 }
80    
81 capela 980 int qsamplerInstrument::prog (void) const
82 capela 964 {
83 capela 980 return m_iProg;
84 capela 964 }
85    
86    
87     void qsamplerInstrument::setName ( const QString& sName )
88     {
89     m_sName = sName;
90     }
91    
92     const QString& qsamplerInstrument::name (void) const
93     {
94     return m_sName;
95     }
96    
97    
98     void qsamplerInstrument::setEngineName ( const QString& sEngineName )
99     {
100     m_sEngineName = sEngineName;
101     }
102    
103     const QString& qsamplerInstrument::engineName (void) const
104     {
105     return m_sEngineName;
106     }
107    
108    
109     void qsamplerInstrument::setInstrumentFile ( const QString& sInstrumentFile )
110     {
111     m_sInstrumentFile = sInstrumentFile;
112     }
113    
114     const QString& qsamplerInstrument::instrumentFile (void) const
115     {
116     return m_sInstrumentFile;
117     }
118    
119    
120     const QString& qsamplerInstrument::instrumentName (void) const
121     {
122     return m_sInstrumentName;
123     }
124    
125    
126     void qsamplerInstrument::setInstrumentNr ( int iInstrumentNr )
127     {
128     m_iInstrumentNr = iInstrumentNr;
129     }
130    
131     int qsamplerInstrument::instrumentNr (void) const
132     {
133     return m_iInstrumentNr;
134     }
135    
136    
137     void qsamplerInstrument::setVolume ( float fVolume )
138     {
139     m_fVolume = fVolume;
140     }
141    
142     float qsamplerInstrument::volume (void) const
143     {
144     return m_fVolume;
145     }
146    
147    
148     void qsamplerInstrument::setLoadMode ( int iLoadMode )
149     {
150     m_iLoadMode = iLoadMode;
151     }
152    
153     int qsamplerInstrument::loadMode (void) const
154     {
155     return m_iLoadMode;
156     }
157    
158    
159     // Sync methods.
160 capela 980 bool qsamplerInstrument::mapInstrument (void)
161 capela 964 {
162     #ifdef CONFIG_MIDI_INSTRUMENT
163    
164 schoenebeck 1461 MainForm *pMainForm = MainForm::getInstance();
165 capela 964 if (pMainForm == NULL)
166     return false;
167     if (pMainForm->client() == NULL)
168     return false;
169    
170 capela 980 if (m_iMap < 0 || m_iBank < 0 || m_iProg < 0)
171 capela 964 return false;
172    
173     lscp_midi_instrument_t instr;
174    
175 capela 980 instr.map = m_iMap;
176     instr.bank = (m_iBank & 0x0fff);
177     instr.prog = (m_iProg & 0x7f);
178 capela 964
179     lscp_load_mode_t load_mode;
180     switch (m_iLoadMode) {
181     case 3:
182     load_mode = LSCP_LOAD_PERSISTENT;
183     break;
184     case 2:
185     load_mode = LSCP_LOAD_ON_DEMAND_HOLD;
186     break;
187     case 1:
188     load_mode = LSCP_LOAD_ON_DEMAND;
189     break;
190     case 0:
191     default:
192     load_mode = LSCP_LOAD_DEFAULT;
193     break;
194     }
195    
196     if (::lscp_map_midi_instrument(pMainForm->client(), &instr,
197 capela 1499 m_sEngineName.toUtf8().constData(),
198     qsamplerUtilities::lscpEscapePath(
199     m_sInstrumentFile).toUtf8().constData(),
200 capela 1505 m_iInstrumentNr, m_fVolume, load_mode,
201 capela 1499 m_sName.toUtf8().constData()) != LSCP_OK) {
202 capela 964 pMainForm->appendMessagesClient("lscp_map_midi_instrument");
203     return false;
204     }
205    
206     return true;
207    
208     #else
209    
210     return false;
211    
212     #endif
213     }
214    
215    
216 capela 980 bool qsamplerInstrument::unmapInstrument (void)
217 capela 964 {
218     #ifdef CONFIG_MIDI_INSTRUMENT
219    
220 capela 980 if (m_iMap < 0 || m_iBank < 0 || m_iProg < 0)
221 capela 964 return false;
222    
223 schoenebeck 1461 MainForm *pMainForm = MainForm::getInstance();
224 capela 964 if (pMainForm == NULL)
225     return false;
226     if (pMainForm->client() == NULL)
227     return false;
228    
229     lscp_midi_instrument_t instr;
230    
231 capela 980 instr.map = m_iMap;
232     instr.bank = (m_iBank & 0x0fff);
233     instr.prog = (m_iProg & 0x7f);
234 capela 964
235     if (::lscp_unmap_midi_instrument(pMainForm->client(), &instr) != LSCP_OK) {
236     pMainForm->appendMessagesClient("lscp_unmap_midi_instrument");
237     return false;
238     }
239    
240     return true;
241    
242     #else
243    
244     return false;
245    
246     #endif
247     }
248    
249    
250 capela 980 bool qsamplerInstrument::getInstrument (void)
251 capela 964 {
252     #ifdef CONFIG_MIDI_INSTRUMENT
253    
254 capela 980 if (m_iMap < 0 || m_iBank < 0 || m_iProg < 0)
255 capela 964 return false;
256    
257 schoenebeck 1461 MainForm *pMainForm = MainForm::getInstance();
258 capela 964 if (pMainForm == NULL)
259     return false;
260     if (pMainForm->client() == NULL)
261     return false;
262    
263     lscp_midi_instrument_t instr;
264    
265 capela 980 instr.map = m_iMap;
266     instr.bank = (m_iBank & 0x0fff);
267     instr.prog = (m_iProg & 0x7f);
268 capela 964
269     lscp_midi_instrument_info_t *pInstrInfo
270     = ::lscp_get_midi_instrument_info(pMainForm->client(), &instr);
271     if (pInstrInfo == NULL) {
272     pMainForm->appendMessagesClient("lscp_get_midi_instrument_info");
273     return false;
274     }
275    
276 schoenebeck 1402 m_sName = qsamplerUtilities::lscpEscapedTextToRaw(pInstrInfo->name);
277 capela 964 m_sEngineName = pInstrInfo->engine_name;
278 schoenebeck 1402 m_sInstrumentName = qsamplerUtilities::lscpEscapedTextToRaw(pInstrInfo->instrument_name);
279     m_sInstrumentFile = qsamplerUtilities::lscpEscapedPathToPosix(pInstrInfo->instrument_file);
280 capela 964 m_iInstrumentNr = pInstrInfo->instrument_nr;
281     m_fVolume = pInstrInfo->volume;
282    
283     switch (pInstrInfo->load_mode) {
284     case LSCP_LOAD_PERSISTENT:
285     m_iLoadMode = 3;
286     break;
287     case LSCP_LOAD_ON_DEMAND_HOLD:
288     m_iLoadMode = 2;
289     break;
290     case LSCP_LOAD_ON_DEMAND:
291     m_iLoadMode = 1;
292     break;
293     case LSCP_LOAD_DEFAULT:
294     default:
295     m_iLoadMode = 0;
296     break;
297     }
298    
299     // Fix something.
300     if (m_sName.isEmpty())
301     m_sName = m_sInstrumentName;
302    
303     return true;
304    
305     #else
306    
307     return false;
308    
309     #endif
310     }
311    
312    
313 capela 980 // Instrument map name enumerator.
314     QStringList qsamplerInstrument::getMapNames (void)
315     {
316     QStringList maps;
317    
318 schoenebeck 1461 MainForm *pMainForm = MainForm::getInstance();
319 capela 980 if (pMainForm == NULL)
320     return maps;
321     if (pMainForm->client() == NULL)
322     return maps;
323    
324     #ifdef CONFIG_MIDI_INSTRUMENT
325     int *piMaps = ::lscp_list_midi_instrument_maps(pMainForm->client());
326 capela 987 if (piMaps == NULL) {
327     if (::lscp_client_get_errno(pMainForm->client()))
328     pMainForm->appendMessagesClient("lscp_list_midi_instruments");
329     } else {
330     for (int iMap = 0; piMaps[iMap] >= 0; iMap++) {
331     const QString& sMapName = getMapName(piMaps[iMap]);
332     if (!sMapName.isEmpty())
333     maps.append(sMapName);
334     }
335 capela 980 }
336     #endif
337    
338     return maps;
339     }
340    
341     // Instrument map name enumerator.
342     QString qsamplerInstrument::getMapName ( int iMidiMap )
343     {
344     QString sMapName;
345    
346 schoenebeck 1461 MainForm *pMainForm = MainForm::getInstance();
347 capela 980 if (pMainForm == NULL)
348     return sMapName;
349     if (pMainForm->client() == NULL)
350     return sMapName;
351    
352     #ifdef CONFIG_MIDI_INSTRUMENT
353     const char *pszMapName
354     = ::lscp_get_midi_instrument_map_name(pMainForm->client(), iMidiMap);
355 capela 987 if (pszMapName == NULL) {
356 capela 980 pszMapName = " -";
357 capela 987 if (::lscp_client_get_errno(pMainForm->client()))
358     pMainForm->appendMessagesClient("lscp_get_midi_instrument_name");
359     }
360 schoenebeck 1402 sMapName = QString("%1 - %2").arg(iMidiMap).arg(qsamplerUtilities::lscpEscapedTextToRaw(pszMapName));
361 capela 980 #endif
362    
363     return sMapName;
364     }
365    
366    
367 capela 964 // end of qsamplerInstrument.cpp

  ViewVC Help
Powered by ViewVC