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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1509 - (show annotations) (download)
Thu Nov 22 11:10:44 2007 UTC (12 years, 11 months ago) by capela
File size: 7771 byte(s)
* Audio routing table is initially hidden in the dialog, when
  creating a new sampler channel.

* README requirements and configuration notes update.

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(
279 pInstrInfo->instrument_name);
280 m_sInstrumentFile = qsamplerUtilities::lscpEscapedPathToPosix(
281 pInstrInfo->instrument_file);
282 m_iInstrumentNr = pInstrInfo->instrument_nr;
283 m_fVolume = pInstrInfo->volume;
284
285 switch (pInstrInfo->load_mode) {
286 case LSCP_LOAD_PERSISTENT:
287 m_iLoadMode = 3;
288 break;
289 case LSCP_LOAD_ON_DEMAND_HOLD:
290 m_iLoadMode = 2;
291 break;
292 case LSCP_LOAD_ON_DEMAND:
293 m_iLoadMode = 1;
294 break;
295 case LSCP_LOAD_DEFAULT:
296 default:
297 m_iLoadMode = 0;
298 break;
299 }
300
301 // Fix something.
302 if (m_sName.isEmpty())
303 m_sName = m_sInstrumentName;
304
305 return true;
306
307 #else
308
309 return false;
310
311 #endif
312 }
313
314
315 // Instrument map name enumerator.
316 QStringList qsamplerInstrument::getMapNames (void)
317 {
318 QStringList maps;
319
320 MainForm *pMainForm = MainForm::getInstance();
321 if (pMainForm == NULL)
322 return maps;
323 if (pMainForm->client() == NULL)
324 return maps;
325
326 #ifdef CONFIG_MIDI_INSTRUMENT
327 int *piMaps = ::lscp_list_midi_instrument_maps(pMainForm->client());
328 if (piMaps == NULL) {
329 if (::lscp_client_get_errno(pMainForm->client()))
330 pMainForm->appendMessagesClient("lscp_list_midi_instruments");
331 } else {
332 for (int iMap = 0; piMaps[iMap] >= 0; iMap++) {
333 const QString& sMapName = getMapName(piMaps[iMap]);
334 if (!sMapName.isEmpty())
335 maps.append(sMapName);
336 }
337 }
338 #endif
339
340 return maps;
341 }
342
343 // Instrument map name enumerator.
344 QString qsamplerInstrument::getMapName ( int iMidiMap )
345 {
346 QString sMapName;
347
348 MainForm *pMainForm = MainForm::getInstance();
349 if (pMainForm == NULL)
350 return sMapName;
351 if (pMainForm->client() == NULL)
352 return sMapName;
353
354 #ifdef CONFIG_MIDI_INSTRUMENT
355 const char *pszMapName
356 = ::lscp_get_midi_instrument_map_name(pMainForm->client(), iMidiMap);
357 if (pszMapName == NULL) {
358 pszMapName = " -";
359 if (::lscp_client_get_errno(pMainForm->client()))
360 pMainForm->appendMessagesClient("lscp_get_midi_instrument_name");
361 }
362 sMapName = QString("%1 - %2").arg(iMidiMap)
363 .arg(qsamplerUtilities::lscpEscapedTextToRaw(pszMapName));
364 #endif
365
366 return sMapName;
367 }
368
369
370 // end of qsamplerInstrument.cpp

  ViewVC Help
Powered by ViewVC