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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1505 - (show 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 // qsamplerInstrument.cpp
2 //
3 /****************************************************************************
4 Copyright (C) 2004-2007, rncbc aka Rui Nuno Capela. All rights reserved.
5 Copyright (C) 2007, Christian Schoenebeck
6
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 #include "qsamplerUtilities.h"
26
27 #include "qsamplerMainForm.h"
28
29
30 using namespace QSampler;
31
32 //-------------------------------------------------------------------------
33 // qsamplerInstrument - MIDI instrument map structure.
34 //
35
36 // Constructor.
37 qsamplerInstrument::qsamplerInstrument ( int iMap, int iBank, int iProg )
38 {
39 m_iMap = iMap;
40 m_iBank = iBank;
41 m_iProg = iProg;
42 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 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 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 void qsamplerInstrument::setProg ( int iProg )
77 {
78 m_iProg = iProg;
79 }
80
81 int qsamplerInstrument::prog (void) const
82 {
83 return m_iProg;
84 }
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 bool qsamplerInstrument::mapInstrument (void)
161 {
162 #ifdef CONFIG_MIDI_INSTRUMENT
163
164 MainForm *pMainForm = MainForm::getInstance();
165 if (pMainForm == NULL)
166 return false;
167 if (pMainForm->client() == NULL)
168 return false;
169
170 if (m_iMap < 0 || m_iBank < 0 || m_iProg < 0)
171 return false;
172
173 lscp_midi_instrument_t instr;
174
175 instr.map = m_iMap;
176 instr.bank = (m_iBank & 0x0fff);
177 instr.prog = (m_iProg & 0x7f);
178
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 m_sEngineName.toUtf8().constData(),
198 qsamplerUtilities::lscpEscapePath(
199 m_sInstrumentFile).toUtf8().constData(),
200 m_iInstrumentNr, m_fVolume, load_mode,
201 m_sName.toUtf8().constData()) != LSCP_OK) {
202 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 bool qsamplerInstrument::unmapInstrument (void)
217 {
218 #ifdef CONFIG_MIDI_INSTRUMENT
219
220 if (m_iMap < 0 || m_iBank < 0 || m_iProg < 0)
221 return false;
222
223 MainForm *pMainForm = MainForm::getInstance();
224 if (pMainForm == NULL)
225 return false;
226 if (pMainForm->client() == NULL)
227 return false;
228
229 lscp_midi_instrument_t instr;
230
231 instr.map = m_iMap;
232 instr.bank = (m_iBank & 0x0fff);
233 instr.prog = (m_iProg & 0x7f);
234
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 bool qsamplerInstrument::getInstrument (void)
251 {
252 #ifdef CONFIG_MIDI_INSTRUMENT
253
254 if (m_iMap < 0 || m_iBank < 0 || m_iProg < 0)
255 return false;
256
257 MainForm *pMainForm = MainForm::getInstance();
258 if (pMainForm == NULL)
259 return false;
260 if (pMainForm->client() == NULL)
261 return false;
262
263 lscp_midi_instrument_t instr;
264
265 instr.map = m_iMap;
266 instr.bank = (m_iBank & 0x0fff);
267 instr.prog = (m_iProg & 0x7f);
268
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 m_sName = qsamplerUtilities::lscpEscapedTextToRaw(pInstrInfo->name);
277 m_sEngineName = pInstrInfo->engine_name;
278 m_sInstrumentName = qsamplerUtilities::lscpEscapedTextToRaw(pInstrInfo->instrument_name);
279 m_sInstrumentFile = qsamplerUtilities::lscpEscapedPathToPosix(pInstrInfo->instrument_file);
280 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 // Instrument map name enumerator.
314 QStringList qsamplerInstrument::getMapNames (void)
315 {
316 QStringList maps;
317
318 MainForm *pMainForm = MainForm::getInstance();
319 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 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 }
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 MainForm *pMainForm = MainForm::getInstance();
347 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 if (pszMapName == NULL) {
356 pszMapName = " -";
357 if (::lscp_client_get_errno(pMainForm->client()))
358 pMainForm->appendMessagesClient("lscp_get_midi_instrument_name");
359 }
360 sMapName = QString("%1 - %2").arg(iMidiMap).arg(qsamplerUtilities::lscpEscapedTextToRaw(pszMapName));
361 #endif
362
363 return sMapName;
364 }
365
366
367 // end of qsamplerInstrument.cpp

  ViewVC Help
Powered by ViewVC