/[svn]/web/trunk/www.linuxsampler.org/api/draft-linuxsampler-protocol.html
ViewVC logotype

Diff of /web/trunk/www.linuxsampler.org/api/draft-linuxsampler-protocol.html

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

revision 3502 by schoenebeck, Wed Jul 15 21:41:19 2015 UTC revision 3503 by schoenebeck, Mon Mar 11 15:46:15 2019 UTC
# Line 1  Line 1 
1  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
2  <html lang="en"><head><title>LinuxSampler Control Protocol</title>    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
3  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">  
4  <meta name="description" content="LinuxSampler Control Protocol">  <html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
5  <meta name="keywords" content="LSCP">  <head profile="http://www.w3.org/2006/03/hcard http://dublincore.org/documents/2008/08/04/dc-html/">
6  <meta name="generator" content="xml2rfc v1.37pre1 (http://xml.resource.org/)">    <meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
7  <style type='text/css'><!--  
8          body {    <title>LinuxSampler Control Protocol</title>
9                  font-family: verdana, charcoal, helvetica, arial, sans-serif;  
10                  font-size: small; color: #000; background-color: #FFF;    <style type="text/css" title="Xml2Rfc (sans serif)">
11                  margin: 2em;    /*<![CDATA[*/
12          }            a {
13          h1, h2, h3, h4, h5, h6 {            text-decoration: none;
14                  font-family: helvetica, monaco, "MS Sans Serif", arial, sans-serif;            }
15                  font-weight: bold; font-style: normal;        /* info code from SantaKlauss at http://www.madaboutstyle.com/tooltip2.html */
16          }        a.info {
17          h1 { color: #900; background-color: transparent; text-align: right; }            /* This is the key. */
18          h3 { color: #333; background-color: transparent; }            position: relative;
19              z-index: 24;
20          td.RFCbug {            text-decoration: none;
21                  font-size: x-small; text-decoration: none;        }
22                  width: 30px; height: 30px; padding-top: 2px;        a.info:hover {
23                  text-align: justify; vertical-align: middle;            z-index: 25;
24                  background-color: #000;            color: #FFF; background-color: #900;
25          }        }
26          td.RFCbug span.RFC {        a.info span { display: none; }
27                  font-family: monaco, charcoal, geneva, "MS Sans Serif", helvetica, verdana, sans-serif;        a.info:hover span.info {
28                  font-weight: bold; color: #666;            /* The span will display just on :hover state. */
29          }            display: block;
30          td.RFCbug span.hotText {            position: absolute;
31                  font-family: charcoal, monaco, geneva, "MS Sans Serif", helvetica, verdana, sans-serif;            font-size: smaller;
32                  font-weight: normal; text-align: center; color: #FFF;            top: 2em; left: -5em; width: 15em;
33          }            padding: 2px; border: 1px solid #333;
34              color: #900; background-color: #EEE;
35          table.TOCbug { width: 30px; height: 15px; }            text-align: left;
36          td.TOCbug {        }
37                  text-align: center; width: 30px; height: 15px;            a.smpl {
38                  color: #FFF; background-color: #900;            color: black;
39          }            }
40          td.TOCbug a {            a:hover {
41                  font-family: monaco, charcoal, geneva, "MS Sans Serif", helvetica, sans-serif;            text-decoration: underline;
42                  font-weight: bold; font-size: x-small; text-decoration: none;            }
43                  color: #FFF; background-color: transparent;            a:active {
44          }            text-decoration: underline;
45              }
46          td.header {            address {
47                  font-family: arial, helvetica, sans-serif; font-size: x-small;            margin-top: 1em;
48                  vertical-align: top; width: 33%;            margin-left: 2em;
49                  color: #FFF; background-color: #666;            font-style: normal;
50          }            }
51          td.author { font-weight: bold; font-size: x-small; margin-left: 4em; }            body {
52          td.author-text { font-size: x-small; }            color: black;
53              font-family: verdana, helvetica, arial, sans-serif;
54          /* info code from SantaKlauss at http://www.madaboutstyle.com/tooltip2.html */            font-size: 10pt;
55          a.info {            max-width: 55em;
56                  /* This is the key. */            
57                  position: relative;            }
58                  z-index: 24;            cite {
59                  text-decoration: none;            font-style: normal;
60          }            }
61          a.info:hover {            dd {
62                  z-index: 25;            margin-right: 2em;
63                  color: #FFF; background-color: #900;            }
64          }            dl {
65          a.info span { display: none; }            margin-left: 2em;
66          a.info:hover span.info {            }
67                  /* The span will display just on :hover state. */          
68                  display: block;            ul.empty {
69                  position: absolute;            list-style-type: none;
70                  font-size: smaller;            }
71                  top: 2em; left: -5em; width: 15em;            ul.empty li {
72                  padding: 2px; border: 1px solid #333;            margin-top: .5em;
73                  color: #900; background-color: #EEE;            }
74                  text-align: left;            dl p {
75          }            margin-left: 0em;
76              }
77          a { font-weight: bold; }            dt {
78          a:link    { color: #900; background-color: transparent; }            margin-top: .5em;
79          a:visited { color: #633; background-color: transparent; }            }
80          a:active  { color: #633; background-color: transparent; }            h1 {
81              font-size: 14pt;
82          p { margin-left: 2em; margin-right: 2em; }            line-height: 21pt;
83          p.copyright { font-size: x-small; }            page-break-after: avoid;
84          p.toc { font-size: small; font-weight: bold; margin-left: 3em; }            }
85          table.toc { margin: 0 0 0 3em; padding: 0; border: 0; vertical-align: text-top; }            h1.np {
86          td.toc { font-size: small; font-weight: bold; vertical-align: text-top; }            page-break-before: always;
87              }
88          ol.text { margin-left: 2em; margin-right: 2em; }            h1 a {
89          ul.text { margin-left: 2em; margin-right: 2em; }            color: #333333;
90          li      { margin-left: 3em; }            }
91              h2 {
92          /* RFC-2629 <spanx>s and <artwork>s. */            font-size: 12pt;
93          em     { font-style: italic; }            line-height: 15pt;
94          strong { font-weight: bold; }            page-break-after: avoid;
95          dfn    { font-weight: bold; font-style: normal; }            }
96          cite   { font-weight: normal; font-style: normal; }            h3, h4, h5, h6 {
97          tt     { color: #036; }            font-size: 10pt;
98          tt, pre, pre dfn, pre em, pre cite, pre span {            page-break-after: avoid;
99                  font-family: "Courier New", Courier, monospace; font-size: small;            }
100          }            h2 a, h3 a, h4 a, h5 a, h6 a {
101          pre {            color: black;
102                  text-align: left; padding: 4px;            }
103                  color: #000; background-color: #CCC;            img {
104          }            margin-left: 3em;
105          pre dfn  { color: #900; }            }
106          pre em   { color: #66F; background-color: #FFC; font-weight: normal; }            li {
107          pre .key { color: #33C; font-weight: bold; }            margin-left: 2em;
108          pre .id  { color: #900; }            margin-right: 2em;
109          pre .str { color: #000; background-color: #CFF; }            }
110          pre .val { color: #066; }            ol {
111          pre .rep { color: #909; }            margin-left: 2em;
112          pre .oth { color: #000; background-color: #FCF; }            margin-right: 2em;
113          pre .err { background-color: #FCC; }            }
114              ol p {
115          /* RFC-2629 <texttable>s. */            margin-left: 0em;
116          table.all, table.full, table.headers, table.none {            }
117                  font-size: small; text-align: center; border-width: 2px;            p {
118                  vertical-align: top; border-collapse: collapse;            margin-left: 2em;
119          }            margin-right: 2em;
120          table.all, table.full { border-style: solid; border-color: black; }            }
121          table.headers, table.none { border-style: none; }            pre {
122          th {            margin-left: 3em;
123                  font-weight: bold; border-color: black;            background-color: lightyellow;
124                  border-width: 2px 2px 3px 2px;            padding: .25em;
125          }            }
126          table.all th, table.full th { border-style: solid; }            pre.text2 {
127          table.headers th { border-style: none none solid none; }            border-style: dotted;
128          table.none th { border-style: none; }            border-width: 1px;
129          table.all td {            background-color: #f0f0f0;
130                  border-style: solid; border-color: #333;            width: 69em;
131                  border-width: 1px 2px;            }
132          }            pre.inline {
133          table.full td, table.headers td, table.none td { border-style: none; }            background-color: white;
134              padding: 0em;
135          hr { height: 1px; }            }
136          hr.insert {            pre.text {
137                  width: 80%; border-style: none; border-width: 0;            border-style: dotted;
138                  color: #CCC; background-color: #CCC;            border-width: 1px;
139          }            background-color: #f8f8f8;
140  --></style>            width: 69em;
141              }
142              pre.drawing {
143              border-style: solid;
144              border-width: 1px;
145              background-color: #f8f8f8;
146              padding: 2em;
147              }
148              table {
149              margin-left: 2em;
150              }
151              table.tt {
152              vertical-align: top;
153              }
154              table.full {
155              border-style: outset;
156              border-width: 1px;
157              }
158              table.headers {
159              border-style: outset;
160              border-width: 1px;
161              }
162              table.tt td {
163              vertical-align: top;
164              }
165              table.full td {
166              border-style: inset;
167              border-width: 1px;
168              }
169              table.tt th {
170              vertical-align: top;
171              }
172              table.full th {
173              border-style: inset;
174              border-width: 1px;
175              }
176              table.headers th {
177              border-style: none none inset none;
178              border-width: 1px;
179              }
180              table.left {
181              margin-right: auto;
182              }
183              table.right {
184              margin-left: auto;
185              }
186              table.center {
187              margin-left: auto;
188              margin-right: auto;
189              }
190              caption {
191              caption-side: bottom;
192              font-weight: bold;
193              font-size: 9pt;
194              margin-top: .5em;
195              }
196            
197              table.header {
198              border-spacing: 1px;
199              width: 95%;
200              font-size: 10pt;
201              color: white;
202              }
203              td.top {
204              vertical-align: top;
205              }
206              td.topnowrap {
207              vertical-align: top;
208              white-space: nowrap;
209              }
210              table.header td {
211              background-color: gray;
212              width: 50%;
213              }
214              table.header a {
215              color: white;
216              }
217              td.reference {
218              vertical-align: top;
219              white-space: nowrap;
220              padding-right: 1em;
221              }
222              thead {
223              display:table-header-group;
224              }
225              ul.toc, ul.toc ul {
226              list-style: none;
227              margin-left: 1.5em;
228              margin-right: 0em;
229              padding-left: 0em;
230              }
231              ul.toc li {
232              line-height: 150%;
233              font-weight: bold;
234              font-size: 10pt;
235              margin-left: 0em;
236              margin-right: 0em;
237              }
238              ul.toc li li {
239              line-height: normal;
240              font-weight: normal;
241              font-size: 9pt;
242              margin-left: 0em;
243              margin-right: 0em;
244              }
245              li.excluded {
246              font-size: 0pt;
247              }
248              ul p {
249              margin-left: 0em;
250              }
251            
252              .comment {
253              background-color: yellow;
254              }
255              .center {
256              text-align: center;
257              }
258              .error {
259              color: red;
260              font-style: italic;
261              font-weight: bold;
262              }
263              .figure {
264              font-weight: bold;
265              text-align: center;
266              font-size: 9pt;
267              }
268              .filename {
269              color: #333333;
270              font-weight: bold;
271              font-size: 12pt;
272              line-height: 21pt;
273              text-align: center;
274              }
275              .fn {
276              font-weight: bold;
277              }
278              .hidden {
279              display: none;
280              }
281              .left {
282              text-align: left;
283              }
284              .right {
285              text-align: right;
286              }
287              .title {
288              color: #990000;
289              font-size: 18pt;
290              line-height: 18pt;
291              font-weight: bold;
292              text-align: center;
293              margin-top: 36pt;
294              }
295              .vcardline {
296              display: block;
297              }
298              .warning {
299              font-size: 14pt;
300              background-color: yellow;
301              }
302            
303            
304              @media print {
305              .noprint {
306                    display: none;
307              }
308            
309              a {
310                    color: black;
311                    text-decoration: none;
312              }
313            
314              table.header {
315                    width: 90%;
316              }
317            
318              td.header {
319                    width: 50%;
320                    color: black;
321                    background-color: white;
322                    vertical-align: top;
323                    font-size: 12pt;
324              }
325            
326              ul.toc a::after {
327                    content: leader('.') target-counter(attr(href), page);
328              }
329            
330              ul.ind li li a {
331                    content: target-counter(attr(href), page);
332              }
333            
334              .print2col {
335                    column-count: 2;
336                    -moz-column-count: 2;
337                    column-fill: auto;
338              }
339              }
340            
341              @page {
342              @top-left {
343                       content: "Internet-Draft";
344              }
345              @top-right {
346                       content: "December 2010";
347              }
348              @top-center {
349                       content: "Abbreviated Title";
350              }
351              @bottom-left {
352                       content: "Doe";
353              }
354              @bottom-center {
355                       content: "Expires June 2011";
356              }
357              @bottom-right {
358                       content: "[Page " counter(page) "]";
359              }
360              }
361            
362              @page:first {
363                    @top-left {
364                      content: normal;
365                    }
366                    @top-right {
367                      content: normal;
368                    }
369                    @top-center {
370                      content: normal;
371                    }
372              }
373      /*]]>*/
374      </style>
375    
376      <link href="#rfc.toc" rel="Contents"/>
377    <link href="#rfc.section.1" rel="Chapter" title="1 Requirements notation"/>
378    <link href="#rfc.section.2" rel="Chapter" title="2 Versioning of this specification"/>
379    <link href="#rfc.section.3" rel="Chapter" title="3 Introduction"/>
380    <link href="#rfc.section.4" rel="Chapter" title="4 Focus of this protocol"/>
381    <link href="#rfc.section.5" rel="Chapter" title="5 Communication Overview"/>
382    <link href="#rfc.section.5.1" rel="Chapter" title="5.1 Request/response communication method"/>
383    <link href="#rfc.section.5.1.1" rel="Chapter" title="5.1.1 Result format"/>
384    <link href="#rfc.section.5.2" rel="Chapter" title="5.2 Subscribe/notify communication method"/>
385    <link href="#rfc.section.6" rel="Chapter" title="6 Description for control commands"/>
386    <link href="#rfc.section.6.1" rel="Chapter" title="6.1 Ignored lines and comments"/>
387    <link href="#rfc.section.6.2" rel="Chapter" title="6.2 Configuring audio drivers"/>
388    <link href="#rfc.section.6.2.1" rel="Chapter" title="6.2.1 Getting amount of available audio output drivers"/>
389    <link href="#rfc.section.6.2.2" rel="Chapter" title="6.2.2 Getting all available audio output drivers"/>
390    <link href="#rfc.section.6.2.3" rel="Chapter" title="6.2.3 Getting information about a specific audio                 output driver"/>
391    <link href="#rfc.section.6.2.4" rel="Chapter" title="6.2.4 Getting information about specific audio                 output driver parameter"/>
392    <link href="#rfc.section.6.2.5" rel="Chapter" title="6.2.5 Creating an audio output device"/>
393    <link href="#rfc.section.6.2.6" rel="Chapter" title="6.2.6 Destroying an audio output device"/>
394    <link href="#rfc.section.6.2.7" rel="Chapter" title="6.2.7 Getting all created audio output device count"/>
395    <link href="#rfc.section.6.2.8" rel="Chapter" title="6.2.8 Getting all created audio output device list"/>
396    <link href="#rfc.section.6.2.9" rel="Chapter" title="6.2.9 Getting current settings of an audio output device"/>
397    <link href="#rfc.section.6.2.10" rel="Chapter" title="6.2.10 Changing settings of audio output devices"/>
398    <link href="#rfc.section.6.2.11" rel="Chapter" title="6.2.11 Getting information about an audio channel"/>
399    <link href="#rfc.section.6.2.12" rel="Chapter" title="6.2.12 Getting information about specific audio channel parameter"/>
400    <link href="#rfc.section.6.2.13" rel="Chapter" title="6.2.13 Changing settings of audio output channels"/>
401    <link href="#rfc.section.6.3" rel="Chapter" title="6.3 Configuring MIDI input drivers"/>
402    <link href="#rfc.section.6.3.1" rel="Chapter" title="6.3.1 Getting amount of available MIDI input drivers"/>
403    <link href="#rfc.section.6.3.2" rel="Chapter" title="6.3.2 Getting all available MIDI input drivers"/>
404    <link href="#rfc.section.6.3.3" rel="Chapter" title="6.3.3 Getting information about a specific MIDI input driver"/>
405    <link href="#rfc.section.6.3.4" rel="Chapter" title="6.3.4 Getting information about specific MIDI input driver parameter"/>
406    <link href="#rfc.section.6.3.5" rel="Chapter" title="6.3.5 Creating a MIDI input device"/>
407    <link href="#rfc.section.6.3.6" rel="Chapter" title="6.3.6 Destroying a MIDI input device"/>
408    <link href="#rfc.section.6.3.7" rel="Chapter" title="6.3.7 Getting all created MIDI input device count"/>
409    <link href="#rfc.section.6.3.8" rel="Chapter" title="6.3.8 Getting all created MIDI input device list"/>
410    <link href="#rfc.section.6.3.9" rel="Chapter" title="6.3.9 Getting current settings of a MIDI input device"/>
411    <link href="#rfc.section.6.3.10" rel="Chapter" title="6.3.10 Changing settings of MIDI input devices"/>
412    <link href="#rfc.section.6.3.11" rel="Chapter" title="6.3.11 Getting information about a MIDI port"/>
413    <link href="#rfc.section.6.3.12" rel="Chapter" title="6.3.12 Getting information about specific MIDI port parameter"/>
414    <link href="#rfc.section.6.3.13" rel="Chapter" title="6.3.13 Changing settings of MIDI input ports"/>
415    <link href="#rfc.section.6.4" rel="Chapter" title="6.4 Configuring sampler channels"/>
416    <link href="#rfc.section.6.4.1" rel="Chapter" title="6.4.1 Loading an instrument"/>
417    <link href="#rfc.section.6.4.2" rel="Chapter" title="6.4.2 Loading a sampler engine"/>
418    <link href="#rfc.section.6.4.3" rel="Chapter" title="6.4.3 Getting all created sampler channel count"/>
419    <link href="#rfc.section.6.4.4" rel="Chapter" title="6.4.4 Getting all created sampler channel list"/>
420    <link href="#rfc.section.6.4.5" rel="Chapter" title="6.4.5 Adding a new sampler channel"/>
421    <link href="#rfc.section.6.4.6" rel="Chapter" title="6.4.6 Removing a sampler channel"/>
422    <link href="#rfc.section.6.4.7" rel="Chapter" title="6.4.7 Getting amount of available engines"/>
423    <link href="#rfc.section.6.4.8" rel="Chapter" title="6.4.8 Getting all available engines"/>
424    <link href="#rfc.section.6.4.9" rel="Chapter" title="6.4.9 Getting information about an engine"/>
425    <link href="#rfc.section.6.4.10" rel="Chapter" title="6.4.10 Getting sampler channel information"/>
426    <link href="#rfc.section.6.4.11" rel="Chapter" title="6.4.11 Current number of active voices"/>
427    <link href="#rfc.section.6.4.12" rel="Chapter" title="6.4.12 Current number of active disk streams"/>
428    <link href="#rfc.section.6.4.13" rel="Chapter" title="6.4.13 Current fill state of disk stream buffers"/>
429    <link href="#rfc.section.6.4.14" rel="Chapter" title="6.4.14 Setting audio output device"/>
430    <link href="#rfc.section.6.4.15" rel="Chapter" title="6.4.15 Setting audio output type"/>
431    <link href="#rfc.section.6.4.16" rel="Chapter" title="6.4.16 Setting audio output channel"/>
432    <link href="#rfc.section.6.4.17" rel="Chapter" title="6.4.17 Add MIDI input to sampler channel"/>
433    <link href="#rfc.section.6.4.18" rel="Chapter" title="6.4.18 Remove MIDI input(s) from sampler channel"/>
434    <link href="#rfc.section.6.4.19" rel="Chapter" title="6.4.19 Getting all MIDI inputs of a sampler channel"/>
435    <link href="#rfc.section.6.4.20" rel="Chapter" title="6.4.20 Setting MIDI input device"/>
436    <link href="#rfc.section.6.4.21" rel="Chapter" title="6.4.21 Setting MIDI input type"/>
437    <link href="#rfc.section.6.4.22" rel="Chapter" title="6.4.22 Setting MIDI input port"/>
438    <link href="#rfc.section.6.4.23" rel="Chapter" title="6.4.23 Setting MIDI input channel"/>
439    <link href="#rfc.section.6.4.24" rel="Chapter" title="6.4.24 Setting channel volume"/>
440    <link href="#rfc.section.6.4.25" rel="Chapter" title="6.4.25 Muting a sampler channel"/>
441    <link href="#rfc.section.6.4.26" rel="Chapter" title="6.4.26 Soloing a sampler channel"/>
442    <link href="#rfc.section.6.4.27" rel="Chapter" title="6.4.27 Assigning a MIDI instrument map to a sampler channel"/>
443    <link href="#rfc.section.6.4.28" rel="Chapter" title="6.4.28 Adding an effect send to a sampler channel"/>
444    <link href="#rfc.section.6.4.29" rel="Chapter" title="6.4.29 Removing an effect send from a sampler channel"/>
445    <link href="#rfc.section.6.4.30" rel="Chapter" title="6.4.30 Getting amount of effect sends on a sampler channel"/>
446    <link href="#rfc.section.6.4.31" rel="Chapter" title="6.4.31 Listing all effect sends on a sampler channel"/>
447    <link href="#rfc.section.6.4.32" rel="Chapter" title="6.4.32 Getting effect send information"/>
448    <link href="#rfc.section.6.4.33" rel="Chapter" title="6.4.33 Changing effect send's name"/>
449    <link href="#rfc.section.6.4.34" rel="Chapter" title="6.4.34 Altering effect send's audio routing"/>
450    <link href="#rfc.section.6.4.35" rel="Chapter" title="6.4.35 Assigning destination effect to an effect send"/>
451    <link href="#rfc.section.6.4.36" rel="Chapter" title="6.4.36 Removing destination effect from an effect send"/>
452    <link href="#rfc.section.6.4.37" rel="Chapter" title="6.4.37 Altering effect send's MIDI controller"/>
453    <link href="#rfc.section.6.4.38" rel="Chapter" title="6.4.38 Altering effect send's send level"/>
454    <link href="#rfc.section.6.4.39" rel="Chapter" title="6.4.39 Sending MIDI messages to sampler channel"/>
455    <link href="#rfc.section.6.4.40" rel="Chapter" title="6.4.40 Resetting a sampler channel"/>
456    <link href="#rfc.section.6.5" rel="Chapter" title="6.5 Controlling connection"/>
457    <link href="#rfc.section.6.5.1" rel="Chapter" title="6.5.1 Register front-end for receiving event messages"/>
458    <link href="#rfc.section.6.5.2" rel="Chapter" title="6.5.2 Unregister front-end for not receiving event messages"/>
459    <link href="#rfc.section.6.5.3" rel="Chapter" title="6.5.3 Enable or disable echo of commands"/>
460    <link href="#rfc.section.6.5.4" rel="Chapter" title="6.5.4 Close client connection"/>
461    <link href="#rfc.section.6.6" rel="Chapter" title="6.6 Global commands"/>
462    <link href="#rfc.section.6.6.1" rel="Chapter" title="6.6.1 Current number of active voices"/>
463    <link href="#rfc.section.6.6.2" rel="Chapter" title="6.6.2 Maximum amount of active voices"/>
464    <link href="#rfc.section.6.6.3" rel="Chapter" title="6.6.3 Current number of active disk streams"/>
465    <link href="#rfc.section.6.6.4" rel="Chapter" title="6.6.4 Reset sampler"/>
466    <link href="#rfc.section.6.6.5" rel="Chapter" title="6.6.5 General sampler information"/>
467    <link href="#rfc.section.6.6.6" rel="Chapter" title="6.6.6 Getting global volume attenuation"/>
468    <link href="#rfc.section.6.6.7" rel="Chapter" title="6.6.7 Setting global volume attenuation"/>
469    <link href="#rfc.section.6.6.8" rel="Chapter" title="6.6.8 Getting global voice limit"/>
470    <link href="#rfc.section.6.6.9" rel="Chapter" title="6.6.9 Setting global voice limit"/>
471    <link href="#rfc.section.6.6.10" rel="Chapter" title="6.6.10 Getting global disk stream limit"/>
472    <link href="#rfc.section.6.6.11" rel="Chapter" title="6.6.11 Setting global disk stream limit"/>
473    <link href="#rfc.section.6.7" rel="Chapter" title="6.7 MIDI Instrument Mapping"/>
474    <link href="#rfc.section.6.7.1" rel="Chapter" title="6.7.1 Create a new MIDI instrument map"/>
475    <link href="#rfc.section.6.7.2" rel="Chapter" title="6.7.2 Delete one particular or all MIDI instrument maps"/>
476    <link href="#rfc.section.6.7.3" rel="Chapter" title="6.7.3 Get amount of existing MIDI instrument maps"/>
477    <link href="#rfc.section.6.7.4" rel="Chapter" title="6.7.4 Getting all created MIDI instrument maps"/>
478    <link href="#rfc.section.6.7.5" rel="Chapter" title="6.7.5 Getting MIDI instrument map information"/>
479    <link href="#rfc.section.6.7.6" rel="Chapter" title="6.7.6 Renaming a MIDI instrument map"/>
480    <link href="#rfc.section.6.7.7" rel="Chapter" title="6.7.7 Create or replace a MIDI instrument map entry"/>
481    <link href="#rfc.section.6.7.8" rel="Chapter" title="6.7.8 Getting amount of MIDI instrument map entries"/>
482    <link href="#rfc.section.6.7.9" rel="Chapter" title="6.7.9 Getting indeces of all entries of a MIDI instrument map"/>
483    <link href="#rfc.section.6.7.10" rel="Chapter" title="6.7.10 Remove an entry from the MIDI instrument map"/>
484    <link href="#rfc.section.6.7.11" rel="Chapter" title="6.7.11 Get current settings of MIDI instrument map entry"/>
485    <link href="#rfc.section.6.7.12" rel="Chapter" title="6.7.12 Clear MIDI instrument map"/>
486    <link href="#rfc.section.6.8" rel="Chapter" title="6.8 Managing Instruments Database"/>
487    <link href="#rfc.section.6.8.1" rel="Chapter" title="6.8.1 Creating a new instrument directory"/>
488    <link href="#rfc.section.6.8.2" rel="Chapter" title="6.8.2 Deleting an instrument directory"/>
489    <link href="#rfc.section.6.8.3" rel="Chapter" title="6.8.3 Getting amount of instrument directories"/>
490    <link href="#rfc.section.6.8.4" rel="Chapter" title="6.8.4 Listing all directories in specific directory"/>
491    <link href="#rfc.section.6.8.5" rel="Chapter" title="6.8.5 Getting instrument directory information"/>
492    <link href="#rfc.section.6.8.6" rel="Chapter" title="6.8.6 Renaming an instrument directory"/>
493    <link href="#rfc.section.6.8.7" rel="Chapter" title="6.8.7 Moving an instrument directory"/>
494    <link href="#rfc.section.6.8.8" rel="Chapter" title="6.8.8 Copying instrument directories"/>
495    <link href="#rfc.section.6.8.9" rel="Chapter" title="6.8.9 Changing the description of directory"/>
496    <link href="#rfc.section.6.8.10" rel="Chapter" title="6.8.10 Finding directories"/>
497    <link href="#rfc.section.6.8.11" rel="Chapter" title="6.8.11 Adding instruments to the instruments database"/>
498    <link href="#rfc.section.6.8.12" rel="Chapter" title="6.8.12 Removing an instrument"/>
499    <link href="#rfc.section.6.8.13" rel="Chapter" title="6.8.13 Getting amount of instruments"/>
500    <link href="#rfc.section.6.8.14" rel="Chapter" title="6.8.14 Listing all instruments in specific directory"/>
501    <link href="#rfc.section.6.8.15" rel="Chapter" title="6.8.15 Getting instrument information"/>
502    <link href="#rfc.section.6.8.16" rel="Chapter" title="6.8.16 Renaming an instrument"/>
503    <link href="#rfc.section.6.8.17" rel="Chapter" title="6.8.17 Moving an instrument"/>
504    <link href="#rfc.section.6.8.18" rel="Chapter" title="6.8.18 Copying instruments"/>
505    <link href="#rfc.section.6.8.19" rel="Chapter" title="6.8.19 Changing the description of instrument"/>
506    <link href="#rfc.section.6.8.20" rel="Chapter" title="6.8.20 Finding instruments"/>
507    <link href="#rfc.section.6.8.21" rel="Chapter" title="6.8.21 Getting job status information"/>
508    <link href="#rfc.section.6.8.22" rel="Chapter" title="6.8.22 Formatting the instruments database"/>
509    <link href="#rfc.section.6.8.23" rel="Chapter" title="6.8.23 Checking for lost instrument files"/>
510    <link href="#rfc.section.6.8.24" rel="Chapter" title="6.8.24 Replacing an instrument file"/>
511    <link href="#rfc.section.6.9" rel="Chapter" title="6.9 Editing Instruments"/>
512    <link href="#rfc.section.6.9.1" rel="Chapter" title="6.9.1 Opening an appropriate instrument editor application"/>
513    <link href="#rfc.section.6.10" rel="Chapter" title="6.10 Managing Files"/>
514    <link href="#rfc.section.6.10.1" rel="Chapter" title="6.10.1 Retrieving amount of instruments of a file"/>
515    <link href="#rfc.section.6.10.2" rel="Chapter" title="6.10.2 Retrieving all instruments of a file"/>
516    <link href="#rfc.section.6.10.3" rel="Chapter" title="6.10.3 Retrieving information about one instrument in a file"/>
517    <link href="#rfc.section.6.11" rel="Chapter" title="6.11 Managing Effects"/>
518    <link href="#rfc.section.6.11.1" rel="Chapter" title="6.11.1 Retrieve amount of available effects"/>
519    <link href="#rfc.section.6.11.2" rel="Chapter" title="6.11.2 Get list of available effects"/>
520    <link href="#rfc.section.6.11.3" rel="Chapter" title="6.11.3 Retrieving general information about an effect"/>
521    <link href="#rfc.section.6.11.4" rel="Chapter" title="6.11.4 Creating an instance of an effect by its portable ID"/>
522    <link href="#rfc.section.6.11.5" rel="Chapter" title="6.11.5 Creating an instance of an effect by its numerical ID"/>
523    <link href="#rfc.section.6.11.6" rel="Chapter" title="6.11.6 Destroy an effect instance"/>
524    <link href="#rfc.section.6.11.7" rel="Chapter" title="6.11.7 Retrieve amount of effect instances"/>
525    <link href="#rfc.section.6.11.8" rel="Chapter" title="6.11.8 Get list of effect instances"/>
526    <link href="#rfc.section.6.11.9" rel="Chapter" title="6.11.9 Retrieving current information about an effect instance"/>
527    <link href="#rfc.section.6.11.10" rel="Chapter" title="6.11.10 Retrieving information about an effect parameter"/>
528    <link href="#rfc.section.6.11.11" rel="Chapter" title="6.11.11 Altering an effect parameter"/>
529    <link href="#rfc.section.6.11.12" rel="Chapter" title="6.11.12 Retrieve amount of send effect chains"/>
530    <link href="#rfc.section.6.11.13" rel="Chapter" title="6.11.13 Retrieve list of send effect chains"/>
531    <link href="#rfc.section.6.11.14" rel="Chapter" title="6.11.14 Add send effect chain"/>
532    <link href="#rfc.section.6.11.15" rel="Chapter" title="6.11.15 Remove send effect chain"/>
533    <link href="#rfc.section.6.11.16" rel="Chapter" title="6.11.16 Retrieving information about a send effect chain"/>
534    <link href="#rfc.section.6.11.17" rel="Chapter" title="6.11.17 Append effect instance to a send effect chain"/>
535    <link href="#rfc.section.6.11.18" rel="Chapter" title="6.11.18 Insert effect instance to a send effect chain"/>
536    <link href="#rfc.section.6.11.19" rel="Chapter" title="6.11.19 Remove effect instance from send effect chain"/>
537    <link href="#rfc.section.7" rel="Chapter" title="7 Command Syntax"/>
538    <link href="#rfc.section.7.1" rel="Chapter" title="7.1 Character Set and Escape Sequences"/>
539    <link href="#rfc.section.8" rel="Chapter" title="8 Events"/>
540    <link href="#rfc.section.8.1" rel="Chapter" title="8.1 Number of audio output devices changed"/>
541    <link href="#rfc.section.8.2" rel="Chapter" title="8.2 Audio output device's settings changed"/>
542    <link href="#rfc.section.8.3" rel="Chapter" title="8.3 Number of MIDI input devices changed"/>
543    <link href="#rfc.section.8.4" rel="Chapter" title="8.4 MIDI input device's settings changed"/>
544    <link href="#rfc.section.8.5" rel="Chapter" title="8.5 Number of sampler channels changed"/>
545    <link href="#rfc.section.8.6" rel="Chapter" title="8.6 MIDI data on a sampler channel arrived"/>
546    <link href="#rfc.section.8.7" rel="Chapter" title="8.7 MIDI data on a MIDI input device arrived"/>
547    <link href="#rfc.section.8.8" rel="Chapter" title="8.8 Number of active voices changed"/>
548    <link href="#rfc.section.8.9" rel="Chapter" title="8.9 Number of active disk streams changed"/>
549    <link href="#rfc.section.8.10" rel="Chapter" title="8.10 Disk stream buffer fill state changed"/>
550    <link href="#rfc.section.8.11" rel="Chapter" title="8.11 Channel information changed"/>
551    <link href="#rfc.section.8.12" rel="Chapter" title="8.12 Number of effect sends changed"/>
552    <link href="#rfc.section.8.13" rel="Chapter" title="8.13 Effect send information changed"/>
553    <link href="#rfc.section.8.14" rel="Chapter" title="8.14 Total number of active voices changed"/>
554    <link href="#rfc.section.8.15" rel="Chapter" title="8.15 Total number of active disk streams changed"/>
555    <link href="#rfc.section.8.16" rel="Chapter" title="8.16 Number of MIDI instrument maps changed"/>
556    <link href="#rfc.section.8.17" rel="Chapter" title="8.17 MIDI instrument map information changed"/>
557    <link href="#rfc.section.8.18" rel="Chapter" title="8.18 Number of MIDI instruments changed"/>
558    <link href="#rfc.section.8.19" rel="Chapter" title="8.19 MIDI instrument information changed"/>
559    <link href="#rfc.section.8.20" rel="Chapter" title="8.20 Global settings changed"/>
560    <link href="#rfc.section.8.21" rel="Chapter" title="8.21 Number of database instrument directories changed"/>
561    <link href="#rfc.section.8.22" rel="Chapter" title="8.22 Database instrument directory information changed"/>
562    <link href="#rfc.section.8.23" rel="Chapter" title="8.23 Number of database instruments changed"/>
563    <link href="#rfc.section.8.24" rel="Chapter" title="8.24 Database instrument information changed"/>
564    <link href="#rfc.section.8.25" rel="Chapter" title="8.25 Database job status information changed"/>
565    <link href="#rfc.section.8.26" rel="Chapter" title="8.26 Number of effect instances changed"/>
566    <link href="#rfc.section.8.27" rel="Chapter" title="8.27 Effect instance information changed"/>
567    <link href="#rfc.section.8.28" rel="Chapter" title="8.28 Number of send effect chains changed"/>
568    <link href="#rfc.section.8.29" rel="Chapter" title="8.29 Send effect chain information changed"/>
569    <link href="#rfc.section.8.30" rel="Chapter" title="8.30 Miscellaneous and debugging events"/>
570    <link href="#rfc.section.9" rel="Chapter" title="9 Security Considerations"/>
571    <link href="#rfc.section.10" rel="Chapter" title="10 Acknowledgments"/>
572    <link href="#rfc.references" rel="Chapter" title="11 References"/>
573    <link href="#rfc.authors" rel="Chapter"/>
574    
575    
576      <meta name="generator" content="xml2rfc version 2.5.1 - http://tools.ietf.org/tools/xml2rfc" />
577      <link rel="schema.dct" href="http://purl.org/dc/terms/" />
578    
579      <meta name="dct.creator" content="Schoenebeck, C., Ed." />
580      <meta name="dct.identifier" content="urn:ietf:id:LSCP 1.7" />
581      <meta name="dct.issued" scheme="ISO8601" content="2019-3-11" />
582      <meta name="dct.abstract" content="The LinuxSampler Control Protocol (LSCP) is an application-level protocol primarily intended for local and remote controlling the LinuxSampler backend application, which is a sophisticated server-like console application essentially playing back audio samples and manipulating the samples in real time to certain extent." />
583      <meta name="description" content="The LinuxSampler Control Protocol (LSCP) is an application-level protocol primarily intended for local and remote controlling the LinuxSampler backend application, which is a sophisticated server-like console application essentially playing back audio samples and manipulating the samples in real time to certain extent." />
584    
585  </head>  </head>
586    
587  <body>  <body>
588  <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
589  <table summary="layout" width="66%" border="0" cellpadding="0" cellspacing="0"><tr><td><table summary="layout" width="100%" border="0" cellpadding="2" cellspacing="1">    <table class="header">
590  <tr><td class="header">LinuxSampler Developers</td><td class="header">C. Schoenebeck</td></tr>      <tbody>
591  <tr><td class="header">Internet-Draft</td><td class="header">LinuxSampler.org</td></tr>      
592  <tr><td class="header">Intended status: Standards Track</td><td class="header">July 15, 2015</td></tr>          <tr>
593  <tr><td class="header">Expires: January 16, 2016</td><td class="header">&nbsp;</td></tr>    <td class="left">LinuxSampler Developers</td>
594  </table></td></tr></table>    <td class="right">C. Schoenebeck, Ed.</td>
 <h1><br />LinuxSampler Control Protocol<br />LSCP 1.7</h1>  
   
 <h3>Abstract</h3>  
   
 <p>The LinuxSampler Control Protocol (LSCP) is an  
             application-level protocol primarily intended for local and  
             remote controlling the LinuxSampler backend application, which is a  
             sophisticated server-like console application essentially playing  
             back audio samples and manipulating the samples in real time to  
             certain extent.  
 </p>  
 <h3>Status of this Memo</h3>  
 <p>  
 By submitting this Internet-Draft,  
 each author represents that any applicable patent or other IPR claims of which  
 he or she is aware have been or will be disclosed,  
 and any of which he or she becomes aware will be disclosed,  
 in accordance with Section&nbsp;6 of BCP&nbsp;79.</p>  
 <p>  
 Internet-Drafts are working documents of the Internet Engineering  
 Task Force (IETF).  Note that other groups may also distribute  
 working documents as Internet-Drafts.  The list of current  
 Internet-Drafts is at http://datatracker.ietf.org/drafts/current/.</p>  
 <p>  
 Internet-Drafts are draft documents valid for a maximum of six months  
 and may be updated, replaced, or obsoleted by other documents at any time.  
 It is inappropriate to use Internet-Drafts as reference material or to cite  
 them other than as &ldquo;work in progress.&rdquo;</p>  
 <p>  
 This Internet-Draft will expire on January 16, 2016.</p>  
 <a name="toc"></a><br /><hr />  
 <h3>Table of Contents</h3>  
 <p class="toc">  
 <a href="#anchor1">1.</a>&nbsp;  
 Requirements notation<br />  
 <a href="#LSCP versioning">2.</a>&nbsp;  
 Versioning of this specification<br />  
 <a href="#anchor2">3.</a>&nbsp;  
 Introduction<br />  
 <a href="#anchor3">4.</a>&nbsp;  
 Focus of this protocol<br />  
 <a href="#anchor4">5.</a>&nbsp;  
 Communication Overview<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;<a href="#anchor5">5.1.</a>&nbsp;  
 Request/response communication method<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#anchor6">5.1.1.</a>&nbsp;  
 Result format<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;<a href="#anchor7">5.2.</a>&nbsp;  
 Subscribe/notify communication method<br />  
 <a href="#control_commands">6.</a>&nbsp;  
 Description for control commands<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;<a href="#anchor8">6.1.</a>&nbsp;  
 Ignored lines and comments<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;<a href="#anchor9">6.2.</a>&nbsp;  
 Configuring audio drivers<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#GET AVAILABLE_AUDIO_OUTPUT_DRIVERS">6.2.1.</a>&nbsp;  
 Getting amount of available audio output drivers<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#LIST AVAILABLE_AUDIO_OUTPUT_DRIVERS">6.2.2.</a>&nbsp;  
 Getting all available audio output drivers<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#GET AUDIO_OUTPUT_DRIVER INFO">6.2.3.</a>&nbsp;  
 Getting information about a specific audio  
                 output driver<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#GET AUDIO_OUTPUT_DRIVER_PARAMETER INFO">6.2.4.</a>&nbsp;  
 Getting information about specific audio  
                 output driver parameter<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#CREATE AUDIO_OUTPUT_DEVICE">6.2.5.</a>&nbsp;  
 Creating an audio output device<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#DESTROY AUDIO_OUTPUT_DEVICE">6.2.6.</a>&nbsp;  
 Destroying an audio output device<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#GET AUDIO_OUTPUT_DEVICES">6.2.7.</a>&nbsp;  
 Getting all created audio output device count<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#LIST AUDIO_OUTPUT_DEVICES">6.2.8.</a>&nbsp;  
 Getting all created audio output device list<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#GET AUDIO_OUTPUT_DEVICE INFO">6.2.9.</a>&nbsp;  
 Getting current settings of an audio output device<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#SET AUDIO_OUTPUT_DEVICE_PARAMETER">6.2.10.</a>&nbsp;  
 Changing settings of audio output devices<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#GET AUDIO_OUTPUT_CHANNEL INFO">6.2.11.</a>&nbsp;  
 Getting information about an audio channel<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#GET AUDIO_OUTPUT_CHANNEL_PARAMETER INFO">6.2.12.</a>&nbsp;  
 Getting information about specific audio channel parameter<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#SET AUDIO_OUTPUT_CHANNEL_PARAMETER">6.2.13.</a>&nbsp;  
 Changing settings of audio output channels<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;<a href="#anchor10">6.3.</a>&nbsp;  
 Configuring MIDI input drivers<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#GET AVAILABLE_MIDI_INPUT_DRIVERS">6.3.1.</a>&nbsp;  
 Getting amount of available MIDI input drivers<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#LIST AVAILABLE_MIDI_INPUT_DRIVERS">6.3.2.</a>&nbsp;  
 Getting all available MIDI input drivers<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#GET MIDI_INPUT_DRIVER INFO">6.3.3.</a>&nbsp;  
 Getting information about a specific MIDI input driver<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#GET MIDI_INPUT_DRIVER_PARAMETER INFO">6.3.4.</a>&nbsp;  
 Getting information about specific MIDI input driver parameter<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#CREATE MIDI_INPUT_DEVICE">6.3.5.</a>&nbsp;  
 Creating a MIDI input device<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#DESTROY MIDI_INPUT_DEVICE">6.3.6.</a>&nbsp;  
 Destroying a MIDI input device<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#GET MIDI_INPUT_DEVICES">6.3.7.</a>&nbsp;  
 Getting all created MIDI input device count<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#LIST MIDI_INPUT_DEVICES">6.3.8.</a>&nbsp;  
 Getting all created MIDI input device list<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#GET MIDI_INPUT_DEVICE INFO">6.3.9.</a>&nbsp;  
 Getting current settings of a MIDI input device<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#SET MIDI_INPUT_DEVICE_PARAMETER">6.3.10.</a>&nbsp;  
 Changing settings of MIDI input devices<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#GET MIDI_INPUT_PORT INFO">6.3.11.</a>&nbsp;  
 Getting information about a MIDI port<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#GET MIDI_INPUT_PORT_PARAMETER INFO">6.3.12.</a>&nbsp;  
 Getting information about specific MIDI port parameter<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#SET MIDI_INPUT_PORT_PARAMETER">6.3.13.</a>&nbsp;  
 Changing settings of MIDI input ports<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;<a href="#anchor11">6.4.</a>&nbsp;  
 Configuring sampler channels<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#LOAD INSTRUMENT">6.4.1.</a>&nbsp;  
 Loading an instrument<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#LOAD ENGINE">6.4.2.</a>&nbsp;  
 Loading a sampler engine<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#GET CHANNELS">6.4.3.</a>&nbsp;  
 Getting all created sampler channel count<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#LIST CHANNELS">6.4.4.</a>&nbsp;  
 Getting all created sampler channel list<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ADD CHANNEL">6.4.5.</a>&nbsp;  
 Adding a new sampler channel<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#REMOVE CHANNEL">6.4.6.</a>&nbsp;  
 Removing a sampler channel<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#GET AVAILABLE_ENGINES">6.4.7.</a>&nbsp;  
 Getting amount of available engines<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#LIST AVAILABLE_ENGINES">6.4.8.</a>&nbsp;  
 Getting all available engines<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#GET ENGINE INFO">6.4.9.</a>&nbsp;  
 Getting information about an engine<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#GET CHANNEL INFO">6.4.10.</a>&nbsp;  
 Getting sampler channel information<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#GET CHANNEL VOICE_COUNT">6.4.11.</a>&nbsp;  
 Current number of active voices<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#GET CHANNEL STREAM_COUNT">6.4.12.</a>&nbsp;  
 Current number of active disk streams<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#GET CHANNEL BUFFER_FILL">6.4.13.</a>&nbsp;  
 Current fill state of disk stream buffers<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#SET CHANNEL AUDIO_OUTPUT_DEVICE">6.4.14.</a>&nbsp;  
 Setting audio output device<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#SET CHANNEL AUDIO_OUTPUT_TYPE">6.4.15.</a>&nbsp;  
 Setting audio output type<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#SET CHANNEL AUDIO_OUTPUT_CHANNEL">6.4.16.</a>&nbsp;  
 Setting audio output channel<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ADD CHANNEL MIDI_INPUT">6.4.17.</a>&nbsp;  
 Add MIDI input to sampler channel<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#REMOVE CHANNEL MIDI_INPUT">6.4.18.</a>&nbsp;  
 Remove MIDI input(s) from sampler channel<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#LIST CHANNEL MIDI_INPUTS">6.4.19.</a>&nbsp;  
 Getting all MIDI inputs of a sampler channel<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#SET CHANNEL MIDI_INPUT_DEVICE">6.4.20.</a>&nbsp;  
 Setting MIDI input device<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#SET CHANNEL MIDI_INPUT_TYPE">6.4.21.</a>&nbsp;  
 Setting MIDI input type<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#SET CHANNEL MIDI_INPUT_PORT">6.4.22.</a>&nbsp;  
 Setting MIDI input port<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#SET CHANNEL MIDI_INPUT_CHANNEL">6.4.23.</a>&nbsp;  
 Setting MIDI input channel<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#SET CHANNEL VOLUME">6.4.24.</a>&nbsp;  
 Setting channel volume<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#SET CHANNEL MUTE">6.4.25.</a>&nbsp;  
 Muting a sampler channel<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#SET CHANNEL SOLO">6.4.26.</a>&nbsp;  
 Soloing a sampler channel<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#SET CHANNEL MIDI_INSTRUMENT_MAP">6.4.27.</a>&nbsp;  
 Assigning a MIDI instrument map to a sampler channel<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#CREATE FX_SEND">6.4.28.</a>&nbsp;  
 Adding an effect send to a sampler channel<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#DESTROY FX_SEND">6.4.29.</a>&nbsp;  
 Removing an effect send from a sampler channel<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#GET FX_SENDS">6.4.30.</a>&nbsp;  
 Getting amount of effect sends on a sampler channel<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#LIST FX_SENDS">6.4.31.</a>&nbsp;  
 Listing all effect sends on a sampler channel<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#GET FX_SEND INFO">6.4.32.</a>&nbsp;  
 Getting effect send information<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#SET FX_SEND NAME">6.4.33.</a>&nbsp;  
 Changing effect send's name<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#SET FX_SEND AUDIO_OUTPUT_CHANNEL">6.4.34.</a>&nbsp;  
 Altering effect send's audio routing<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#SET FX_SEND EFFECT">6.4.35.</a>&nbsp;  
 Assigning destination effect to an effect send<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#REMOVE FX_SEND EFFECT">6.4.36.</a>&nbsp;  
 Removing destination effect from an effect send<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#SET FX_SEND MIDI_CONTROLLER">6.4.37.</a>&nbsp;  
 Altering effect send's MIDI controller<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#SET FX_SEND LEVEL">6.4.38.</a>&nbsp;  
 Altering effect send's send level<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#SEND CHANNEL MIDI_DATA">6.4.39.</a>&nbsp;  
 Sending MIDI messages to sampler channel<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#RESET CHANNEL">6.4.40.</a>&nbsp;  
 Resetting a sampler channel<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;<a href="#anchor12">6.5.</a>&nbsp;  
 Controlling connection<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#SUBSCRIBE">6.5.1.</a>&nbsp;  
 Register front-end for receiving event messages<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#UNSUBSCRIBE">6.5.2.</a>&nbsp;  
 Unregister front-end for not receiving event messages<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#SET ECHO">6.5.3.</a>&nbsp;  
 Enable or disable echo of commands<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#QUIT">6.5.4.</a>&nbsp;  
 Close client connection<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;<a href="#anchor13">6.6.</a>&nbsp;  
 Global commands<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#GET TOTAL_VOICE_COUNT">6.6.1.</a>&nbsp;  
 Current number of active voices<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#GET TOTAL_VOICE_COUNT_MAX">6.6.2.</a>&nbsp;  
 Maximum amount of active voices<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#GET TOTAL_STREAM_COUNT">6.6.3.</a>&nbsp;  
 Current number of active disk streams<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#RESET">6.6.4.</a>&nbsp;  
 Reset sampler<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#GET SERVER INFO">6.6.5.</a>&nbsp;  
 General sampler informations<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#GET VOLUME">6.6.6.</a>&nbsp;  
 Getting global volume attenuation<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#SET VOLUME">6.6.7.</a>&nbsp;  
 Setting global volume attenuation<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#GET VOICES">6.6.8.</a>&nbsp;  
 Getting global voice limit<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#SET VOICES">6.6.9.</a>&nbsp;  
 Setting global voice limit<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#GET STREAMS">6.6.10.</a>&nbsp;  
 Getting global disk stream limit<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#SET STREAMS">6.6.11.</a>&nbsp;  
 Setting global disk stream limit<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;<a href="#MIDI Instrument Mapping">6.7.</a>&nbsp;  
 MIDI Instrument Mapping<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ADD MIDI_INSTRUMENT_MAP">6.7.1.</a>&nbsp;  
 Create a new MIDI instrument map<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#REMOVE MIDI_INSTRUMENT_MAP">6.7.2.</a>&nbsp;  
 Delete one particular or all MIDI instrument maps<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#GET MIDI_INSTRUMENT_MAPS">6.7.3.</a>&nbsp;  
 Get amount of existing MIDI instrument maps<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#LIST MIDI_INSTRUMENT_MAPS">6.7.4.</a>&nbsp;  
 Getting all created MIDI instrument maps<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#GET MIDI_INSTRUMENT_MAP INFO">6.7.5.</a>&nbsp;  
 Getting MIDI instrument map information<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#SET MIDI_INSTRUMENT_MAP NAME">6.7.6.</a>&nbsp;  
 Renaming a MIDI instrument map<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#MAP MIDI_INSTRUMENT">6.7.7.</a>&nbsp;  
 Create or replace a MIDI instrument map entry<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#GET MIDI_INSTRUMENTS">6.7.8.</a>&nbsp;  
 Getting amount of MIDI instrument map entries<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#LIST MIDI_INSTRUMENTS">6.7.9.</a>&nbsp;  
 Getting indeces of all entries of a MIDI instrument map<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#UNMAP MIDI_INSTRUMENT">6.7.10.</a>&nbsp;  
 Remove an entry from the MIDI instrument map<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#GET MIDI_INSTRUMENT INFO">6.7.11.</a>&nbsp;  
 Get current settings of MIDI instrument map entry<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#CLEAR MIDI_INSTRUMENTS">6.7.12.</a>&nbsp;  
 Clear MIDI instrument map<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;<a href="#Managing Instruments Database">6.8.</a>&nbsp;  
 Managing Instruments Database<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ADD DB_INSTRUMENT_DIRECTORY">6.8.1.</a>&nbsp;  
 Creating a new instrument directory<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#REMOVE DB_INSTRUMENT_DIRECTORY">6.8.2.</a>&nbsp;  
 Deleting an instrument directory<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#GET DB_INSTRUMENT_DIRECTORIES">6.8.3.</a>&nbsp;  
 Getting amount of instrument directories<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#LIST DB_INSTRUMENT_DIRECTORIES">6.8.4.</a>&nbsp;  
 Listing all directories in specific directory<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#GET DB_INSTRUMENT_DIRECTORY INFO">6.8.5.</a>&nbsp;  
 Getting instrument directory information<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#SET DB_INSTRUMENT_DIRECTORY NAME">6.8.6.</a>&nbsp;  
 Renaming an instrument directory<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#MOVE DB_INSTRUMENT_DIRECTORY">6.8.7.</a>&nbsp;  
 Moving an instrument directory<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#COPY DB_INSTRUMENT_DIRECTORY">6.8.8.</a>&nbsp;  
 Copying instrument directories<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#SET DB_INSTRUMENT_DIRECTORY DESCRIPTION">6.8.9.</a>&nbsp;  
 Changing the description of directory<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#FIND DB_INSTRUMENT_DIRECTORIES">6.8.10.</a>&nbsp;  
 Finding directories<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ADD DB_INSTRUMENTS">6.8.11.</a>&nbsp;  
 Adding instruments to the instruments database<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#REMOVE DB_INSTRUMENT">6.8.12.</a>&nbsp;  
 Removing an instrument<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#GET DB_INSTRUMENTS">6.8.13.</a>&nbsp;  
 Getting amount of instruments<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#LIST DB_INSTRUMENTS">6.8.14.</a>&nbsp;  
 Listing all instruments in specific directory<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#GET DB_INSTRUMENT INFO">6.8.15.</a>&nbsp;  
 Getting instrument information<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#SET DB_INSTRUMENT NAME">6.8.16.</a>&nbsp;  
 Renaming an instrument<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#MOVE DB_INSTRUMENT">6.8.17.</a>&nbsp;  
 Moving an instrument<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#COPY DB_INSTRUMENT">6.8.18.</a>&nbsp;  
 Copying instruments<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#SET DB_INSTRUMENT DESCRIPTION">6.8.19.</a>&nbsp;  
 Changing the description of instrument<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#FIND DB_INSTRUMENTS">6.8.20.</a>&nbsp;  
 Finding instruments<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#GET DB_INSTRUMENTS_JOB INFO">6.8.21.</a>&nbsp;  
 Getting job status information<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#FORMAT INSTRUMENTS_DB">6.8.22.</a>&nbsp;  
 Formatting the instruments database<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#FIND LOST DB_INSTRUMENT_FILES">6.8.23.</a>&nbsp;  
 Checking for lost instrument files<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#SET DB_INSTRUMENT FILE_PATH">6.8.24.</a>&nbsp;  
 Replacing an instrument file<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;<a href="#editing_instruments">6.9.</a>&nbsp;  
 Editing Instruments<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#EDIT INSTRUMENT">6.9.1.</a>&nbsp;  
 Opening an appropriate instrument editor application<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;<a href="#file_management">6.10.</a>&nbsp;  
 Managing Files<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#GET FILE INSTRUMENTS">6.10.1.</a>&nbsp;  
 Retrieving amount of instruments of a file<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#LIST FILE INSTRUMENTS">6.10.2.</a>&nbsp;  
 Retrieving all instruments of a file<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#GET FILE INSTRUMENT INFO">6.10.3.</a>&nbsp;  
 Retrieving informations about one instrument in a file<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;<a href="#effects">6.11.</a>&nbsp;  
 Managing Effects<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#GET AVAILABLE_EFFECTS">6.11.1.</a>&nbsp;  
 Retrieve amount of available effects<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#LIST AVAILABLE_EFFECTS">6.11.2.</a>&nbsp;  
 Get list of available effects<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#GET EFFECT INFO">6.11.3.</a>&nbsp;  
 Retrieving general information about an effect<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#CREATE EFFECT_INSTANCE">6.11.4.</a>&nbsp;  
 Creating an instance of an effect by its portable ID<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#CREATE EFFECT_INSTANCE (non-portable)">6.11.5.</a>&nbsp;  
 Creating an instance of an effect by its numerical ID<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#DESTROY EFFECT_INSTANCE">6.11.6.</a>&nbsp;  
 Destroy an effect instance<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#GET EFFECT_INSTANCES">6.11.7.</a>&nbsp;  
 Retrieve amount of effect instances<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#LIST EFFECT_INSTANCES">6.11.8.</a>&nbsp;  
 Get list of effect instances<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#GET EFFECT_INSTANCE INFO">6.11.9.</a>&nbsp;  
 Retrieving current information about an effect instance<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#GET EFFECT_INSTANCE_INPUT_CONTROL INFO">6.11.10.</a>&nbsp;  
 Retrieving information about an effect parameter<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#SET EFFECT_INSTANCE_INPUT_CONTROL VALUE">6.11.11.</a>&nbsp;  
 Altering an effect parameter<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#GET SEND_EFFECT_CHAINS">6.11.12.</a>&nbsp;  
 Retrieve amount of send effect chains<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#LIST SEND_EFFECT_CHAINS">6.11.13.</a>&nbsp;  
 Retrieve list of send effect chains<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ADD SEND_EFFECT_CHAIN">6.11.14.</a>&nbsp;  
 Add send effect chain<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#REMOVE SEND_EFFECT_CHAIN">6.11.15.</a>&nbsp;  
 Remove send effect chain<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#GET SEND_EFFECT_CHAIN INFO">6.11.16.</a>&nbsp;  
 Retrieving information about a send effect chain<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#APPEND SEND_EFFECT_CHAIN EFFECT">6.11.17.</a>&nbsp;  
 Append effect instance to a send effect chain<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#INSERT SEND_EFFECT_CHAIN EFFECT">6.11.18.</a>&nbsp;  
 Insert effect instance to a send effect chain<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#REMOVE SEND_EFFECT_CHAIN EFFECT">6.11.19.</a>&nbsp;  
 Remove effect instance from send effect chain<br />  
 <a href="#command_syntax">7.</a>&nbsp;  
 Command Syntax<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;<a href="#character_set">7.1.</a>&nbsp;  
 Character Set and Escape Sequences<br />  
 <a href="#events">8.</a>&nbsp;  
 Events<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;<a href="#SUBSCRIBE AUDIO_OUTPUT_DEVICE_COUNT">8.1.</a>&nbsp;  
 Number of audio output devices changed<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;<a href="#SUBSCRIBE AUDIO_OUTPUT_DEVICE_INFO">8.2.</a>&nbsp;  
 Audio output device's settings changed<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;<a href="#SUBSCRIBE MIDI_INPUT_DEVICE_COUNT">8.3.</a>&nbsp;  
 Number of MIDI input devices changed<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;<a href="#SUBSCRIBE MIDI_INPUT_DEVICE_INFO">8.4.</a>&nbsp;  
 MIDI input device's settings changed<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;<a href="#SUBSCRIBE CHANNEL_COUNT">8.5.</a>&nbsp;  
 Number of sampler channels changed<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;<a href="#SUBSCRIBE CHANNEL_MIDI">8.6.</a>&nbsp;  
 MIDI data on a sampler channel arrived<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;<a href="#SUBSCRIBE DEVICE_MIDI">8.7.</a>&nbsp;  
 MIDI data on a MIDI input device arrived<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;<a href="#SUBSCRIBE VOICE_COUNT">8.8.</a>&nbsp;  
 Number of active voices changed<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;<a href="#SUBSCRIBE STREAM_COUNT">8.9.</a>&nbsp;  
 Number of active disk streams changed<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;<a href="#SUBSCRIBE BUFFER_FILL">8.10.</a>&nbsp;  
 Disk stream buffer fill state changed<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;<a href="#SUBSCRIBE CHANNEL_INFO">8.11.</a>&nbsp;  
 Channel information changed<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;<a href="#SUBSCRIBE FX_SEND_COUNT">8.12.</a>&nbsp;  
 Number of effect sends changed<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;<a href="#SUBSCRIBE FX_SEND_INFO">8.13.</a>&nbsp;  
 Effect send information changed<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;<a href="#SUBSCRIBE TOTAL_VOICE_COUNT">8.14.</a>&nbsp;  
 Total number of active voices changed<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;<a href="#SUBSCRIBE TOTAL_STREAM_COUNT">8.15.</a>&nbsp;  
 Total number of active disk streams changed<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;<a href="#SUBSCRIBE MIDI_INSTRUMENT_MAP_COUNT">8.16.</a>&nbsp;  
 Number of MIDI instrument maps changed<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;<a href="#SUBSCRIBE MIDI_INSTRUMENT_MAP_INFO">8.17.</a>&nbsp;  
 MIDI instrument map information changed<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;<a href="#SUBSCRIBE MIDI_INSTRUMENT_COUNT">8.18.</a>&nbsp;  
 Number of MIDI instruments changed<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;<a href="#SUBSCRIBE MIDI_INSTRUMENT_INFO">8.19.</a>&nbsp;  
 MIDI instrument information changed<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;<a href="#SUBSCRIBE GLOBAL_INFO">8.20.</a>&nbsp;  
 Global settings changed<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;<a href="#SUBSCRIBE DB_INSTRUMENT_DIRECTORY_COUNT">8.21.</a>&nbsp;  
 Number of database instrument directories changed<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;<a href="#SUBSCRIBE DB_INSTRUMENT_DIRECTORY_INFO">8.22.</a>&nbsp;  
 Database instrument directory information changed<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;<a href="#SUBSCRIBE DB_INSTRUMENT_COUNT">8.23.</a>&nbsp;  
 Number of database instruments changed<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;<a href="#SUBSCRIBE DB_INSTRUMENT_INFO">8.24.</a>&nbsp;  
 Database instrument information changed<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;<a href="#SUBSCRIBE DB_INSTRUMENTS_JOB_INFO">8.25.</a>&nbsp;  
 Database job status information changed<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;<a href="#SUBSCRIBE EFFECT_INSTANCE_COUNT">8.26.</a>&nbsp;  
 Number of effect instances changed<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;<a href="#SUBSCRIBE EFFECT_INSTANCE_INFO">8.27.</a>&nbsp;  
 Effect instance information changed<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;<a href="#SUBSCRIBE SEND_EFFECT_CHAIN_COUNT">8.28.</a>&nbsp;  
 Number of send effect chains changed<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;<a href="#SUBSCRIBE SEND_EFFECT_CHAIN_INFO">8.29.</a>&nbsp;  
 Send effect chain information changed<br />  
 &nbsp;&nbsp;&nbsp;&nbsp;<a href="#SUBSCRIBE MISCELLANEOUS">8.30.</a>&nbsp;  
 Miscellaneous and debugging events<br />  
 <a href="#anchor14">9.</a>&nbsp;  
 Security Considerations<br />  
 <a href="#anchor15">10.</a>&nbsp;  
 Acknowledgments<br />  
 <a href="#rfc.references1">11.</a>&nbsp;  
 References<br />  
 <a href="#rfc.authors">&#167;</a>&nbsp;  
 Author's Address<br />  
 <a href="#rfc.copyright">&#167;</a>&nbsp;  
 Intellectual Property and Copyright Statements<br />  
 </p>  
 <br clear="all" />  
   
 <a name="anchor1"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.1"></a><h3>1.&nbsp;  
 Requirements notation</h3>  
   
 <p>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL",  
             "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY",  
             and "OPTIONAL" in this document are to be interpreted as  
             described in <a class='info' href='#RFC2119'>[RFC2119]<span> (</span><span class='info'>Bradner, S., &ldquo;Key words for use in RFCs to Indicate Requirement Levels,&rdquo; 1997.</span><span>)</span></a>.  
 </p>  
 <p>This protocol is always case-sensitive if not explicitly  
             claimed the opposite.  
 </p>  
 <p>In examples, "C:" and "S:" indicate lines sent by the client  
             (front-end) and server (LinuxSampler) respectively. Lines in  
             examples must be interpreted as every line being CRLF  
             terminated (carriage return character followed by line feed  
             character as defined in the ASCII standard <a class='info' href='#RFC20'>[RFC20]<span> (</span><span class='info'>UCLA, &ldquo;ASCII format for Network Interchange,&rdquo; 1969.</span><span>)</span></a>),  
             thus the following example:  
 </p>  
 <p>  
                 </p>  
 <blockquote class="text">  
 <p>C: "some line"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"another line"  
 </p>  
 </blockquote><p>  
               
 </p>  
 <p>must actually be interpreted as client sending the following  
             message:  
 </p>  
 <p>  
                 </p>  
 <blockquote class="text">  
 <p>"some line&lt;CR&gt;&lt;LF&gt;another  
                     line&lt;CR&gt;&lt;LF&gt;"  
 </p>  
 </blockquote><p>  
               
 </p>  
 <p>where &lt;CR&gt; symbolizes the carriage return character and  
             &lt;LF&gt; the line feed character as defined in the ASCII  
             standard.  
 </p>  
 <p>Due to technical reasons, messages can arbitrary be  
             fragmented, means the following example:  
 </p>  
 <p>  
                 </p>  
 <blockquote class="text">  
 <p>S: "abcd"  
 </p>  
 </blockquote><p>  
               
 </p>  
 <p>could also happen to be sent in three messages like in the  
             following sequence scenario:  
 </p>  
 <p>  
                 </p>  
 <ul class="text">  
 <li>server sending message "a"  
 </li>  
 <li>followed by a delay (pause) with  
                     arbitrary duration  
 </li>  
 <li>followed by server sending message  
                     "bcd&lt;CR&gt;"  
 </li>  
 <li>again followed by a delay (pause) with arbitrary  
                     duration  
 </li>  
 <li>followed by server sending the message  
                     "&lt;LF&gt;"  
 </li>  
 </ul><p>  
               
 </p>  
 <p>where again &lt;CR&gt; and &lt;LF&gt; symbolize the carriage  
             return and line feed characters respectively.  
 </p>  
 <a name="LSCP versioning"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.2"></a><h3>2.&nbsp;  
 Versioning of this specification</h3>  
   
 <p>LSCP will certainly be extended and enhanced by-and-by. Each official  
             release of the LSCP specification will be tagged with a unique version  
             tuple. The version tuple consists at least of a major and minor version  
             number like:  
               
 </p>  
 <p>  
                 </p>  
 <blockquote class="text">  
 <p>"1.2"  
 </p>  
 </blockquote><p>  
               
 </p>  
 <p>  
             In this example the major version number would be "1" and the minor  
             version number would be "2". Note that the version tuple might also  
             have more than two elements. The major version number defines a  
             group of backward compatible versions. That means a frontend is  
             compatible to the connected sampler if and only if the LSCP versions  
             to which each of the two parties complies to, match both of the  
             following rules:  
               
 </p>  
 <p>Compatibility:  
 </p>  
 <p>  
                 </p>  
 <ol class="text">  
 <li>The frontend's LSCP major version and the sampler's LSCP  
                     major version are exactly equal.  
 </li>  
 <li>The frontend's LSCP minor version is less or equal than  
                     the sampler's LSCP minor version.  
 </li>  
 </ol><p>  
               
 </p>  
 <p>  
             Compatibility can only be claimed if both rules are true.  
             The frontend can use the  
             <a class='info' href='#GET SERVER INFO'>"GET SERVER INFO"<span> (</span><span class='info'>General sampler informations</span><span>)</span></a> command to  
             get the version of the LSCP specification the sampler complies with.  
               
 </p>  
 <a name="anchor2"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.3"></a><h3>3.&nbsp;  
 Introduction</h3>  
   
 <p>LinuxSampler is a so called software sampler application  
             capable to playback audio samples from a computer's Random  
             Access Memory (RAM) as well as directly streaming it from disk.  
             LinuxSampler is designed to be modular. It provides several so  
             called "sampler engines" where each engine is specialized for a  
             certain purpose. LinuxSampler has virtual channels which will be  
             referred in this document as "sampler channels". The channels  
             are in such way virtual as they can be connected to an  
             arbitrary MIDI input method and arbitrary MIDI channel (e.g.  
             sampler channel 17 could be connected to an ALSA sequencer  
             device 64:0 and listening to MIDI channel 1 there). Each sampler  
             channel will be associated with an instance of one of the available  
             sampler engines (e.g. GigEngine, DLSEngine). The audio output of  
             each sampler channel can be routed to an arbitrary audio output  
             method (ALSA / JACK) and an arbitrary audio output channel  
             there.  
 </p>  
 <a name="anchor3"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.4"></a><h3>4.&nbsp;  
 Focus of this protocol</h3>  
   
 <p>Main focus of this protocol is to provide a way to configure  
             a running LinuxSampler instance and to retrieve information  
             about it. The focus of this protocol is not to provide a way to  
             control synthesis parameters or even to trigger or release  
             notes. Or in other words; the focus are those functionalities  
             which are not covered by MIDI or which may at most be handled  
             via MIDI System Exclusive Messages.  
 </p>  
 <a name="anchor4"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.5"></a><h3>5.&nbsp;  
 Communication Overview</h3>  
   
 <p>There are two distinct methods of communication between a  
             running instance of LinuxSampler and one or more control  
             applications, so called "front-ends": a simple request/response  
             communication method used by the clients to give commands to the  
             server as well as to inquire about server's status and a  
             subscribe/notify communication method used by the client to  
             subscribe to and receive notifications of certain events as they  
             happen on the server. The latter needs more effort to be  
             implemented in the front-end application. The two communication  
             methods will be described next.  
 </p>  
 <a name="anchor5"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.5.1"></a><h3>5.1.&nbsp;  
 Request/response communication method</h3>  
   
 <p>This simple communication method is based on  
                 <a class='info' href='#RFC793'>TCP<span> (</span><span class='info'>Defense Advanced Research Projects Agency, &ldquo;TRANSMISSION CONTROL PROTOCOL,&rdquo; 1981.</span><span>)</span></a> [RFC793]. The  
                 front-end application establishes a TCP connection to the  
                 LinuxSampler instance on a certain host system. Then the  
                 front-end application will send certain ASCII based commands  
                 as defined in this document (every command line must be CRLF  
                 terminated - see "Conventions used in this document" at the  
                 beginning of this document) and the LinuxSampler application  
                 will response after a certain process time with an  
                 appropriate ASCII based answer, also as defined in this  
                 document. So this TCP communication is simply based on query  
                 and answer paradigm. That way LinuxSampler is only able to  
                 answer on queries from front-ends, but not able to  
                 automatically send messages to the client if it's not asked  
                 to. The fronted should not reconnect to LinuxSampler for  
                 every single command, instead it should keep the connection  
                 established and simply resend message(s) for subsequent  
                 commands. To keep information in the front-end up-to-date  
                 the front-end has to periodically send new requests to get  
                 the current information from the LinuxSampler instance. This  
                 is often referred to as "polling". While polling is simple  
                 to implement and may be OK to use in some cases, there may  
                 be disadvantages to polling such as network traffic overhead  
                 and information being out of date.  
                 It is possible for a client or several clients to open more  
                 than one connection to the server at the same time. It is  
                 also possible to send more than one request to the server  
                 at the same time but if those requests are sent over the  
                 same connection server MUST execute them sequentially. Upon  
                 executing a request server will produce a result set and  
                 send it to the client. Each and every request made by the  
                 client MUST result in a result set being sent back to the  
                 client. No other data other than a result set may be sent by  
                 a server to a client. No result set may be sent to a client  
                 without the client sending request to the server first. On  
                 any particular connection, result sets MUST be sent in their  
                 entirety without being interrupted by other result sets. If  
                 several requests got queued up at the server they MUST be  
                 processed in the order they were received and result sets  
                 MUST be sent back in the same order.  
 </p>  
 <a name="anchor6"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.5.1.1"></a><h3>5.1.1.&nbsp;  
 Result format</h3>  
   
 <p>Result set could be one of the following types:  
 </p>  
 <p>  
                         </p>  
 <ol class="text">  
 <li>Normal  
 </li>  
 <li>Warning  
 </li>  
 <li>Error  
 </li>  
 </ol><p>  
                       
 </p>  
 <p>Warning and Error result sets MUST be single line and  
                     have the following format:  
 </p>  
 <p>  
                         </p>  
 <ul class="text">  
 <li>"WRN:&lt;warning-code&gt;:&lt;warning-message&gt;"  
 </li>  
 <li>"ERR:&lt;error-code&gt;:&lt;error-message&gt;"  
 </li>  
 </ul><p>  
                       
 </p>  
 <p>Where &lt;warning-code&gt; and &lt;error-code&gt; are  
                     numeric unique identifiers of the warning or error and  
                     &lt;warning-message&gt; and &lt;error-message&gt; are  
                     human readable descriptions of the warning or error  
                     respectively.  
 </p>  
 <p>Examples:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "LOAD INSTRUMENT '/home/me/Boesendorfer24bit.gig" 0 0  
 </p>  
 <p>S: "WRN:32:This is a 24 bit patch which is not supported natively yet."  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "GET AUDIO_OUTPUT_DRIVER_PARAMETER INFO ALSA EAR"  
 </p>  
 <p>S: "ERR:3456:Audio output driver 'ALSA' does not have a parameter 'EAR'."  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "GET AUDIO_OUTPUT_DEVICE INFO 123456"  
 </p>  
 <p>S: "ERR:9:There is no audio output device with index 123456."  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Normal result sets could be:  
 </p>  
 <p>  
                         </p>  
 <ol class="text">  
 <li>Empty  
 </li>  
 <li>Single line  
 </li>  
 <li>Multi-line  
 </li>  
 </ol><p>  
                       
 </p>  
 <p> Empty result set is issued when the server only  
                     needed to acknowledge the fact that the request was  
                     received and it was processed successfully and no  
                     additional information is available. This result set has  
                     the following format:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>"OK"  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Example:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "SET AUDIO_OUTPUT_DEVICE_PARAMETER 0 CHANNELS=4"  
 </p>  
 <p>S: "OK"  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Single line result sets are command specific. One  
                     example of a single line result set is an empty line.  
                     Multi-line result sets are command specific and may  
                     include one or more lines of information. They MUST  
                     always end with the following line:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>"."  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Example:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "GET AUDIO_OUTPUT_DEVICE INFO 0"  
 </p>  
 <p>S: "DRIVER: ALSA"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"CHANNELS: 2"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"SAMPLERATE: 44100"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"ACTIVE: true"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"FRAGMENTS: 2"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"FRAGMENTSIZE: 128"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"CARD: '0,0'"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"."  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>In addition to above mentioned formats, warnings and  
                     empty result sets MAY be indexed. In this case, they  
                     have the following formats respectively:  
 </p>  
 <p>  
                         </p>  
 <ul class="text">  
 <li>"WRN[&lt;index&gt;]:&lt;warning-code&gt;:&lt;warning-message&gt;"  
 </li>  
 <li>"OK[&lt;index&gt;]"  
 </li>  
 </ul><p>  
                       
 </p>  
 <p>where &lt;index&gt; is command specific and is used  
                     to indicate channel number that the result set was  
                     related to or other integer value.  
 </p>  
 <p>Each line of the result set MUST end with  
                     &lt;CRLF&gt;.  
 </p>  
 <p>Examples:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "ADD CHANNEL"  
 </p>  
 <p>S: "OK[12]"  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "CREATE AUDIO_OUTPUT_DEVICE ALSA SAMPLERATE=96000"  
 </p>  
 <p>S: "WRN[0]:32:Sample rate not supported, using 44100 instead."  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="anchor7"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.5.2"></a><h3>5.2.&nbsp;  
 Subscribe/notify communication method</h3>  
   
 <p>This more sophisticated communication method is actually  
                 only an extension of the simple request/response  
                 communication method. The front-end still uses a TCP  
                 connection and sends the same commands on the TCP  
                 connection. Two extra commands are SUBSCRIBE and UNSUBSCRIBE  
                 commands that allow a client to tell the server that it is  
                 interested in receiving notifications about certain events  
                 as they happen on the server. The SUBSCRIBE command has the  
                 following syntax:  
 </p>  
 <p>  
                     </p>  
 <blockquote class="text">  
 <p>SUBSCRIBE &lt;event-id&gt;  
 </p>  
 </blockquote><p>  
                   
 </p>  
 <p>where &lt;event-id&gt; will be replaced by the respective  
                 event that client wants to subscribe to. Upon receiving such  
                 request, server SHOULD respond with OK and start sending  
                 EVENT notifications when a given even has occurred to the  
                 front-end when an event has occurred. It MAY be possible  
                 certain events may be sent before OK response during real  
                 time nature of their generation. Event messages have the  
                 following format:  
 </p>  
 <p>  
                     </p>  
 <blockquote class="text">  
 <p>NOTIFY:&lt;event-id&gt;:&lt;custom-event-data&gt;  
 </p>  
 </blockquote><p>  
                   
 </p>  
 <p>where &lt;event-id&gt; uniquely identifies the event that  
                 has occurred and &lt;custom-event-data&gt; is event  
                 specific.  
 </p>  
 <p>Several rules must be followed by the server when  
                 generating events:  
 </p>  
 <p>  
                     </p>  
 <ol class="text">  
 <li>Events MUST NOT be sent to any client who has not  
                         issued an appropriate SUBSCRIBE command.  
 </li>  
 <li>Events MUST only be sent using the same  
                         connection that was used to subscribe to them.  
 </li>  
 <li>When response is being sent to the client, event  
                         MUST be inserted in the stream before or after the  
                         response, but NOT in the middle. Same is true about  
                         the response. It should never be inserted in the  
                         middle of the event message as well as any other  
                         response.  
 </li>  
 </ol><p>  
                   
 </p>  
 <p>If the client is not interested in a particular event  
                 anymore it MAY issue UNSUBSCRIBE command using the following  
                 syntax:  
 </p>  
 <p>  
                     </p>  
 <blockquote class="text">  
 <p>UNSUBSCRIBE &lt;event-id&gt;  
 </p>  
 </blockquote><p>  
                   
 </p>  
 <p>where &lt;event-id&gt; will be replace by the respective  
                 event that client is no longer interested in receiving. For  
                 a list of supported events see <a class='info' href='#events'>Section&nbsp;8<span> (</span><span class='info'>Events</span><span>)</span></a>.  
 </p>  
 <p>Example: the fill states of disk stream buffers have  
                 changed on sampler channel 4 and the LinuxSampler instance  
                 will react by sending the following message to all clients  
                 who subscribed to this event:  
 </p>  
 <p>  
                     </p>  
 <blockquote class="text">  
 <p>NOTIFY:CHANNEL_BUFFER_FILL:4 [35]62%,[33]80%,[37]98%  
 </p>  
 </blockquote><p>  
                   
 </p>  
 <p>Which means there are currently three active streams on  
                 sampler channel 4, where the stream with ID "35" is filled  
                 by 62%, stream with ID 33 is filled by 80% and stream with  
                 ID 37 is filled by 98%.  
 </p>  
 <p>Clients may choose to open more than one connection to  
                 the server and use some connections to receive notifications  
                 while using other connections to issue commands to the  
                 back-end. This is entirely legal and up to the  
                 implementation. This does not change the protocol in any way  
                 and no special restrictions exist on the server to allow or  
                 disallow this or to track what connections belong to what  
                 front-ends. Server will listen on a single port, accept  
                 multiple connections and support protocol described in this  
                 specification in it's entirety on this single port on each  
                 connection that it accepted.  
 </p>  
 <p>Due to the fact that TCP is used for this communication,  
                 dead peers will be detected automatically by the OS TCP  
                 stack. While it may take a while to detect dead peers if no  
                 traffic is being sent from server to client (TCP keep-alive  
                 timer is set to 2 hours on many OSes) it will not be an  
                 issue here as when notifications are sent by the server,  
                 dead client will be detected quickly.  
 </p>  
 <p>When connection is closed for any reason server MUST  
                 forget all subscriptions that were made on this connection.  
                 If client reconnects it MUST resubscribe to all events that  
                 it wants to receive.  
 </p>  
 <a name="control_commands"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6"></a><h3>6.&nbsp;  
 Description for control commands</h3>  
   
 <p>This chapter will describe the available control commands  
             that can be sent on the TCP connection in detail. Some certain  
             commands (e.g. <a class='info' href='#GET CHANNEL INFO'>"GET CHANNEL INFO"<span> (</span><span class='info'>Getting sampler channel information</span><span>)</span></a>  
             or <a class='info' href='#GET ENGINE INFO'>"GET ENGINE INFO"<span> (</span><span class='info'>Getting information about an engine</span><span>)</span></a>) lead to  
             multiple-line responses. In this case LinuxSampler signals the  
             end of the response by a "." (single dot) line.  
 </p>  
 <a name="anchor8"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.1"></a><h3>6.1.&nbsp;  
 Ignored lines and comments</h3>  
   
 <p>White lines, that is lines which only contain space and  
                 tabulator characters, and lines that start with a "#"  
                 character are ignored, thus it's possible for example to  
                 group commands and to place comments in a LSCP script  
                 file.  
 </p>  
 <a name="anchor9"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.2"></a><h3>6.2.&nbsp;  
 Configuring audio drivers</h3>  
   
 <p>Instances of drivers in LinuxSampler are called devices.  
                 You can use multiple audio devices simultaneously, e.g. to  
                 output the sound of one sampler channel using the ALSA audio  
                 output driver, and on another sampler channel you might want  
                 to use the JACK audio output driver. For particular audio  
                 output systems it's also possible to create several devices  
                 of the same audio output driver, e.g. two separate ALSA  
                 audio output devices for using two different sound cards at  
                 the same time. This chapter describes all commands to  
                 configure LinuxSampler's audio output devices and their  
                 parameters.  
 </p>  
 <p>Instead of defining commands and parameters for each  
                 driver individually, all possible parameters, their meanings  
                 and possible values have to be obtained at runtime. This  
                 makes the protocol a bit abstract, but has the advantage,  
                 that front-ends can be written independently of what drivers  
                 are currently implemented and what parameters these drivers  
                 are actually offering. This means front-ends can even handle  
                 drivers which are implemented somewhere in future without  
                 modifying the front-end at all.  
 </p>  
 <p>Note: examples in this chapter showing particular  
                 parameters of drivers are not meant as specification of the  
                 drivers' parameters. Driver implementations in LinuxSampler  
                 might have complete different parameter names and meanings  
                 than shown in these examples or might change in future, so  
                 these examples are only meant for showing how to retrieve  
                 what parameters drivers are offering, how to retrieve their  
                 possible values, etc.  
 </p>  
 <a name="GET AVAILABLE_AUDIO_OUTPUT_DRIVERS"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.2.1"></a><h3>6.2.1.&nbsp;  
 Getting amount of available audio output drivers</h3>  
   
 <p>Use the following command to get the number of  
                     audio output drivers currently available for the  
                     LinuxSampler instance:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>GET AVAILABLE_AUDIO_OUTPUT_DRIVERS  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>LinuxSampler will answer by sending the  
                             number of audio output drivers.  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Example:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "GET AVAILABLE_AUDIO_OUTPUT_DRIVERS"  
 </p>  
 <p>S: "2"  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="LIST AVAILABLE_AUDIO_OUTPUT_DRIVERS"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.2.2"></a><h3>6.2.2.&nbsp;  
 Getting all available audio output drivers</h3>  
   
 <p>Use the following command to list all audio output  
                     drivers currently available for the LinuxSampler  
                     instance:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>LIST AVAILABLE_AUDIO_OUTPUT_DRIVERS  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>LinuxSampler will answer by sending comma  
                             separated character strings, each symbolizing an  
                             audio output driver.  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Example:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "LIST AVAILABLE_AUDIO_OUTPUT_DRIVERS"  
 </p>  
 <p>S: "ALSA,JACK"  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="GET AUDIO_OUTPUT_DRIVER INFO"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.2.3"></a><h3>6.2.3.&nbsp;  
 Getting information about a specific audio  
                 output driver</h3>  
   
 <p>Use the following command to get detailed information  
                     about a specific audio output driver:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>GET AUDIO_OUTPUT_DRIVER INFO  
                              &lt;audio-output-driver&gt;  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Where &lt;audio-output-driver&gt; is the name of the  
                     audio output driver, returned by the  
                     <a class='info' href='#LIST AVAILABLE_AUDIO_OUTPUT_DRIVERS'>"LIST AVAILABLE_AUDIO_OUTPUT_DRIVERS"<span> (</span><span class='info'>Getting all available audio output drivers</span><span>)</span></a> command.  
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>LinuxSampler will answer by sending a  
                             &lt;CRLF&gt; separated list. Each answer line  
                             begins with the information category name  
                             followed by a colon and then a space character  
                             &lt;SP&gt; and finally the info character string  
                             to that info category. At the moment the  
                             following information categories are  
                             defined:  
 </p>  
 <p>  
                               </p>  
 <blockquote class="text">  
 <p>DESCRIPTION -  
                                     </p>  
 <blockquote class="text">  
 <p> character string describing the  
                                       audio output driver  
 </p>  
 </blockquote>  
                                     
   
 <p>VERSION -  
                                     </p>  
 <blockquote class="text">  
 <p>character string reflecting the  
                                       driver's version  
 </p>  
 </blockquote>  
                                     
   
 <p>PARAMETERS -  
                                     </p>  
 <blockquote class="text">  
 <p>comma separated list of all  
                                       parameters available for the given  
                                       audio output driver, at least  
                                       parameters 'channels', 'samplerate'  
                                       and 'active' are offered by all audio  
                                       output drivers  
 </p>  
 </blockquote>  
                                     
   
 </blockquote>  
                               
   
 <p>The mentioned fields above don't have to be  
                             in particular order.  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Example:  
 </p>  
 <p>  
                       </p>  
 <blockquote class="text">  
 <p>C: "GET AUDIO_OUTPUT_DRIVER INFO ALSA"  
 </p>  
 <p>S: "DESCRIPTION: Advanced Linux Sound  
                           Architecture"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"VERSION: 1.0"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"PARAMETERS:  
                           DRIVER,CHANNELS,SAMPLERATE,ACTIVE,FRAGMENTS,  
                           FRAGMENTSIZE,CARD"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"."  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="GET AUDIO_OUTPUT_DRIVER_PARAMETER INFO"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.2.4"></a><h3>6.2.4.&nbsp;  
 Getting information about specific audio  
                 output driver parameter</h3>  
   
 <p>Use the following command to get detailed information  
                     about a  specific audio output driver parameter:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>GET AUDIO_OUTPUT_DRIVER_PARAMETER INFO &lt;audio&gt; &lt;prm&gt; [&lt;deplist&gt;]  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Where &lt;audio&gt; is the name of the audio output  
                     driver as returned by the <a class='info' href='#LIST AVAILABLE_AUDIO_OUTPUT_DRIVERS'>"LIST AVAILABLE_AUDIO_OUTPUT_DRIVERS"<span> (</span><span class='info'>Getting all available audio output drivers</span><span>)</span></a> command,  
                     &lt;prm&gt; a specific parameter name for which information should be  
                     obtained (as returned by the  
                     <a class='info' href='#GET AUDIO_OUTPUT_DRIVER INFO'>"GET AUDIO_OUTPUT_DRIVER INFO"<span> (</span><span class='info'>Getting information about a specific audio                 output driver</span><span>)</span></a> command) and  
                     &lt;deplist&gt; is an optional list of parameters on which the sought  
                     parameter &lt;prm&gt; depends on, &lt;deplist&gt; is a list of key-value  
                     pairs in form of "key1=val1 key2=val2 ...", where character string values  
                     are encapsulated into apostrophes ('). Arguments given with &lt;deplist&gt;  
                     which are not dependency parameters of &lt;prm&gt; will be ignored, means  
                     the front-end application can simply put all parameters into &lt;deplist&gt;  
                     with the values already selected by the user.  
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>LinuxSampler will answer by sending a  
                             &lt;CRLF&gt; separated list.  
                             Each answer line begins with the information category name  
                             followed by a colon and then a space character &lt;SP&gt; and  
                             finally  
                             the info character string to that info category. There are  
                             information which is always returned, independently of the  
                             given driver parameter and there are optional information  
                             which is only shown dependently to given driver parameter. At  
                             the moment the following information categories are defined:  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>TYPE -  
                               </p>  
 <blockquote class="text">  
 <p>either "BOOL" for boolean value(s) or  
                                 "INT" for integer  
                                 value(s) or "FLOAT" for dotted number(s) or "STRING" for  
                                 character string(s)  
                                 (always returned, no matter which driver parameter)  
 </p>  
 </blockquote>  
                               
   
 <p>DESCRIPTION -  
                               </p>  
 <blockquote class="text">  
 <p>arbitrary text describing the purpose of the parameter  
                                 (always returned, no matter which driver parameter)  
 </p>  
 </blockquote>  
                               
   
 <p>MANDATORY -  
                               </p>  
 <blockquote class="text">  
 <p>either true or false, defines if this parameter must be  
                                 given when the device is to be created with the  
                                 <a class='info' href='#CREATE AUDIO_OUTPUT_DEVICE'>'CREATE AUDIO_OUTPUT_DEVICE'<span> (</span><span class='info'>Creating an audio output device</span><span>)</span></a>  
                                 command (always returned, no matter which driver parameter)  
 </p>  
 </blockquote>  
                               
   
 <p>FIX -  
                               </p>  
 <blockquote class="text">  
 <p>either true or false, if false then this parameter can  
                                 be changed at any time, once the device is created by  
                                 the <a class='info' href='#CREATE AUDIO_OUTPUT_DEVICE'>'CREATE AUDIO_OUTPUT_DEVICE'<span> (</span><span class='info'>Creating an audio output device</span><span>)</span></a>  
                                 command (always returned, no matter which driver parameter)  
 </p>  
 </blockquote>  
                               
   
 <p>MULTIPLICITY -  
                               </p>  
 <blockquote class="text">  
 <p>either true or false, defines if this parameter allows  
                                 only one value or a list of values, where true means  
                                 multiple values and false only a single value allowed  
                                 (always returned, no matter which driver parameter)  
 </p>  
 </blockquote>  
                               
   
 <p>DEPENDS -  
                               </p>  
 <blockquote class="text">  
 <p>comma separated list of parameters this parameter depends  
                                 on, means the values for fields 'DEFAULT', 'RANGE_MIN',  
                                 'RANGE_MAX' and 'POSSIBILITIES' might depend on these  
                                 listed parameters, for example assuming that an audio  
                                 driver (like the ALSA driver) offers parameters 'card'  
                                 and 'samplerate' then parameter 'samplerate' would  
                                 depend on 'card' because the possible values for  
                                 'samplerate' depends on the sound card which can be  
                                 chosen by the 'card' parameter  
                                 (optionally returned, dependent to driver parameter)  
 </p>  
 </blockquote>  
                               
   
 <p>DEFAULT -  
                               </p>  
 <blockquote class="text">  
 <p>reflects the default value for this parameter which is  
                                 used when the device is created and not explicitly  
                                 given with the <a class='info' href='#CREATE AUDIO_OUTPUT_DEVICE'>'CREATE AUDIO_OUTPUT_DEVICE'<span> (</span><span class='info'>Creating an audio output device</span><span>)</span></a> command,  
                                 in case of MULTIPLCITY=true, this is a comma separated  
                                 list, that's why character strings are encapsulated into  
                                 apostrophes (')  
                                 (optionally returned, dependent to driver parameter)  
 </p>  
 </blockquote>  
                               
   
 <p>RANGE_MIN -  
                               </p>  
 <blockquote class="text">  
 <p>defines lower limit of the allowed value range for this  
                                 parameter, can be an integer value as well as a dotted  
                                 number, this parameter is often used in conjunction  
                                 with RANGE_MAX, but may also appear without  
                                 (optionally returned, dependent to driver parameter)  
 </p>  
 </blockquote>  
                               
   
 <p>RANGE_MAX -  
                               </p>  
 <blockquote class="text">  
 <p>defines upper limit of the allowed value range for this  
                                 parameter, can be an integer value as well as a dotted  
                                 number, this parameter is often used in conjunction with  
                                 RANGE_MIN, but may also appear without  
                                 (optionally returned, dependent to driver parameter)  
 </p>  
 </blockquote>  
                               
   
 <p>POSSIBILITIES -  
                               </p>  
 <blockquote class="text">  
 <p>comma separated list of possible values for this  
                                 parameter, character strings are encapsulated into  
                                 apostrophes  
                                 (optionally returned, dependent to driver parameter)  
 </p>  
 </blockquote>  
                               
   
 </blockquote><p>  
                       
 </p>  
 <p>The mentioned fields above don't have to be in particular order.  
 </p>  
 <p>Examples:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "GET AUDIO_OUTPUT_DRIVER_PARAMETER INFO ALSA CARD"  
 </p>  
 <p>S: "DESCRIPTION: sound card to be used"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"TYPE: STRING"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"MANDATORY: false"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"FIX: true"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"MULTIPLICITY: false"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"DEFAULT: '0,0'"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"POSSIBILITIES: '0,0','1,0','2,0'"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"."  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "GET AUDIO_OUTPUT_DRIVER_PARAMETER INFO ALSA SAMPLERATE"  
 </p>  
 <p>S: "DESCRIPTION: output sample rate in Hz"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"TYPE: INT"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"MANDATORY: false"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"FIX: false"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"MULTIPLICITY: false"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"DEPENDS: card"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"DEFAULT: 44100"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"."  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "GET AUDIO_OUTPUT_DRIVER_PARAMETER INFO ALSA SAMPLERATE CARD='0,0'"  
 </p>  
 <p>S: "DESCRIPTION: output sample rate in Hz"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"TYPE: INT"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"MANDATORY: false"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"FIX: false"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"MULTIPLICITY: false"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"DEPENDS: card"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"DEFAULT: 44100"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"RANGE_MIN: 22050"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"RANGE_MAX: 96000"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"."  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="CREATE AUDIO_OUTPUT_DEVICE"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.2.5"></a><h3>6.2.5.&nbsp;  
 Creating an audio output device</h3>  
   
 <p>Use the following command to create a new audio output device for  the desired audio output system:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>CREATE AUDIO_OUTPUT_DEVICE &lt;audio-output-driver&gt; [&lt;param-list&gt;]  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Where &lt;audio-output-driver&gt; should be replaced by the desired audio  
                     output system as returned by the  
                     <a class='info' href='#LIST AVAILABLE_AUDIO_OUTPUT_DRIVERS'>"LIST AVAILABLE_AUDIO_OUTPUT_DRIVERS"<span> (</span><span class='info'>Getting all available audio output drivers</span><span>)</span></a>  
                     command and &lt;param-list&gt; by an optional list of driver  
                     specific parameters in form of "key1=val1 key2=val2 ...", where  
                     character string values should be encapsulated into apostrophes (').  
                     Note that there might be drivers which require parameter(s) to be  
                     given with this command. Use the previously described commands in  
                     this chapter to get this information.  
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>"OK[&lt;device-id&gt;]" -  
                                 </p>  
 <blockquote class="text">  
 <p>in case the device was successfully created, where  
                                     &lt;device-id&gt; is the numerical ID of the new device  
 </p>  
 </blockquote>  
                               
   
 <p>"WRN[&lt;device-id&gt;]:&lt;warning-code&gt;:&lt;warning-message&gt;" -  
                                 </p>  
 <blockquote class="text">  
 <p>in case the device was created successfully, where  
                                     &lt;device-id&gt; is the numerical ID of the new device, but there  
                                     are noteworthy issue(s) related (e.g. sound card doesn't  
                                     support given hardware parameters and the driver is using  
                                     fall-back values), providing an appropriate warning code and  
                                     warning message  
 </p>  
 </blockquote>  
                               
   
 <p>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" -  
                                 </p>  
 <blockquote class="text">  
 <p>in case it failed, providing an appropriate error code and error message  
 </p>  
 </blockquote>  
                               
   
 </blockquote><p>  
                       
 </p>  
 <p>Examples:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "CREATE AUDIO_OUTPUT_DEVICE ALSA"  
 </p>  
 <p>S: "OK[0]"  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "CREATE AUDIO_OUTPUT_DEVICE ALSA CARD='2,0' SAMPLERATE=96000"  
 </p>  
 <p>S: "OK[1]"  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="DESTROY AUDIO_OUTPUT_DEVICE"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.2.6"></a><h3>6.2.6.&nbsp;  
 Destroying an audio output device</h3>  
   
 <p>Use the following command to destroy a created output device:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>DESTROY AUDIO_OUTPUT_DEVICE &lt;device-id&gt;  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Where &lt;device-id&gt; should be replaced by the numerical ID of the  
                     audio output device as given by the  
                     <a class='info' href='#CREATE AUDIO_OUTPUT_DEVICE'>"CREATE AUDIO_OUTPUT_DEVICE"<span> (</span><span class='info'>Creating an audio output device</span><span>)</span></a>  
                     or <a class='info' href='#LIST AUDIO_OUTPUT_DEVICES'>"LIST AUDIO_OUTPUT_DEVICES"<span> (</span><span class='info'>Getting all created audio output device list</span><span>)</span></a>  
                     command.  
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>"OK" -  
                                 </p>  
 <blockquote class="text">  
 <p>in case the device was successfully destroyed  
 </p>  
 </blockquote>  
                               
   
 <p>"WRN:&lt;warning-code&gt;:&lt;warning-message&gt;" -  
                                 </p>  
 <blockquote class="text">  
 <p>in case the device was destroyed successfully, but there are  
                                     noteworthy issue(s) related (e.g. an audio over ethernet  
                                     driver was unloaded but the other host might not be  
                                     informed about this situation), providing an appropriate  
                                     warning code and warning message  
 </p>  
 </blockquote>  
                               
   
 <p>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" -  
                                 </p>  
 <blockquote class="text">  
 <p>in case it failed, providing an appropriate error code and  
                                     error message  
 </p>  
 </blockquote>  
                               
   
 </blockquote><p>  
                       
 </p>  
 <p>Example:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "DESTROY AUDIO_OUTPUT_DEVICE 0"  
 </p>  
 <p>S: "OK"  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="GET AUDIO_OUTPUT_DEVICES"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.2.7"></a><h3>6.2.7.&nbsp;  
 Getting all created audio output device count</h3>  
   
 <p>Use the following command to count all created audio output devices:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>GET AUDIO_OUTPUT_DEVICES  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>LinuxSampler will answer by sending the current number of all  
                             audio output devices.  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Example:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "GET AUDIO_OUTPUT_DEVICES"  
 </p>  
 <p>S: "4"  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="LIST AUDIO_OUTPUT_DEVICES"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.2.8"></a><h3>6.2.8.&nbsp;  
 Getting all created audio output device list</h3>  
   
 <p>Use the following command to list all created audio output devices:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>LIST AUDIO_OUTPUT_DEVICES  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>LinuxSampler will answer by sending a comma separated list with  
                             the numerical IDs of all audio output devices.  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Example:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "LIST AUDIO_OUTPUT_DEVICES"  
 </p>  
 <p>S: "0,1,4,5"  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="GET AUDIO_OUTPUT_DEVICE INFO"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.2.9"></a><h3>6.2.9.&nbsp;  
 Getting current settings of an audio output device</h3>  
   
 <p>Use the following command to get current settings of a specific, created audio output device:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>GET AUDIO_OUTPUT_DEVICE INFO &lt;device-id&gt;  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Where &lt;device-id&gt; should be replaced by numerical ID  
                     of the audio output device as e.g. returned by the  
                     <a class='info' href='#LIST AUDIO_OUTPUT_DEVICES'>"LIST AUDIO_OUTPUT_DEVICES"<span> (</span><span class='info'>Getting all created audio output device list</span><span>)</span></a> command.  
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>LinuxSampler will answer by sending a &lt;CRLF&gt; separated list.  
                     Each answer line begins with the information category name  
                     followed by a colon and then a space character &lt;SP&gt; and finally  
                     the info character string to that info category. As some  
                     parameters might allow multiple values, character strings are  
                     encapsulated into apostrophes ('). At the moment the following  
                     information categories are defined (independently of device):  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>DRIVER -  
                                 </p>  
 <blockquote class="text">  
 <p>identifier of the used audio output driver, as also  
                                     returned by the  
                                     <a class='info' href='#LIST AVAILABLE_AUDIO_OUTPUT_DRIVERS'>"LIST AVAILABLE_AUDIO_OUTPUT_DRIVERS"<span> (</span><span class='info'>Getting all available audio output drivers</span><span>)</span></a>  
                                     command  
 </p>  
 </blockquote>  
                               
   
 <p>CHANNELS -  
                                 </p>  
 <blockquote class="text">  
 <p>amount of audio output channels this device currently  
                                     offers  
 </p>  
 </blockquote>  
                               
   
 <p>SAMPLERATE -  
                                 </p>  
 <blockquote class="text">  
 <p>playback sample rate the device uses  
 </p>  
 </blockquote>  
                               
   
 <p>ACTIVE -  
                                 </p>  
 <blockquote class="text">  
 <p>either true or false, if false then the audio device is  
                                     inactive and doesn't output any sound, nor do the  
                                     sampler channels connected to this audio device render  
                                     any audio  
 </p>  
 </blockquote>  
                               
   
 </blockquote><p>  
                       
 </p>  
 <p>The mentioned fields above don't have to be in particular  
                     order. The fields above are only those fields which are  
                     returned by all audio output devices. Every audio output driver  
                     might have its own, additional driver specific parameters (see  
                     <a class='info' href='#GET AUDIO_OUTPUT_DRIVER INFO'>Section&nbsp;6.2.3<span> (</span><span class='info'>Getting information about a specific audio                 output driver</span><span>)</span></a>)  
                     which are also returned by this command.  
 </p>  
 <p>Example:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "GET AUDIO_OUTPUT_DEVICE INFO 0"  
 </p>  
 <p>S: "DRIVER: ALSA"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"CHANNELS: 2"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"SAMPLERATE: 44100"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"ACTIVE: true"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"FRAGMENTS: 2"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"FRAGMENTSIZE: 128"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"CARD: '0,0'"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"."  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="SET AUDIO_OUTPUT_DEVICE_PARAMETER"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.2.10"></a><h3>6.2.10.&nbsp;  
 Changing settings of audio output devices</h3>  
   
 <p>Use the following command to alter a specific setting of a created audio output device:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>SET AUDIO_OUTPUT_DEVICE_PARAMETER &lt;device-id&gt; &lt;key&gt;=&lt;value&gt;  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Where &lt;device-id&gt; should be replaced by the numerical ID of the  
                     audio output device as given by the  
                     <a class='info' href='#CREATE AUDIO_OUTPUT_DEVICE'>"CREATE AUDIO_OUTPUT_DEVICE"<span> (</span><span class='info'>Creating an audio output device</span><span>)</span></a>  
                     or <a class='info' href='#LIST AUDIO_OUTPUT_DEVICES'>"LIST AUDIO_OUTPUT_DEVICES"<span> (</span><span class='info'>Getting all created audio output device list</span><span>)</span></a>  
                     command, &lt;key&gt; by the name of the parameter to change  
                     and &lt;value&gt; by the new value for this parameter.  
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>"OK" -  
                                 </p>  
 <blockquote class="text">  
 <p>in case setting was successfully changed  
 </p>  
 </blockquote>  
                               
   
 <p>"WRN:&lt;warning-code&gt;:&lt;warning-message&gt;" -  
                                 </p>  
 <blockquote class="text">  
 <p>in case setting was changed successfully, but there are  
                                     noteworthy issue(s) related, providing an appropriate  
                                     warning code and warning message  
 </p>  
 </blockquote>  
                               
   
 <p>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" -  
                                 </p>  
 <blockquote class="text">  
 <p>in case it failed, providing an appropriate error code and  
                                     error message  
 </p>  
 </blockquote>  
                               
   
 </blockquote><p>  
                       
 </p>  
 <p>Example:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "SET AUDIO_OUTPUT_DEVICE_PARAMETER 0 FRAGMENTSIZE=128"  
 </p>  
 <p>S: "OK"  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="GET AUDIO_OUTPUT_CHANNEL INFO"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.2.11"></a><h3>6.2.11.&nbsp;  
 Getting information about an audio channel</h3>  
   
 <p>Use the following command to get information about an audio channel:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>GET AUDIO_OUTPUT_CHANNEL INFO &lt;device-id&gt; &lt;audio-chan&gt;  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Where &lt;device-id&gt; is the numerical ID of the audio output device as given by the  
                     <a class='info' href='#CREATE AUDIO_OUTPUT_DEVICE'>"CREATE AUDIO_OUTPUT_DEVICE"<span> (</span><span class='info'>Creating an audio output device</span><span>)</span></a>  
                     or <a class='info' href='#LIST AUDIO_OUTPUT_DEVICES'>"LIST AUDIO_OUTPUT_DEVICES"<span> (</span><span class='info'>Getting all created audio output device list</span><span>)</span></a>  
                     command and &lt;audio-chan&gt; the audio channel number.  
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>LinuxSampler will answer by sending a &lt;CRLF&gt; separated list.  
                             Each answer line begins with the information category name  
                             followed by a colon and then a space character &lt;SP&gt; and finally  
                             the info character string to that info category. At the moment  
                             the following information categories are defined:  
 </p>  
 <p>  
                                 </p>  
 <blockquote class="text">  
 <p>NAME -  
                                         </p>  
 <blockquote class="text">  
 <p>arbitrary character string naming the channel, which  
                                             doesn't have to be unique (always returned by all audio channels)  
 </p>  
 </blockquote>  
                                       
   
 <p>IS_MIX_CHANNEL -  
                                         </p>  
 <blockquote class="text">  
 <p>either true or false, a mix-channel is not a real,  
                                             independent audio channel, but a virtual channel which  
                                             is mixed to another real channel, this mechanism is  
                                             needed for sampler engines which need more audio  
                                             channels than the used audio system might be able to offer  
                                             (always returned by all audio channels)  
 </p>  
 </blockquote>  
                                       
   
 <p>MIX_CHANNEL_DESTINATION -  
                                         </p>  
 <blockquote class="text">  
 <p>numerical ID (positive integer including 0)  
                                             which reflects the real audio channel (of the same audio  
                                             output device) this mix channel refers to, means where  
                                             the audio signal actually will be routed / added to  
                                             (only returned in case the audio channel is mix channel)  
 </p>  
 </blockquote>  
                                       
   
 </blockquote>  
                               
   
 </blockquote><p>  
                       
 </p>  
 <p>The mentioned fields above don't have to be in particular  
                     order. The fields above are only those fields which are  
                     generally returned for the described cases by all audio  
                     channels regardless of the audio driver. Every audio channel  
                     might have its own, additional driver and channel specific  
                     parameters.  
 </p>  
 <p>Examples:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "GET AUDIO_OUTPUT_CHANNEL INFO 0 0"  
 </p>  
 <p>S: "NAME: studio monitor left"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"IS_MIX_CHANNEL: false"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"."  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "GET AUDIO_OUTPUT_CHANNEL INFO 0 1"  
 </p>  
 <p>S: "NAME: studio monitor right"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"IS_MIX_CHANNEL: false"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"."  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "GET AUDIO_OUTPUT_CHANNEL INFO 0 2"  
 </p>  
 <p>S: "NAME: studio monitor left"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"IS_MIX_CHANNEL: true"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"MIX_CHANNEL_DESTINATION: 1"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"."  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "GET AUDIO_OUTPUT_CHANNEL INFO 1 0"  
 </p>  
 <p>S: "NAME: 'ardour (left)'"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"IS_MIX_CHANNEL: false"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"JACK_BINDINGS: 'ardour:0'"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"."  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="GET AUDIO_OUTPUT_CHANNEL_PARAMETER INFO"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.2.12"></a><h3>6.2.12.&nbsp;  
 Getting information about specific audio channel parameter</h3>  
   
 <p>Use the following command to get detailed information about specific audio channel parameter:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>GET AUDIO_OUTPUT_CHANNEL_PARAMETER INFO &lt;dev-id&gt; &lt;chan&gt; &lt;param&gt;  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Where &lt;dev-id&gt; is the numerical ID of the audio output device as returned by the  
                     <a class='info' href='#CREATE AUDIO_OUTPUT_DEVICE'>"CREATE AUDIO_OUTPUT_DEVICE"<span> (</span><span class='info'>Creating an audio output device</span><span>)</span></a>  
                     or <a class='info' href='#LIST AUDIO_OUTPUT_DEVICES'>"LIST AUDIO_OUTPUT_DEVICES"<span> (</span><span class='info'>Getting all created audio output device list</span><span>)</span></a>  
                     command, &lt;chan&gt; the audio channel number  
                     and &lt;param&gt; a specific channel parameter name for which information should  
                     be obtained (as returned by the <a class='info' href='#GET AUDIO_OUTPUT_CHANNEL INFO'>"GET AUDIO_OUTPUT_CHANNEL INFO"<span> (</span><span class='info'>Getting information about an audio channel</span><span>)</span></a> command).  
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>LinuxSampler will answer by sending a &lt;CRLF&gt; separated list.  
                             Each answer line begins with the information category name  
                             followed by a colon and then a space character &lt;SP&gt; and finally  
                             the info character string to that info category. There are  
                             information which is always returned, independently of the  
                             given channel parameter and there is optional information  
                             which is only shown dependently to the given audio channel. At  
                             the moment the following information categories are defined:  
 </p>  
 <p>  
                                 </p>  
 <blockquote class="text">  
 <p>TYPE -  
                                         </p>  
 <blockquote class="text">  
 <p>either "BOOL" for boolean value(s) or "INT" for integer  
                                             value(s) or "FLOAT" for dotted number(s) or "STRING" for  
                                             character string(s)  
                                             (always returned)  
 </p>  
 </blockquote>  
                                       
   
 <p>DESCRIPTION -  
                                         </p>  
 <blockquote class="text">  
 <p>arbitrary text describing the purpose of the parameter (always returned)  
 </p>  
 </blockquote>  
                                       
   
 <p>FIX -  
                                         </p>  
 <blockquote class="text">  
 <p>either true or false, if true then this parameter is  
                                             read only, thus cannot be altered  
                                             (always returned)  
 </p>  
 </blockquote>  
                                       
   
 <p>MULTIPLICITY -  
                                         </p>  
 <blockquote class="text">  
 <p>either true or false, defines if this parameter allows  
                                             only one value or a list of values, where true means  
                                             multiple values and false only a single value allowed  
                                             (always returned)  
 </p>  
 </blockquote>  
                                       
   
 <p>RANGE_MIN -  
                                         </p>  
 <blockquote class="text">  
 <p>defines lower limit of the allowed value range for this  
                                             parameter, can be an integer value as well as a dotted  
                                             number, usually used in conjunction with 'RANGE_MAX',  
                                             but may also appear without  
                                             (optionally returned, dependent to driver and channel  
                                             parameter)  
 </p>  
 </blockquote>  
                                       
   
 <p>RANGE_MAX -  
                                         </p>  
 <blockquote class="text">  
 <p>defines upper limit of the allowed value range for this  
                                             parameter, can be an integer value as well as a dotted  
                                             number, usually used in conjunction with 'RANGE_MIN',  
                                             but may also appear without  
                                             (optionally returned, dependent to driver and channel  
                                             parameter)  
 </p>  
 </blockquote>  
                                       
   
 <p>POSSIBILITIES -  
                                         </p>  
 <blockquote class="text">  
 <p>comma separated list of possible values for this  
                                             parameter, character strings are encapsulated into  
                                             apostrophes  
                                             (optionally returned, dependent to driver and channel  
                                             parameter)  
 </p>  
 </blockquote>  
                                       
   
 </blockquote>  
                               
   
 <p>The mentioned fields above don't have to be in particular order.  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Example:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "GET AUDIO_OUTPUT_CHANNEL_PARAMETER INFO 1 0 JACK_BINDINGS"  
 </p>  
 <p>S: "DESCRIPTION: bindings to other JACK clients"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"TYPE: STRING"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"FIX: false"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"MULTIPLICITY: true"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"POSSIBILITIES: 'PCM:0','PCM:1','ardour:0','ardour:1'"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"."  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="SET AUDIO_OUTPUT_CHANNEL_PARAMETER"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.2.13"></a><h3>6.2.13.&nbsp;  
 Changing settings of audio output channels</h3>  
   
 <p>Use the following command to alter a specific setting of an audio output channel:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>SET AUDIO_OUTPUT_CHANNEL_PARAMETER &lt;dev-id&gt; &lt;chn&gt; &lt;key&gt;=&lt;value&gt;  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Where &lt;dev-id&gt; should be replaced by the numerical ID of the audio output device as returned by the  
                     <a class='info' href='#CREATE AUDIO_OUTPUT_DEVICE'>"CREATE AUDIO_OUTPUT_DEVICE"<span> (</span><span class='info'>Creating an audio output device</span><span>)</span></a>  
                     or <a class='info' href='#LIST AUDIO_OUTPUT_DEVICES'>"LIST AUDIO_OUTPUT_DEVICES"<span> (</span><span class='info'>Getting all created audio output device list</span><span>)</span></a>  
                     command, &lt;chn&gt; by the audio channel number, &lt;key&gt; by the name of the  
                     parameter to change and &lt;value&gt; by the new value for this parameter.  
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>"OK" -  
                                 </p>  
 <blockquote class="text">  
 <p>in case setting was successfully changed  
 </p>  
 </blockquote>  
                               
   
 <p>"WRN:&lt;warning-code&gt;:&lt;warning-message&gt;" -  
                                 </p>  
 <blockquote class="text">  
 <p>in case setting was changed successfully, but there are  
                                    noteworthy issue(s) related, providing an appropriate  
                                    warning code and warning message  
 </p>  
 </blockquote>  
                               
   
 <p>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" -  
                                 </p>  
 <blockquote class="text">  
 <p>in case it failed, providing an appropriate error code and  
                                    error message  
 </p>  
 </blockquote>  
                               
   
 </blockquote><p>  
                       
 </p>  
 <p>Example:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "SET AUDIO_OUTPUT_CHANNEL PARAMETER 0 0 JACK_BINDINGS='PCM:0'"  
 </p>  
 <p>S: "OK"  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "SET AUDIO_OUTPUT_CHANNEL PARAMETER 0 0 NAME='monitor left'"  
 </p>  
 <p>S: "OK"  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="anchor10"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.3"></a><h3>6.3.&nbsp;  
 Configuring MIDI input drivers</h3>  
   
 <p>Instances of drivers in LinuxSampler are called devices. You can use  
                 multiple MIDI devices simultaneously, e.g. to use MIDI over ethernet as  
                 MIDI input on one sampler channel and ALSA as MIDI input on another sampler  
                 channel. For particular MIDI input systems it's also possible to create  
                 several devices of the same MIDI input type. This chapter describes all  
                 commands to configure LinuxSampler's MIDI input devices and their parameters.  
 </p>  
 <p>Instead of defining commands and parameters for each driver individually,  
                 all possible parameters, their meanings and possible values have to be obtained  
                 at runtime. This makes the protocol a bit abstract, but has the advantage, that  
                 front-ends can be written independently of what drivers are currently implemented  
                 and what parameters these drivers are actually offering. This means front-ends can  
                 even handle drivers which are implemented somewhere in future without modifying  
                 the front-end at all.  
 </p>  
 <p>Commands for configuring MIDI input devices are pretty much the same as the  
                 commands for configuring audio output drivers, already described in the last  
                 chapter.  
 </p>  
 <p>Note: examples in this chapter showing particular parameters of drivers are  
                 not meant as specification of the drivers' parameters. Driver implementations in  
                 LinuxSampler might have complete different parameter names and meanings than shown  
                 in these examples or might change in future, so these examples are only meant for  
                 showing how to retrieve what parameters drivers are offering, how to retrieve their  
                 possible values, etc.  
 </p>  
 <a name="GET AVAILABLE_MIDI_INPUT_DRIVERS"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.3.1"></a><h3>6.3.1.&nbsp;  
 Getting amount of available MIDI input drivers</h3>  
   
 <p>Use the following command to get the number of  
                     MIDI input drivers currently available for the  
                     LinuxSampler instance:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>GET AVAILABLE_MIDI_INPUT_DRIVERS  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>LinuxSampler will answer by sending the  
                             number of available MIDI input drivers.  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Example:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "GET AVAILABLE_MIDI_INPUT_DRIVERS"  
 </p>  
 <p>S: "2"  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="LIST AVAILABLE_MIDI_INPUT_DRIVERS"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.3.2"></a><h3>6.3.2.&nbsp;  
 Getting all available MIDI input drivers</h3>  
   
 <p>Use the following command to list all MIDI input drivers currently available  
                     for the LinuxSampler instance:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>LIST AVAILABLE_MIDI_INPUT_DRIVERS  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>LinuxSampler will answer by sending comma separated character  
                             strings, each symbolizing a MIDI input driver.  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Example:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "LIST AVAILABLE_MIDI_INPUT_DRIVERS"  
 </p>  
 <p>S: "ALSA,JACK"  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="GET MIDI_INPUT_DRIVER INFO"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.3.3"></a><h3>6.3.3.&nbsp;  
 Getting information about a specific MIDI input driver</h3>  
   
 <p>Use the following command to get detailed information about a specific MIDI input driver:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>GET MIDI_INPUT_DRIVER INFO &lt;midi-input-driver&gt;  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Where &lt;midi-input-driver&gt; is the name of the MIDI input driver as returned  
                     by the <a class='info' href='#LIST AVAILABLE_MIDI_INPUT_DRIVERS'>"LIST AVAILABLE_MIDI_INPUT_DRIVERS"<span> (</span><span class='info'>Getting all available MIDI input drivers</span><span>)</span></a> command.  
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>LinuxSampler will answer by sending a &lt;CRLF&gt; separated list.  
                             Each answer line begins with the information category name  
                             followed by a colon and then a space character &lt;SP&gt; and finally  
                             the info character string to that info category. At the moment  
                             the following information categories are defined:  
 </p>  
 <p>  
                                 </p>  
 <blockquote class="text">  
 <p>DESCRIPTION -  
                                         </p>  
 <blockquote class="text">  
 <p>arbitrary description text about the MIDI input driver  
 </p>  
 </blockquote>  
                                       
   
 <p>VERSION -  
                                         </p>  
 <blockquote class="text">  
 <p>arbitrary character string regarding the driver's version  
 </p>  
 </blockquote>  
                                       
   
 <p>PARAMETERS -  
                                         </p>  
 <blockquote class="text">  
 <p>comma separated list of all parameters available for the given MIDI input driver  
 </p>  
 </blockquote>  
                                       
   
 </blockquote>  
                               
   
 <p>The mentioned fields above don't have to be in particular order.  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Example:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "GET MIDI_INPUT_DRIVER INFO ALSA"  
 </p>  
 <p>S: "DESCRIPTION: Advanced Linux Sound Architecture"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"VERSION: 1.0"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"PARAMETERS: DRIVER,ACTIVE"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"."  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="GET MIDI_INPUT_DRIVER_PARAMETER INFO"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.3.4"></a><h3>6.3.4.&nbsp;  
 Getting information about specific MIDI input driver parameter</h3>  
   
 <p>Use the following command to get detailed information about a specific parameter of a specific MIDI input driver:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>GET MIDI_INPUT_DRIVER_PARAMETER INFO &lt;midit&gt; &lt;param&gt; [&lt;deplist&gt;]  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Where &lt;midit&gt; is the name of the MIDI input driver as returned  
                     by the <a class='info' href='#LIST AVAILABLE_MIDI_INPUT_DRIVERS'>"LIST AVAILABLE_MIDI_INPUT_DRIVERS"<span> (</span><span class='info'>Getting all available MIDI input drivers</span><span>)</span></a> command, &lt;param&gt; a specific  
                     parameter name for which information should be obtained (as returned by the  
                     <a class='info' href='#GET MIDI_INPUT_DRIVER INFO'>"GET MIDI_INPUT_DRIVER INFO"<span> (</span><span class='info'>Getting information about a specific MIDI input driver</span><span>)</span></a> command) and &lt;deplist&gt; is an optional list  
                     of parameters on which the sought parameter &lt;param&gt; depends on,  
                     &lt;deplist&gt; is a key-value pair list in form of "key1=val1 key2=val2 ...",  
                     where character string values are encapsulated into apostrophes ('). Arguments  
                     given with &lt;deplist&gt; which are not dependency parameters of &lt;param&gt;  
                     will be ignored, means the front-end application can simply put all parameters  
                     in &lt;deplist&gt; with the values selected by the user.  
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>LinuxSampler will answer by sending a &lt;CRLF> separated list.  
                     Each answer line begins with the information category name  
                     followed by a colon and then a space character &lt;SP> and finally  
                     the info character string to that info category. There is  
                     information which is always returned, independent of the  
                     given driver parameter and there is optional information  
                     which is only shown dependent to given driver parameter. At  
                     the moment the following information categories are defined:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>TYPE -  
                               </p>  
 <blockquote class="text">  
 <p>either "BOOL" for boolean value(s) or "INT" for integer  
                                 value(s) or "FLOAT" for dotted number(s) or "STRING" for  
                                 character string(s)  
                                 (always returned, no matter which driver parameter)  
 </p>  
 </blockquote>  
                               
   
 <p>DESCRIPTION -  
                               </p>  
 <blockquote class="text">  
 <p>arbitrary text describing the purpose of the parameter  
                                 (always returned, no matter which driver parameter)  
 </p>  
 </blockquote>  
                               
   
 <p>MANDATORY -  
                               </p>  
 <blockquote class="text">  
 <p>either true or false, defines if this parameter must be  
                                 given when the device is to be created with the  
                                 <a class='info' href='#CREATE MIDI_INPUT_DEVICE'>'CREATE MIDI_INPUT_DEVICE'<span> (</span><span class='info'>Creating a MIDI input device</span><span>)</span></a> command  
                                 (always returned, no matter which driver parameter)  
 </p>  
 </blockquote>  
                               
   
 <p>FIX -  
                               </p>  
 <blockquote class="text">  
 <p>either true or false, if false then this parameter can  
                                 be changed at any time, once the device is created by  
                                 the <a class='info' href='#CREATE MIDI_INPUT_DEVICE'>'CREATE MIDI_INPUT_DEVICE'<span> (</span><span class='info'>Creating a MIDI input device</span><span>)</span></a> command  
                                 (always returned, no matter which driver parameter)  
 </p>  
 </blockquote>  
                               
   
 <p>MULTIPLICITY -  
                               </p>  
 <blockquote class="text">  
 <p>either true or false, defines if this parameter allows  
                                 only one value or a list of values, where true means  
                                 multiple values and false only a single value allowed  
                                 (always returned, no matter which driver parameter)  
 </p>  
 </blockquote>  
                               
   
 <p>DEPENDS -  
                               </p>  
 <blockquote class="text">  
 <p>comma separated list of parameters this parameter depends  
                                 on, means the values for fields 'DEFAULT', 'RANGE_MIN',  
                                 'RANGE_MAX' and 'POSSIBILITIES' might depend on these  
                                 listed parameters, for example assuming that an audio  
                                 driver (like the ALSA driver) offers parameters 'card'  
                                 and 'samplerate' then parameter 'samplerate' would  
                                 depend on 'card' because the possible values for  
                                 'samplerate' depends on the sound card which can be  
                                 chosen by the 'card' parameter  
                                 (optionally returned, dependent to driver parameter)  
 </p>  
 </blockquote>  
                               
   
 <p>DEFAULT -  
                               </p>  
 <blockquote class="text">  
 <p>reflects the default value for this parameter which is  
                                 used when the device is created and not explicitly  
                                 given with the <a class='info' href='#CREATE MIDI_INPUT_DEVICE'>'CREATE MIDI_INPUT_DEVICE'<span> (</span><span class='info'>Creating a MIDI input device</span><span>)</span></a> command,  
                                 in case of MULTIPLCITY=true, this is a comma separated  
                                 list, that's why character strings are encapsulated into  
                                 apostrophes (')  
                                 (optionally returned, dependent to driver parameter)  
 </p>  
 </blockquote>  
                               
   
 <p>RANGE_MIN -  
                               </p>  
 <blockquote class="text">  
 <p>defines lower limit of the allowed value range for this  
                                 parameter, can be an integer value as well as a dotted  
                                 number, this parameter is often used in conjunction  
                                 with RANGE_MAX, but may also appear without  
                                 (optionally returned, dependent to driver parameter)  
 </p>  
 </blockquote>  
                               
   
 <p>RANGE_MAX -  
                               </p>  
 <blockquote class="text">  
 <p>defines upper limit of the allowed value range for this  
                                 parameter, can be an integer value as well as a dotted  
                                 number, this parameter is often used in conjunction with  
                                 RANGE_MIN, but may also appear without  
                                 (optionally returned, dependent to driver parameter)  
 </p>  
 </blockquote>  
                               
   
 <p>POSSIBILITIES -  
                               </p>  
 <blockquote class="text">  
 <p>comma separated list of possible values for this  
                                 parameter, character strings are encapsulated into  
                                 apostrophes  
                                 (optionally returned, dependent to driver parameter)  
 </p>  
 </blockquote>  
                               
   
 </blockquote><p>  
                       
 </p>  
 <p>The mentioned fields above don't have to be in particular order.  
 </p>  
 <p>Example:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "GET MIDI_INPUT_DRIVER_PARAMETER INFO ALSA ACTIVE"  
 </p>  
 <p>S: "DESCRIPTION: Whether device is enabled"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"TYPE: BOOL"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"MANDATORY: false"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"FIX: false"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"MULTIPLICITY: false"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"DEFAULT: true"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"."  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="CREATE MIDI_INPUT_DEVICE"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.3.5"></a><h3>6.3.5.&nbsp;  
 Creating a MIDI input device</h3>  
   
 <p>Use the following command to create a new MIDI input device for  the desired MIDI input system:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>CREATE MIDI_INPUT_DEVICE &lt;midi-input-driver&gt; [&lt;param-list&gt;]  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Where &lt;midi-input-driver&gt; should be replaced by the desired MIDI input system as returned  
                     by the <a class='info' href='#LIST AVAILABLE_MIDI_INPUT_DRIVERS'>"LIST AVAILABLE_MIDI_INPUT_DRIVERS"<span> (</span><span class='info'>Getting all available MIDI input drivers</span><span>)</span></a> command and &lt;param-list&gt; by an  
                     optional list of driver specific parameters in form of "key1=val1 key2=val2 ...", where  
                     character string values should be encapsulated into apostrophes (').  
                     Note that there might be drivers which require parameter(s) to be  
                     given with this command. Use the previously described commands in  
                     this chapter to get that information.  
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>"OK[&lt;device-id&gt;]" -  
                                 </p>  
 <blockquote class="text">  
 <p>in case the device was successfully created, where  
                                     &lt;device-id&gt; is the numerical ID of the new device  
 </p>  
 </blockquote>  
                               
   
 <p>"WRN[&lt;device-id&gt;]:&lt;warning-code&gt;:&lt;warning-message&gt;" -  
                                 </p>  
 <blockquote class="text">  
 <p>in case the driver was loaded successfully, where  
                                     &lt;device-id&gt; is the numerical ID of the new device, but  
                                     there are noteworthy issue(s) related, providing an  
                                     appropriate warning code and warning message  
 </p>  
 </blockquote>  
                               
   
 <p>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" -  
                                 </p>  
 <blockquote class="text">  
 <p>in case it failed, providing an appropriate error code and error message  
 </p>  
 </blockquote>  
                               
   
 </blockquote><p>  
                       
 </p>  
 <p>Example:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "CREATE MIDI_INPUT_DEVICE ALSA"  
 </p>  
 <p>S: "OK[0]"  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="DESTROY MIDI_INPUT_DEVICE"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.3.6"></a><h3>6.3.6.&nbsp;  
 Destroying a MIDI input device</h3>  
   
 <p>Use the following command to destroy a created MIDI input device:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>DESTROY MIDI_INPUT_DEVICE &lt;device-id&gt;  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Where &lt;device-id&gt; should be replaced by the device's numerical ID as returned by the  
                     <a class='info' href='#CREATE MIDI_INPUT_DEVICE'>"CREATE MIDI_INPUT_DEVICE"<span> (</span><span class='info'>Creating a MIDI input device</span><span>)</span></a>  
                     or <a class='info' href='#LIST MIDI_INPUT_DEVICES'>"LIST MIDI_INPUT_DEVICES"<span> (</span><span class='info'>Getting all created MIDI input device list</span><span>)</span></a>  
                     command.  
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>"OK" -  
                                 </p>  
 <blockquote class="text">  
 <p>in case the device was successfully destroyed  
 </p>  
 </blockquote>  
                               
   
 <p>"WRN:&lt;warning-code&gt;:&lt;warning-message&gt;" -  
                                 </p>  
 <blockquote class="text">  
 <p>in case the device was destroyed, but there are noteworthy  
                                     issue(s) related, providing an appropriate warning code and  
                                     warning message  
 </p>  
 </blockquote>  
                               
   
 <p>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" -  
                                 </p>  
 <blockquote class="text">  
 <p>in case it failed, providing an appropriate error code and error message  
 </p>  
 </blockquote>  
                               
   
 </blockquote><p>  
                       
 </p>  
 <p>Example:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "DESTROY MIDI_INPUT_DEVICE 0"  
 </p>  
 <p>S: "OK"  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="GET MIDI_INPUT_DEVICES"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.3.7"></a><h3>6.3.7.&nbsp;  
 Getting all created MIDI input device count</h3>  
   
 <p>Use the following command to count all created MIDI input devices:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>GET MIDI_INPUT_DEVICES  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>LinuxSampler will answer by sending the current number of all  
                             MIDI input devices.  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Example:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "GET MIDI_INPUT_DEVICES"  
 </p>  
 <p>S: "3"  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="LIST MIDI_INPUT_DEVICES"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.3.8"></a><h3>6.3.8.&nbsp;  
 Getting all created MIDI input device list</h3>  
   
 <p>Use the following command to list all created MIDI input devices:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>LIST MIDI_INPUT_DEVICES  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>LinuxSampler will answer by sending a comma separated list  
                             with the numerical Ids of all created MIDI input devices.  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Examples:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "LIST MIDI_INPUT_DEVICES"  
 </p>  
 <p>S: "0,1,2"  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "LIST MIDI_INPUT_DEVICES"  
 </p>  
 <p>S: "1,3"  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="GET MIDI_INPUT_DEVICE INFO"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.3.9"></a><h3>6.3.9.&nbsp;  
 Getting current settings of a MIDI input device</h3>  
   
 <p>Use the following command to get current settings of a specific, created MIDI input device:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>GET MIDI_INPUT_DEVICE INFO &lt;device-id&gt;  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Where &lt;device-id&gt; is the numerical ID of the MIDI input device as returned by the  
                     <a class='info' href='#CREATE MIDI_INPUT_DEVICE'>"CREATE MIDI_INPUT_DEVICE"<span> (</span><span class='info'>Creating a MIDI input device</span><span>)</span></a>  
                     or <a class='info' href='#LIST MIDI_INPUT_DEVICES'>"LIST MIDI_INPUT_DEVICES"<span> (</span><span class='info'>Getting all created MIDI input device list</span><span>)</span></a>  
                     command.  
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>LinuxSampler will answer by sending a &lt;CRLF&gt; separated list.  
                             Each answer line begins with the information category name  
                             followed by a colon and then a space character &lt;SP&gt; and finally  
                             the info character string to that info category. As some  
                             parameters might allow multiple values, character strings are  
                             encapsulated into apostrophes ('). At the moment the following  
                             information categories are defined (independent of driver):  
 </p>  
 <p>  
                                 </p>  
 <blockquote class="text">  
 <p>DRIVER -  
                                         </p>  
 <blockquote class="text">  
 <p>identifier of the used MIDI input driver, as e.g.  
                                             returned by the <a class='info' href='#LIST AVAILABLE_MIDI_INPUT_DRIVERS'>"LIST AVAILABLE_MIDI_INPUT_DRIVERS"<span> (</span><span class='info'>Getting all available MIDI input drivers</span><span>)</span></a>  
                                             command  
 </p>  
 </blockquote>  
                                       
   
 </blockquote>  
                                   
 <blockquote class="text">  
 <p>ACTIVE -  
                                         </p>  
 <blockquote class="text">  
 <p>either true or false, if false then the MIDI device is  
                                             inactive and doesn't listen to any incoming MIDI events  
                                             and thus doesn't forward them to connected sampler  
                                             channels  
 </p>  
 </blockquote>  
                                       
   
 </blockquote>  
                               
   
 </blockquote><p>  
                       
 </p>  
 <p>The mentioned fields above don't have to be in particular  
                     order. The fields above are only those fields which are  
                     returned by all MIDI input devices. Every MIDI input driver  
                     might have its own, additional driver specific parameters (see  
                     <a class='info' href='#GET MIDI_INPUT_DRIVER INFO'>"GET MIDI_INPUT_DRIVER INFO"<span> (</span><span class='info'>Getting information about a specific MIDI input driver</span><span>)</span></a> command) which are also returned  
                     by this command.  
 </p>  
 <p>Example:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "GET MIDI_INPUT_DEVICE INFO 0"  
 </p>  
 <p>S: "DRIVER: ALSA"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"ACTIVE: true"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"."  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="SET MIDI_INPUT_DEVICE_PARAMETER"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.3.10"></a><h3>6.3.10.&nbsp;  
 Changing settings of MIDI input devices</h3>  
   
 <p>Use the following command to alter a specific setting of a created MIDI input device:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>SET MIDI_INPUT_DEVICE_PARAMETER &lt;device-id&gt; &lt;key&gt;=&lt;value&gt;  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Where &lt;device-id&gt; should be replaced by the numerical ID of the  
                     MIDI input device as returned by the  
                     <a class='info' href='#CREATE MIDI_INPUT_DEVICE'>"CREATE MIDI_INPUT_DEVICE"<span> (</span><span class='info'>Creating a MIDI input device</span><span>)</span></a>  
                     or <a class='info' href='#LIST MIDI_INPUT_DEVICES'>"LIST MIDI_INPUT_DEVICES"<span> (</span><span class='info'>Getting all created MIDI input device list</span><span>)</span></a>  
                     command, &lt;key&gt; by the name of the parameter to change and  
                     &lt;value&gt; by the new value for this parameter.  
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>"OK" -  
                                 </p>  
 <blockquote class="text">  
 <p>in case setting was successfully changed  
 </p>  
 </blockquote>  
                               
   
 <p>"WRN:&lt;warning-code&gt;:&lt;warning-message&gt;" -  
                                 </p>  
 <blockquote class="text">  
 <p>in case setting was changed successfully, but there are  
                                     noteworthy issue(s) related, providing an appropriate  
                                     warning code and warning message  
 </p>  
 </blockquote>  
                               
   
 <p>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" -  
                                 </p>  
 <blockquote class="text">  
 <p>in case it failed, providing an appropriate error code and error message  
 </p>  
 </blockquote>  
                               
   
 </blockquote><p>  
                       
 </p>  
 <p>Example:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "SET MIDI_INPUT_DEVICE_PARAMETER 0 ACTIVE=false"  
 </p>  
 <p>S: "OK"  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="GET MIDI_INPUT_PORT INFO"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.3.11"></a><h3>6.3.11.&nbsp;  
 Getting information about a MIDI port</h3>  
   
 <p>Use the following command to get information about a MIDI port:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>GET MIDI_INPUT_PORT INFO &lt;device-id&gt; &lt;midi-port&gt;  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Where &lt;device-id&gt; is the numerical ID of the MIDI input device as returned by the  
                     <a class='info' href='#CREATE MIDI_INPUT_DEVICE'>"CREATE MIDI_INPUT_DEVICE"<span> (</span><span class='info'>Creating a MIDI input device</span><span>)</span></a>  
                     or <a class='info' href='#LIST MIDI_INPUT_DEVICES'>"LIST MIDI_INPUT_DEVICES"<span> (</span><span class='info'>Getting all created MIDI input device list</span><span>)</span></a>  
                     command and &lt;midi-port&gt; the MIDI input port number.  
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>LinuxSampler will answer by sending a &lt;CRLF&gt; separated list.  
                             Each answer line begins with the information category name  
                             followed by a colon and then a space character &lt;SP&gt; and finally  
                             the info character string to that info category. At the moment  
                             the following information categories are defined:  
 </p>  
 <p>NAME -  
                                 </p>  
 <blockquote class="text">  
 <p>arbitrary character string naming the port  
 </p>  
 </blockquote>  
                               
   
 </blockquote><p>  
                       
 </p>  
 <p>The field above is only the one which is returned by all MIDI  
                     ports regardless of the MIDI driver and port. Every MIDI port  
                     might have its own, additional driver and port specific  
                     parameters.  
 </p>  
 <p>Example:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "GET MIDI_INPUT_PORT INFO 0 0"  
 </p>  
 <p>S: "NAME: 'Masterkeyboard'"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"ALSA_SEQ_BINDINGS: '64:0'"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"."  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="GET MIDI_INPUT_PORT_PARAMETER INFO"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.3.12"></a><h3>6.3.12.&nbsp;  
 Getting information about specific MIDI port parameter</h3>  
   
 <p>Use the following command to get detailed information about specific MIDI port parameter:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>GET MIDI_INPUT_PORT_PARAMETER INFO &lt;dev-id&gt; &lt;port&gt; &lt;param&gt;  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Where &lt;dev-id&gt; is the numerical ID of the MIDI input device as returned by the  
                     <a class='info' href='#CREATE MIDI_INPUT_DEVICE'>"CREATE MIDI_INPUT_DEVICE"<span> (</span><span class='info'>Creating a MIDI input device</span><span>)</span></a>  
                     or <a class='info' href='#LIST MIDI_INPUT_DEVICES'>"LIST MIDI_INPUT_DEVICES"<span> (</span><span class='info'>Getting all created MIDI input device list</span><span>)</span></a>  
                     command, &lt;port&gt; the MIDI port number and  
                     &lt;param&gt; a specific port parameter name for which information should be  
                     obtained (as returned by the <a class='info' href='#GET MIDI_INPUT_PORT INFO'>"GET MIDI_INPUT_PORT INFO"<span> (</span><span class='info'>Getting information about a MIDI port</span><span>)</span></a> command).  
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>LinuxSampler will answer by sending a &lt;CRLF&gt; separated list.  
                             Each answer line begins with the information category name  
                             followed by a colon and then a space character &lt;SP&gt; and finally  
                             the info character string to that info category. There is  
                             information which is always returned, independently of the  
                             given channel parameter and there is optional information  
                             which are only shown dependently to the given MIDI port. At the  
                             moment the following information categories are defined:  
 </p>  
 <p>TYPE -  
                                 </p>  
 <blockquote class="text">  
 <p>either "BOOL" for boolean value(s) or "INT" for integer  
                                     value(s) or "FLOAT" for dotted number(s) or "STRING" for  
                                     character string(s)  
                                     (always returned)  
 </p>  
 </blockquote>  
                               
   
 <p>DESCRIPTION -  
                                 </p>  
 <blockquote class="text">  
 <p>arbitrary text describing the purpose of the parameter  
                                     (always returned)  
 </p>  
 </blockquote>  
                               
   
 <p>FIX -  
                                 </p>  
 <blockquote class="text">  
 <p>either true or false, if true then this parameter is  
                                     read only, thus cannot be altered  
                                     (always returned)  
 </p>  
 </blockquote>  
                               
   
 <p>MULTIPLICITY -  
                                 </p>  
 <blockquote class="text">  
 <p>either true or false, defines if this parameter allows  
                                     only one value or a list of values, where true means  
                                     multiple values and false only a single value allowed  
                                     (always returned)  
 </p>  
 </blockquote>  
                               
   
 <p>RANGE_MIN -  
                                 </p>  
 <blockquote class="text">  
 <p>defines lower limit of the allowed value range for this  
                                     parameter, can be an integer value as well as a dotted  
                                     number, this parameter is usually used in conjunction  
                                     with 'RANGE_MAX' but may also appear without  
                                     (optionally returned, dependent to driver and port  
                                     parameter)  
 </p>  
 </blockquote>  
                               
   
 <p>RANGE_MAX -  
                                 </p>  
 <blockquote class="text">  
 <p>defines upper limit of the allowed value range for this  
                                     parameter, can be an integer value as well as a dotted  
                                     number, this parameter is usually used in conjunction  
                                     with 'RANGE_MIN' but may also appear without  
                                     (optionally returned, dependent to driver and port  
                                     parameter)  
 </p>  
 </blockquote>  
                               
   
 <p>POSSIBILITIES -  
                                 </p>  
 <blockquote class="text">  
 <p>comma separated list of possible values for this  
                                     parameter, character strings are encapsulated into  
                                     apostrophes  
                                     (optionally returned, dependent to device and port  
                                     parameter)  
 </p>  
 </blockquote>  
                               
   
 </blockquote><p>  
                       
 </p>  
 <p>The mentioned fields above don't have to be in particular order.  
 </p>  
 <p>Example:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "GET MIDI_INPUT_PORT_PARAMETER INFO 0 0 ALSA_SEQ_BINDINGS"  
 </p>  
 <p>S: "DESCRIPTION: bindings to other ALSA sequencer clients"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"TYPE: STRING"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"FIX: false"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"MULTIPLICITY: true"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"POSSIBILITIES: '64:0','68:0','68:1'"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"."  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="SET MIDI_INPUT_PORT_PARAMETER"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.3.13"></a><h3>6.3.13.&nbsp;  
 Changing settings of MIDI input ports</h3>  
   
 <p>Use the following command to alter a specific setting of a MIDI input port:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>SET MIDI_INPUT_PORT_PARAMETER &lt;device-id&gt; &lt;port&gt; &lt;key&gt;=&lt;value&gt;  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Where &lt;device-id&gt; should be replaced by the numerical ID of the  
                     MIDI device as returned by the  
                     <a class='info' href='#CREATE MIDI_INPUT_DEVICE'>"CREATE MIDI_INPUT_DEVICE"<span> (</span><span class='info'>Creating a MIDI input device</span><span>)</span></a>  
                     or <a class='info' href='#LIST MIDI_INPUT_DEVICES'>"LIST MIDI_INPUT_DEVICES"<span> (</span><span class='info'>Getting all created MIDI input device list</span><span>)</span></a>  
                     command, &lt;port&gt; by the MIDI port number, &lt;key&gt; by the name of  
                     the parameter to change and &lt;value&gt; by the new value for this  
                     parameter (encapsulated into apostrophes) or NONE (not encapsulated into apostrophes)  
                     for specifying no value for parameters allowing a list of values.  
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>"OK" -  
                                 </p>  
 <blockquote class="text">  
 <p>in case setting was successfully changed  
 </p>  
 </blockquote>  
                               
   
 <p>"WRN:&lt;warning-code&gt;:&lt;warning-message&gt;" -  
                                 </p>  
 <blockquote class="text">  
 <p>in case setting was changed successfully, but there are  
                                     noteworthy issue(s) related, providing an appropriate  
                                     warning code and warning message  
 </p>  
 </blockquote>  
                               
   
 <p>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" -  
                                 </p>  
 <blockquote class="text">  
 <p>in case it failed, providing an appropriate error code and error message  
 </p>  
 </blockquote>  
                               
   
 </blockquote><p>  
                       
 </p>  
 <p>Example:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "SET MIDI_INPUT_PORT_PARAMETER 0 0 ALSA_SEQ_BINDINGS='20:0'"  
 </p>  
 <p>S: "OK"  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "SET MIDI_INPUT_PORT_PARAMETER 0 0 ALSA_SEQ_BINDINGS=NONE"  
 </p>  
 <p>S: "OK"  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="anchor11"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.4"></a><h3>6.4.&nbsp;  
 Configuring sampler channels</h3>  
   
 <p>The following commands describe how to add and remove sampler channels, associate a  
                 sampler channel with a sampler engine, load instruments and connect sampler channels to  
                 MIDI and audio devices.  
 </p>  
 <a name="LOAD INSTRUMENT"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.4.1"></a><h3>6.4.1.&nbsp;  
 Loading an instrument</h3>  
   
 <p>An instrument file can be loaded and assigned to a sampler channel by one of the following commands:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>LOAD INSTRUMENT [NON_MODAL] '&lt;filename&gt;' &lt;instr-index&gt; &lt;sampler-channel&gt;  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Where &lt;filename&gt; is the name of the instrument file on the  
                     LinuxSampler instance's host system, &lt;instr-index&gt; the index of the  
                     instrument in the instrument file and &lt;sampler-channel> is the  
                     number of the sampler channel the instrument should be assigned to.  
                     Each sampler channel can only have one instrument.  
 </p>  
 <p>Notice: since LSCP 1.2 the &lt;filename&gt; argument supports  
                     escape characters for special characters (see chapter  
                     "<a class='info' href='#character_set'>Character Set and Escape Sequences<span> (</span><span class='info'>Character Set and Escape Sequences</span><span>)</span></a>"  
                     for details) and accordingly backslash characters in the filename  
                     MUST now be escaped as well!  
 </p>  
 <p>The difference between regular and NON_MODAL versions of the command  
                     is that the regular command returns OK only after the instrument has been  
                     fully loaded and the channel is ready to be used while NON_MODAL version  
                     returns immediately and a background process is launched to load the instrument  
                     on the channel. The <a class='info' href='#GET CHANNEL INFO'>GET CHANNEL INFO<span> (</span><span class='info'>Getting sampler channel information</span><span>)</span></a>  
                     command can be used to obtain loading  
                     progress from INSTRUMENT_STATUS field. LOAD command will perform sanity checks  
                     such as making sure that the file could be read and it is of a proper format  
                     and SHOULD return ERR and SHOULD not launch the background process should any  
                     errors be detected at that point.  
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>"OK" -  
                                 </p>  
 <blockquote class="text">  
 <p>in case the instrument was successfully loaded  
 </p>  
 </blockquote>  
                               
   
 <p>"WRN:&lt;warning-code&gt;:&lt;warning-message&gt;" -  
                                 </p>  
 <blockquote class="text">  
 <p>in case the instrument was loaded successfully, but there  
                                     are noteworthy issue(s) related (e.g. Engine doesn't support  
                                     one or more patch parameters provided by the loaded  
                                     instrument file), providing an appropriate warning code and  
                                     warning message  
 </p>  
 </blockquote>  
                               
   
 <p>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" -  
                                 </p>  
 <blockquote class="text">  
 <p>in case it failed, providing an appropriate error code and error message  
 </p>  
 </blockquote>  
                               
   
 </blockquote><p>  
                       
 </p>  
 <p>Example (Unix):  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: LOAD INSTRUMENT '/home/joe/gigs/cello.gig' 0 0  
 </p>  
 <p>S: OK  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Example (Windows):  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: LOAD INSTRUMENT 'D:/MySounds/cello.gig' 0 0  
 </p>  
 <p>S: OK  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="LOAD ENGINE"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.4.2"></a><h3>6.4.2.&nbsp;  
 Loading a sampler engine</h3>  
   
 <p>A sampler engine type can be associated to a specific sampler  
                     channel by the following command:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>LOAD ENGINE &lt;engine-name&gt; &lt;sampler-channel&gt;  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Where &lt;engine-name&gt; is an engine name as obtained by the  
                     <a class='info' href='#LIST AVAILABLE_ENGINES'>"LIST AVAILABLE_ENGINES"<span> (</span><span class='info'>Getting all available engines</span><span>)</span></a> command and &lt;sampler-channel&gt;  
                     the sampler channel as returned by the  
                     <a class='info' href='#ADD CHANNEL'>"ADD CHANNEL"<span> (</span><span class='info'>Adding a new sampler channel</span><span>)</span></a> or  
                     <a class='info' href='#LIST CHANNELS'>"LIST CHANNELS"<span> (</span><span class='info'>Getting all created sampler channel list</span><span>)</span></a> command where  
                     the engine type should be assigned to. This command should be issued  
                     after adding a new sampler channel and before any other control  
                     commands on the new sampler channel. It can also be used to change  
                     the engine type of a sampler channel. This command has (currently) no  
                     way to define or force if a new engine instance should be created and  
                     assigned to the given sampler channel or if an already existing  
                     instance of that engine type, shared with other sampler channels,  
                     should be used.  
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>"OK" -  
                                 </p>  
 <blockquote class="text">  
 <p>in case the engine was successfully deployed  
 </p>  
 </blockquote>  
                               
   
 <p>"WRN:&lt;warning-code&gt;:&lt;warning-message&gt;" -  
                                 </p>  
 <blockquote class="text">  
 <p>in case the engine was deployed successfully, but there  
                                     are noteworthy issue(s) related, providing an appropriate  
                                     warning code and warning message  
 </p>  
 </blockquote>  
                               
   
 <p>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" -  
                                 </p>  
 <blockquote class="text">  
 <p>in case it failed, providing an appropriate error code and  
                                     error message  
 </p>  
 </blockquote>  
                               
   
 </blockquote><p>  
                       
 </p>  
 <p>Example:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="GET CHANNELS"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.4.3"></a><h3>6.4.3.&nbsp;  
 Getting all created sampler channel count</h3>  
   
 <p>The number of sampler channels can change on runtime. To get the  
                     current amount of sampler channels, the front-end can send the  
                     following command:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>GET CHANNELS  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>LinuxSampler will answer by returning the current number of sampler channels.  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Example:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "GET CHANNELS"  
 </p>  
 <p>S: "12"  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="LIST CHANNELS"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.4.4"></a><h3>6.4.4.&nbsp;  
 Getting all created sampler channel list</h3>  
   
 <p>The number of sampler channels can change on runtime. To get the  
                     current list of sampler channels, the front-end can send the  
                     following command:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>LIST CHANNELS  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>LinuxSampler will answer by returning a comma separated list  
                             with all sampler channels numerical IDs.  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Example:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "LIST CHANNELS"  
 </p>  
 <p>S: "0,1,2,3,4,5,6,9,10,11,15,20"  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="ADD CHANNEL"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.4.5"></a><h3>6.4.5.&nbsp;  
 Adding a new sampler channel</h3>  
   
 <p>A new sampler channel can be added to the end of the sampler  
                     channel list by sending the following command:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>ADD CHANNEL  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>This will increment the sampler channel count by one and the new  
                     sampler channel will be appended to the end of the sampler channel  
                     list. The front-end should send the respective, related commands  
                     right after to e.g. load an engine, load an instrument and setting  
                     input, output method and eventually other commands to initialize  
                     the new channel. The front-end should use the sampler channel  
                     returned by the answer of this command to perform the previously  
                     recommended commands, to avoid race conditions e.g. with other  
                     front-ends that might also have sent an "ADD CHANNEL" command.  
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>"OK[&lt;sampler-channel&gt;]" -  
                                 </p>  
 <blockquote class="text">  
 <p>in case a new sampler channel could be added, where  
                                     &lt;sampler-channel&gt; reflects the channel number of the new  
                                     created sampler channel which should be used to set up  
                                     the sampler channel by sending subsequent initialization  
                                     commands  
 </p>  
 </blockquote>  
                               
   
 <p>"WRN:&lt;warning-code&gt;:&lt;warning-message&gt;" -  
                                 </p>  
 <blockquote class="text">  
 <p>in case a new channel was added successfully, but there are  
                                     noteworthy issue(s) related, providing an appropriate  
                                     warning code and warning message  
 </p>  
 </blockquote>  
                               
   
 <p>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" -  
                                 </p>  
 <blockquote class="text">  
 <p>in case it failed, providing an appropriate error code and  
                                     error message  
 </p>  
 </blockquote>  
                               
   
 </blockquote><p>  
                       
 </p>  
 <p>Example:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="REMOVE CHANNEL"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.4.6"></a><h3>6.4.6.&nbsp;  
 Removing a sampler channel</h3>  
   
 <p>A sampler channel can be removed by sending the following command:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>REMOVE CHANNEL &lt;sampler-channel&gt;  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Where &lt;sampler-channel&gt; should be replaced by the  
                     number of the sampler channel as given by the  
                     <a class='info' href='#ADD CHANNEL'>"ADD CHANNEL"<span> (</span><span class='info'>Adding a new sampler channel</span><span>)</span></a>  
                     or <a class='info' href='#LIST CHANNELS'>"LIST CHANNELS"<span> (</span><span class='info'>Getting all created sampler channel list</span><span>)</span></a>  
                     command. The channel numbers of all subsequent sampler channels  
                     remain the same.  
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>"OK" -  
                                 </p>  
 <blockquote class="text">  
 <p>in case the given sampler channel could be removed  
 </p>  
 </blockquote>  
                               
   
 <p>"WRN:&lt;warning-code&gt;:&lt;warning-message&gt;" -  
                                 </p>  
 <blockquote class="text">  
 <p>in case the given channel was removed, but there are  
                                     noteworthy issue(s) related, providing an appropriate  
                                     warning code and warning message  
 </p>  
 </blockquote>  
                               
   
 <p>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" -  
                                 </p>  
 <blockquote class="text">  
 <p>in case it failed, providing an appropriate error code and  
                                     error message  
 </p>  
 </blockquote>  
                               
   
 </blockquote><p>  
                       
 </p>  
 <p>Example:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="GET AVAILABLE_ENGINES"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.4.7"></a><h3>6.4.7.&nbsp;  
 Getting amount of available engines</h3>  
   
 <p>The front-end can ask for the number of available engines by sending the following command:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>GET AVAILABLE_ENGINES  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>LinuxSampler will answer by sending the number of available engines.  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Example:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "GET AVAILABLE_ENGINES"  
 </p>  
 <p>S: "4"  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="LIST AVAILABLE_ENGINES"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.4.8"></a><h3>6.4.8.&nbsp;  
 Getting all available engines</h3>  
   
 <p>The front-end can ask for a list of all available engines by sending the following command:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>LIST AVAILABLE_ENGINES  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>LinuxSampler will answer by sending a comma separated list  
                             of the engines' names encapsulated into apostrophes (').  
                             Engine names can consist of lower and upper cases,  
                             digits and underlines ("_" character).  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Example:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "LIST AVAILABLE_ENGINES"  
 </p>  
 <p>S: "'gig','sfz','sf2'"  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="GET ENGINE INFO"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.4.9"></a><h3>6.4.9.&nbsp;  
 Getting information about an engine</h3>  
   
 <p>The front-end can ask for information about a specific engine by  
                     sending the following command:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>GET ENGINE INFO &lt;engine-name&gt;  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Where &lt;engine-name&gt; is an engine name as obtained by the  
                     <a class='info' href='#LIST AVAILABLE_ENGINES'>"LIST AVAILABLE_ENGINES"<span> (</span><span class='info'>Getting all available engines</span><span>)</span></a> command.  
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>LinuxSampler will answer by sending a &lt;CRLF&gt; separated list.  
                             Each answer line begins with the information category name  
                             followed by a colon and then a space character &lt;SP&gt; and finally  
                             the info character string to that info category. At the moment  
                             the following categories are defined:  
 </p>  
 <p>  
                                 </p>  
 <blockquote class="text">  
 <p>DESCRIPTION -  
                                         </p>  
 <blockquote class="text">  
 <p>arbitrary description text about the engine  
                                             (note that the character string may contain  
                                             <a class='info' href='#character_set'>escape sequences<span> (</span><span class='info'>Character Set and Escape Sequences</span><span>)</span></a>)  
 </p>  
 </blockquote>  
                                       
   
 <p>VERSION -  
                                         </p>  
 <blockquote class="text">  
 <p>arbitrary character string regarding the engine's version  
 </p>  
 </blockquote>  
                                       
   
 </blockquote>  
                               
   
 </blockquote><p>  
                       
 </p>  
 <p>The mentioned fields above don't have to be in particular order.  
 </p>  
 <p>Examples:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "GET ENGINE INFO gig"  
 </p>  
 <p>S: "DESCRIPTION: GigaSampler Format Engine"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"VERSION: 1.110"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"."  
 </p>  
 <p>C: "GET ENGINE INFO sf2"  
 </p>  
 <p>S: "DESCRIPTION: SoundFont Format Engine"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"VERSION: 1.4"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"."  
 </p>  
 <p>C: "GET ENGINE INFO sfz"  
 </p>  
 <p>S: "DESCRIPTION: SFZ Format Engine"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"VERSION: 1.11"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"."  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="GET CHANNEL INFO"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.4.10"></a><h3>6.4.10.&nbsp;  
 Getting sampler channel information</h3>  
   
 <p>The front-end can ask for the current settings of a sampler channel  
                     by sending the following command:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>GET CHANNEL INFO &lt;sampler-channel&gt;  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Where &lt;sampler-channel&gt; is the sampler channel number the front-end is interested in  
                     as returned by the <a class='info' href='#ADD CHANNEL'>"ADD CHANNEL"<span> (</span><span class='info'>Adding a new sampler channel</span><span>)</span></a>  
                     or <a class='info' href='#LIST CHANNELS'>"LIST CHANNELS"<span> (</span><span class='info'>Getting all created sampler channel list</span><span>)</span></a> command.  
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>LinuxSampler will answer by sending a &lt;CRLF&gt; separated list.  
                             Each answer line begins with the settings category name  
                             followed by a colon and then a space character &lt;SP&gt; and finally  
                             the info character string to that setting category. At the  
                             moment the following categories are defined:  
 </p>  
 <p>  
                                 </p>  
 <blockquote class="text">  
 <p>ENGINE_NAME -  
                                         </p>  
 <blockquote class="text">  
 <p>name of the engine that is associated with the sampler  
                                             channel, "NONE" if there's no engine associated yet for  
                                             this sampler channel  
 </p>  
 </blockquote>  
                                       
   
 <p>AUDIO_OUTPUT_DEVICE -  
                                         </p>  
 <blockquote class="text">  
 <p>numerical ID of the audio output device which is  
                                             currently connected to this sampler channel to output  
                                             the audio signal, "-1" if there's no device  
                                             connected to this sampler channel  
 </p>  
 </blockquote>  
                                       
   
 <p>AUDIO_OUTPUT_CHANNELS -  
                                         </p>  
 <blockquote class="text">  
 <p>number of output channels the sampler channel offers  
                                             (dependent to used sampler engine and loaded instrument)  
 </p>  
 </blockquote>  
                                       
   
 <p>AUDIO_OUTPUT_ROUTING -  
                                         </p>  
 <blockquote class="text">  
 <p>comma separated list which reflects to which audio  
                                             channel of the selected audio output device each  
                                             sampler output channel is routed to, e.g. "0,3" would  
                                             mean the engine's output channel 0 is routed to channel  
                                             0 of the audio output device and the engine's output  
                                             channel 1 is routed to the channel 3 of the audio  
                                             output device  
 </p>  
 </blockquote>  
                                       
   
 <p>INSTRUMENT_FILE -  
                                         </p>  
 <blockquote class="text">  
 <p>the file name of the loaded instrument, "NONE" if  
                                             there's no instrument yet loaded for this sampler  
                                             channel (note: since LSCP 1.2 this path may contain  
                                             <a class='info' href='#character_set'>escape sequences<span> (</span><span class='info'>Character Set and Escape Sequences</span><span>)</span></a>)  
 </p>  
 </blockquote>  
                                       
   
 <p>INSTRUMENT_NR -  
                                         </p>  
 <blockquote class="text">  
 <p>the instrument index number of the loaded instrument,  
                                             "-1" if there's no instrument loaded for this sampler  
                                             channel  
 </p>  
 </blockquote>  
                                       
   
 <p>INSTRUMENT_NAME -  
                                         </p>  
 <blockquote class="text">  
 <p>the instrument name of the loaded instrument  
                                             (note: since LSCP 1.2 this character string may contain  
                                             <a class='info' href='#character_set'>escape sequences<span> (</span><span class='info'>Character Set and Escape Sequences</span><span>)</span></a>)  
 </p>  
 </blockquote>  
                                       
   
 <p>INSTRUMENT_STATUS -  
                                         </p>  
 <blockquote class="text">  
 <p>Integer values 0 to 100 indicating loading progress  
                                             percentage for the instrument. Negative  
                                             value indicates a loading exception (also returns "-1" in case no  
                                             instrument was yet to be loaded on the sampler channel).  
                                             Value of 100 indicates that the instrument is fully  
                                             loaded.  
 </p>  
 </blockquote>  
                                       
   
 <p>MIDI_INPUT_DEVICE -  
                                         </p>  
 <blockquote class="text">  
 <p>DEPRECATED: THIS FIELD WILL DISAPPEAR!  
 </p>  
 <p>numerical ID of the MIDI input device which is  
                                             currently connected to this sampler channel to deliver  
                                             MIDI input commands, "-1" if there's no device  
                                             connected to this sampler channel  
 </p>  
 <p>Should not be used anymore as of LSCP v1.6 and younger.  
                                             This field is currently only preserved for backward compatibility.  
                                               
 </p>  
 <p>This field a relict from times where only one MIDI input per  
                                             sampler channel was allowed. Use <a class='info' href='#LIST CHANNEL MIDI_INPUTS'>"GET CHANNEL MIDI_INPUTS"<span> (</span><span class='info'>Getting all MIDI inputs of a sampler channel</span><span>)</span></a>  
                                             instead.  
 </p>  
 </blockquote>  
                                       
   
 <p>MIDI_INPUT_PORT -  
                                         </p>  
 <blockquote class="text">  
 <p>DEPRECATED: THIS FIELD WILL DISAPPEAR!  
 </p>  
 <p>port number of the MIDI input device (in case a  
                                             MIDI device was already assigned to the sampler  
                                             channel)  
 </p>  
 <p>Should not be used anymore as of LSCP v1.6 and younger.  
                                             This field is currently only preserved for backward compatibility.  
                                               
 </p>  
 <p>This field a relict from times where only one MIDI input per  
                                             sampler channel was allowed. Use <a class='info' href='#LIST CHANNEL MIDI_INPUTS'>"GET CHANNEL MIDI_INPUTS"<span> (</span><span class='info'>Getting all MIDI inputs of a sampler channel</span><span>)</span></a>  
                                             instead.  
 </p>  
 </blockquote>  
                                       
   
 <p>MIDI_INPUT_CHANNEL -  
                                         </p>  
 <blockquote class="text">  
 <p>the MIDI input channel number this sampler channel  
                                             should listen to or "ALL" to listen on all MIDI channels  
 </p>  
 </blockquote>  
                                       
   
 <p>VOLUME -  
                                         </p>  
 <blockquote class="text">  
 <p>optionally dotted number for the channel volume factor  
                                             (where a value &lt; 1.0 means attenuation and a value >  
                                             1.0 means amplification)  
 </p>  
 </blockquote>  
                                       
   
 <p>MUTE -  
                                         </p>  
 <blockquote class="text">  
 <p>Determines whether the channel is muted, "true" if the  
                                             channel is muted, "false" if the channel is not muted, and  
                                             "MUTED_BY_SOLO" if the channel is muted because of the  
                                             presence of a solo channel and will be unmuted when  
                                             there are no solo channels left  
 </p>  
 </blockquote>  
                                       
   
 <p>SOLO -  
                                         </p>  
 <blockquote class="text">  
 <p>Determines whether this is a solo channel, "true" if  
                                             the channel is a solo channel; "false" otherwise  
 </p>  
 </blockquote>  
                                       
   
 <p>MIDI_INSTRUMENT_MAP -  
                                         </p>  
 <blockquote class="text">  
 <p>Determines to which MIDI instrument map this sampler  
                                             channel is assigned to. Read chapter  
                                             <a class='info' href='#SET CHANNEL MIDI_INSTRUMENT_MAP'>"SET CHANNEL MIDI_INSTRUMENT_MAP"<span> (</span><span class='info'>Assigning a MIDI instrument map to a sampler channel</span><span>)</span></a>  
                                             for a list of possible values.  
 </p>  
 </blockquote>  
                                       
   
 </blockquote>  
                               
   
 </blockquote><p>  
                       
 </p>  
 <p>The mentioned fields above don't have to be in particular order.  
 </p>  
 <p>Example:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "GET CHANNEL INFO 34"  
 </p>  
 <p>S: "ENGINE_NAME: gig"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"VOLUME: 1.0"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"AUDIO_OUTPUT_DEVICE: 0"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"AUDIO_OUTPUT_CHANNELS: 2"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"AUDIO_OUTPUT_ROUTING: 0,1"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"INSTRUMENT_FILE: /home/joe/FazioliPiano.gig"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"INSTRUMENT_NR: 0"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"INSTRUMENT_NAME: Fazioli Piano"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"INSTRUMENT_STATUS: 100"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"MIDI_INPUT_DEVICE: 0"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"MIDI_INPUT_PORT: 0"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"MIDI_INPUT_CHANNEL: 5"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"VOLUME: 1.0"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"MUTE: false"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"SOLO: false"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"MIDI_INSTRUMENT_MAP: NONE"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"."  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="GET CHANNEL VOICE_COUNT"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.4.11"></a><h3>6.4.11.&nbsp;  
 Current number of active voices</h3>  
   
 <p>The front-end can ask for the current number of active voices on a  
                     sampler channel by sending the following command:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>GET CHANNEL VOICE_COUNT &lt;sampler-channel&gt;  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Where &lt;sampler-channel&gt; is the sampler channel number the front-end is interested in  
                     as returned by the <a class='info' href='#ADD CHANNEL'>"ADD CHANNEL"<span> (</span><span class='info'>Adding a new sampler channel</span><span>)</span></a>  
                     or <a class='info' href='#LIST CHANNELS'>"LIST CHANNELS"<span> (</span><span class='info'>Getting all created sampler channel list</span><span>)</span></a> command.  
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>LinuxSampler will answer by returning the number of active  
                             voices on that channel.  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Example:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="GET CHANNEL STREAM_COUNT"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.4.12"></a><h3>6.4.12.&nbsp;  
 Current number of active disk streams</h3>  
   
 <p>The front-end can ask for the current number of active disk streams  
                     on a sampler channel by sending the following command:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>GET CHANNEL STREAM_COUNT &lt;sampler-channel&gt;  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Where &lt;sampler-channel&gt; is the sampler channel number the front-end is interested in  
                     as returned by the <a class='info' href='#ADD CHANNEL'>"ADD CHANNEL"<span> (</span><span class='info'>Adding a new sampler channel</span><span>)</span></a>  
                     or <a class='info' href='#LIST CHANNELS'>"LIST CHANNELS"<span> (</span><span class='info'>Getting all created sampler channel list</span><span>)</span></a> command.  
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>LinuxSampler will answer by returning the number of active  
                             disk streams on that channel in case the engine supports disk  
                             streaming, if the engine doesn't support disk streaming it will  
                             return "NA" for not available.  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Example:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="GET CHANNEL BUFFER_FILL"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.4.13"></a><h3>6.4.13.&nbsp;  
 Current fill state of disk stream buffers</h3>  
   
 <p>The front-end can ask for the current fill state of all disk streams  
                     on a sampler channel by sending the following command:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>GET CHANNEL BUFFER_FILL BYTES &lt;sampler-channel&gt;  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>to get the fill state in bytes or  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>GET CHANNEL BUFFER_FILL PERCENTAGE &lt;sampler-channel&gt;  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>to get the fill state in percent, where &lt;sampler-channel&gt; is the  
                     sampler channel number the front-end is interested in  
                     as returned by the <a class='info' href='#ADD CHANNEL'>"ADD CHANNEL"<span> (</span><span class='info'>Adding a new sampler channel</span><span>)</span></a>  
                     or <a class='info' href='#LIST CHANNELS'>"LIST CHANNELS"<span> (</span><span class='info'>Getting all created sampler channel list</span><span>)</span></a> command.  
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>LinuxSampler will either answer by returning a comma separated  
                             string with the fill state of all disk stream buffers on that  
                             channel or an empty line if there are no active disk streams or  
                             "NA" for *not available* in case the engine which is deployed  
                             doesn't support disk streaming. Each entry in the answer list  
                             will begin with the stream's ID in brackets followed by the  
                             numerical representation of the fill size (either in bytes or  
                             percentage). Note: due to efficiency reasons the fill states in  
                             the response are not in particular order, thus the front-end has  
                             to sort them by itself if necessary.  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Examples:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "GET CHANNEL BUFFER_FILL BYTES 4"  
 </p>  
 <p>S: "[115]420500,[116]510300,[75]110000,[120]230700"  
 </p>  
 </blockquote><p>  
   
                         </p>  
 <blockquote class="text">  
 <p>C: "GET CHANNEL BUFFER_FILL PERCENTAGE 4"  
 </p>  
 <p>S: "[115]90%,[116]98%,[75]40%,[120]62%"  
 </p>  
 </blockquote><p>  
   
                         </p>  
 <blockquote class="text">  
 <p>C: "GET CHANNEL BUFFER_FILL PERCENTAGE 4"  
 </p>  
 <p>S: ""  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="SET CHANNEL AUDIO_OUTPUT_DEVICE"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.4.14"></a><h3>6.4.14.&nbsp;  
 Setting audio output device</h3>  
   
 <p>The front-end can set the audio output device on a specific sampler  
                     channel by sending the following command:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>SET CHANNEL AUDIO_OUTPUT_DEVICE &lt;sampler-channel&gt; &lt;audio-device-id&gt;  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Where &lt;sampler-channel&gt; is the respective sampler channel  
                     number as returned by the <a class='info' href='#ADD CHANNEL'>"ADD CHANNEL"<span> (</span><span class='info'>Adding a new sampler channel</span><span>)</span></a>  
                     or <a class='info' href='#LIST CHANNELS'>"LIST CHANNELS"<span> (</span><span class='info'>Getting all created sampler channel list</span><span>)</span></a> command and  
                     &lt;audio-device-id&gt; is the numerical ID of the audio output device as given by the  
                     <a class='info' href='#CREATE AUDIO_OUTPUT_DEVICE'>"CREATE AUDIO_OUTPUT_DEVICE"<span> (</span><span class='info'>Creating an audio output device</span><span>)</span></a>  
                     or <a class='info' href='#LIST AUDIO_OUTPUT_DEVICES'>"LIST AUDIO_OUTPUT_DEVICES"<span> (</span><span class='info'>Getting all created audio output device list</span><span>)</span></a>  
                     command.  
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>"OK" -  
                                 </p>  
 <blockquote class="text">  
 <p>on success  
 </p>  
 </blockquote>  
                               
   
 <p>"WRN:&lt;warning-code&gt;:&lt;warning-message&gt;" -  
                                 </p>  
 <blockquote class="text">  
 <p>if audio output device was set, but there are noteworthy  
                                     issue(s) related, providing an appropriate warning code and  
                                     warning message  
 </p>  
 </blockquote>  
                               
   
 <p>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" -  
                                 </p>  
 <blockquote class="text">  
 <p>in case it failed, providing an appropriate error code and error message  
 </p>  
 </blockquote>  
                               
   
 </blockquote><p>  
                       
 </p>  
 <p>Examples:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="SET CHANNEL AUDIO_OUTPUT_TYPE"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.4.15"></a><h3>6.4.15.&nbsp;  
 Setting audio output type</h3>  
   
 <p>DEPRECATED: THIS COMMAND WILL DISAPPEAR!  
 </p>  
 <p>The front-end can alter the audio output type on a specific sampler  
                     channel by sending the following command:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>SET CHANNEL AUDIO_OUTPUT_TYPE &lt;sampler-channel&gt; &lt;audio-output-type&gt;  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Where &lt;audio-output-type&gt; is currently either "ALSA" or "JACK" and  
                     &lt;sampler-channel&gt; is the respective sampler channel number.  
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>"OK" -  
                                 </p>  
 <blockquote class="text">  
 <p>on success  
 </p>  
 </blockquote>  
                               
   
 <p>"WRN:&lt;warning-code&gt;:&lt;warning-message&gt;" -  
                                 </p>  
 <blockquote class="text">  
 <p>if audio output type was set, but there are noteworthy  
                                     issue(s) related, providing an appropriate warning code and  
                                     warning message  
 </p>  
 </blockquote>  
                               
   
 <p>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" -  
                                 </p>  
 <blockquote class="text">  
 <p>in case it failed, providing an appropriate error code and error message  
 </p>  
 </blockquote>  
                               
   
 </blockquote><p>  
                       
 </p>  
 <p>Examples:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Deprecated:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>Should not be used anymore. This command is currently only preserved for backward compatibility.  
 </p>  
 <p>This command is a relict from times where there was no sophisticated driver management yet. Use <a class='info' href='#CREATE AUDIO_OUTPUT_DEVICE'>"CREATE AUDIO_OUTPUT_DEVICE"<span> (</span><span class='info'>Creating an audio output device</span><span>)</span></a> and <a class='info' href='#SET CHANNEL AUDIO_OUTPUT_DEVICE'>"SET CHANNEL AUDIO_OUTPUT_DEVICE"<span> (</span><span class='info'>Setting audio output device</span><span>)</span></a> instead.  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="SET CHANNEL AUDIO_OUTPUT_CHANNEL"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.4.16"></a><h3>6.4.16.&nbsp;  
 Setting audio output channel</h3>  
   
 <p>The front-end can alter the audio output channel on a specific  
                     sampler channel by sending the following command:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>SET CHANNEL AUDIO_OUTPUT_CHANNEL &lt;sampler-chan&gt; &lt;audio-out&gt; &lt;audio-in&gt;  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Where &lt;sampler-chan&gt; is the sampler channel number  
                     as returned by the <a class='info' href='#ADD CHANNEL'>"ADD CHANNEL"<span> (</span><span class='info'>Adding a new sampler channel</span><span>)</span></a>  
                     or <a class='info' href='#LIST CHANNELS'>"LIST CHANNELS"<span> (</span><span class='info'>Getting all created sampler channel list</span><span>)</span></a> command, &lt;audio-out&gt; is the  
                     numerical ID of the sampler channel's audio output channel which should be  
                     rerouted and &lt;audio-in&gt; is the numerical ID of the audio channel of the selected audio  
                     output device where &lt;audio-out&gt; should be routed to.  
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>"OK" -  
                                 </p>  
 <blockquote class="text">  
 <p>on success  
 </p>  
 </blockquote>  
                               
   
 <p>"WRN:&lt;warning-code&gt;:&lt;warning-message&gt;" -  
                                 </p>  
 <blockquote class="text">  
 <p>if audio output channel was set, but there are noteworthy  
                                     issue(s) related, providing an appropriate warning code and  
                                     warning message  
 </p>  
 </blockquote>  
                               
   
 <p>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" -  
                                 </p>  
 <blockquote class="text">  
 <p>in case it failed, providing an appropriate error code and error message  
 </p>  
 </blockquote>  
                               
   
 </blockquote><p>  
                       
 </p>  
 <p>Examples:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="ADD CHANNEL MIDI_INPUT"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.4.17"></a><h3>6.4.17.&nbsp;  
 Add MIDI input to sampler channel</h3>  
   
 <p>The front-end can add a MIDI input on a specific sampler  
                     channel by sending the following command:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>ADD CHANNEL MIDI_INPUT &lt;sampler-channel&gt; &lt;midi-device-id&gt; [&lt;midi-input-port&gt;]  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Where &lt;sampler-channel&gt; is the sampler channel number  
                     as returned by the <a class='info' href='#ADD CHANNEL'>"ADD CHANNEL"<span> (</span><span class='info'>Adding a new sampler channel</span><span>)</span></a>  
                     or <a class='info' href='#LIST CHANNELS'>"LIST CHANNELS"<span> (</span><span class='info'>Getting all created sampler channel list</span><span>)</span></a> command  
                     and &lt;midi-device-id&gt; is the numerical ID of the MIDI input  
                     device as returned by the  
                     <a class='info' href='#CREATE MIDI_INPUT_DEVICE'>"CREATE MIDI_INPUT_DEVICE"<span> (</span><span class='info'>Creating a MIDI input device</span><span>)</span></a>  
                     or <a class='info' href='#LIST MIDI_INPUT_DEVICES'>"LIST MIDI_INPUT_DEVICES"<span> (</span><span class='info'>Getting all created MIDI input device list</span><span>)</span></a> command,  
                     and &lt;midi-input-port&gt; is an optional MIDI input port number of that  
                     MIDI input device. If &lt;midi-input-port&gt; is omitted,  
                     then the MIDI input device's first port (port number 0) is  
                     used.  
                       
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>"OK" -  
                                 </p>  
 <blockquote class="text">  
 <p>on success  
 </p>  
 </blockquote>  
                               
   
 <p>"WRN:&lt;warning-code&gt;:&lt;warning-message&gt;" -  
                                 </p>  
 <blockquote class="text">  
 <p>if MIDI input port was connected, but there are noteworthy  
                                     issue(s) related, providing an appropriate warning code and  
                                     warning message  
 </p>  
 </blockquote>  
                               
   
 <p>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" -  
                                 </p>  
 <blockquote class="text">  
 <p>in case it failed, providing an appropriate error code and error message  
 </p>  
 </blockquote>  
                               
   
 </blockquote><p>  
                       
 </p>  
 <p>Examples:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "ADD CHANNEL MIDI_INPUT 0 0"  
 </p>  
 <p>S: "OK"  
 </p>  
 <p>C: "ADD CHANNEL MIDI_INPUT 1 0"  
 </p>  
 <p>S: "OK"  
 </p>  
 <p>C: "ADD CHANNEL MIDI_INPUT 1 1 1"  
 </p>  
 <p>S: "OK"  
 </p>  
 <p>C: "ADD CHANNEL MIDI_INPUT 1 2 0"  
 </p>  
 <p>S: "OK"  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Since:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>Introduced with LSCP v1.6  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="REMOVE CHANNEL MIDI_INPUT"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.4.18"></a><h3>6.4.18.&nbsp;  
 Remove MIDI input(s) from sampler channel</h3>  
   
 <p>The front-end can remove one ore more MIDI input(s) on a  
                     specific sampler channel by sending the following command:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>REMOVE CHANNEL MIDI_INPUT &lt;sampler-channel&gt; [&lt;midi-device-id&gt; [&lt;midi-input-port&gt;]]  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Where &lt;sampler-channel&gt; is the sampler channel number  
                     as returned by the <a class='info' href='#ADD CHANNEL'>"ADD CHANNEL"<span> (</span><span class='info'>Adding a new sampler channel</span><span>)</span></a>  
                     or <a class='info' href='#LIST CHANNELS'>"LIST CHANNELS"<span> (</span><span class='info'>Getting all created sampler channel list</span><span>)</span></a> command  
                     and &lt;midi-device-id&gt; and &lt;midi-input-port&gt; are  
                     optional numerical IDs defining the MIDI input device and  
                     one of its MIDI ports as returned by the  
                     <a class='info' href='#LIST CHANNEL MIDI_INPUTS'>"LIST CHANNEL MIDI_INPUTS"<span> (</span><span class='info'>Getting all MIDI inputs of a sampler channel</span><span>)</span></a> command.  
                       
 </p>  
 <p>  
                     If &lt;midi-input-port&gt; is omitted, then all MIDI input  
                     ports of &lt;midi-device-id&gt; are disconnected from this  
                     sampler channel.  
                       
 </p>  
 <p>  
                     If both, &lt;midi-device-id&gt; and &lt;midi-input-port&gt;  
                     are omitted, then all MIDI input ports currently connected  
                     to this sampler channel are disconnected from this sampler  
                     channel.  
                       
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>"OK" -  
                                 </p>  
 <blockquote class="text">  
 <p>on success  
 </p>  
 </blockquote>  
                               
   
 <p>"WRN:&lt;warning-code&gt;:&lt;warning-message&gt;" -  
                                 </p>  
 <blockquote class="text">  
 <p>if MIDI input porst were disconnected, but there are noteworthy  
                                     issue(s) related, providing an appropriate warning code and  
                                     warning message  
 </p>  
 </blockquote>  
                               
   
 <p>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" -  
                                 </p>  
 <blockquote class="text">  
 <p>in case it failed, providing an appropriate error code and error message  
 </p>  
 </blockquote>  
                               
   
 </blockquote><p>  
                       
 </p>  
 <p>Examples:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "REMOVE CHANNEL MIDI_INPUT 0"  
 </p>  
 <p>S: "OK"  
 </p>  
 <p>C: "REMOVE CHANNEL MIDI_INPUT 1"  
 </p>  
 <p>S: "OK"  
 </p>  
 <p>C: "REMOVE CHANNEL MIDI_INPUT 1 2 0"  
 </p>  
 <p>S: "OK"  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Since:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>Introduced with LSCP v1.6  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="LIST CHANNEL MIDI_INPUTS"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.4.19"></a><h3>6.4.19.&nbsp;  
 Getting all MIDI inputs of a sampler channel</h3>  
   
 <p>The front-end can query a list of all currently connected  
                     MIDI inputs of a certain sampler channel by sending the following  
                     command:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>LIST CHANNEL MIDI_INPUTS &lt;sampler-channel&gt;  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Where &lt;sampler-channel&gt; is the sampler channel number  
                     as returned by the <a class='info' href='#ADD CHANNEL'>"ADD CHANNEL"<span> (</span><span class='info'>Adding a new sampler channel</span><span>)</span></a>  
                     or <a class='info' href='#LIST CHANNELS'>"LIST CHANNELS"<span> (</span><span class='info'>Getting all created sampler channel list</span><span>)</span></a> command.  
                       
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>The sampler will answer by sending a comma separated  
                             list of MIDI input device ID - MIDI input port number pairs, where  
                             each pair is encapsulated into curly braces. The  
                             list is returned in one single line. The MIDI input  
                             device ID corresponds to the number returned by  
                             <a class='info' href='#LIST MIDI_INPUT_DEVICES'>"LIST MIDI_INPUT_DEVICES"<span> (</span><span class='info'>Getting all created MIDI input device list</span><span>)</span></a>  
                             and the port number is the index of the respective MIDI  
                             port of that MIDI input device.  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Example:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "LIST CHANNEL MIDI_INPUTS 0"  
 </p>  
 <p>S: "{0,0},{1,3},{2,0}"  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Since:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>Introduced with LSCP v1.6  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="SET CHANNEL MIDI_INPUT_DEVICE"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.4.20"></a><h3>6.4.20.&nbsp;  
 Setting MIDI input device</h3>  
   
 <p>DEPRECATED: THIS COMMAND WILL DISAPPEAR!  
 </p>  
 <p>The front-end can set the MIDI input device on a specific sampler  
                     channel by sending the following command:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>SET CHANNEL MIDI_INPUT_DEVICE &lt;sampler-channel&gt; &lt;midi-device-id&gt;  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Where &lt;sampler-channel&gt; is the sampler channel number  
                     as returned by the <a class='info' href='#ADD CHANNEL'>"ADD CHANNEL"<span> (</span><span class='info'>Adding a new sampler channel</span><span>)</span></a>  
                     or <a class='info' href='#LIST CHANNELS'>"LIST CHANNELS"<span> (</span><span class='info'>Getting all created sampler channel list</span><span>)</span></a> command  
                     and &lt;midi-device-id&gt; is  the numerical ID of the MIDI input device as returned by the  
                     <a class='info' href='#CREATE MIDI_INPUT_DEVICE'>"CREATE MIDI_INPUT_DEVICE"<span> (</span><span class='info'>Creating a MIDI input device</span><span>)</span></a>  
                     or <a class='info' href='#LIST MIDI_INPUT_DEVICES'>"LIST MIDI_INPUT_DEVICES"<span> (</span><span class='info'>Getting all created MIDI input device list</span><span>)</span></a> command.  
 </p>  
 <p>  
                     If more than 1 MIDI inputs are currently connected to this  
                     sampler channel: Sending this command will disconnect ALL  
                     currently connected MIDI input ports connected to this  
                     sampler channel before establishing the new MIDI input  
                     connection. So this command does NOT add the connection,  
                     it replaces all existing ones instead. This behavior is due  
                     to preserving full behavior backward compatibility.  
                       
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>"OK" -  
                                 </p>  
 <blockquote class="text">  
 <p>on success  
 </p>  
 </blockquote>  
                               
   
 <p>"WRN:&lt;warning-code&gt;:&lt;warning-message&gt;" -  
                                 </p>  
 <blockquote class="text">  
 <p>if MIDI input device was set, but there are noteworthy  
                                     issue(s) related, providing an appropriate warning code and  
                                     warning message  
 </p>  
 </blockquote>  
                               
   
 <p>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" -  
                                 </p>  
 <blockquote class="text">  
 <p>in case it failed, providing an appropriate error code and error message  
 </p>  
 </blockquote>  
                               
   
 </blockquote><p>  
                       
 </p>  
 <p>Examples:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Deprecated:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>Should not be used anymore as of LSCP v1.6 and younger. This command is currently only preserved for backward compatibility.  
 </p>  
 <p>This command is a relict from times where only one MIDI input per sampler channel was allowed. Use <a class='info' href='#ADD CHANNEL MIDI_INPUT'>"ADD CHANNEL MIDI_INPUT"<span> (</span><span class='info'>Add MIDI input to sampler channel</span><span>)</span></a> and <a class='info' href='#REMOVE CHANNEL MIDI_INPUT'>"REMOVE CHANNEL MIDI_INPUT"<span> (</span><span class='info'>Remove MIDI input(s) from sampler channel</span><span>)</span></a> instead.  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="SET CHANNEL MIDI_INPUT_TYPE"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.4.21"></a><h3>6.4.21.&nbsp;  
 Setting MIDI input type</h3>  
   
 <p>DEPRECATED: THIS COMMAND WILL DISAPPEAR!  
 </p>  
 <p>The front-end can alter the MIDI input type on a specific sampler  
                     channel by sending the following command:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>SET CHANNEL MIDI_INPUT_TYPE &lt;sampler-channel&gt; &lt;midi-input-type&gt;  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Where &lt;midi-input-type&gt; is currently only "ALSA" and  
                     &lt;sampler-channel&gt; is the respective sampler channel number.  
 </p>  
 <p>  
                     If more than 1 MIDI inputs are currently connected to this  
                     sampler channel: Sending this command will disconnect ALL  
                     currently connected MIDI input ports connected to this  
                     sampler channel before establishing the new MIDI input  
                     connection. So this command does NOT add the connection,  
                     it replaces all existing ones instead. This behavior is due  
                     to preserving full behavior backward compatibility.  
                       
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>"OK" -  
                                 </p>  
 <blockquote class="text">  
 <p>on success  
 </p>  
 </blockquote>  
                               
   
 <p>"WRN:&lt;warning-code&gt;:&lt;warning-message&gt;" -  
                                 </p>  
 <blockquote class="text">  
 <p>if MIDI input type was set, but there are noteworthy  
                                     issue(s) related, providing an appropriate warning code and  
                                     warning message  
 </p>  
 </blockquote>  
                               
   
 <p>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" -  
                                 </p>  
 <blockquote class="text">  
 <p>in case it failed, providing an appropriate error code and error message  
 </p>  
 </blockquote>  
                               
   
 </blockquote><p>  
                       
 </p>  
 <p>Examples:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Deprecated:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>Should not be used anymore. This command is currently only preserved for backward compatibility.  
 </p>  
 <p>This command is a relict from times where only 1 MIDI input per sampler channels was allowed and where no sophisticated driver management existed yet. Use <a class='info' href='#ADD CHANNEL MIDI_INPUT'>"ADD CHANNEL MIDI_INPUT"<span> (</span><span class='info'>Add MIDI input to sampler channel</span><span>)</span></a> and <a class='info' href='#REMOVE CHANNEL MIDI_INPUT'>"REMOVE CHANNEL MIDI_INPUT"<span> (</span><span class='info'>Remove MIDI input(s) from sampler channel</span><span>)</span></a> instead.  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="SET CHANNEL MIDI_INPUT_PORT"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.4.22"></a><h3>6.4.22.&nbsp;  
 Setting MIDI input port</h3>  
   
 <p>DEPRECATED: THIS COMMAND WILL DISAPPEAR!  
 </p>  
 <p>The front-end can alter the MIDI input port on a specific sampler  
                     channel by sending the following command:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>SET CHANNEL MIDI_INPUT_PORT &lt;sampler-channel&gt; &lt;midi-input-port&gt;  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Where &lt;midi-input-port&gt; is a MIDI input port number of the  
                     MIDI input device connected to the sampler channel given by  
                     &lt;sampler-channel&gt;.  
 </p>  
 <p>  
                     If more than 1 MIDI inputs are currently connected to this  
                     sampler channel: Sending this command will switch the  
                     connection of the first (and only the first) MIDI input port  
                     currently being connected to this sampler channel, to  
                     another port of the same MIDI input device. Or in other  
                     words: the first MIDI input port currently connected to  
                     this sampler channel will be disconnected, and the requested  
                     other port of its MIDI input device will be connected to  
                     this sampler channel instead. This behavior is due  
                     to preserving full behavior backward compatibility.  
                       
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>"OK" -  
                                 </p>  
 <blockquote class="text">  
 <p>on success  
 </p>  
 </blockquote>  
                               
   
 <p>"WRN:&lt;warning-code&gt;:&lt;warning-message&gt;" -  
                                 </p>  
 <blockquote class="text">  
 <p>if MIDI input port was set, but there are noteworthy  
                                     issue(s) related, providing an appropriate warning code and  
                                     warning message  
 </p>  
 </blockquote>  
                               
   
 <p>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" -  
                                 </p>  
 <blockquote class="text">  
 <p>in case it failed, providing an appropriate error code and error message  
 </p>  
 </blockquote>  
                               
   
 </blockquote><p>  
                       
 </p>  
 <p>Examples:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Deprecated:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>Should not be used anymore. This command is currently only preserved for backward compatibility.  
 </p>  
 <p>This command is a relict from times where only one MIDI input per sampler channel was allowed. Use <a class='info' href='#ADD CHANNEL MIDI_INPUT'>"ADD CHANNEL MIDI_INPUT"<span> (</span><span class='info'>Add MIDI input to sampler channel</span><span>)</span></a> and <a class='info' href='#REMOVE CHANNEL MIDI_INPUT'>"REMOVE CHANNEL MIDI_INPUT"<span> (</span><span class='info'>Remove MIDI input(s) from sampler channel</span><span>)</span></a> instead.  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="SET CHANNEL MIDI_INPUT_CHANNEL"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.4.23"></a><h3>6.4.23.&nbsp;  
 Setting MIDI input channel</h3>  
   
 <p>The front-end can alter the MIDI channel a sampler channel should  
                     listen to by sending the following command:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>SET CHANNEL MIDI_INPUT_CHANNEL &lt;sampler-channel&gt; &lt;midi-input-chan&gt;  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Where &lt;midi-input-chan&gt; is the number  
                     of the new MIDI input channel (zero indexed!) where  
                     &lt;sampler-channel&gt; should listen to, or "ALL" to listen on all 16 MIDI  
                     channels.  
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>"OK" -  
                                 </p>  
 <blockquote class="text">  
 <p>on success  
 </p>  
 </blockquote>  
                               
   
 <p>"WRN:&lt;warning-code&gt;:&lt;warning-message&gt;" -  
                                 </p>  
 <blockquote class="text">  
 <p>if MIDI input channel was set, but there are noteworthy  
                                     issue(s) related, providing an appropriate warning code and  
                                     warning message  
 </p>  
 </blockquote>  
                               
   
 <p>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" -  
                                 </p>  
 <blockquote class="text">  
 <p>in case it failed, providing an appropriate error code and error message  
 </p>  
 </blockquote>  
                               
   
 </blockquote><p>  
                       
 </p>  
 <p>Examples:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "SET CHANNEL MIDI_INPUT_CHANNEL 0 0"  
 </p>  
 <p>S: "OK"  
 </p>  
 <p>C: "SET CHANNEL MIDI_INPUT_CHANNEL 1 ALL"  
 </p>  
 <p>S: "OK"  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="SET CHANNEL VOLUME"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.4.24"></a><h3>6.4.24.&nbsp;  
 Setting channel volume</h3>  
   
 <p>The front-end can alter the volume of a sampler channel by sending  
                     the following command:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>SET CHANNEL VOLUME &lt;sampler-channel&gt; &lt;volume&gt;  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Where &lt;volume&gt; is an optionally dotted positive number (a value  
                     smaller than 1.0 means attenuation, whereas a value greater than  
                     1.0 means amplification) and &lt;sampler-channel&gt; defines the sampler  
                     channel where this volume factor should be set.  
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>"OK" -  
                                 </p>  
 <blockquote class="text">  
 <p>on success  
 </p>  
 </blockquote>  
                               
   
 <p>"WRN:&lt;warning-code&gt;:&lt;warning-message&gt;" -  
                                 </p>  
 <blockquote class="text">  
 <p>if channel volume was set, but there are noteworthy  
                                     issue(s) related, providing an appropriate warning code and  
                                     warning message  
 </p>  
 </blockquote>  
                               
   
 <p>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" -  
                                 </p>  
 <blockquote class="text">  
 <p>in case it failed, providing an appropriate error code and error message  
 </p>  
 </blockquote>  
                               
   
 </blockquote><p>  
                       
 </p>  
 <p>Examples:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="SET CHANNEL MUTE"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.4.25"></a><h3>6.4.25.&nbsp;  
 Muting a sampler channel</h3>  
   
 <p>The front-end can mute/unmute a specific sampler  
                     channel by sending the following command:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>SET CHANNEL MUTE &lt;sampler-channel&gt; &lt;mute&gt;  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Where &lt;sampler-channel&gt; is the respective sampler channel  
                     number as returned by the <a class='info' href='#ADD CHANNEL'>"ADD CHANNEL"<span> (</span><span class='info'>Adding a new sampler channel</span><span>)</span></a>  
                     or <a class='info' href='#LIST CHANNELS'>"LIST CHANNELS"<span> (</span><span class='info'>Getting all created sampler channel list</span><span>)</span></a> command and  
                     &lt;mute&gt; should be replaced either by "1" to mute the channel or "0"  
                     to unmute the channel.  
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>"OK" -  
                                 </p>  
 <blockquote class="text">  
 <p>on success  
 </p>  
 </blockquote>  
                               
   
 <p>"WRN:&lt;warning-code&gt;:&lt;warning-message&gt;" -  
                                 </p>  
 <blockquote class="text">  
 <p>if the channel was muted/unmuted, but there are noteworthy  
                                     issue(s) related, providing an appropriate warning code and  
                                     warning message  
 </p>  
 </blockquote>  
                               
   
 <p>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" -  
                                 </p>  
 <blockquote class="text">  
 <p>in case it failed, providing an appropriate error code and error message  
 </p>  
 </blockquote>  
                               
   
 </blockquote><p>  
                       
 </p>  
 <p>Examples:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="SET CHANNEL SOLO"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.4.26"></a><h3>6.4.26.&nbsp;  
 Soloing a sampler channel</h3>  
   
 <p>The front-end can solo/unsolo a specific sampler channel  
                     by sending the following command:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>SET CHANNEL SOLO &lt;sampler-channel&gt; &lt;solo&gt;  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Where &lt;sampler-channel&gt; is the respective sampler channel  
                     number as returned by the <a class='info' href='#ADD CHANNEL'>"ADD CHANNEL"<span> (</span><span class='info'>Adding a new sampler channel</span><span>)</span></a>  
                     or <a class='info' href='#LIST CHANNELS'>"LIST CHANNELS"<span> (</span><span class='info'>Getting all created sampler channel list</span><span>)</span></a> command and  
                     &lt;solo&gt; should be replaced either by "1" to solo the channel or "0"  
                     to unsolo the channel.  
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>"OK" -  
                                 </p>  
 <blockquote class="text">  
 <p>on success  
 </p>  
 </blockquote>  
                               
   
 <p>"WRN:&lt;warning-code&gt;:&lt;warning-message&gt;" -  
                                 </p>  
 <blockquote class="text">  
 <p>if the channel was soloed/unsoloed, but there are noteworthy  
                                     issue(s) related, providing an appropriate warning code and  
                                     warning message  
 </p>  
 </blockquote>  
                               
   
 <p>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" -  
                                 </p>  
 <blockquote class="text">  
 <p>in case it failed, providing an appropriate error code and error message  
 </p>  
 </blockquote>  
                               
   
 </blockquote><p>  
                       
 </p>  
 <p>Examples:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="SET CHANNEL MIDI_INSTRUMENT_MAP"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.4.27"></a><h3>6.4.27.&nbsp;  
 Assigning a MIDI instrument map to a sampler channel</h3>  
   
 <p>The front-end can assign a MIDI instrument map to a specific sampler channel  
                     by sending the following command:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>SET CHANNEL MIDI_INSTRUMENT_MAP &lt;sampler-channel&gt; &lt;map&gt;  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Where &lt;sampler-channel&gt; is the respective sampler channel  
                     number as returned by the <a class='info' href='#ADD CHANNEL'>"ADD CHANNEL"<span> (</span><span class='info'>Adding a new sampler channel</span><span>)</span></a>  
                     or <a class='info' href='#LIST CHANNELS'>"LIST CHANNELS"<span> (</span><span class='info'>Getting all created sampler channel list</span><span>)</span></a> command and  
                     &lt;map&gt; can have the following possibilites:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>"NONE" -  
                                 </p>  
 <blockquote class="text">  
 <p>This is the default setting. In this case  
                                     the sampler channel is not assigned any MIDI  
                                     instrument map and thus will ignore all MIDI  
                                     program change messages.  
 </p>  
 </blockquote>  
                               
   
 <p>"DEFAULT" -  
                                 </p>  
 <blockquote class="text">  
 <p>The sampler channel will always use the  
                                     default MIDI instrument map to handle MIDI  
                                     program change messages.  
 </p>  
 </blockquote>  
                               
   
 <p>numeric ID -  
                                 </p>  
 <blockquote class="text">  
 <p>You can assign a specific MIDI instrument map  
                                     by replacing &lt;map&gt; with the respective numeric  
                                     ID of the MIDI instrument map as returned by the  
                                     <a class='info' href='#LIST MIDI_INSTRUMENT_MAPS'>"LIST MIDI_INSTRUMENT_MAPS"<span> (</span><span class='info'>Getting all created MIDI instrument maps</span><span>)</span></a>  
                                     command. Once that map will be deleted, the sampler  
                                     channel would fall back to "NONE".  
 </p>  
 </blockquote>  
                               
   
 </blockquote><p>  
                       
 </p>  
 <p>Read chapter <a class='info' href='#MIDI Instrument Mapping'>"MIDI Instrument Mapping"<span> (</span><span class='info'>MIDI Instrument Mapping</span><span>)</span></a>  
                     for details regarding MIDI instrument mapping.  
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>"OK" -  
                                 </p>  
 <blockquote class="text">  
 <p>on success  
 </p>  
 </blockquote>  
                               
   
 <p>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" -  
                                 </p>  
 <blockquote class="text">  
 <p>in case it failed, providing an appropriate error code and error message  
 </p>  
 </blockquote>  
                               
   
 </blockquote><p>  
                       
 </p>  
 <p>Examples:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="CREATE FX_SEND"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.4.28"></a><h3>6.4.28.&nbsp;  
 Adding an effect send to a sampler channel</h3>  
   
 <p>The front-end can create an additional effect send on a specific sampler channel  
                     by sending the following command:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>CREATE FX_SEND &lt;sampler-channel&gt; &lt;midi-ctrl&gt; [&lt;name&gt;]  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Where &lt;sampler-channel&gt; is the respective sampler channel  
                     number as returned by the <a class='info' href='#ADD CHANNEL'>"ADD CHANNEL"<span> (</span><span class='info'>Adding a new sampler channel</span><span>)</span></a>  
                     or <a class='info' href='#LIST CHANNELS'>"LIST CHANNELS"<span> (</span><span class='info'>Getting all created sampler channel list</span><span>)</span></a> command, that is the  
                     sampler channel on which the effect send should be created on, &lt;midi-ctrl&gt;  
                     is a number between 0..127 defining the MIDI controller which can alter the  
                     effect send level and &lt;name&gt; is an optional argument defining a name  
                     for the effect send entity. The name does not have to be unique, but MUST be  
                     encapsulated into apostrophes and supports escape sequences as described in chapter  
                     "<a class='info' href='#character_set'>Character Set and Escape Sequences<span> (</span><span class='info'>Character Set and Escape Sequences</span><span>)</span></a>".  
 </p>  
 <p>By default, that is as initial routing, the effect send's audio channels  
                     are automatically routed to the last audio channels of the sampler channel's  
                     audio output device, that way you can i.e. first increase the amount of audio  
                     channels on the audio output device for having dedicated effect send output  
                     channels and when "CREATE FX_SEND" is called, those channels will automatically  
                     be picked. You can alter the destination channels however with  
                     <a class='info' href='#SET FX_SEND AUDIO_OUTPUT_CHANNEL'>"SET FX_SEND AUDIO_OUTPUT_CHANNEL"<span> (</span><span class='info'>Altering effect send's audio routing</span><span>)</span></a>.  
                       
 </p>  
 <p>Note: Create effect sends on a sampler channel only when needed, because having effect  
                     sends on a sampler channel will decrease runtime performance, because for implementing channel  
                     effect sends, separate (sampler channel local) audio buffers are needed to render and mix  
                     the voices and route the audio signal afterwards to the master outputs and effect send  
                     outputs (along with their respective effect send levels). A sampler channel without effect  
                     sends however can mix its voices directly into the audio output devices's audio buffers  
                     and is thus faster.  
                       
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>"OK[&lt;fx-send-id&gt;]" -  
                                 </p>  
 <blockquote class="text">  
 <p>in case a new effect send could be added to the  
                                     sampler channel, where &lt;fx-send-id&gt; reflects the  
                                     unique ID of the newly created effect send entity  
 </p>  
 </blockquote>  
                               
   
 <p>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" -  
                                 </p>  
 <blockquote class="text">  
 <p>when a new effect send could not be added, i.e.  
                                     due to invalid parameters  
 </p>  
 </blockquote>  
                               
   
 </blockquote><p>  
                       
 </p>  
 <p>Examples:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "CREATE FX_SEND 0 91 'Reverb Send'"  
 </p>  
 <p>S: "OK[0]"  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "CREATE FX_SEND 0 93"  
 </p>  
 <p>S: "OK[1]"  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="DESTROY FX_SEND"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.4.29"></a><h3>6.4.29.&nbsp;  
 Removing an effect send from a sampler channel</h3>  
   
 <p>The front-end can remove an existing effect send on a specific sampler channel  
                     by sending the following command:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>DESTROY FX_SEND &lt;sampler-channel&gt; &lt;fx-send-id&gt;  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Where &lt;sampler-channel&gt; is the respective sampler channel  
                     number as returned by the <a class='info' href='#ADD CHANNEL'>"ADD CHANNEL"<span> (</span><span class='info'>Adding a new sampler channel</span><span>)</span></a>  
                     or <a class='info' href='#LIST CHANNELS'>"LIST CHANNELS"<span> (</span><span class='info'>Getting all created sampler channel list</span><span>)</span></a> command, that is the  
                     sampler channel from which the effect send should be removed from and  
                     &lt;fx-send-id&gt; is the respective effect send number as returned by the  
                     <a class='info' href='#CREATE FX_SEND'>"CREATE FX_SEND"<span> (</span><span class='info'>Adding an effect send to a sampler channel</span><span>)</span></a>  
                     or <a class='info' href='#LIST FX_SENDS'>"LIST FX_SENDS"<span> (</span><span class='info'>Listing all effect sends on a sampler channel</span><span>)</span></a> command.  
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>"OK" -  
                                 </p>  
 <blockquote class="text">  
 <p>on success  
 </p>  
 </blockquote>  
                               
   
 <p>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" -  
                                 </p>  
 <blockquote class="text">  
 <p>in case it failed, providing an appropriate error code and  
                                     error message  
 </p>  
 </blockquote>  
                               
   
 </blockquote><p>  
                       
 </p>  
 <p>Example:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "DESTROY FX_SEND 0 0"  
 </p>  
 <p>S: "OK"  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="GET FX_SENDS"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.4.30"></a><h3>6.4.30.&nbsp;  
 Getting amount of effect sends on a sampler channel</h3>  
   
 <p>The front-end can ask for the amount of effect sends on a specific sampler channel  
                     by sending the following command:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>GET FX_SENDS &lt;sampler-channel&gt;  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Where &lt;sampler-channel&gt; is the respective sampler channel  
                     number as returned by the <a class='info' href='#ADD CHANNEL'>"ADD CHANNEL"<span> (</span><span class='info'>Adding a new sampler channel</span><span>)</span></a>  
                     or <a class='info' href='#LIST CHANNELS'>"LIST CHANNELS"<span> (</span><span class='info'>Getting all created sampler channel list</span><span>)</span></a> command.  
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>The sampler will answer by returning the number of effect  
                             sends on the given sampler channel.  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Example:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "GET FX_SENDS 0"  
 </p>  
 <p>S: "2"  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="LIST FX_SENDS"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.4.31"></a><h3>6.4.31.&nbsp;  
 Listing all effect sends on a sampler channel</h3>  
   
 <p>The front-end can ask for a list of effect sends on a specific sampler channel  
                     by sending the following command:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>LIST FX_SENDS &lt;sampler-channel&gt;  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Where &lt;sampler-channel&gt; is the respective sampler channel  
                     number as returned by the <a class='info' href='#ADD CHANNEL'>"ADD CHANNEL"<span> (</span><span class='info'>Adding a new sampler channel</span><span>)</span></a>  
                     or <a class='info' href='#LIST CHANNELS'>"LIST CHANNELS"<span> (</span><span class='info'>Getting all created sampler channel list</span><span>)</span></a> command.  
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>The sampler will answer by returning a comma separated list  
                             with all effect sends' numerical IDs on the given sampler  
                             channel.  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Examples:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "LIST FX_SENDS 0"  
 </p>  
 <p>S: "0,1"  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "LIST FX_SENDS 1"  
 </p>  
 <p>S: ""  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="GET FX_SEND INFO"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.4.32"></a><h3>6.4.32.&nbsp;  
 Getting effect send information</h3>  
   
 <p>The front-end can ask for the current settings of an effect send entity  
                     by sending the following command:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>GET FX_SEND INFO &lt;sampler-channel&gt; &lt;fx-send-id&gt;  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Where &lt;sampler-channel&gt; is the sampler channel number  
                     as returned by the <a class='info' href='#ADD CHANNEL'>"ADD CHANNEL"<span> (</span><span class='info'>Adding a new sampler channel</span><span>)</span></a>  
                     or <a class='info' href='#LIST CHANNELS'>"LIST CHANNELS"<span> (</span><span class='info'>Getting all created sampler channel list</span><span>)</span></a> command and  
                     &lt;fx-send-id&gt; reflects the numerical ID of the effect send entity  
                     as returned by the <a class='info' href='#CREATE FX_SEND'>"CREATE FX_SEND"<span> (</span><span class='info'>Adding an effect send to a sampler channel</span><span>)</span></a>  
                     or <a class='info' href='#LIST FX_SENDS'>"LIST FX_SENDS"<span> (</span><span class='info'>Listing all effect sends on a sampler channel</span><span>)</span></a> command.  
                     
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>The sampler will answer by sending a &lt;CRLF&gt; separated list.  
                             Each answer line begins with the settings category name  
                             followed by a colon and then a space character &lt;SP&gt; and finally  
                             the info character string to that setting category. At the  
                             moment the following categories are defined:  
 </p>  
 <p>  
                                 </p>  
 <blockquote class="text">  
 <p>NAME -  
                                         </p>  
 <blockquote class="text">  
 <p>name of the effect send entity  
                                             (note that this character string may contain  
                                              <a class='info' href='#character_set'>escape sequences<span> (</span><span class='info'>Character Set and Escape Sequences</span><span>)</span></a>)  
 </p>  
 </blockquote>  
                                       
   
 <p>MIDI_CONTROLLER -  
                                         </p>  
 <blockquote class="text">  
 <p>a value between 0 and 127 reflecting the MIDI controller  
                                             which is able to modify the effect send's send level  
 </p>  
 </blockquote>  
                                       
   
 <p>LEVEL -  
                                         </p>  
 <blockquote class="text">  
 <p>optionally dotted number reflecting the effect send's  
                                             current send level (where a value &lt; 1.0 means attenuation  
                                             and a value > 1.0 means amplification)  
 </p>  
 </blockquote>  
                                       
   
 <p>AUDIO_OUTPUT_ROUTING -  
                                         </p>  
 <blockquote class="text">  
 <p>comma separated list which reflects to which audio  
                                             channel of the selected audio output device each  
                                             effect send output channel is routed to, e.g. "0,3" would  
                                             mean the effect send's output channel 0 is routed to channel  
                                             0 of the audio output device and the effect send's output  
                                             channel 1 is routed to the channel 3 of the audio  
                                             output device (see  
                                             <a class='info' href='#SET FX_SEND AUDIO_OUTPUT_CHANNEL'>"SET FX_SEND AUDIO_OUTPUT_CHANNEL"<span> (</span><span class='info'>Altering effect send's audio routing</span><span>)</span></a>  
                                             for details), if an internal send  
                                             effect is assigned to the effect  
                                             send, then this setting defines the  
                                             audio channel routing to that  
                                             effect instance respectively  
 </p>  
 </blockquote>  
                                       
   
 <p>EFFECT -  
                                         </p>  
 <blockquote class="text">  
 <p>destination send effect chain ID  
                                             and destination effect chain  
                                             position, separated by comma in the  
                                             form "&lt;effect-chain&gt;,&lt;chain-pos&gt;"  
                                             or "NONE" if there is no send effect  
                                             assigned to the effect send  
 </p>  
 </blockquote>  
                                       
   
 </blockquote>  
                               
   
 </blockquote><p>  
                       
 </p>  
 <p>The mentioned fields above don't have to be in particular order.  
 </p>  
 <p>Example:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "GET FX_SEND INFO 0 0"  
 </p>  
 <p>S: "NAME: Reverb Send"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"MIDI_CONTROLLER: 91"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"LEVEL: 0.3"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"AUDIO_OUTPUT_ROUTING: 2,3"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"EFFECT: NONE"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"."  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "GET FX_SEND INFO 0 1"  
 </p>  
 <p>S: "NAME: Delay Send (Internal)"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"MIDI_CONTROLLER: 93"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"LEVEL: 0.51"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"AUDIO_OUTPUT_ROUTING: 1,2"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"EFFECT: 2,0"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"."  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="SET FX_SEND NAME"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.4.33"></a><h3>6.4.33.&nbsp;  
 Changing effect send's name</h3>  
   
 <p>The front-end can alter the current name of an effect  
                     send entity by sending the following command:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>SET FX_SEND NAME &lt;sampler-chan&gt; &lt;fx-send-id&gt; &lt;name&gt;  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Where &lt;sampler-chan&gt; is the sampler channel number  
                     as returned by the <a class='info' href='#ADD CHANNEL'>"ADD CHANNEL"<span> (</span><span class='info'>Adding a new sampler channel</span><span>)</span></a>  
                     or <a class='info' href='#LIST CHANNELS'>"LIST CHANNELS"<span> (</span><span class='info'>Getting all created sampler channel list</span><span>)</span></a> command,  
                     &lt;fx-send-id&gt; reflects the numerical ID of the effect send entity  
                     as returned by the <a class='info' href='#CREATE FX_SEND'>"CREATE FX_SEND"<span> (</span><span class='info'>Adding an effect send to a sampler channel</span><span>)</span></a>  
                     or <a class='info' href='#LIST FX_SENDS'>"LIST FX_SENDS"<span> (</span><span class='info'>Listing all effect sends on a sampler channel</span><span>)</span></a> command and  
                     &lt;name&gt; is the new name of the effect send entity, which  
                     does not have to be unique (name MUST be encapsulated into apostrophes  
                     and supports escape sequences as described in chapter  
                     "<a class='info' href='#character_set'>Character Set and Escape Sequences<span> (</span><span class='info'>Character Set and Escape Sequences</span><span>)</span></a>").  
                       
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>"OK" -  
                                 </p>  
 <blockquote class="text">  
 <p>on success  
 </p>  
 </blockquote>  
                               
   
 <p>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" -  
                                 </p>  
 <blockquote class="text">  
 <p>in case it failed, providing an appropriate error code and error message  
 </p>  
 </blockquote>  
                               
   
 </blockquote><p>  
                       
 </p>  
 <p>Example:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "SET FX_SEND NAME 0 0 'Fx Send 1'"  
 </p>  
 <p>S: "OK"  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="SET FX_SEND AUDIO_OUTPUT_CHANNEL"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.4.34"></a><h3>6.4.34.&nbsp;  
 Altering effect send's audio routing</h3>  
   
 <p>The front-end can alter the destination of an effect send's audio channel on a specific  
                     sampler channel by sending the following command:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>SET FX_SEND AUDIO_OUTPUT_CHANNEL &lt;sampler-chan&gt; &lt;fx-send-id&gt; &lt;audio-src&gt; &lt;audio-dst&gt;  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Where &lt;sampler-chan&gt; is the sampler channel number  
                     as returned by the <a class='info' href='#ADD CHANNEL'>"ADD CHANNEL"<span> (</span><span class='info'>Adding a new sampler channel</span><span>)</span></a>  
                     or <a class='info' href='#LIST CHANNELS'>"LIST CHANNELS"<span> (</span><span class='info'>Getting all created sampler channel list</span><span>)</span></a> command,  
                     &lt;fx-send-id&gt; reflects the numerical ID of the effect send entity  
                     as returned by the <a class='info' href='#CREATE FX_SEND'>"CREATE FX_SEND"<span> (</span><span class='info'>Adding an effect send to a sampler channel</span><span>)</span></a>  
                     or <a class='info' href='#LIST FX_SENDS'>"LIST FX_SENDS"<span> (</span><span class='info'>Listing all effect sends on a sampler channel</span><span>)</span></a> command,  
                     &lt;audio-src&gt; is the numerical ID of the effect send's audio channel  
                     which should be rerouted and &lt;audio-dst&gt; is the numerical ID of  
                     the audio channel of the selected audio output device where &lt;audio-src&gt;  
                     should be routed to. If an internal send effect is assigned  
                     to the effect send, then this setting defines the audio  
                     channel routing to that effect instance respectively.  
 </p>  
 <p>Note that effect sends can only route audio to the same audio output  
                     device as assigned to the effect send's sampler channel. Also note that an  
                     effect send entity does always have exactly as much audio channels as its  
                     sampler channel. So if the sampler channel is stereo, the effect send does  
                     have two audio channels as well. Also keep in mind that the amount of audio  
                     channels on a sampler channel might be dependant not only to the deployed  
                     sampler engine on the sampler channel, but also dependant to the instrument  
                     currently loaded. However you can (effectively) turn an i.e. stereo effect  
                     send into a mono one by simply altering its audio routing appropriately.  
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>"OK" -  
                                 </p>  
 <blockquote class="text">  
 <p>on success  
 </p>  
 </blockquote>  
                               
   
 <p>"WRN:&lt;warning-code&gt;:&lt;warning-message&gt;" -  
                                 </p>  
 <blockquote class="text">  
 <p>if audio output channel was set, but there are noteworthy  
                                     issue(s) related, providing an appropriate warning code and  
                                     warning message  
 </p>  
 </blockquote>  
                               
   
 <p>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" -  
                                 </p>  
 <blockquote class="text">  
 <p>in case it failed, providing an appropriate error code and error message  
 </p>  
 </blockquote>  
                               
   
 </blockquote><p>  
                       
 </p>  
 <p>Example:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "SET FX_SEND AUDIO_OUTPUT_CHANNEL 0 0 0 2"  
 </p>  
 <p>S: "OK"  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="SET FX_SEND EFFECT"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.4.35"></a><h3>6.4.35.&nbsp;  
 Assigning destination effect to an effect send</h3>  
   
 <p>The front-end can (re-)assign a destination effect to an  
                     effect send by sending the following command:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>SET FX_SEND EFFECT &lt;sampler-chan&gt; &lt;fx-send-id&gt; &lt;effect-chain&gt; &lt;chain-pos&gt;  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Where &lt;sampler-chan&gt; is the sampler channel number  
                     as returned by the <a class='info' href='#ADD CHANNEL'>"ADD CHANNEL"<span> (</span><span class='info'>Adding a new sampler channel</span><span>)</span></a>  
                     or <a class='info' href='#LIST CHANNELS'>"LIST CHANNELS"<span> (</span><span class='info'>Getting all created sampler channel list</span><span>)</span></a> command,  
                     &lt;fx-send-id&gt; reflects the numerical ID of the effect send entity  
                     as returned by the <a class='info' href='#CREATE FX_SEND'>"CREATE FX_SEND"<span> (</span><span class='info'>Adding an effect send to a sampler channel</span><span>)</span></a>  
                     or <a class='info' href='#LIST FX_SENDS'>"LIST FX_SENDS"<span> (</span><span class='info'>Listing all effect sends on a sampler channel</span><span>)</span></a> command,  
                     &lt;effect-chain&gt; by the numerical ID of the destination  
                     effect chain as returned by the  
                     <a class='info' href='#ADD SEND_EFFECT_CHAIN'>"ADD SEND_EFFECT_CHAIN"<span> (</span><span class='info'>Add send effect chain</span><span>)</span></a>  
                     or  
                     <a class='info' href='#LIST SEND_EFFECT_CHAINS'>"LIST SEND_EFFECT_CHAINS"<span> (</span><span class='info'>Retrieve list of send effect chains</span><span>)</span></a>  
                     command and &lt;chain-pos&gt; reflects the exact effect  
                     chain position in the effect chain which hosts the actual  
                     destination effect.  
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>"OK" -  
                                 </p>  
 <blockquote class="text">  
 <p>on success  
 </p>  
 </blockquote>  
                               
   
 <p>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" -  
                                 </p>  
 <blockquote class="text">  
 <p>in case it failed, providing an appropriate error code and error message  
 </p>  
 </blockquote>  
                               
   
 </blockquote><p>  
                       
 </p>  
 <p>Example:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "SET FX_SEND EFFECT 0 0 2 5"  
 </p>  
 <p>S: "OK"  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="REMOVE FX_SEND EFFECT"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.4.36"></a><h3>6.4.36.&nbsp;  
 Removing destination effect from an effect send</h3>  
   
 <p>The front-end can (re-)assign a destination effect to an  
                     effect send by sending the following command:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>REMOVE FX_SEND EFFECT &lt;sampler-chan&gt; &lt;fx-send-id&gt;  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Where &lt;sampler-chan&gt; is the sampler channel number  
                     as returned by the <a class='info' href='#ADD CHANNEL'>"ADD CHANNEL"<span> (</span><span class='info'>Adding a new sampler channel</span><span>)</span></a>  
                     or <a class='info' href='#LIST CHANNELS'>"LIST CHANNELS"<span> (</span><span class='info'>Getting all created sampler channel list</span><span>)</span></a> command,  
                     &lt;fx-send-id&gt; reflects the numerical ID of the effect send entity  
                     as returned by the <a class='info' href='#CREATE FX_SEND'>"CREATE FX_SEND"<span> (</span><span class='info'>Adding an effect send to a sampler channel</span><span>)</span></a>  
                     or <a class='info' href='#LIST FX_SENDS'>"LIST FX_SENDS"<span> (</span><span class='info'>Listing all effect sends on a sampler channel</span><span>)</span></a> command.  
 </p>  
 <p>After the destination effect has been removed from the  
                     effect send, the audio signal of the effect send will be  
                     routed directly to the audio output device, according to the  
                     audio channel routing setting of the effect send.  
                       
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>"OK" -  
                                 </p>  
 <blockquote class="text">  
 <p>on success  
 </p>  
 </blockquote>  
                               
   
 <p>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" -  
                                 </p>  
 <blockquote class="text">  
 <p>in case it failed, providing an appropriate error code and error message  
 </p>  
 </blockquote>  
                               
   
 </blockquote><p>  
                       
 </p>  
 <p>Example:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "REMOVE FX_SEND EFFECT 0 0"  
 </p>  
 <p>S: "OK"  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="SET FX_SEND MIDI_CONTROLLER"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.4.37"></a><h3>6.4.37.&nbsp;  
 Altering effect send's MIDI controller</h3>  
   
 <p>The front-end can alter the MIDI controller of an effect  
                     send entity by sending the following command:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>SET FX_SEND MIDI_CONTROLLER &lt;sampler-chan&gt; &lt;fx-send-id&gt; &lt;midi-ctrl&gt;  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Where &lt;sampler-chan&gt; is the sampler channel number  
                     as returned by the <a class='info' href='#ADD CHANNEL'>"ADD CHANNEL"<span> (</span><span class='info'>Adding a new sampler channel</span><span>)</span></a>  
                     or <a class='info' href='#LIST CHANNELS'>"LIST CHANNELS"<span> (</span><span class='info'>Getting all created sampler channel list</span><span>)</span></a> command,  
                     &lt;fx-send-id&gt; reflects the numerical ID of the effect send entity  
                     as returned by the <a class='info' href='#CREATE FX_SEND'>"CREATE FX_SEND"<span> (</span><span class='info'>Adding an effect send to a sampler channel</span><span>)</span></a>  
                     or <a class='info' href='#LIST FX_SENDS'>"LIST FX_SENDS"<span> (</span><span class='info'>Listing all effect sends on a sampler channel</span><span>)</span></a> command and  
                     &lt;midi-ctrl&gt; reflects the MIDI controller which shall be  
                     able to modify the effect send's send level.  
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>"OK" -  
                                 </p>  
 <blockquote class="text">  
 <p>on success  
 </p>  
 </blockquote>  
                               
   
 <p>"WRN:&lt;warning-code&gt;:&lt;warning-message&gt;" -  
                                 </p>  
 <blockquote class="text">  
 <p>if MIDI controller was set, but there are noteworthy  
                                     issue(s) related, providing an appropriate warning code and  
                                     warning message  
 </p>  
 </blockquote>  
                               
   
 <p>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" -  
                                 </p>  
 <blockquote class="text">  
 <p>in case it failed, providing an appropriate error code and error message  
 </p>  
 </blockquote>  
                               
   
 </blockquote><p>  
                       
 </p>  
 <p>Example:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "SET FX_SEND MIDI_CONTROLLER 0 0 91"  
 </p>  
 <p>S: "OK"  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="SET FX_SEND LEVEL"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.4.38"></a><h3>6.4.38.&nbsp;  
 Altering effect send's send level</h3>  
   
 <p>The front-end can alter the current send level of an effect  
                     send entity by sending the following command:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>SET FX_SEND LEVEL &lt;sampler-chan&gt; &lt;fx-send-id&gt; &lt;volume&gt;  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Where &lt;sampler-chan&gt; is the sampler channel number  
                     as returned by the <a class='info' href='#ADD CHANNEL'>"ADD CHANNEL"<span> (</span><span class='info'>Adding a new sampler channel</span><span>)</span></a>  
                     or <a class='info' href='#LIST CHANNELS'>"LIST CHANNELS"<span> (</span><span class='info'>Getting all created sampler channel list</span><span>)</span></a> command,  
                     &lt;fx-send-id&gt; reflects the numerical ID of the effect send entity  
                     as returned by the <a class='info' href='#CREATE FX_SEND'>"CREATE FX_SEND"<span> (</span><span class='info'>Adding an effect send to a sampler channel</span><span>)</span></a>  
                     or <a class='info' href='#LIST FX_SENDS'>"LIST FX_SENDS"<span> (</span><span class='info'>Listing all effect sends on a sampler channel</span><span>)</span></a> command and  
                     &lt;volume&gt; is an optionally dotted positive number (a value  
                     smaller than 1.0 means attenuation, whereas a value greater than  
                     1.0 means amplification) reflecting the new send level.  
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>"OK" -  
                                 </p>  
 <blockquote class="text">  
 <p>on success  
 </p>  
 </blockquote>  
                               
   
 <p>"WRN:&lt;warning-code&gt;:&lt;warning-message&gt;" -  
                                 </p>  
 <blockquote class="text">  
 <p>if new send level was set, but there are noteworthy  
                                     issue(s) related, providing an appropriate warning code and  
                                     warning message  
 </p>  
 </blockquote>  
                               
   
 <p>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" -  
                                 </p>  
 <blockquote class="text">  
 <p>in case it failed, providing an appropriate error code and error message  
 </p>  
 </blockquote>  
                               
   
 </blockquote><p>  
                       
 </p>  
 <p>Example:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "SET FX_SEND LEVEL 0 0 0.15"  
 </p>  
 <p>S: "OK"  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="SEND CHANNEL MIDI_DATA"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.4.39"></a><h3>6.4.39.&nbsp;  
 Sending MIDI messages to sampler channel</h3>  
   
 <p>The front-end can send MIDI events to a specific sampler channel  
                     by sending the following command:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>SEND CHANNEL MIDI_DATA &lt;midi-msg&gt; &lt;sampler-chan&gt; &lt;arg1&gt; &lt;arg2&gt;  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Where &lt;sampler-chan&gt; is the sampler channel number  
                     as returned by the <a class='info' href='#ADD CHANNEL'>"ADD CHANNEL"<span> (</span><span class='info'>Adding a new sampler channel</span><span>)</span></a>  
                     or <a class='info' href='#LIST CHANNELS'>"LIST CHANNELS"<span> (</span><span class='info'>Getting all created sampler channel list</span><span>)</span></a> command,  
                     &lt;arg1&gt; and &lt;arg2&gt; arguments depend on the &lt;midi-msg&gt; argument, which  
                     specifies the MIDI message type. Currently, the following MIDI messages are supported:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>"NOTE_ON" -  
                                 </p>  
 <blockquote class="text">  
 <p>For turning on MIDI notes, where &lt;arg1&gt;  
                                     specifies the key number and &lt;arg2&gt; the velocity  
                                     as described in the MIDI specification.  
 </p>  
 </blockquote>  
                               
   
 <p>"NOTE_OFF" -  
                                 </p>  
 <blockquote class="text">  
 <p>For turning a currently playing MIDI note off, where &lt;arg1&gt;  
                                     specifies the key number and &lt;arg2&gt; the velocity  
                                     as described in the MIDI specification.  
 </p>  
 </blockquote>  
                               
   
 <p>"CC" -  
                                 </p>  
 <blockquote class="text">  
 <p>For changing a MIDI controller, where &lt;arg1&gt;  
                                     specifies the controller number and &lt;arg2&gt; the  
                                     new value of the controller as described in the Control  
                                     Change section of the MIDI specification.  
 </p>  
 </blockquote>  
                               
   
 </blockquote><p>  
                       
 </p>  
 <p>CAUTION: This command is provided for implementations of virtual MIDI keyboards  
                     and no realtime guarantee whatsoever will be made!  
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>"OK" -  
                                 </p>  
 <blockquote class="text">  
 <p>on success  
 </p>  
 </blockquote>  
                               
   
 <p>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" -  
                                 </p>  
 <blockquote class="text">  
 <p>in case it failed, providing an appropriate error code and error message  
 </p>  
 </blockquote>  
                               
   
 </blockquote><p>  
                       
 </p>  
 <p>Example:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "SEND CHANNEL MIDI_DATA NOTE_ON 0 56 112"  
 </p>  
 <p>S: "OK"  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="RESET CHANNEL"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.4.40"></a><h3>6.4.40.&nbsp;  
 Resetting a sampler channel</h3>  
   
 <p>The front-end can reset a particular sampler channel by sending the following command:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>RESET CHANNEL &lt;sampler-channel&gt;  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>  
                     Where &lt;sampler-channel&gt; defines the sampler channel to be reset.  
                     This will cause the engine on that sampler channel, its voices and  
                     eventually disk streams and all control and status variables to be  
                     reset.  
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>"OK" -  
                                 </p>  
 <blockquote class="text">  
 <p>on success  
 </p>  
 </blockquote>  
                               
   
 <p>"WRN:&lt;warning-code&gt;:&lt;warning-message&gt;" -  
                                 </p>  
 <blockquote class="text">  
 <p>if channel was reset, but there are noteworthy issue(s)  
                                     related, providing an appropriate warning code and warning  
                                     message  
 </p>  
 </blockquote>  
                               
   
 <p>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" -  
                                 </p>  
 <blockquote class="text">  
 <p>in case it failed, providing an appropriate error code and  
                                     error message  
 </p>  
 </blockquote>  
                               
   
 </blockquote><p>  
                       
 </p>  
 <p>Examples:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="anchor12"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.5"></a><h3>6.5.&nbsp;  
 Controlling connection</h3>  
   
 <p>The following commands are used to control the connection to LinuxSampler.  
 </p>  
 <a name="SUBSCRIBE"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.5.1"></a><h3>6.5.1.&nbsp;  
 Register front-end for receiving event messages</h3>  
   
 <p>The front-end can register itself to the LinuxSampler application to  
                     be informed about noteworthy events by sending this command:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>SUBSCRIBE &lt;event-id&gt;  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>where &lt;event-id&gt; will be replaced by the respective event that  
                     client wants to subscribe to.  
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>"OK" -  
                                 </p>  
 <blockquote class="text">  
 <p>on success  
 </p>  
 </blockquote>  
                               
   
 <p>"WRN:&lt;warning-code&gt;:&lt;warning-message&gt;" -  
                                 </p>  
 <blockquote class="text">  
 <p>if registration succeeded, but there are noteworthy  
                                     issue(s) related, providing an appropriate warning code and  
                                     warning message  
 </p>  
 </blockquote>  
                               
   
 <p>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" -  
                                 </p>  
 <blockquote class="text">  
 <p>in case it failed, providing an appropriate error code and  
                                     error message  
 </p>  
 </blockquote>  
                               
   
 </blockquote><p>  
                       
 </p>  
 <p>Examples:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="UNSUBSCRIBE"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.5.2"></a><h3>6.5.2.&nbsp;  
 Unregister front-end for not receiving event messages</h3>  
   
 <p>The front-end can unregister itself if it doesn't want to receive event  
                     messages anymore by sending the following command:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>UNSUBSCRIBE &lt;event-id&gt;  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Where &lt;event-id&gt; will be replaced by the respective event that  
                     client doesn't want to receive anymore.  
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>"OK" -  
                                 </p>  
 <blockquote class="text">  
 <p>on success  
 </p>  
 </blockquote>  
                               
   
 <p>"WRN:&lt;warning-code&gt;:&lt;warning-message&gt;" -  
                                 </p>  
 <blockquote class="text">  
 <p>if unregistration succeeded, but there are noteworthy  
                                     issue(s) related, providing an appropriate warning code and  
                                     warning message  
 </p>  
 </blockquote>  
                               
   
 <p>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" -  
                                 </p>  
 <blockquote class="text">  
 <p>in case it failed, providing an appropriate error code and  
                                     error message  
 </p>  
 </blockquote>  
                               
   
 </blockquote><p>  
                       
 </p>  
 <p>Examples:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="SET ECHO"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.5.3"></a><h3>6.5.3.&nbsp;  
 Enable or disable echo of commands</h3>  
   
 <p>To enable or disable back sending of commands to the client the following command can be used:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>SET ECHO &lt;value&gt;  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Where &lt;value&gt; should be replaced either by "1" to enable echo mode  
                     or "0" to disable echo mode. When echo mode is enabled, all  
                     commands send to LinuxSampler will be immediately send back and  
                     after this echo the actual response to the command will be  
                     returned. Echo mode will only be altered for the client connection  
                     that issued the "SET ECHO" command, not globally for all client  
                     connections.  
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>"OK" -  
                                 </p>  
 <blockquote class="text">  
 <p>usually  
 </p>  
 </blockquote>  
                               
   
 <p>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" -  
                                 </p>  
 <blockquote class="text">  
 <p>on syntax error, e.g. non boolean value  
 </p>  
 </blockquote>  
                               
   
 </blockquote><p>  
                       
 </p>  
 <p>Examples:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="QUIT"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.5.4"></a><h3>6.5.4.&nbsp;  
 Close client connection</h3>  
   
 <p>The client can close its network connection to LinuxSampler by sending the following command:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>QUIT  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>This is probably more interesting for manual telnet connections to  
                     LinuxSampler than really useful for a front-end implementation.  
 </p>  
 <a name="anchor13"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.6"></a><h3>6.6.&nbsp;  
 Global commands</h3>  
   
 <p>The following commands have global impact on the sampler.  
 </p>  
 <a name="GET TOTAL_VOICE_COUNT"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.6.1"></a><h3>6.6.1.&nbsp;  
 Current number of active voices</h3>  
   
 <p>The front-end can ask for the current number of active voices on  
                     the sampler by sending the following command:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>GET TOTAL_VOICE_COUNT  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>LinuxSampler will answer by returning the number of all active  
                             voices on the sampler.  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="GET TOTAL_VOICE_COUNT_MAX"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.6.2"></a><h3>6.6.2.&nbsp;  
 Maximum amount of active voices</h3>  
   
 <p>The front-end can ask for the maximum number of active voices  
                     by sending the following command:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>GET TOTAL_VOICE_COUNT_MAX  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>LinuxSampler will answer by returning the maximum number  
                             of active voices.  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="GET TOTAL_STREAM_COUNT"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.6.3"></a><h3>6.6.3.&nbsp;  
 Current number of active disk streams</h3>  
   
 <p>The front-end can ask for the current number of active disk streams on  
                     the sampler by sending the following command:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>GET TOTAL_STREAM_COUNT  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>LinuxSampler will answer by returning the number of all active  
                             disk streams on the sampler.  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="RESET"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.6.4"></a><h3>6.6.4.&nbsp;  
 Reset sampler</h3>  
   
 <p>The front-end can reset the whole sampler by sending the following command:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>RESET  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>"OK" -  
                                 </p>  
 <blockquote class="text">  
 <p>always  
 </p>  
 </blockquote>  
                               
   
 </blockquote><p>  
                       
 </p>  
 <p>Examples:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="GET SERVER INFO"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.6.5"></a><h3>6.6.5.&nbsp;  
 General sampler informations</h3>  
   
 <p>The client can ask for general informations about the LinuxSampler  
                        instance by sending the following command:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>GET SERVER INFO  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>LinuxSampler will answer by sending a &lt;CRLF&gt; separated list.  
                                Each answer line begins with the information category name  
                                followed by a colon and then a space character &lt;SP&gt; and finally  
                                the info character string to that information category. At the  
                                moment the following categories are defined:  
                               
 </p>  
 <p>  
                                 </p>  
 <blockquote class="text">  
 <p>DESCRIPTION -  
                                         </p>  
 <blockquote class="text">  
 <p>arbitrary textual description about the sampler  
                                             (note that the character string may contain  
                                             <a class='info' href='#character_set'>escape sequences<span> (</span><span class='info'>Character Set and Escape Sequences</span><span>)</span></a>)  
 </p>  
 </blockquote>  
                                       
   
 <p>VERSION -  
                                         </p>  
 <blockquote class="text">  
 <p>version of the sampler  
 </p>  
 </blockquote>  
                                       
   
 <p>PROTOCOL_VERSION -  
                                         </p>  
 <blockquote class="text">  
 <p>version of the LSCP specification the sampler  
                                             complies with (see <a class='info' href='#LSCP versioning'>Section&nbsp;2<span> (</span><span class='info'>Versioning of this specification</span><span>)</span></a> for details)  
 </p>  
 </blockquote>  
                                       
   
 <p>INSTRUMENTS_DB_SUPPORT -  
                                         </p>  
 <blockquote class="text">  
 <p>either yes or no, specifies whether the  
                                             sampler is build with instruments database support.  
 </p>  
 </blockquote>  
                                       
   
 </blockquote>  
                               
   
 </blockquote><p>  
                       
 </p>  
 <p>The mentioned fields above don't have to be in particular order.  
                     Other fields might be added in future.  
 </p>  
 <p>Example:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "GET SERVER INFO"  
 </p>  
 <p>S: "DESCRIPTION: LinuxSampler - modular, streaming capable sampler"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"VERSION: 1.0.0.svn23"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"PROTOCOL_VERSION: 1.5"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"INSTRUMENTS_DB_SUPPORT: no"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"."  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="GET VOLUME"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.6.6"></a><h3>6.6.6.&nbsp;  
 Getting global volume attenuation</h3>  
   
 <p>The client can ask for the current global sampler-wide volume  
                     attenuation by sending the following command:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>GET VOLUME  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>The sampler will always answer by returning the optional  
                             dotted floating point coefficient, reflecting the current  
                             global volume attenuation.  
                               
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Note: it is up to the respective sampler engine whether to obey  
                     that global volume parameter or not, but in general all engines SHOULD  
                     use this parameter.  
 </p>  
 <a name="SET VOLUME"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.6.7"></a><h3>6.6.7.&nbsp;  
 Setting global volume attenuation</h3>  
   
 <p>The client can alter the current global sampler-wide volume  
                     attenuation by sending the following command:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>SET VOLUME &lt;volume&gt;  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Where &lt;volume&gt; should be replaced by the optional dotted  
                    floating point value, reflecting the new global volume parameter.  
                    This value might usually be in the range between 0.0 and 1.0, that  
                    is for attenuating the overall volume.  
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>"OK" -  
                                 </p>  
 <blockquote class="text">  
 <p>on success  
 </p>  
 </blockquote>  
                               
   
 <p>"WRN:&lt;warning-code&gt;:&lt;warning-message&gt;" -  
                                 </p>  
 <blockquote class="text">  
 <p>if the global volume was set, but there are noteworthy  
                                     issue(s) related, providing an appropriate warning code and  
                                     warning message  
 </p>  
 </blockquote>  
                               
   
 <p>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" -  
                                 </p>  
 <blockquote class="text">  
 <p>in case it failed, providing an appropriate error code and error message  
 </p>  
 </blockquote>  
                               
   
 </blockquote><p>  
                       
 </p>  
 <a name="GET VOICES"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.6.8"></a><h3>6.6.8.&nbsp;  
 Getting global voice limit</h3>  
   
 <p>The client can ask for the current global sampler-wide limit  
                        for maximum voices by sending the following command:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>GET VOICES  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>LinuxSampler will answer by returning the number for  
                                the current limit of maximum voices.  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>The voice limit setting defines how many voices should maximum  
                        be processed by the sampler at the same time. If the user  
                        triggers new notes which would exceed that voice limit, the  
                        sampler engine will react by stealing old voices for those  
                        newly triggered notes. Note that the amount of voices triggered  
                        by a new note can be larger than one and is dependent to the  
                        respective instrument and probably further criterias.  
 </p>  
 <a name="SET VOICES"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.6.9"></a><h3>6.6.9.&nbsp;  
 Setting global voice limit</h3>  
   
 <p>The client can alter the current global sampler-wide limit  
                     for maximum voices by sending the following command:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>SET VOICES &lt;max-voices&gt;  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Where &lt;max-voices&gt; should be replaced by the integer  
                    value, reflecting the new global amount limit of maximum voices.  
                    This value has to be larger than 0.  
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>"OK" -  
                                 </p>  
 <blockquote class="text">  
 <p>on success  
 </p>  
 </blockquote>  
                               
   
 <p>"WRN:&lt;warning-code&gt;:&lt;warning-message&gt;" -  
                                 </p>  
 <blockquote class="text">  
 <p>if the voice limit was set, but there are noteworthy  
                                     issue(s) related, providing an appropriate warning code and  
                                     warning message  
 </p>  
 </blockquote>  
                               
   
 <p>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" -  
                                 </p>  
 <blockquote class="text">  
 <p>in case it failed, providing an appropriate error code and error message  
 </p>  
 </blockquote>  
                               
   
 </blockquote><p>  
                       
 </p>  
 <p>Note: the given value will be passed to all sampler engine instances.  
                        The total amount of maximum voices on the running system might thus  
                        be as big as the given value multiplied by the current amount of engine  
                        instances.  
 </p>  
 <p>Caution: when adjusting the voice limit, you SHOULD also  
                         adjust the disk stream limit respectively and vice versa.  
 </p>  
 <a name="GET STREAMS"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.6.10"></a><h3>6.6.10.&nbsp;  
 Getting global disk stream limit</h3>  
   
 <p>The client can ask for the current global sampler-wide limit  
                        for maximum disk streams by sending the following command:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>GET STREAMS  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>LinuxSampler will answer by returning the number for  
                                the current limit of maximum disk streams.  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>The disk stream limit setting defines how many disk streams should  
                        maximum be processed by a sampler engine at the same time. The  
                        higher this value, the more memory (RAM) will be occupied, since  
                        every disk streams allocates a certain buffer size for being able  
                        to perform its streaming operations.  
 </p>  
 <a name="SET STREAMS"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.6.11"></a><h3>6.6.11.&nbsp;  
 Setting global disk stream limit</h3>  
   
 <p>The client can alter the current global sampler-wide limit  
                     for maximum disk streams by sending the following command:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>SET STREAMS &lt;max-streams&gt;  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Where &lt;max-streams&gt; should be replaced by the integer  
                    value, reflecting the new global amount limit of maximum disk streams.  
                    This value has to be positive.  
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>"OK" -  
                                 </p>  
 <blockquote class="text">  
 <p>on success  
 </p>  
 </blockquote>  
                               
   
 <p>"WRN:&lt;warning-code&gt;:&lt;warning-message&gt;" -  
                                 </p>  
 <blockquote class="text">  
 <p>if the disk stream limit was set, but there are noteworthy  
                                     issue(s) related, providing an appropriate warning code and  
                                     warning message  
 </p>  
 </blockquote>  
                               
   
 <p>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" -  
                                 </p>  
 <blockquote class="text">  
 <p>in case it failed, providing an appropriate error code and error message  
 </p>  
 </blockquote>  
                               
   
 </blockquote><p>  
                       
 </p>  
 <p>Note: the given value will be passed to all sampler engine instances.  
                        The total amount of maximum disk streams on the running system might  
                        thus be as big as the given value multiplied by the current amount of  
                        engine instances.  
 </p>  
 <p>Caution: when adjusting the disk stream limit, you SHOULD also  
                         adjust the voice limit respectively and vice versa.  
 </p>  
 <a name="MIDI Instrument Mapping"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.7"></a><h3>6.7.&nbsp;  
 MIDI Instrument Mapping</h3>  
   
 <p>The MIDI protocol provides a way to switch between instruments  
                 by sending so called MIDI bank select and MIDI program change  
                 messages which are essentially just numbers. The following commands  
                 allow to actually map arbitrary MIDI bank select / program change  
                 numbers with real instruments.  
 </p>  
 <p>The sampler allows to manage an arbitrary amount of MIDI  
                 instrument maps which define which instrument to load on  
                 which MIDI program change message.  
 </p>  
 <p>By default, that is when the sampler is launched, there is no  
                 map, thus the sampler will simply ignore all program change  
                 messages. The front-end has to explicitly create at least one  
                 map, add entries to the map and tell the respective sampler  
                 channel(s) which MIDI instrument map to use, so the sampler  
                 knows how to react on a given program change message on the  
                 respective sampler channel, that is by switching to the  
                 respectively defined engine type and loading the respective  
                 instrument. See command  
                 <a class='info' href='#SET CHANNEL MIDI_INSTRUMENT_MAP'>"SET CHANNEL MIDI_INSTRUMENT_MAP"<span> (</span><span class='info'>Assigning a MIDI instrument map to a sampler channel</span><span>)</span></a>  
                 for how to assign a MIDI instrument map to a sampler channel.  
 </p>  
 <p>Also note per MIDI specification a bank select message does not  
                 cause to switch to another instrument. Instead when receiving a  
                 bank select message the bank value will be stored and a subsequent  
                 program change message (which may occur at any time) will finally  
                 cause the sampler to switch to the respective instrument as  
                 reflected by the current MIDI instrument map.  
 </p>  
 <a name="ADD MIDI_INSTRUMENT_MAP"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.7.1"></a><h3>6.7.1.&nbsp;  
 Create a new MIDI instrument map</h3>  
   
 <p>The front-end can add a new MIDI instrument map by sending  
                     the following command:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>ADD MIDI_INSTRUMENT_MAP [&lt;name&gt;]  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Where &lt;name&gt; is an optional argument allowing to  
                     assign a custom name to the new map. MIDI instrument Map  
                     names do not have to be unique, but MUST be encapsulated  
                     into apostrophes and support escape sequences as described  
                     in chapter "<a class='info' href='#character_set'>Character Set and Escape Sequences<span> (</span><span class='info'>Character Set and Escape Sequences</span><span>)</span></a>".  
                       
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>"OK[&lt;map&gt;]" -  
                                 </p>  
 <blockquote class="text">  
 <p>in case a new MIDI instrument map could  
                                     be added, where &lt;map&gt; reflects the  
                                     unique ID of the newly created MIDI  
                                     instrument map  
 </p>  
 </blockquote>  
                               
   
 <p>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" -  
                                 </p>  
 <blockquote class="text">  
 <p>when a new map could not be created, which  
                                     might never occur in practice  
 </p>  
 </blockquote>  
                               
   
 </blockquote><p>  
                       
 </p>  
 <p>Examples:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "ADD MIDI_INSTRUMENT_MAP 'Standard Map'"  
 </p>  
 <p>S: "OK[0]"  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "ADD MIDI_INSTRUMENT_MAP 'Standard Drumkit'"  
 </p>  
 <p>S: "OK[1]"  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "ADD MIDI_INSTRUMENT_MAP"  
 </p>  
 <p>S: "OK[5]"  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="REMOVE MIDI_INSTRUMENT_MAP"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.7.2"></a><h3>6.7.2.&nbsp;  
 Delete one particular or all MIDI instrument maps</h3>  
   
 <p>The front-end can delete a particular MIDI instrument map  
                     by sending the following command:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>REMOVE MIDI_INSTRUMENT_MAP &lt;map&gt;  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Where &lt;map&gt; reflects the unique ID of the map to delete  
                     as returned by the <a class='info' href='#LIST MIDI_INSTRUMENT_MAPS'>"LIST MIDI_INSTRUMENT_MAPS"<span> (</span><span class='info'>Getting all created MIDI instrument maps</span><span>)</span></a>  
                     command.  
 </p>  
 <p>The front-end can delete all MIDI instrument maps by  
                     sending the following command:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>REMOVE MIDI_INSTRUMENT_MAP ALL  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>"OK" -  
                                 </p>  
 <blockquote class="text">  
 <p>in case the map(s) could be deleted  
 </p>  
 </blockquote>  
                               
   
 <p>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" -  
                                 </p>  
 <blockquote class="text">  
 <p>when the given map does not exist  
 </p>  
 </blockquote>  
                               
   
 </blockquote><p>  
                       
 </p>  
 <p>Examples:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "REMOVE MIDI_INSTRUMENT_MAP 0"  
 </p>  
 <p>S: "OK"  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "REMOVE MIDI_INSTRUMENT_MAP ALL"  
 </p>  
 <p>S: "OK"  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="GET MIDI_INSTRUMENT_MAPS"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.7.3"></a><h3>6.7.3.&nbsp;  
 Get amount of existing MIDI instrument maps</h3>  
   
 <p>The front-end can retrieve the current amount of MIDI  
                     instrument maps by sending the following command:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>GET MIDI_INSTRUMENT_MAPS  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>The sampler will answer by returning the current  
                             number of MIDI instrument maps.  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Example:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "GET MIDI_INSTRUMENT_MAPS"  
 </p>  
 <p>S: "2"  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="LIST MIDI_INSTRUMENT_MAPS"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.7.4"></a><h3>6.7.4.&nbsp;  
 Getting all created MIDI instrument maps</h3>  
   
 <p>The number of MIDI instrument maps can change on runtime. To get the  
                     current list of MIDI instrument maps, the front-end can send the  
                     following command:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>LIST MIDI_INSTRUMENT_MAPS  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>The sampler will answer by returning a comma separated list  
                             with all MIDI instrument maps' numerical IDs.  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Example:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "LIST MIDI_INSTRUMENT_MAPS"  
 </p>  
 <p>S: "0,1,5,12"  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="GET MIDI_INSTRUMENT_MAP INFO"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.7.5"></a><h3>6.7.5.&nbsp;  
 Getting MIDI instrument map information</h3>  
   
 <p>The front-end can ask for the current settings of a MIDI  
                     instrument map by sending the following command:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>GET MIDI_INSTRUMENT_MAP INFO &lt;map&gt;  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Where &lt;map&gt; is the numerical ID of the map the  
                     front-end is interested in as returned by the  
                     <a class='info' href='#LIST MIDI_INSTRUMENT_MAPS'>"LIST MIDI_INSTRUMENT_MAPS"<span> (</span><span class='info'>Getting all created MIDI instrument maps</span><span>)</span></a>  
                     command.  
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>LinuxSampler will answer by sending a &lt;CRLF&gt; separated list.  
                             Each answer line begins with the settings category name  
                             followed by a colon and then a space character &lt;SP&gt; and finally  
                             the info character string to that setting category. At the  
                             moment the following categories are defined:  
 </p>  
 <p>  
                                 </p>  
 <blockquote class="text">  
 <p>NAME -  
                                         </p>  
 <blockquote class="text">  
 <p>custom name of the given map,  
                                             which does not have to be unique  
                                             (note that this character string may contain  
                                              <a class='info' href='#character_set'>escape sequences<span> (</span><span class='info'>Character Set and Escape Sequences</span><span>)</span></a>)  
 </p>  
 </blockquote>  
                                       
   
 <p>DEFAULT -  
                                         </p>  
 <blockquote class="text">  
 <p>either true or false,  
                                             defines whether this map is the default map  
 </p>  
 </blockquote>  
                                       
   
 </blockquote>  
                               
   
 </blockquote><p>  
                       
 </p>  
 <p>The mentioned fields above don't have to be in particular order.  
 </p>  
 <p>Example:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "GET MIDI_INSTRUMENT_MAP INFO 0"  
 </p>  
 <p>S: "NAME: Standard Map"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"DEFAULT: true"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"."  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="SET MIDI_INSTRUMENT_MAP NAME"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.7.6"></a><h3>6.7.6.&nbsp;  
 Renaming a MIDI instrument map</h3>  
   
 <p>The front-end can alter the custom name of a MIDI  
                     instrument map by sending the following command:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>SET MIDI_INSTRUMENT_MAP NAME &lt;map&gt; &lt;name&gt;  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Where &lt;map&gt; is the numerical ID of the map and  
                     &lt;name&gt; the new custom name of the map, which does not  
                     have to be unique (name MUST be encapsulated into apostrophes  
                     and supports escape sequences as described in chapter  
                     "<a class='info' href='#character_set'>Character Set and Escape Sequences<span> (</span><span class='info'>Character Set and Escape Sequences</span><span>)</span></a>").  
                       
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>"OK" -  
                                 </p>  
 <blockquote class="text">  
 <p>on success  
 </p>  
 </blockquote>  
                               
   
 <p>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" -  
                                 </p>  
 <blockquote class="text">  
 <p>in case the given map does not exist  
 </p>  
 </blockquote>  
                               
   
 </blockquote><p>  
                       
 </p>  
 <p>Example:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "SET MIDI_INSTRUMENT_MAP NAME 0 'Foo instruments'"  
 </p>  
 <p>S: "OK"  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="MAP MIDI_INSTRUMENT"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.7.7"></a><h3>6.7.7.&nbsp;  
 Create or replace a MIDI instrument map entry</h3>  
   
 <p>The front-end can create a new or replace an existing entry  
                     in a sampler's MIDI instrument map by sending the following  
                     command:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>MAP MIDI_INSTRUMENT [NON_MODAL] &lt;map&gt;  
                             &lt;midi_bank&gt; &lt;midi_prog&gt; &lt;engine_name&gt;  
                             &lt;filename&gt; &lt;instrument_index&gt; &lt;volume_value&gt;  
                             [&lt;instr_load_mode&gt;] [&lt;name&gt;]  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Where &lt;map&gt; is the numeric ID of the map to alter,  
                     &lt;midi_bank&gt; is an integer value between  
                     0..16383 reflecting the MIDI bank select index,  
                     &lt;midi_prog&gt; an  
                     integer value between 0..127 reflecting the MIDI program change  
                     index, &lt;engine_name&gt; a sampler engine name as returned by  
                     the <a class='info' href='#LIST AVAILABLE_ENGINES'>"LIST AVAILABLE_ENGINES"<span> (</span><span class='info'>Getting all available engines</span><span>)</span></a>  
                     command (not encapsulated into apostrophes), &lt;filename&gt; the name  
                     of the instrument's file to be deployed (encapsulated into apostrophes,  
                     supporting escape sequences as described in chapter  
                     "<a class='info' href='#character_set'>Character Set and Escape Sequences<span> (</span><span class='info'>Character Set and Escape Sequences</span><span>)</span></a>"),  
                     &lt;instrument_index&gt; the index (integer value) of the instrument  
                     within the given file, &lt;volume_value&gt; reflects the master  
                     volume of the instrument as optionally dotted number (where a  
                     value &lt; 1.0 means attenuation and a value > 1.0 means  
                     amplification). This parameter easily allows to adjust the  
                     volume of all intruments within a custom instrument map  
                     without having to adjust their instrument files. The  
                     OPTIONAL &lt;instr_load_mode&gt; argument defines the life  
                     time of the instrument, that is when the instrument should  
                     be loaded, when freed and has exactly the following  
                     possibilities:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>"ON_DEMAND" -  
                                 </p>  
 <blockquote class="text">  
 <p>The instrument will be loaded when needed,  
                                     that is when demanded by at least one sampler  
                                     channel. It will immediately be freed from memory  
                                     when not needed by any sampler channel anymore.  
 </p>  
 </blockquote>  
                               
   
 <p>"ON_DEMAND_HOLD" -  
                                 </p>  
 <blockquote class="text">  
 <p>The instrument will be loaded when needed,  
                                     that is when demanded by at least one sampler  
                                     channel. It will be kept in memory even when  
                                     not needed by any sampler channel anymore.  
                                     Instruments with this mode are only freed  
                                     when the sampler is reset or all mapping  
                                     entries with this mode (and respective  
                                     instrument) are explicitly changed to  
                                     "ON_DEMAND" and no sampler channel is using  
                                     the instrument anymore.  
 </p>  
 </blockquote>  
                               
   
 <p>"PERSISTENT" -  
                                 </p>  
 <blockquote class="text">  
 <p>The instrument will immediately be loaded  
                                     into memory when this mapping  
                                     command is sent and the instrument is kept all  
                                     the time. Instruments with this mode are  
                                     only freed when the sampler is reset or all  
                                     mapping entries with this mode (and  
                                     respective instrument) are explicitly  
                                     changed to "ON_DEMAND" and no sampler  
                                     channel is using the instrument anymore.  
 </p>  
 </blockquote>  
                               
   
 <p>not supplied -  
                                 </p>  
 <blockquote class="text">  
 <p>In case there is no &lt;instr_load_mode&gt;  
                                     argument given, it will be up to the  
                                     InstrumentManager to decide which mode to use.  
                                     Usually it will use "ON_DEMAND" if an entry  
                                     for the given instrument does not exist in  
                                     the InstrumentManager's list yet, otherwise  
                                     if an entry already exists, it will simply  
                                     stick with the mode currently reflected by  
                                     the already existing entry, that is it will  
                                     not change the mode.  
 </p>  
 </blockquote>  
                               
   
 </blockquote><p>  
                       
 </p>  
 <p>  
                     The &lt;instr_load_mode&gt; argument thus allows to define an  
                     appropriate strategy (low memory consumption vs. fast  
                     instrument switching) for each instrument individually. Note, the  
                     following restrictions apply to this argument: "ON_DEMAND_HOLD" and  
                     "PERSISTENT" have to be supported by the respective sampler engine  
                     (which is technically the case when the engine provides an  
                     InstrumentManager for its format). If this is not the case the  
                     argument will automatically fall back to the default value  
                     "ON_DEMAND". Also the load mode of one instrument may  
                     automatically change the laod mode of other instrument(s), i.e.  
                     because the instruments are part of the same file and the  
                     engine does not allow a way to manage load modes for them  
                     individually. Due to this, in case the frontend shows the  
                     load modes of entries, the frontend should retrieve the actual  
                     mode by i.e. sending  
                     <a class='info' href='#GET MIDI_INSTRUMENT INFO'>"GET MIDI_INSTRUMENT INFO"<span> (</span><span class='info'>Get current settings of MIDI instrument map entry</span><span>)</span></a>  
                     command(s). Finally the OPTIONAL &lt;name&gt; argument allows to set a custom name  
                     (encapsulated into apostrophes, supporting escape sequences as described in chapter  
                     "<a class='info' href='#character_set'>Character Set and Escape Sequences<span> (</span><span class='info'>Character Set and Escape Sequences</span><span>)</span></a>") for the  
                     mapping entry, useful for frontends for displaying an appropriate name for  
                     mapped instruments (using  
                     <a class='info' href='#GET MIDI_INSTRUMENT INFO'>"GET MIDI_INSTRUMENT INFO"<span> (</span><span class='info'>Get current settings of MIDI instrument map entry</span><span>)</span></a>).  
                       
 </p>  
 <p>  
                     By default, "MAP MIDI_INSTRUMENT" commands block until the mapping is  
                     completely established in the sampler. The OPTIONAL "NON_MODAL" argument  
                     however causes the respective "MAP MIDI_INSTRUMENT" command to return  
                     immediately, that is to let the sampler establish the mapping in the  
                     background. So this argument might be especially useful for mappings with  
                     a "PERSISTENT" type, because these have to load the respective instruments  
                     immediately and might thus block for a very long time. It is recommended  
                     however to use the OPTIONAL "NON_MODAL" argument only if really necessary,  
                     because it has the following drawbacks: as "NON_MODAL" instructions return  
                     immediately, they may not necessarily return an error i.e. when the given  
                     instrument file turns out to be corrupt, beside that subsequent commands  
                     in a LSCP instruction sequence might fail, because mandatory mappings are  
                     not yet completed.  
                       
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>"OK" -  
                                 </p>  
 <blockquote class="text">  
 <p>usually  
 </p>  
 </blockquote>  
                               
   
 <p>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" -  
                                 </p>  
 <blockquote class="text">  
 <p>when the given map or engine does not exist or a value  
                                     is out of range  
 </p>  
 </blockquote>  
                               
   
 </blockquote><p>  
                       
 </p>  
 <p>Examples:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "MAP MIDI_INSTRUMENT 0 3 0 gig '/usr/share/Steinway D.gig' 0 0.8 PERSISTENT"  
 </p>  
 <p>S: "OK"  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "MAP MIDI_INSTRUMENT 0 4 50 gig '/home/john/foostrings.gig' 7 1.0"  
 </p>  
 <p>S: "OK"  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "MAP MIDI_INSTRUMENT 0 0 0 gig '/usr/share/piano.gig' 0 1.0 'Normal Piano'"  
 </p>  
 <p>S: "OK"  
 </p>  
 <p>C: "MAP MIDI_INSTRUMENT 0 1 0 gig '/usr/share/piano.gig' 0 0.25 'Silent Piano'"  
 </p>  
 <p>S: "OK"  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "MAP MIDI_INSTRUMENT NON_MODAL 1 8 120 gig '/home/joe/foodrums.gig' 0 1.0 PERSISTENT 'Foo Drumkit'"  
 </p>  
 <p>S: "OK"  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="GET MIDI_INSTRUMENTS"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.7.8"></a><h3>6.7.8.&nbsp;  
 Getting amount of MIDI instrument map entries</h3>  
   
 <p>The front-end can query the amount of currently existing  
                     entries in a MIDI instrument map by sending the following  
                     command:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>GET MIDI_INSTRUMENTS &lt;map&gt;  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>The front-end can query the amount of currently existing  
                     entries in all MIDI instrument maps by sending the following  
                     command:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>GET MIDI_INSTRUMENTS ALL  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>The sampler will answer by sending the current number of  
                             entries in the MIDI instrument map(s).  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Example:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "GET MIDI_INSTRUMENTS 0"  
 </p>  
 <p>S: "234"  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "GET MIDI_INSTRUMENTS ALL"  
 </p>  
 <p>S: "954"  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="LIST MIDI_INSTRUMENTS"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.7.9"></a><h3>6.7.9.&nbsp;  
 Getting indeces of all entries of a MIDI instrument map</h3>  
   
 <p>The front-end can query a list of all currently existing  
                     entries in a certain MIDI instrument map by sending the following  
                     command:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>LIST MIDI_INSTRUMENTS &lt;map&gt;  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Where &lt;map&gt; is the numeric ID of the MIDI instrument map.  
 </p>  
 <p>The front-end can query a list of all currently existing  
                     entries of all MIDI instrument maps by sending the following  
                     command:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>LIST MIDI_INSTRUMENTS ALL  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>The sampler will answer by sending a comma separated  
                             list of map ID - MIDI bank - MIDI program triples, where  
                             each triple is encapsulated into curly braces. The  
                             list is returned in one single line. Each triple  
                             just reflects the key of the respective map entry,  
                             thus subsequent  
                             <a class='info' href='#GET MIDI_INSTRUMENT INFO'>"GET MIDI_INSTRUMENT INFO"<span> (</span><span class='info'>Get current settings of MIDI instrument map entry</span><span>)</span></a>  
                             command(s) are necessary to retrieve detailed informations  
                             about each entry.  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Example:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "LIST MIDI_INSTRUMENTS 0"  
 </p>  
 <p>S: "{0,0,0},{0,0,1},{0,0,3},{0,1,4},{1,127,127}"  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="UNMAP MIDI_INSTRUMENT"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.7.10"></a><h3>6.7.10.&nbsp;  
 Remove an entry from the MIDI instrument map</h3>  
   
 <p>The front-end can delete an entry from a MIDI instrument  
                     map by sending the following command:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>UNMAP MIDI_INSTRUMENT &lt;map&gt; &lt;midi_bank&gt; &lt;midi_prog&gt;  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>  
                     Where &lt;map&gt; is the numeric ID of the MIDI instrument map,  
                     &lt;midi_bank&gt; is an integer value between 0..16383  
                     reflecting the MIDI bank value and  
                     &lt;midi_prog&gt; an integer value between  
                     0..127 reflecting the MIDI program value of the map's entrie's key  
                     index triple.  
                       
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>"OK" -  
                                 </p>  
 <blockquote class="text">  
 <p>usually  
 </p>  
 </blockquote>  
                               
   
 <p>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" -  
                                 </p>  
 <blockquote class="text">  
 <p>when index out of bounds  
 </p>  
 </blockquote>  
                               
   
 </blockquote><p>  
                       
 </p>  
 <p>Example:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "UNMAP MIDI_INSTRUMENT 0 2 127"  
 </p>  
 <p>S: "OK"  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="GET MIDI_INSTRUMENT INFO"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.7.11"></a><h3>6.7.11.&nbsp;  
 Get current settings of MIDI instrument map entry</h3>  
   
 <p>The front-end can retrieve the current settings of a certain  
                     instrument map entry by sending the following command:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>GET MIDI_INSTRUMENT INFO &lt;map&gt; &lt;midi_bank&gt; &lt;midi_prog&gt;  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>  
                     Where &lt;map&gt; is the numeric ID of the MIDI instrument map,  
                     &lt;midi_bank&gt; is an integer value between 0..16383  
                     reflecting the MIDI bank value, &lt;midi_bank&gt;  
                     and &lt;midi_prog&gt; an integer value between  
                     0..127 reflecting the MIDI program value of the map's entrie's key  
                     index triple.  
                       
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>LinuxSampler will answer by sending a &lt;CRLF&gt;  
                             separated list. Each answer line begins with the  
                             information category name followed by a colon and then  
                             a space character &lt;SP&gt; and finally the info  
                             character string to that info category. At the moment  
                             the following categories are defined:  
 </p>  
 <p>"NAME" -  
                                 </p>  
 <blockquote class="text">  
 <p>Name for this MIDI instrument map entry (if defined).  
                                     This name shall be used by frontends for displaying a  
                                     name for this mapped instrument. It can be set and  
                                     changed with the  
                                     <a class='info' href='#MAP MIDI_INSTRUMENT'>"MAP MIDI_INSTRUMENT"<span> (</span><span class='info'>Create or replace a MIDI instrument map entry</span><span>)</span></a>  
                                     command and does not have to be unique.  
                                     (note that this character string may contain  
                                     <a class='info' href='#character_set'>escape sequences<span> (</span><span class='info'>Character Set and Escape Sequences</span><span>)</span></a>)  
 </p>  
 </blockquote>  
                               
   
 <p>"ENGINE_NAME" -  
                                 </p>  
 <blockquote class="text">  
 <p>Name of the engine to be deployed for this  
                                     instrument.  
 </p>  
 </blockquote>  
                               
   
 <p>"INSTRUMENT_FILE" -  
                                 </p>  
 <blockquote class="text">  
 <p>File name of the instrument  
                                     (note that this path may contain  
                                     <a class='info' href='#character_set'>escape sequences<span> (</span><span class='info'>Character Set and Escape Sequences</span><span>)</span></a>).  
 </p>  
 </blockquote>  
                               
   
 <p>"INSTRUMENT_NR" -  
                                 </p>  
 <blockquote class="text">  
 <p>Index of the instrument within the file.  
 </p>  
 </blockquote>  
                               
   
 <p>"INSTRUMENT_NAME" -  
                                 </p>  
 <blockquote class="text">  
 <p>Name of the loaded instrument as reflected by its file.  
                                     In contrast to the "NAME" field, the "INSTRUMENT_NAME" field  
                                     cannot be changed (note that this character string may contain  
                                     <a class='info' href='#character_set'>escape sequences<span> (</span><span class='info'>Character Set and Escape Sequences</span><span>)</span></a>).  
 </p>  
 </blockquote>  
                               
   
 <p>"LOAD_MODE" -  
                                 </p>  
 <blockquote class="text">  
 <p>Life time of instrument  
                                     (see <a class='info' href='#MAP MIDI_INSTRUMENT'>"MAP MIDI_INSTRUMENT"<span> (</span><span class='info'>Create or replace a MIDI instrument map entry</span><span>)</span></a> for details about this setting).  
 </p>  
 </blockquote>  
                               
   
 <p>"VOLUME" -  
                                 </p>  
 <blockquote class="text">  
 <p>master volume of the instrument as optionally  
                                     dotted number (where a value &lt; 1.0 means attenuation  
                                     and a value > 1.0 means amplification)  
 </p>  
 </blockquote>  
                               
   
 <p>The mentioned fields above don't have to be in particular order.  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Example:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "GET MIDI_INSTRUMENT INFO 1 45 120"  
 </p>  
 <p>S: "NAME: Drums for Foo Song"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"ENGINE_NAME: GigEngine"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"INSTRUMENT_FILE: /usr/share/joesdrumkit.gig"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"INSTRUMENT_NR: 0"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"INSTRUMENT_NAME: Joe's Drumkit"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"LOAD_MODE: PERSISTENT"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"VOLUME: 1.0"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"."  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="CLEAR MIDI_INSTRUMENTS"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.7.12"></a><h3>6.7.12.&nbsp;  
 Clear MIDI instrument map</h3>  
   
 <p>The front-end can clear a whole MIDI instrument map, that  
                     is delete all its entries by sending the following command:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>CLEAR MIDI_INSTRUMENTS &lt;map&gt;  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Where &lt;map&gt; is the numeric ID of the map to clear.  
 </p>  
 <p>The front-end can clear all MIDI instrument maps, that  
                     is delete all entries of all maps by sending the following  
                     command:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>CLEAR MIDI_INSTRUMENTS ALL  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>The command "CLEAR MIDI_INSTRUMENTS ALL" does not delete the  
                     maps, only their entries, thus the map's settings like  
                     custom name will be preservevd.  
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>"OK" -  
                                 </p>  
 <blockquote class="text">  
 <p>always  
 </p>  
 </blockquote>  
                               
   
 </blockquote><p>  
                       
 </p>  
 <p>Examples:  
 </p>  
 <p>  
                        </p>  
 <blockquote class="text">  
 <p>C: "CLEAR MIDI_INSTRUMENTS 0"  
 </p>  
 <p>S: "OK"  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>  
                        </p>  
 <blockquote class="text">  
 <p>C: "CLEAR MIDI_INSTRUMENTS ALL"  
 </p>  
 <p>S: "OK"  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="Managing Instruments Database"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.8"></a><h3>6.8.&nbsp;  
 Managing Instruments Database</h3>  
   
 <p>The following commands describe how to use and manage  
                 the instruments database.  
 </p>  
 <p>Notice:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>All command arguments representing a path or  
                             instrument/directory name support escape sequences as described in chapter  
                             "<a class='info' href='#character_set'>Character Set and Escape Sequences<span> (</span><span class='info'>Character Set and Escape Sequences</span><span>)</span></a>".  
                               
 </p>  
 <p>All occurrences of a forward slash in instrument and directory  
                                names are escaped with its hex (\x2f) or octal (\057) escape sequence.  
                               
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="ADD DB_INSTRUMENT_DIRECTORY"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.8.1"></a><h3>6.8.1.&nbsp;  
 Creating a new instrument directory</h3>  
   
 <p>The front-end can add a new instrument directory to the  
                     instruments database by sending the following command:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>ADD DB_INSTRUMENT_DIRECTORY &lt;dir&gt;  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Where &lt;dir&gt; is the absolute path name of the directory  
                     to be created (encapsulated into apostrophes).  
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>"OK" -  
                                 </p>  
 <blockquote class="text">  
 <p>on success  
 </p>  
 </blockquote>  
                               
   
 <p>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" -  
                                 </p>  
 <blockquote class="text">  
 <p>when the directory could not be created, which  
                                     can happen if the directory already exists or the  
                                     name contains not allowed symbols  
 </p>  
 </blockquote>  
                               
   
 </blockquote><p>  
                       
 </p>  
 <p>Examples:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "ADD DB_INSTRUMENT_DIRECTORY '/Piano Collection'"  
 </p>  
 <p>S: "OK"  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="REMOVE DB_INSTRUMENT_DIRECTORY"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.8.2"></a><h3>6.8.2.&nbsp;  
 Deleting an instrument directory</h3>  
   
 <p>The front-end can delete a particular instrument directory  
                     from the instruments database by sending the following command:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>REMOVE DB_INSTRUMENT_DIRECTORY [FORCE] &lt;dir&gt;  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Where &lt;dir&gt; is the absolute path name of the directory  
                     to delete. The optional FORCE argument can be used to  
                     force the deletion of a non-empty directory and all its content.  
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>"OK" -  
                                 </p>  
 <blockquote class="text">  
 <p>if the directory is deleted successfully  
 </p>  
 </blockquote>  
                               
   
 <p>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" -  
                                 </p>  
 <blockquote class="text">  
 <p>if the given directory does not exist, or  
                                     if trying to delete a non-empty directory,  
                                     without using the FORCE argument.  
 </p>  
 </blockquote>  
                               
   
 </blockquote><p>  
                       
 </p>  
 <p>Examples:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "REMOVE DB_INSTRUMENT_DIRECTORY FORCE '/Piano Collection'"  
 </p>  
 <p>S: "OK"  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="GET DB_INSTRUMENT_DIRECTORIES"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.8.3"></a><h3>6.8.3.&nbsp;  
 Getting amount of instrument directories</h3>  
   
 <p>The front-end can retrieve the current amount of  
                     directories in a specific directory by sending the following command:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>GET DB_INSTRUMENT_DIRECTORIES [RECURSIVE] &lt;dir&gt;  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Where &lt;dir&gt; should be replaced by the absolute path  
                     name of the directory. If RECURSIVE is specified, the number of  
                     all directories, including those located in subdirectories of the  
                     specified directory, will be returned.  
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>The current number of instrument directories  
                             in the specified directory.  
 </p>  
 <p>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" -  
                                 </p>  
 <blockquote class="text">  
 <p>if the given directory does not exist.  
 </p>  
 </blockquote>  
                               
   
 </blockquote><p>  
                       
 </p>  
 <p>Example:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "GET DB_INSTRUMENT_DIRECTORIES '/'"  
 </p>  
 <p>S: "2"  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="LIST DB_INSTRUMENT_DIRECTORIES"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.8.4"></a><h3>6.8.4.&nbsp;  
 Listing all directories in specific directory</h3>  
   
 <p>The front-end can retrieve the current list of directories  
                     in specific directory by sending the following command:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>LIST DB_INSTRUMENT_DIRECTORIES [RECURSIVE] &lt;dir&gt;  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Where &lt;dir&gt; should be replaced by the absolute path  
                     name of the directory. If RECURSIVE is specified, the absolute path names  
                     of all directories, including those located in subdirectories of the  
                     specified directory, will be returned.  
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>A comma separated list of all instrument directories  
                             (encapsulated into apostrophes) in the specified directory.  
 </p>  
 <p>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" -  
                                 </p>  
 <blockquote class="text">  
 <p>if the given directory does not exist.  
 </p>  
 </blockquote>  
                               
   
 </blockquote><p>  
                       
 </p>  
 <p>Example:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "LIST DB_INSTRUMENT_DIRECTORIES '/'"  
 </p>  
 <p>S: "'Piano Collection','Percussion Collection'"  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "LIST DB_INSTRUMENT_DIRECTORIES RECURSIVE '/'"  
 </p>  
 <p>S: "'/Piano Collection','/Piano Collection/Acoustic','/Piano Collection/Acoustic/New','/Percussion Collection'"  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="GET DB_INSTRUMENT_DIRECTORY INFO"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.8.5"></a><h3>6.8.5.&nbsp;  
 Getting instrument directory information</h3>  
   
 <p>The front-end can ask for the current settings of an  
                     instrument directory by sending the following command:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>GET DB_INSTRUMENT_DIRECTORY INFO &lt;dir&gt;  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Where &lt;dir&gt; should be replaced by the absolute path  
                     name of the directory the front-end is interested in.  
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>LinuxSampler will answer by sending a &lt;CRLF&gt; separated list.  
                             Each answer line begins with the settings category name  
                             followed by a colon and then a space character &lt;SP&gt; and finally  
                             the info character string to that setting category. At the  
                             moment the following categories are defined:  
 </p>  
 <p>  
                                 </p>  
 <blockquote class="text">  
 <p>DESCRIPTION -  
                                         </p>  
 <blockquote class="text">  
 <p>A brief description of the directory content.  
                                             Note that the character string may contain  
                                             <a class='info' href='#character_set'>escape sequences<span> (</span><span class='info'>Character Set and Escape Sequences</span><span>)</span></a>.  
 </p>  
 </blockquote>  
                                       
   
 <p>CREATED -  
                                         </p>  
 <blockquote class="text">  
 <p>The creation date and time of the directory,  
                                             represented in "YYYY-MM-DD HH:MM:SS" format  
 </p>  
 </blockquote>  
                                       
   
 <p>MODIFIED -  
                                         </p>  
 <blockquote class="text">  
 <p>The date and time of the last modification of the  
                                             directory, represented in "YYYY-MM-DD HH:MM:SS" format  
 </p>  
 </blockquote>  
                                       
   
 </blockquote>  
                               
   
 </blockquote><p>  
                       
 </p>  
 <p>The mentioned fields above don't have to be in particular order.  
 </p>  
 <p>Example:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "GET DB_INSTRUMENT_DIRECTORY INFO '/Piano Collection'"  
 </p>  
 <p>S: "DESCRIPTION: Piano collection of instruments in GigaSampler format."  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"CREATED: 2007-02-05 10:23:12"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"MODIFIED: 2007-04-07 12:50:21"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"."  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="SET DB_INSTRUMENT_DIRECTORY NAME"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.8.6"></a><h3>6.8.6.&nbsp;  
 Renaming an instrument directory</h3>  
   
 <p>The front-end can alter the name of a specific  
                     instrument directory by sending the following command:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>SET DB_INSTRUMENT_DIRECTORY NAME &lt;dir&gt; &lt;name&gt;  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Where &lt;dir&gt; is the absolute path name of the directory and  
                     &lt;name&gt; is the new name for that directory.  
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>"OK" -  
                                 </p>  
 <blockquote class="text">  
 <p>on success  
 </p>  
 </blockquote>  
                               
   
 <p>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" -  
                                 </p>  
 <blockquote class="text">  
 <p>in case the given directory does not exists,  
                                     or if a directory with name equal to the new  
                                     name already exists.  
 </p>  
 </blockquote>  
                               
   
 </blockquote><p>  
                       
 </p>  
 <p>Example:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "SET DB_INSTRUMENT_DIRECTORY NAME '/Piano Collection/Acustic' 'Acoustic'"  
 </p>  
 <p>S: "OK"  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="MOVE DB_INSTRUMENT_DIRECTORY"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.8.7"></a><h3>6.8.7.&nbsp;  
 Moving an instrument directory</h3>  
   
 <p>The front-end can move a specific  
                     instrument directory by sending the following command:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>MOVE DB_INSTRUMENT_DIRECTORY &lt;dir&gt; &lt;dst&gt;  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Where &lt;dir&gt; is the absolute path name of the directory  
                     to move and &lt;dst&gt; is the location where the directory will  
                     be moved to.  
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>"OK" -  
                                 </p>  
 <blockquote class="text">  
 <p>on success  
 </p>  
 </blockquote>  
                               
   
 <p>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" -  
                                 </p>  
 <blockquote class="text">  
 <p>in case a given directory does not exists,  
                                     or if a directory with name equal to the name  
                                     of the specified directory already exists in  
                                     the destination directory. Error is also thrown  
                                     when trying to move a directory to a subdirectory  
                                     of itself.  
 </p>  
 </blockquote>  
                               
   
 </blockquote><p>  
                       
 </p>  
 <p>Example:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "MOVE DB_INSTRUMENT_DIRECTORY '/Acoustic' '/Piano Collection/Acoustic'"  
 </p>  
 <p>S: "OK"  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="COPY DB_INSTRUMENT_DIRECTORY"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.8.8"></a><h3>6.8.8.&nbsp;  
 Copying instrument directories</h3>  
   
 <p>The front-end can copy a specific  
                     instrument directory by sending the following command:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>COPY DB_INSTRUMENT_DIRECTORY &lt;dir&gt; &lt;dst&gt;  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Where &lt;dir&gt; is the absolute path name of the directory  
                     to copy and &lt;dst&gt; is the location where the directory will  
                     be copied to.  
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>"OK" -  
                                 </p>  
 <blockquote class="text">  
 <p>on success  
 </p>  
 </blockquote>  
                               
   
 <p>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" -  
                                 </p>  
 <blockquote class="text">  
 <p>in case a given directory does not exists,  
                                     or if a directory with name equal to the name  
                                     of the specified directory already exists in  
                                     the destination directory. Error is also thrown  
                                     when trying to copy a directory to a subdirectory  
                                     of itself.  
 </p>  
 </blockquote>  
                               
   
 </blockquote><p>  
                       
 </p>  
 <p>Example:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "COPY DB_INSTRUMENT_DIRECTORY '/Piano Collection/Acoustic' '/Acoustic/Pianos'"  
 </p>  
 <p>S: "OK"  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="SET DB_INSTRUMENT_DIRECTORY DESCRIPTION"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.8.9"></a><h3>6.8.9.&nbsp;  
 Changing the description of directory</h3>  
   
 <p>The front-end can alter the description of a specific  
                     instrument directory by sending the following command:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>SET DB_INSTRUMENT_DIRECTORY DESCRIPTION &lt;dir&gt; &lt;desc&gt;  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Where &lt;dir&gt; is the absolute path name of the directory and  
                     &lt;desc&gt; is the new description for the directory  
                     (encapsulated into apostrophes, supporting escape sequences as described in chapter  
                     "<a class='info' href='#character_set'>Character Set and Escape Sequences<span> (</span><span class='info'>Character Set and Escape Sequences</span><span>)</span></a>").  
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>"OK" -  
                                 </p>  
 <blockquote class="text">  
 <p>on success  
 </p>  
 </blockquote>  
                               
   
 <p>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" -  
                                 </p>  
 <blockquote class="text">  
 <p>in case the given directory does not exists.  
 </p>  
 </blockquote>  
                               
   
 </blockquote><p>  
                       
 </p>  
 <p>Example:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "SET DB_INSTRUMENT_DIRECTORY DESCRIPTION '/Piano Collection' 'A collection of piano instruments in various format.'"  
 </p>  
 <p>S: "OK"  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="FIND DB_INSTRUMENT_DIRECTORIES"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.8.10"></a><h3>6.8.10.&nbsp;  
 Finding directories</h3>  
   
 <p>The front-end can search for directories  
                     in specific directory by sending the following command:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>FIND DB_INSTRUMENT_DIRECTORIES [NON_RECURSIVE] &lt;dir&gt; &lt;criteria-list&gt;  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Where &lt;dir&gt; should be replaced by the absolute path  
                     name of the directory to search in. If NON_RECURSIVE is specified, the  
                     directories located in subdirectories of the specified directory will not  
                     be searched. &lt;criteria-list&gt; is a list of search criterias  
                     in form of "key1=val1 key2=val2 ...". The following criterias are  
                     allowed:  
 </p>  
 <p>  
                         
 <p>NAME='&lt;search-string&gt;'  
                           </p>  
 <blockquote class="text">  
 <p>Restricts the search to directories, which names  
                               satisfy the supplied search string (encapsulated into apostrophes,  
                               supporting escape sequences as described in chapter  
                               "<a class='info' href='#character_set'>Character Set and Escape Sequences<span> (</span><span class='info'>Character Set and Escape Sequences</span><span>)</span></a>").  
 </p>  
 </blockquote><p>  
                         
 </p>  
   
                         
 <p>CREATED='[&lt;date-after&gt;]..[&lt;date-before&gt;]'  
                           </p>  
 <blockquote class="text">  
 <p>Restricts the search to directories, which creation  
                               date satisfies the specified period, where &lt;date-after&gt;  
                               and &lt;date-before&gt; are in "YYYY-MM-DD HH:MM:SS" format.  
                               If &lt;date-after&gt; is omitted the search is restricted to  
                               directories created before &lt;date-before&gt;. If  
                               &lt;date-before&gt; is omitted, the search is restricted  
                               to directories created after &lt;date-after&gt;.  
 </p>  
 </blockquote><p>  
                         
 </p>  
   
                         
 <p>MODIFIED='[&lt;date-after&gt;]..[&lt;date-before&gt;]'  
                           </p>  
 <blockquote class="text">  
 <p>Restricts the search to directories, which  
                               date of last modification satisfies the specified period, where  
                               &lt;date-after&gt; and &lt;date-before&gt; are in "YYYY-MM-DD HH:MM:SS"  
                               format. If &lt;date-after&gt; is omitted the search is restricted to  
                               directories, which are last modified before &lt;date-before&gt;. If  
                               &lt;date-before&gt; is omitted, the search is restricted to directories,  
                               which are last modified after &lt;date-after&gt;.  
 </p>  
 </blockquote><p>  
                         
 </p>  
   
                         
 <p>DESCRIPTION='&lt;search-string&gt;'  
                           </p>  
 <blockquote class="text">  
 <p>Restricts the search to directories with description  
                               that satisfies the supplied search string  
                               (encapsulated into apostrophes, supporting escape  
                               sequences as described in chapter  
                               "<a class='info' href='#character_set'>Character Set and Escape Sequences<span> (</span><span class='info'>Character Set and Escape Sequences</span><span>)</span></a>").  
 </p>  
 </blockquote><p>  
                         
 </p>  
                       
   
 <p>Where &lt;search-string&gt; is either a regular expression, or a  
                     word list separated with spaces for OR search and with '+' for AND search.  
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>A comma separated list with the absolute path names (encapsulated into  
                             apostrophes) of all directories in the specified directory that satisfy  
                             the supplied search criterias.  
 </p>  
 <p>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" -  
                                 </p>  
 <blockquote class="text">  
 <p>if the given directory does not exist.  
 </p>  
 </blockquote>  
                               
   
 </blockquote><p>  
                       
 </p>  
 <p>Example:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "FIND DB_INSTRUMENT_DIRECTORIES '/' NAME='Piano'"  
 </p>  
 <p>S: "'/Piano Collection'"  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "FIND DB_INSTRUMENT_DIRECTORIES '/' CREATED='..2007-04-01 09:30:13'"  
 </p>  
 <p>S: "'/Piano Collection','/Percussions'"  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="ADD DB_INSTRUMENTS"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.8.11"></a><h3>6.8.11.&nbsp;  
 Adding instruments to the instruments database</h3>  
   
 <p>The front-end can add one or more instruments  
                     to the instruments database by sending the following command:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>ADD DB_INSTRUMENTS [NON_MODAL] [&lt;mode&gt;[ FILE_AS_DIR]] &lt;db_dir&gt; &lt;file_path&gt; [&lt;instr_index&gt;]  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Where &lt;db_dir&gt; is the absolute path name of a directory  
                     (encapsulated into apostrophes) in the instruments database in which  
                     only the new instruments (that are not already in the database) will  
                     be added, &lt;file_path&gt; is the absolute path name of a file or  
                     directory in the file system (encapsulated into apostrophes). In case  
                     an instrument file is supplied, only the instruments in the specified  
                     file will be added to the instruments database. If the optional  
                     &lt;instr_index&gt; (the index of the instrument within the given file)  
                     is supplied too, then only the specified instrument will be added.  
                     In case a directory is supplied, the instruments in that directory  
                     will be added. The OPTIONAL &lt;mode&gt; argument is only applied  
                     when a directory is provided as &lt;file_path&gt; and specifies how the  
                     scanning will be done and has exactly the following possibilities:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>"RECURSIVE" -  
                                 </p>  
 <blockquote class="text">  
 <p>All instruments will be processed, including those  
                                     in the subdirectories, and the respective subdirectory  
                                     tree structure will be recreated in the instruments  
                                     database  
 </p>  
 </blockquote>  
                               
   
 <p>"NON_RECURSIVE" -  
                                 </p>  
 <blockquote class="text">  
 <p>Only the instruments in the specified directory  
                                     will be added, the instruments in the subdirectories  
                                     will not be processed.  
 </p>  
 </blockquote>  
                               
   
 <p>"FLAT" -  
                                 </p>  
 <blockquote class="text">  
 <p>All instruments will be processed, including those  
                                     in the subdirectories, but the respective subdirectory  
                                     structure will not be recreated in the instruments  
                                     database. All instruments will be added directly in  
                                     the specified database directory.  
 </p>  
 </blockquote>  
                               
   
 </blockquote><p>  
                       
 </p>  
 <p> If FILE_AS_DIR argument is supplied, all instruments in an instrument  
                  file will be added to a separate directory in the instruments database, which  
                  name will be the name of the instrument file with the file extension stripped off.  
                   
 </p>  
 <p>The difference between regular and NON_MODAL versions of the command  
                     is that the regular command returns when the scanning is finished  
                     while NON_MODAL version returns immediately and a background process is launched.  
                     The <a class='info' href='#GET DB_INSTRUMENTS_JOB INFO'>GET DB_INSTRUMENTS_JOB INFO<span> (</span><span class='info'>Getting job status information</span><span>)</span></a>  
                     command can be used to monitor the scanning progress.  
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>"OK" -  
                                 </p>  
 <blockquote class="text">  
 <p>on success when NON_MODAL is not supplied  
 </p>  
 </blockquote>  
                               
   
 <p>"OK[&lt;job-id&gt;]" -  
                                 </p>  
 <blockquote class="text">  
 <p>on success when NON_MODAL is supplied, where &lt;job-id&gt;  
                                     is a numerical ID used to obtain status information about the job progress.  
                                     See <a class='info' href='#GET DB_INSTRUMENTS_JOB INFO'>GET DB_INSTRUMENTS_JOB INFO<span> (</span><span class='info'>Getting job status information</span><span>)</span></a>  
                                       
 </p>  
 </blockquote>  
                               
   
 <p>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" -  
                                 </p>  
 <blockquote class="text">  
 <p>if an invalid path is specified.  
 </p>  
 </blockquote>  
                               
   
 </blockquote><p>  
                       
 </p>  
 <p>Examples:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "ADD DB_INSTRUMENTS '/Piano Collection' '/home/me/gigs/PMI Bosendorfer 290.gig' 0"  
 </p>  
 <p>S: "OK"  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="REMOVE DB_INSTRUMENT"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.8.12"></a><h3>6.8.12.&nbsp;  
 Removing an instrument</h3>  
   
 <p>The front-end can remove a particular instrument  
                     from the instruments database by sending the following command:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>REMOVE DB_INSTRUMENT &lt;instr_path&gt;  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Where &lt;instr_path&gt; is the absolute path name  
                     (in the instruments database) of the instrument to remove.  
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>"OK" -  
                                 </p>  
 <blockquote class="text">  
 <p>if the instrument is removed successfully  
 </p>  
 </blockquote>  
                               
   
 <p>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" -  
                                 </p>  
 <blockquote class="text">  
 <p>if the given path does not exist or  
                                     is a directory.  
 </p>  
 </blockquote>  
                               
   
 </blockquote><p>  
                       
 </p>  
 <p>Examples:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "REMOVE DB_INSTRUMENT '/Piano Collection/Bosendorfer 290'"  
 </p>  
 <p>S: "OK"  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="GET DB_INSTRUMENTS"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.8.13"></a><h3>6.8.13.&nbsp;  
 Getting amount of instruments</h3>  
   
 <p>The front-end can retrieve the current amount of  
                     instruments in a specific directory by sending the following command:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>GET DB_INSTRUMENTS [RECURSIVE] &lt;dir&gt;  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Where &lt;dir&gt; should be replaced by the absolute path name  
                     of the directory. If RECURSIVE is specified, the number of all  
                     instruments, including those located in subdirectories of the  
                     specified directory, will be returned.  
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>The current number of instruments  
                             in the specified directory.  
 </p>  
 <p>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" -  
                                 </p>  
 <blockquote class="text">  
 <p>if the given directory does not exist.  
 </p>  
 </blockquote>  
                               
   
 </blockquote><p>  
                       
 </p>  
 <p>Example:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "GET DB_INSTRUMENTS '/Piano Collection'"  
 </p>  
 <p>S: "2"  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="LIST DB_INSTRUMENTS"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.8.14"></a><h3>6.8.14.&nbsp;  
 Listing all instruments in specific directory</h3>  
   
 <p>The front-end can retrieve the current list of instruments  
                     in specific directory by sending the following command:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>LIST DB_INSTRUMENTS [RECURSIVE] &lt;dir&gt;  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Where &lt;dir&gt; should be replaced by the absolute path  
                     name of the directory. If RECURSIVE is specified, the absolute path  
                     names of all instruments, including those located in subdirectories  
                     of the specified directory, will be returned.  
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>A comma separated list of all instruments  
                             (encapsulated into apostrophes) in the specified directory.  
 </p>  
 <p>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" -  
                                 </p>  
 <blockquote class="text">  
 <p>if the given directory does not exist.  
 </p>  
 </blockquote>  
                               
   
 </blockquote><p>  
                       
 </p>  
 <p>Example:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "LIST DB_INSTRUMENTS '/Piano Collection'"  
 </p>  
 <p>S: "'Bosendorfer 290','Steinway D'"  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "LIST DB_INSTRUMENTS RECURSIVE '/Piano Collection'"  
 </p>  
 <p>S: "'/Piano Collection/Bosendorfer 290','/Piano Collection/Steinway D','/Piano Collection/Lite/Free Piano'"  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="GET DB_INSTRUMENT INFO"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.8.15"></a><h3>6.8.15.&nbsp;  
 Getting instrument information</h3>  
   
 <p>The front-end can ask for the current settings of an  
                     instrument by sending the following command:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>GET DB_INSTRUMENT INFO &lt;instr_path&gt;  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Where &lt;instr_path&gt; should be replaced by the absolute path  
                     name of the instrument the front-end is interested in.  
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>LinuxSampler will answer by sending a &lt;CRLF&gt; separated list.  
                             Each answer line begins with the settings category name  
                             followed by a colon and then a space character &lt;SP&gt; and finally  
                             the info character string to that setting category. At the  
                             moment the following categories are defined:  
 </p>  
 <p>  
                                 </p>  
 <blockquote class="text">  
 <p>INSTRUMENT_FILE -  
                                         </p>  
 <blockquote class="text">  
 <p>File name of the instrument.  
                                             Note that the character string may contain  
                                             <a class='info' href='#character_set'>escape sequences<span> (</span><span class='info'>Character Set and Escape Sequences</span><span>)</span></a>.  
 </p>  
 </blockquote>  
                                       
   
 <p>INSTRUMENT_NR -  
                                         </p>  
 <blockquote class="text">  
 <p>Index of the instrument within the file.  
 </p>  
 </blockquote>  
                                       
   
 <p>FORMAT_FAMILY -  
                                         </p>  
 <blockquote class="text">  
 <p>The format family of the instrument.  
 </p>  
 </blockquote>  
                                       
   
 <p>FORMAT_VERSION -  
                                         </p>  
 <blockquote class="text">  
 <p>The format version of the instrument.  
 </p>  
 </blockquote>  
                                       
   
 <p>SIZE -  
                                         </p>  
 <blockquote class="text">  
 <p>The size of the instrument in bytes.  
 </p>  
 </blockquote>  
                                       
   
 <p>CREATED -  
                                         </p>  
 <blockquote class="text">  
 <p>The date and time when the instrument is added  
                                             in the instruments database, represented in  
                                            "YYYY-MM-DD HH:MM:SS" format  
 </p>  
 </blockquote>  
                                       
   
 <p>MODIFIED -  
                                         </p>  
 <blockquote class="text">  
 <p>The date and time of the last modification of the  
                                             instrument's database settings, represented in  
                                             "YYYY-MM-DD HH:MM:SS" format  
 </p>  
 </blockquote>  
                                       
   
 <p>DESCRIPTION -  
                                         </p>  
 <blockquote class="text">  
 <p>A brief description of the instrument.  
                                             Note that the character string may contain  
                                             <a class='info' href='#character_set'>escape sequences<span> (</span><span class='info'>Character Set and Escape Sequences</span><span>)</span></a>.  
 </p>  
 </blockquote>  
                                       
   
 <p>IS_DRUM -  
                                         </p>  
 <blockquote class="text">  
 <p>either true or false, determines whether the  
                                             instrument is a drumkit or a chromatic instrument  
 </p>  
 </blockquote>  
                                       
   
 <p>PRODUCT -  
                                         </p>  
 <blockquote class="text">  
 <p>The product title of the instrument.  
                                             Note that the character string may contain  
                                             <a class='info' href='#character_set'>escape sequences<span> (</span><span class='info'>Character Set and Escape Sequences</span><span>)</span></a>.  
 </p>  
 </blockquote>  
                                       
   
 <p>ARTISTS -  
                                         </p>  
 <blockquote class="text">  
 <p>Lists the artist names.  
                                             Note that the character string may contain  
                                             <a class='info' href='#character_set'>escape sequences<span> (</span><span class='info'>Character Set and Escape Sequences</span><span>)</span></a>.  
 </p>  
 </blockquote>  
                                       
   
 <p>KEYWORDS -  
                                         </p>  
 <blockquote class="text">  
 <p>Provides a list of keywords that refer to the instrument.  
                                             Keywords are separated with semicolon and blank.  
                                             Note that the character string may contain  
                                             <a class='info' href='#character_set'>escape sequences<span> (</span><span class='info'>Character Set and Escape Sequences</span><span>)</span></a>.  
 </p>  
 </blockquote>  
                                       
   
 </blockquote>  
                               
   
 </blockquote><p>  
                       
 </p>  
 <p>The mentioned fields above don't have to be in particular order.  
 </p>  
 <p>Example:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "GET DB_INSTRUMENT INFO '/Piano Collection/Bosendorfer 290'"  
 </p>  
 <p>S: "INSTRUMENT_FILE: /home/me/gigs/Bosendorfer 290.gig"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"INSTRUMENT_NR: 0"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"FORMAT_FAMILY: GIG"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"FORMAT_VERSION: 2"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"SIZE: 2050871870"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"CREATED: 2007-02-05 10:23:12"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"MODIFIED: 2007-04-07 12:50:21"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"DESCRIPTION: "  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"IS_DRUM: false"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"PRODUCT: GRANDIOSO Bosendorfer 290"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"ARTISTS: Post Musical Instruments"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"KEYWORDS: Bosendorfer"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"."  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="SET DB_INSTRUMENT NAME"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.8.16"></a><h3>6.8.16.&nbsp;  
 Renaming an instrument</h3>  
   
 <p>The front-end can alter the name of a specific  
                     instrument by sending the following command:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>SET DB_INSTRUMENT NAME &lt;instr&gt; &lt;name&gt;  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Where &lt;instr&gt; is the absolute path name of the instrument and  
                     &lt;name&gt; is the new name for that instrument.  
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>"OK" -  
                                 </p>  
 <blockquote class="text">  
 <p>on success  
 </p>  
 </blockquote>  
                               
   
 <p>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" -  
                                 </p>  
 <blockquote class="text">  
 <p>in case the given instrument does not exists,  
                                     or if an instrument with name equal to the new  
                                     name already exists.  
 </p>  
 </blockquote>  
                               
   
 </blockquote><p>  
                       
 </p>  
 <p>Example:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "SET DB_INSTRUMENT NAME '/Piano Collection/Bosendorfer' 'Bosendorfer 290'"  
 </p>  
 <p>S: "OK"  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="MOVE DB_INSTRUMENT"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.8.17"></a><h3>6.8.17.&nbsp;  
 Moving an instrument</h3>  
   
 <p>The front-end can move a specific instrument to another directory by  
                     sending the following command:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>MOVE DB_INSTRUMENT &lt;instr&gt; &lt;dst&gt;  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Where &lt;instr&gt; is the absolute path name of the instrument  
                     to move and &lt;dst&gt; is the directory where the instrument will  
                     be moved to.  
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>"OK" -  
                                 </p>  
 <blockquote class="text">  
 <p>on success  
 </p>  
 </blockquote>  
                               
   
 <p>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" -  
                                 </p>  
 <blockquote class="text">  
 <p>in case the given instrument does not exists,  
                                     or if an instrument with name equal to the name of the  
                                     specified instrument already exists in the destination  
                                     directory.  
 </p>  
 </blockquote>  
                               
   
 </blockquote><p>  
                       
 </p>  
 <p>Example:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "MOVE DB_INSTRUMENT '/Piano Collection/Bosendorfer 290' '/Piano Collection/Acoustic'"  
 </p>  
 <p>S: "OK"  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="COPY DB_INSTRUMENT"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.8.18"></a><h3>6.8.18.&nbsp;  
 Copying instruments</h3>  
   
 <p>The front-end can copy a specific instrument to another directory by  
                     sending the following command:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>COPY DB_INSTRUMENT &lt;instr&gt; &lt;dst&gt;  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Where &lt;instr&gt; is the absolute path name of the instrument  
                     to copy and &lt;dst&gt; is the directory where the instrument will  
                     be copied to.  
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>"OK" -  
                                 </p>  
 <blockquote class="text">  
 <p>on success  
 </p>  
 </blockquote>  
                               
   
 <p>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" -  
                                 </p>  
 <blockquote class="text">  
 <p>in case the given instrument does not exists,  
                                     or if an instrument with name equal to the name of the  
                                     specified instrument already exists in the destination  
                                     directory.  
 </p>  
 </blockquote>  
                               
   
 </blockquote><p>  
                       
 </p>  
 <p>Example:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "COPY DB_INSTRUMENT '/Piano Collection/Bosendorfer 290' '/Acoustic/Pianos/'"  
 </p>  
 <p>S: "OK"  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="SET DB_INSTRUMENT DESCRIPTION"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.8.19"></a><h3>6.8.19.&nbsp;  
 Changing the description of instrument</h3>  
   
 <p>The front-end can alter the description of a specific  
                     instrument by sending the following command:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>SET DB_INSTRUMENT DESCRIPTION &lt;instr&gt; &lt;desc&gt;  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Where &lt;instr&gt; is the absolute path name of the instrument and  
                     &lt;desc&gt; is the new description for the instrument  
                     (encapsulated into apostrophes, supporting escape sequences as described in chapter  
                     "<a class='info' href='#character_set'>Character Set and Escape Sequences<span> (</span><span class='info'>Character Set and Escape Sequences</span><span>)</span></a>").  
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>"OK" -  
                                 </p>  
 <blockquote class="text">  
 <p>on success  
 </p>  
 </blockquote>  
                               
   
 <p>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" -  
                                 </p>  
 <blockquote class="text">  
 <p>in case the given instrument does not exists.  
 </p>  
 </blockquote>  
                               
   
 </blockquote><p>  
                       
 </p>  
 <p>Example:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "SET DB_INSTRUMENT DESCRIPTION '/Piano Collection/Acoustic/Bosendorfer 290' 'No comment :)'"  
 </p>  
 <p>S: "OK"  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="FIND DB_INSTRUMENTS"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.8.20"></a><h3>6.8.20.&nbsp;  
 Finding instruments</h3>  
   
 <p>The front-end can search for instruments  
                     in specific directory by sending the following command:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>FIND DB_INSTRUMENTS [NON_RECURSIVE] &lt;dir&gt; &lt;criteria-list&gt;  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Where &lt;dir&gt; should be replaced by the absolute path  
                     name of the directory to search in. If NON_RECURSIVE is specified, the  
                     directories located in subdirectories of the specified directory will not  
                     be searched. &lt;criteria-list&gt; is a list of search criterias  
                     in form of "key1=val1 key2=val2 ...". The following criterias are  
                     allowed:  
 </p>  
 <p>  
                         
 <p>NAME='&lt;search-string&gt;'  
                           </p>  
 <blockquote class="text">  
 <p>Restricts the search to instruments, which names  
                               satisfy the supplied search string (encapsulated into apostrophes,  
                               supporting escape sequences as described in chapter  
                               "<a class='info' href='#character_set'>Character Set and Escape Sequences<span> (</span><span class='info'>Character Set and Escape Sequences</span><span>)</span></a>").  
 </p>  
 </blockquote><p>  
                         
 </p>  
   
                         
 <p>SIZE=[&lt;min&gt;]..[&lt;max&gt;]  
                           </p>  
 <blockquote class="text">  
 <p>Restricts the search to instruments, which  
                               size is in the specified range. If &lt;min&gt; is omitted,  
                               the search results are restricted to instruments with size less then  
                               or equal to &lt;max&gt;. If &lt;max&gt; is omitted, the  
                               search is restricted to instruments with size greater then  
                               or equal to &lt;min&gt;.  
 </p>  
 </blockquote><p>  
                         
 </p>  
   
                         
 <p>CREATED='[&lt;date-after&gt;]..[&lt;date-before&gt;]'  
                           </p>  
 <blockquote class="text">  
 <p>Restricts the search to instruments, which creation  
                               date satisfies the specified period, where &lt;date-after&gt;  
                               and &lt;date-before&gt; are in "YYYY-MM-DD HH:MM:SS" format.  
                               If &lt;date-after&gt; is omitted the search is restricted to  
                               instruments created before &lt;date-before&gt;. If  
                               &lt;date-before&gt; is omitted, the search is restricted  
                               to instruments created after &lt;date-after&gt;.  
 </p>  
 </blockquote><p>  
                         
 </p>  
   
                         
 <p>MODIFIED='[&lt;date-after&gt;]..[&lt;date-before&gt;]'  
                           </p>  
 <blockquote class="text">  
 <p>Restricts the search to instruments, which  
                               date of last modification satisfies the specified period, where  
                               &lt;date-after&gt; and &lt;date-before&gt; are in "YYYY-MM-DD HH:MM:SS"  
                               format. If &lt;date-after&gt; is omitted the search is restricted to  
                               instruments, which are last modified before &lt;date-before&gt;. If  
                               &lt;date-before&gt; is omitted, the search is restricted to instruments,  
                               which are last modified after &lt;date-after&gt;.  
 </p>  
 </blockquote><p>  
                         
 </p>  
   
                         
 <p>DESCRIPTION='&lt;search-string&gt;'  
                           </p>  
 <blockquote class="text">  
 <p>Restricts the search to instruments with description  
                               that satisfies the supplied search string (encapsulated into apostrophes,  
                               supporting escape sequences as described in chapter  
                               "<a class='info' href='#character_set'>Character Set and Escape Sequences<span> (</span><span class='info'>Character Set and Escape Sequences</span><span>)</span></a>").  
 </p>  
 </blockquote><p>  
                         
 </p>  
   
                         
 <p>PRODUCT='&lt;search-string&gt;'  
                           </p>  
 <blockquote class="text">  
 <p>Restricts the search to instruments with product info  
                               that satisfies the supplied search string (encapsulated into apostrophes,  
                               supporting escape sequences as described in chapter  
                               "<a class='info' href='#character_set'>Character Set and Escape Sequences<span> (</span><span class='info'>Character Set and Escape Sequences</span><span>)</span></a>").  
 </p>  
 </blockquote><p>  
                         
 </p>  
   
                         
 <p>ARTISTS='&lt;search-string&gt;'  
                           </p>  
 <blockquote class="text">  
 <p>Restricts the search to instruments with artists info  
                               that satisfies the supplied search string (encapsulated into apostrophes,  
                               supporting escape sequences as described in chapter  
                               "<a class='info' href='#character_set'>Character Set and Escape Sequences<span> (</span><span class='info'>Character Set and Escape Sequences</span><span>)</span></a>").  
 </p>  
 </blockquote><p>  
                         
 </p>  
   
                         
 <p>KEYWORDS='&lt;search-string&gt;'  
                           </p>  
 <blockquote class="text">  
 <p>Restricts the search to instruments with keyword list  
                               that satisfies the supplied search string (encapsulated into apostrophes,  
                               supporting escape sequences as described in chapter  
                               "<a class='info' href='#character_set'>Character Set and Escape Sequences<span> (</span><span class='info'>Character Set and Escape Sequences</span><span>)</span></a>").  
 </p>  
 </blockquote><p>  
                         
 </p>  
   
                         
 <p>IS_DRUM=true | false  
                           </p>  
 <blockquote class="text">  
 <p>Either true or false. Restricts the search to  
                               drum kits or chromatic instruments.  
 </p>  
 </blockquote><p>  
                         
 </p>  
   
                         
 <p>FORMAT_FAMILIES='&lt;format-list&gt;'  
                           </p>  
 <blockquote class="text">  
 <p>Restricts the search to instruments of the supplied format families,  
                               where &lt;format-list&gt; is a comma separated list of format families.  
 </p>  
 </blockquote><p>  
                         
 </p>  
                       
   
 <p>Where &lt;search-string&gt; is either a regular expression, or a  
                     word list separated with spaces for OR search and with '+' for AND search.  
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>A comma separated list with the absolute path names (encapsulated into  
                             apostrophes) of all instruments in the specified directory that satisfy  
                             the supplied search criterias.  
 </p>  
 <p>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" -  
                                 </p>  
 <blockquote class="text">  
 <p>if the given directory does not exist.  
 </p>  
 </blockquote>  
                               
   
 </blockquote><p>  
                       
 </p>  
 <p>Example:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "FIND DB_INSTRUMENTS '/Piano Collection' NAME='bosendorfer+290'"  
 </p>  
 <p>S: "'/Piano Collection/Bosendorfer 290'"  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "FIND DB_INSTRUMENTS '/Piano Collection' CREATED='2007-04-01 09:30:13..'"  
 </p>  
 <p>S: "'/Piano Collection/Bosendorfer 290','/Piano Collection/Steinway D'"  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="GET DB_INSTRUMENTS_JOB INFO"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.8.21"></a><h3>6.8.21.&nbsp;  
 Getting job status information</h3>  
   
 <p>The front-end can ask for the current status of a  
                     particular database instruments job by sending the following command:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>GET DB_INSTRUMENTS_JOB INFO &lt;job-id&gt;  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Where &lt;job-id&gt; should be replaced by the numerical ID  
                     of the job the front-end is interested in.  
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>LinuxSampler will answer by sending a &lt;CRLF&gt; separated list.  
                             Each answer line begins with the settings category name  
                             followed by a colon and then a space character &lt;SP&gt; and finally  
                             the info character string to that setting category. At the  
                             moment the following categories are defined:  
 </p>  
 <p>  
                                 </p>  
 <blockquote class="text">  
 <p>FILES_TOTAL -  
                                         </p>  
 <blockquote class="text">  
 <p>The total number of files scheduled for scanning  
 </p>  
 </blockquote>  
                                       
   
 <p>FILES_SCANNED -  
                                         </p>  
 <blockquote class="text">  
 <p>The current number of scanned files  
 </p>  
 </blockquote>  
                                       
   
 <p>SCANNING -  
                                         </p>  
 <blockquote class="text">  
 <p>The absolute path name of the file which is currently  
                                             being scanned  
 </p>  
 </blockquote>  
                                       
   
 <p>STATUS -  
                                         </p>  
 <blockquote class="text">  
 <p>An integer value between 0 and 100 indicating the  
                                             scanning progress percentage of the file which is  
                                             currently being scanned  
 </p>  
 </blockquote>  
                                       
   
 </blockquote>  
                               
   
 </blockquote><p>  
                       
 </p>  
 <p>The mentioned fields above don't have to be in particular order.  
 </p>  
 <p>Example:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "GET DB_INSTRUMENTS_JOB INFO 2"  
 </p>  
 <p>S: "FILES_TOTAL: 12"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"FILES_SCANNED: 7"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"SCANNING: /home/me/gigs/Bosendorfer 290.gig"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"STATUS: 42"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"."  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="FORMAT INSTRUMENTS_DB"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.8.22"></a><h3>6.8.22.&nbsp;  
 Formatting the instruments database</h3>  
   
 <p>The front-end can remove all instruments and directories and re-create  
                     the instruments database structure (e.g., in case of a database corruption)  
                     by sending the following command:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>FORMAT INSTRUMENTS_DB  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>"OK" -  
                                 </p>  
 <blockquote class="text">  
 <p>on success  
 </p>  
 </blockquote>  
                               
   
 <p>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" -  
                                 </p>  
 <blockquote class="text">  
 <p>If the formatting of the instruments database  
                                     failed.  
 </p>  
 </blockquote>  
                               
   
 </blockquote><p>  
                       
 </p>  
 <a name="FIND LOST DB_INSTRUMENT_FILES"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.8.23"></a><h3>6.8.23.&nbsp;  
 Checking for lost instrument files</h3>  
   
 <p>The front-end can retrieve the list of all instrument files in the instruments database  
                     that don't exist in the filesystem by sending the following command:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>FIND LOST DB_INSTRUMENT_FILES  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>A comma separated list with the absolute path names  
                             (encapsulated into apostrophes) of all lost instrument files.  
 </p>  
 <p>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" -  
                                 </p>  
 <blockquote class="text">  
 <p>in case it failed, providing an appropriate error code and error message.  
 </p>  
 </blockquote>  
                               
   
 </blockquote><p>  
                       
 </p>  
 <p>Example:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "FIND LOST DB_INSTRUMENT_FILES"  
 </p>  
 <p>S: "'/gigs/Bosendorfer 290.gig','/gigs/Steinway D.gig','/gigs/Free Piano.gig'"  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="SET DB_INSTRUMENT FILE_PATH"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.8.24"></a><h3>6.8.24.&nbsp;  
 Replacing an instrument file</h3>  
   
 <p>The front-end can substitute all occurrences of an instrument file  
                     in the instruments database with a new one by sending the following command:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>SET DB_INSTRUMENT FILE_PATH &lt;old_path&gt; &lt;new_path&gt;  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Where &lt;old_path&gt; is the absolute path name of the instrument file  
                     to substitute with &lt;new_path&gt;.  
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>"OK" -  
                                 </p>  
 <blockquote class="text">  
 <p>on success  
 </p>  
 </blockquote>  
                               
   
 <p>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" -  
                                 </p>  
 <blockquote class="text">  
 <p>in case it failed, providing an appropriate error code and error message.  
 </p>  
 </blockquote>  
                               
   
 </blockquote><p>  
                       
 </p>  
 <p>Example:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "SET DB_INSTRUMENT FILE_PATH '/gigs/Bosendorfer 290.gig' '/gigs/pianos/Bosendorfer 290.gig'"  
 </p>  
 <p>S: "OK"  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="editing_instruments"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.9"></a><h3>6.9.&nbsp;  
 Editing Instruments</h3>  
   
 <p>The sampler allows to edit instruments while playing with the  
                 sampler by spawning an external (3rd party) instrument editor  
                 application for a given instrument. The 3rd party instrument  
                 editor applications have to place a respective plugin DLL file  
                 into the sampler's plugins directory. The sampler will  
                 automatically try to load all plugin DLLs in that directory on  
                 startup and only on startup!  
 </p>  
 <p>At the moment there is only one command for this feature set,  
                 but this will most probably change in future.  
 </p>  
 <a name="EDIT INSTRUMENT"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.9.1"></a><h3>6.9.1.&nbsp;  
 Opening an appropriate instrument editor application</h3>  
   
 <p>The front-end can request to open an appropriate instrument  
                     editor application by sending the following command:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>EDIT CHANNEL INSTRUMENT &lt;sampler-channel&gt;  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Where &lt;sampler-channel&gt; should be replaced by the  
                     number of the sampler channel as given by the  
                     <a class='info' href='#ADD CHANNEL'>"ADD CHANNEL"<span> (</span><span class='info'>Adding a new sampler channel</span><span>)</span></a>  
                     or <a class='info' href='#LIST CHANNELS'>"LIST CHANNELS"<span> (</span><span class='info'>Getting all created sampler channel list</span><span>)</span></a>  
                     command.  
 </p>  
 <p>The sampler will try to ask all registered instrument  
                     editors (or to be more specific: their sampler plugins)  
                     whether they are capable to handle the instrument on the  
                     given sampler channel. The sampler will simply use the first  
                     instrument editor application which replied with a positive  
                     answer and spawn that instrument editor application within  
                     the sampler's process and provide that application access  
                     to the instrument's data structures, so both applications  
                     can share and access the same instruments data at the same  
                     time, thus allowing to immediately hear changes with the  
                     sampler made by the instrument editor.  
 </p>  
 <p>Note: consequently instrument editors are always spawned  
                     locally on the same machine where the sampler is running  
                     on!  
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>"OK" -  
                                 </p>  
 <blockquote class="text">  
 <p>when an appropriate instrument editor was  
                                     launched  
 </p>  
 </blockquote>  
                               
   
 <p>"WRN:&lt;warning-code&gt;:&lt;warning-message&gt;" -  
                                 </p>  
 <blockquote class="text">  
 <p>when an appropriate instrument editor was  
                                     launched, but there are noteworthy issues  
 </p>  
 </blockquote>  
                               
   
 <p>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" -  
                                 </p>  
 <blockquote class="text">  
 <p>when an appropriate instrument editor  
                                     could not be launched  
 </p>  
 </blockquote>  
                               
   
 </blockquote><p>  
                       
 </p>  
 <p>Examples:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "EDIT CHANNEL INSTRUMENT 0"  
 </p>  
 <p>S: "OK"  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="file_management"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.10"></a><h3>6.10.&nbsp;  
 Managing Files</h3>  
   
 <p>You can query detailed informations about files located  
                 at the same system where the sampler instance is running on.  
                 Using this command set allows to retrieve file informations  
                 even remotely from another machine.  
 </p>  
 <a name="GET FILE INSTRUMENTS"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.10.1"></a><h3>6.10.1.&nbsp;  
 Retrieving amount of instruments of a file</h3>  
   
 <p>The front-end can retrieve the amount of instruments  
                     within a given instrument file by sending the  
                     following command:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>GET FILE INSTRUMENTS &lt;filename&gt;  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Where &lt;filename&gt; is the name of the instrument  
                     file (encapsulated into apostrophes, supporting escape  
                     sequences as described in chapter  
                     "<a class='info' href='#character_set'>Character Set and Escape  
                         Sequences<span> (</span><span class='info'>Character Set and Escape Sequences</span><span>)</span></a>").  
 </p>  
 <p>The sampler will try to ask all sampler engines,  
                     whether they support the given file and ask the first  
                     engine with a positive answer for the amount of  
                     instruments.  
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>On success, the sampler will answer by  
                                returning the amount of instruments.  
                               
 </p>  
 <p>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" -  
                                 </p>  
 <blockquote class="text">  
 <p>if the file could not be handled  
 </p>  
 </blockquote>  
                               
   
 </blockquote><p>  
                       
 </p>  
 <p>Examples:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "GET FILE INSTRUMENTS 'D:/Sounds/Foo.gig'"  
 </p>  
 <p>S: "10"  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="LIST FILE INSTRUMENTS"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.10.2"></a><h3>6.10.2.&nbsp;  
 Retrieving all instruments of a file</h3>  
   
 <p>The front-end can retrieve a list of all instruments  
                     within a given instrument file by sending the  
                     following command:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>LIST FILE INSTRUMENTS &lt;filename&gt;  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Where &lt;filename&gt; is the name of the instrument  
                     file (encapsulated into apostrophes, supporting escape  
                     sequences as described in chapter  
                     "<a class='info' href='#character_set'>Character Set and Escape  
                         Sequences<span> (</span><span class='info'>Character Set and Escape Sequences</span><span>)</span></a>").  
 </p>  
 <p>The sampler will try to ask all sampler engines,  
                     whether they support the given file and ask the first  
                     engine with a positive answer for a list of IDs for the  
                     instruments in the given file.  
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>On success, the sampler will answer by  
                                returning a comma separated list of  
                                instrument IDs.  
                               
 </p>  
 <p>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" -  
                                 </p>  
 <blockquote class="text">  
 <p>if the file could not be handled  
 </p>  
 </blockquote>  
                               
   
 </blockquote><p>  
                       
 </p>  
 <p>Examples:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "LIST FILE INSTRUMENTS 'D:/Sounds/Foo.gig'"  
 </p>  
 <p>S: "0,1,2,3,4,5,6,7,8,9"  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="GET FILE INSTRUMENT INFO"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.10.3"></a><h3>6.10.3.&nbsp;  
 Retrieving informations about one instrument in a file</h3>  
   
 <p>The front-end can retrieve detailed informations  
                     about a specific instrument within a given instrument  
                     file by sending the following command:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>GET FILE INSTRUMENT INFO &lt;filename&gt;  
                             &lt;instr-id&gt;  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Where &lt;filename&gt; is the name of the instrument  
                     file (encapsulated into apostrophes, supporting escape  
                     sequences as described in chapter  
                     "<a class='info' href='#character_set'>Character Set and Escape  
                         Sequences<span> (</span><span class='info'>Character Set and Escape Sequences</span><span>)</span></a>") and &lt;instr-id&gt; is the numeric  
                     instrument ID as returned by the  
                     <a class='info' href='#LIST FILE INSTRUMENTS'>"LIST FILE INSTRUMENTS"<span> (</span><span class='info'>Retrieving all instruments of a file</span><span>)</span></a> command.  
 </p>  
 <p>The sampler will try to ask all sampler engines,  
                     whether they support the given file and ask the first  
                     engine with a positive answer for informations about the  
                     specific instrument in the given file.  
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>LinuxSampler will answer by sending a &lt;CRLF&gt; separated list.  
                             Each answer line begins with the settings category name  
                             followed by a colon and then a space character &lt;SP&gt; and finally  
                             the info character string to that setting category. At the  
                             moment the following categories are defined:  
 </p>  
 <p>  
                                 </p>  
 <blockquote class="text">  
 <p>NAME -  
                                         </p>  
 <blockquote class="text">  
 <p>name of the instrument as  
                                             stored in the instrument file  
 </p>  
 </blockquote>  
                                       
   
 <p>FORMAT_FAMILY -  
                                         </p>  
 <blockquote class="text">  
 <p>name of the sampler format  
                                             of the given instrument  
 </p>  
 </blockquote>  
                                       
   
 <p>FORMAT_VERSION -  
                                         </p>  
 <blockquote class="text">  
 <p>version of the sampler format  
                                             the instrumen is stored as  
 </p>  
 </blockquote>  
                                       
   
 <p>PRODUCT -  
                                         </p>  
 <blockquote class="text">  
 <p>official product name of the  
                                             instrument as stored in the file  
                                               
 </p>  
 </blockquote>  
                                       
   
 <p>ARTISTS -  
                                         </p>  
 <blockquote class="text">  
 <p>artists / sample library  
                                             vendor of the instrument  
 </p>  
 </blockquote>  
                                       
   
 <p>KEY_BINDINGS -  
                                         </p>  
 <blockquote class="text">  
 <p>comma separated list of integer values representing  
                                                the instrument's key mapping in the range between 0 .. 127,  
                                                reflecting the analog meaning of the MIDI specification.  
 </p>  
 </blockquote>  
                                       
   
 <p>KEYSWITCH_BINDINGS -  
                                         </p>  
 <blockquote class="text">  
 <p>comma separated list of integer values representing  
                                                the instrument's keyswitch mapping in the range between 0 .. 127,  
                                                reflecting the analog meaning of the MIDI specification.  
 </p>  
 </blockquote>  
                                       
   
 </blockquote>  
                               
   
 </blockquote><p>  
                       
 </p>  
 <p>The mentioned fields above don't have to be in particular order.  
 </p>  
 <p>Example:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "GET FILE INSTRUMENT INFO 'D:/Sounds/Foo.gig' 0"  
 </p>  
 <p>S: "NAME: Lunatic Loops"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"FORMAT_FAMILY: GIG"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"FORMAT_VERSION: 3"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"PRODUCT: The Backbone Bongo Beats"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"ARTISTS: Jimmy the Fish"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"."  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="effects"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.11"></a><h3>6.11.&nbsp;  
 Managing Effects</h3>  
   
 <p>Audio effects (e.g. reverb, delay, compression) can be  
                 applied to the audio signals generated by the sampler. The  
                 sampler usually provides a set of internal audio effects for  
                 this task. The exact set of effects depends on the availability  
                 of third party effect plugins installed on the system where the  
                 sampler runs on.  
 </p>  
 <p>At the moment only "send effects" are supported. Support for  
                 "insert effects" and "master effects" is planned to be added at  
                 a later point.  
 </p>  
 <p>The following commands allow to retrieve the set of internal  
                 effects available to the sampler, detailed informations about  
                 those effects and to create and destroy instances of such  
                 effects. After an instance of an effect is created, the effect  
                 instance can be inserted into the audio signal path of the  
                 sampler, e.g. as send effect.  
 </p>  
 <p>The sampler allows to create an arbitrary amount of so called  
                 send effect chains. Each effect chain can host an arbitrary  
                 amount of effect instances. The output of the first effect  
                 instance in an effect chain is fed to the input of the second  
                 effect instance of the chain and so on. So effects in one chain  
                 are processed sequentially. Send effect chains however are  
                 processed in parallel to other send effect chains. Audio signals  
                 of sampler channels are fed to send effects by creating FX sends  
                 to the respective sampler channel and assigning a destination  
                 send effect to that FX by using the  
                 <a class='info' href='#SET FX_SEND EFFECT'>"SET FX_SEND EFFECT"<span> (</span><span class='info'>Assigning destination effect to an effect send</span><span>)</span></a>  
                 command. The latter allows to route the FX send to the beginning  
                 of a send effect chain, as well as directly to any other  
                 position of the send effect chain.  
 </p>  
 <a name="GET AVAILABLE_EFFECTS"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.11.1"></a><h3>6.11.1.&nbsp;  
 Retrieve amount of available effects</h3>  
   
 <p>The front-end can retrieve the amount of internal  
                     effects, available to the sampler by sending  
                     the following command:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>GET AVAILABLE_EFFECTS  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>The sampler will answer by returning the current  
                             number of effects available to the sampler.  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Examples:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "GET AVAILABLE_EFFECTS"  
 </p>  
 <p>S: "129"  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="LIST AVAILABLE_EFFECTS"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.11.2"></a><h3>6.11.2.&nbsp;  
 Get list of available effects</h3>  
   
 <p>The set of available internal effects can change at  
                     runtime. The front-end can retrieve the list of internal  
                     effects, available to the sampler by sending the following  
                     command:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>LIST AVAILABLE_EFFECTS  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>The sampler will answer by returning a comma  
                             separated list with numerical IDs of effects. Note:  
                             the numercial ID of an effect is generated by the  
                             sampler for the current moment. The numerical ID of  
                             the same effect can change at runtime, e.g. when the  
                             user requests a rescan of available effect plugins.  
                               
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Example:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "LIST AVAILABLE_EFFECTS"  
 </p>  
 <p>S: "5,6,7,120,121,122,123,124"  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="GET EFFECT INFO"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.11.3"></a><h3>6.11.3.&nbsp;  
 Retrieving general information about an effect</h3>  
   
 <p>The front-end can ask for general informations about an  
                     effect by sending the following command:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>GET EFFECT INFO &lt;effect-index&gt;  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Where &lt;effect-index&gt; is the numerical ID of an  
                     effect as returned by the  
                     <a class='info' href='#LIST AVAILABLE_EFFECTS'>"LIST AVAILABLE_EFFECTS"<span> (</span><span class='info'>Get list of available effects</span><span>)</span></a>  
                     command.  
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>LinuxSampler will answer by sending a &lt;CRLF&gt; separated list.  
                             Each answer line begins with the effect information  
                             category name, followed by a colon and then a space  
                             character &lt;SP&gt; and finally the info character  
                             string to that effect information category. At the  
                             moment the following categories are defined:  
 </p>  
 <p>  
                                 </p>  
 <blockquote class="text">  
 <p>SYSTEM -  
                                         </p>  
 <blockquote class="text">  
 <p>name of the effect plugin system  
                                             the effect is based on  
                                             (e.g. "LADSPA")  
 </p>  
 </blockquote>  
                                       
   
 <p>MODULE -  
                                         </p>  
 <blockquote class="text">  
 <p>module of the effect plugin  
                                             system that contains this effect,  
                                             the module is usually the  
                                             dynamic-linked library (DLL)  
                                             filename of the effect plugin,  
                                             including full path (note that this  
                                             filename may contain  
                                             <a class='info' href='#character_set'>escape sequences<span> (</span><span class='info'>Character Set and Escape Sequences</span><span>)</span></a>)  
 </p>  
 </blockquote>  
                                       
   
 <p>NAME -  
                                         </p>  
 <blockquote class="text">  
 <p>character string defining the  
                                             unique name of the effect within its  
                                             module (note that the character  
                                             string may contain  
                                             <a class='info' href='#character_set'>escape sequences<span> (</span><span class='info'>Character Set and Escape Sequences</span><span>)</span></a>)  
 </p>  
 </blockquote>  
                                       
   
 <p>DESCRIPTION -  
                                         </p>  
 <blockquote class="text">  
 <p>human readable name of the  
                                             effect, intended to be displayed in  
                                             user interfaces (note that the  
                                             character string may contain  
                                             <a class='info' href='#character_set'>escape sequences<span> (</span><span class='info'>Character Set and Escape Sequences</span><span>)</span></a>)  
 </p>  
 </blockquote>  
                                       
   
 </blockquote>  
                               
   
 </blockquote><p>  
                       
 </p>  
 <p>The mentioned fields above don't have to be in particular order.  
 </p>  
 <p>Example:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "GET EFFECT INFO 121"  
 </p>  
 <p>S: "SYSTEM: LADSPA"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"MODULE: /usr/lib/ladspa/lowpass_iir_1891.so"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"NAME: lowpass_iir"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"DESCRIPTION: Glame Lowpass Filter"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"."  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="CREATE EFFECT_INSTANCE"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.11.4"></a><h3>6.11.4.&nbsp;  
 Creating an instance of an effect by its portable ID</h3>  
   
 <p>The front-end can spawn an instance of the desired  
                     effect by sending the following command:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>CREATE EFFECT_INSTANCE &lt;effect-system&gt; &lt;module&gt; &lt;effect-name&gt;  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Where &lt;effect-system&gt; is the "SYSTEM" field,  
                     &lt;module&gt; the "MODULE" field and &lt;effect-name&gt;  
                     the "NAME" field as returned by the  
                     <a class='info' href='#GET EFFECT INFO'>"GET EFFECT INFO"<span> (</span><span class='info'>Retrieving general information about an effect</span><span>)</span></a>  
                     command. The filename of argument &lt;module&gt; and the  
                     character string of argument &lt;effect-name&gt; may contain  
                     <a class='info' href='#character_set'>escape sequences<span> (</span><span class='info'>Character Set and Escape Sequences</span><span>)</span></a>.  
 </p>  
 <p>The sampler will try to load the requested effect and to  
                     create an instance of it. To allow loading the same effect  
                     on a different machine, probably even running a completely  
                     different operating system (e.g. Linux vs. Windows), the  
                     sampler tries to match &lt;module&gt; "softly". That means  
                     it first tries to find an effect that exactly matches the  
                     given &lt;module&gt; argument. If there is no exact match,  
                     the sampler will try to lower the restrictions on matching  
                     the &lt;module&gt; argument more and more, e.g. by ignoring  
                     upper / lower case differences and by ignoring the path of  
                     the DLL filename and file extension. If there is still no  
                     match at the end, the sampler will try to ignore the  
                     &lt;module&gt; argument completely and as a last resort  
                     search for an effect that only matches the given  
                     &lt;effect-system&gt; and &lt;effect-name&gt; arguments.  
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>"OK[&lt;effect-instance&gt;]" -  
                                 </p>  
 <blockquote class="text">  
 <p>in case the effect instance was  
                                     successfully created, where  
                                     &lt;effect-instance&gt; is the numerical ID  
                                     of the new effect instance  
 </p>  
 </blockquote>  
                               
   
 <p>"WRN:&lt;warning-code&gt;:&lt;warning-message&gt;" -  
                                 </p>  
 <blockquote class="text">  
 <p>in case the effect instance was spawned  
                                     successfully, but there are noteworthy  
                                     issue(s) related, providing an appropriate  
                                     warning code and warning message  
 </p>  
 </blockquote>  
                               
   
 <p>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" -  
                                 </p>  
 <blockquote class="text">  
 <p>if the effect could not be instantiated  
 </p>  
 </blockquote>  
                               
   
 </blockquote><p>  
                       
 </p>  
 <p>Examples:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "CREATE EFFECT_INSTANCE LADSPA '/usr/lib/ladspa/mod_delay_1419.so' 'modDelay'"  
 </p>  
 <p>S: "OK[0]"  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="CREATE EFFECT_INSTANCE (non-portable)"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.11.5"></a><h3>6.11.5.&nbsp;  
 Creating an instance of an effect by its numerical ID</h3>  
   
 <p>The front-end can spawn an instance of the desired  
                     effect by sending the following command:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>CREATE EFFECT_INSTANCE &lt;effect-index&gt;  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Where &lt;effect-index&gt; is the numerical ID of the  
                     effect as returned by the  
                     <a class='info' href='#LIST AVAILABLE_EFFECTS'>"LIST AVAILABLE_EFFECTS"<span> (</span><span class='info'>Get list of available effects</span><span>)</span></a>  
                     command.  
 </p>  
 <p>The sampler will try to load the requested effect and to  
                     create an instance of it.  
 </p>  
 <p>Note: Since the numerical ID of a certain effect can  
                     change at any time, you should not use this command in  
                     LSCP files to restore a certain effect at a later time! To  
                     store a sampler session including all its effects, use the  
                     <a class='info' href='#CREATE EFFECT_INSTANCE'>portable text-based  
                     version of "CREATE EFFECT_INSTANCE"<span> (</span><span class='info'>Creating an instance of an effect by its portable ID</span><span>)</span></a> instead! This  
                     allows to restore a sampler session with all its effects  
                     also on other machines, possibly even running a completely  
                     different operating system (e.g. Linux vs. Windows), with  
                     different plugin directories or plugin DLL names.  
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>"OK[&lt;effect-instance&gt;]" -  
                                 </p>  
 <blockquote class="text">  
 <p>in case the effect instance was  
                                     successfully created, where  
                                     &lt;effect-instance&gt; is the numerical ID  
                                     of the new effect instance  
 </p>  
 </blockquote>  
                               
   
 <p>"WRN:&lt;warning-code&gt;:&lt;warning-message&gt;" -  
                                 </p>  
 <blockquote class="text">  
 <p>in case the effect instance was spawned  
                                     successfully, but there are noteworthy  
                                     issue(s) related, providing an appropriate  
                                     warning code and warning message  
 </p>  
 </blockquote>  
                               
   
 <p>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" -  
                                 </p>  
 <blockquote class="text">  
 <p>if the effect could not be instantiated  
 </p>  
 </blockquote>  
                               
   
 </blockquote><p>  
                       
 </p>  
 <p>Examples:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "CREATE EFFECT_INSTANCE 72"  
 </p>  
 <p>S: "OK[5]"  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="DESTROY EFFECT_INSTANCE"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.11.6"></a><h3>6.11.6.&nbsp;  
 Destroy an effect instance</h3>  
   
 <p>The front-end can destroy an unusued effect instance and  
                     thus freeing it from memory by sending the following command:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>DESTROY EFFECT_INSTANCE &lt;effect-instance&gt;  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Where &lt;effect-instance&gt; is the numerical ID of the  
                     effect instance as returned by the  
                     <a class='info' href='#CREATE EFFECT_INSTANCE'>"CREATE EFFECT_INSTANCE"<span> (</span><span class='info'>Creating an instance of an effect by its portable ID</span><span>)</span></a> or  
                     <a class='info' href='#LIST EFFECT_INSTANCES'>"LIST EFFECT_INSTANCES"<span> (</span><span class='info'>Get list of effect instances</span><span>)</span></a>  
                     command.  
 </p>  
 <p>The effect instance can only be destroyed if it's not  
                     used in any part of the sampler's audio signal path anymore.  
                     If the effect instance is still in use somewhere, trying to  
                     destroy the effect instance will result in an error  
                     message.  
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>"OK" -  
                                 </p>  
 <blockquote class="text">  
 <p>in case the effect instance was successfully destroyed  
 </p>  
 </blockquote>  
                               
   
 <p>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" -  
                                 </p>  
 <blockquote class="text">  
 <p>in case it failed, providing an appropriate error code and  
                                     error message  
 </p>  
 </blockquote>  
                               
   
 </blockquote><p>  
                       
 </p>  
 <p>Examples:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "DESTROY EFFECT_INSTANCE 5"  
 </p>  
 <p>S: "OK"  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="GET EFFECT_INSTANCES"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.11.7"></a><h3>6.11.7.&nbsp;  
 Retrieve amount of effect instances</h3>  
   
 <p>The front-end can retrieve the current amount of effect  
                     instances by sending the following command:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>GET EFFECT_INSTANCES  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>The sampler will answer by returning the current  
                             number of effect instances created and not yet  
                             destroyed in the current sampler session.  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Examples:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "GET EFFECT_INSTANCES"  
 </p>  
 <p>S: "14"  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="LIST EFFECT_INSTANCES"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.11.8"></a><h3>6.11.8.&nbsp;  
 Get list of effect instances</h3>  
   
 <p>The front-end can retrieve the current list of effect  
                     instances by sending the following command:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>LIST EFFECT_INSTANCES  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>The sampler will answer by returning a comma  
                             separated list with numerical IDs of effects  
                             instances.  
                               
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Example:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "LIST EFFECT_INSTANCES"  
 </p>  
 <p>S: "9,11,14,15,16,17,25"  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="GET EFFECT_INSTANCE INFO"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.11.9"></a><h3>6.11.9.&nbsp;  
 Retrieving current information about an effect instance</h3>  
   
 <p>The front-end can ask for the current informations about  
                     a particular effect instance by sending the following command:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>GET EFFECT_INSTANCE INFO &lt;effect-instance&gt;  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Where &lt;effect-instance&gt; is the numerical ID of an  
                     effect instance as returned by the  
                     <a class='info' href='#CREATE EFFECT_INSTANCE'>"CREATE EFFECT_INSTANCE"<span> (</span><span class='info'>Creating an instance of an effect by its portable ID</span><span>)</span></a>  
                     or  
                     <a class='info' href='#LIST EFFECT_INSTANCES'>"LIST EFFECT_INSTANCES"<span> (</span><span class='info'>Get list of effect instances</span><span>)</span></a>  
                     command.  
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>LinuxSampler will answer by sending a &lt;CRLF&gt; separated list.  
                             Each answer line begins with the information  
                             category name, followed by a colon and then a space  
                             character &lt;SP&gt; and finally the info character  
                             string to that information category. At the  
                             moment the following categories are defined:  
 </p>  
 <p>  
                                 </p>  
 <blockquote class="text">  
 <p>SYSTEM -  
                                         </p>  
 <blockquote class="text">  
 <p>name of the effect plugin system  
                                             the effect is based on  
                                             (e.g. "LADSPA")  
 </p>  
 </blockquote>  
                                       
   
 <p>MODULE -  
                                         </p>  
 <blockquote class="text">  
 <p>module of the effect plugin  
                                             system that contains this effect,  
                                             the module is usually the  
                                             dynamic-linked library (DLL)  
                                             filename of the effect plugin,  
                                             including full path (note that this  
                                             filename may contain  
                                             <a class='info' href='#character_set'>escape sequences<span> (</span><span class='info'>Character Set and Escape Sequences</span><span>)</span></a>)  
 </p>  
 </blockquote>  
                                       
   
 <p>NAME -  
                                         </p>  
 <blockquote class="text">  
 <p>character string defining the  
                                             unique name of the effect within its  
                                             module (note that the character  
                                             string may contain  
                                             <a class='info' href='#character_set'>escape sequences<span> (</span><span class='info'>Character Set and Escape Sequences</span><span>)</span></a>)  
 </p>  
 </blockquote>  
                                       
   
 <p>DESCRIPTION -  
                                         </p>  
 <blockquote class="text">  
 <p>human readable name of the  
                                             effect, intended to be displayed in  
                                             user interfaces (note that the  
                                             character string may contain  
                                             <a class='info' href='#character_set'>escape sequences<span> (</span><span class='info'>Character Set and Escape Sequences</span><span>)</span></a>)  
 </p>  
 </blockquote>  
                                       
   
 <p>INPUT_CONTROLS -  
                                         </p>  
 <blockquote class="text">  
 <p>amount of input controls the  
                                             effect instance provides, to allow  
                                             controlling the effect parameters in  
                                             realtime  
 </p>  
 </blockquote>  
                                       
   
 </blockquote>  
                               
   
 </blockquote><p>  
                       
 </p>  
 <p>The mentioned fields above don't have to be in particular order.  
 </p>  
 <p>Example:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "GET EFFECT_INSTANCE INFO 3"  
 </p>  
 <p>S: "SYSTEM: LADSPA"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"MODULE: /usr/lib/ladspa/mod_delay_1419.so"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"NAME: modDelay"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"DESCRIPTION: Modulatable delay"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"INPUT_CONTROLS: 1"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"."  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="GET EFFECT_INSTANCE_INPUT_CONTROL INFO"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.11.10"></a><h3>6.11.10.&nbsp;  
 Retrieving information about an effect parameter</h3>  
   
 <p>Effects typically provide a certain set of effect  
                     parameters which can be altered by the user in realtime  
                     (e.g. depth of a reverb effect, duration of a delay effect,  
                     dry / wet signal ratio). Those controllable effect parameters  
                     are called "input controls". The front-end can ask for the  
                     current informations of an effect instance's input control  
                     by sending the following command:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>GET EFFECT_INSTANCE_INPUT_CONTROL INFO &lt;effect-instance&gt; &lt;input-control&gt;  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Where &lt;effect-instance&gt; is the numerical ID of an  
                     effect instance as returned by the  
                     <a class='info' href='#CREATE EFFECT_INSTANCE'>"CREATE EFFECT_INSTANCE"<span> (</span><span class='info'>Creating an instance of an effect by its portable ID</span><span>)</span></a>  
                     or  
                     <a class='info' href='#LIST EFFECT_INSTANCES'>"LIST EFFECT_INSTANCES"<span> (</span><span class='info'>Get list of effect instances</span><span>)</span></a>  
                     command and &lt;input-control&gt; is the index of the input  
                     control within the numerical bounds as returned by the  
                     "INPUT_CONTROLS" field of the  
                     <a class='info' href='#GET EFFECT_INSTANCE INFO'>"GET EFFECT_INSTANCE INFO"<span> (</span><span class='info'>Retrieving current information about an effect instance</span><span>)</span></a>  
                     command.  
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>LinuxSampler will answer by sending a &lt;CRLF&gt; separated list.  
                             Each answer line begins with the information  
                             category name, followed by a colon and then a space  
                             character &lt;SP&gt; and finally the info character  
                             string to that information category. There are  
                             information categories which are always returned,  
                             independent of the respective effect parameter and  
                             there are optional information categories  
                             which are only shown for certain effect parameters.  
                             At the moment the following categories are defined:  
 </p>  
 <p>  
                                 </p>  
 <blockquote class="text">  
 <p>DESCRIPTION -  
                                         </p>  
 <blockquote class="text">  
 <p>(always returned)  
                                             human readable name of the  
                                             effect parameter, intended to be  
                                             displayed in user interfaces (note  
                                             that the character string may  
                                             contain <a class='info' href='#character_set'>escape sequences<span> (</span><span class='info'>Character Set and Escape Sequences</span><span>)</span></a>)  
 </p>  
 </blockquote>  
                                       
   
 <p>VALUE -  
                                         </p>  
 <blockquote class="text">  
 <p>  
                                             (always returned)  
                                             current (optional dotted)  
                                             floating point value of this effect  
                                             parameter  
 </p>  
 </blockquote>  
                                       
   
 <p>RANGE_MIN -  
                                         </p>  
 <blockquote class="text">  
 <p>  
                                             (optionally returned)  
                                             minimum allowed value for this  
                                             effect parameter  
 </p>  
 </blockquote>  
                                       
   
 <p>RANGE_MAX -  
                                         </p>  
 <blockquote class="text">  
 <p>  
                                             (optionally returned)  
                                             maximum allowed value for this  
                                             effect parameter  
 </p>  
 </blockquote>  
                                       
   
 <p>POSSIBILITIES -  
                                         </p>  
 <blockquote class="text">  
 <p>  
                                             (optionally returned)  
                                             comma separated list of  
                                             (optional dotted) floating point  
                                             numbers, reflecting the exact set of  
                                             possible values for this effect  
                                             parameter  
 </p>  
 </blockquote>  
                                       
   
 <p>DEFAULT -  
                                         </p>  
 <blockquote class="text">  
 <p>  
                                             (optionally returned)  
                                             default value of this effect  
                                             parameter  
 </p>  
 </blockquote>  
                                       
   
 </blockquote>  
                               
   
 </blockquote><p>  
                       
 </p>  
 <p>The mentioned fields above don't have to be in particular order.  
 </p>  
 <p>Example:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "GET EFFECT_INSTANCE_INPUT_CONTROL INFO 1 0"  
 </p>  
 <p>S: "DESCRIPTION: Base delay (s)"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"VALUE: 0.500"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"RANGE_MIN: 0.000"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"."  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="SET EFFECT_INSTANCE_INPUT_CONTROL VALUE"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.11.11"></a><h3>6.11.11.&nbsp;  
 Altering an effect parameter</h3>  
   
 <p>The front-end can alter the current value of an effect  
                     parameter by sending the following command:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>SET EFFECT_INSTANCE_INPUT_CONTROL VALUE &lt;effect-instance&gt; &lt;input-control&gt; &lt;value&gt;  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Where &lt;effect-instance&gt; is the numerical ID of the  
                     effect instance as returned by the  
                     <a class='info' href='#CREATE EFFECT_INSTANCE'>"CREATE EFFECT_INSTANCE"<span> (</span><span class='info'>Creating an instance of an effect by its portable ID</span><span>)</span></a> or  
                     <a class='info' href='#LIST EFFECT_INSTANCES'>"LIST EFFECT_INSTANCES"<span> (</span><span class='info'>Get list of effect instances</span><span>)</span></a>  
                     command, &lt;input-control&gt; is the index of the input  
                     control within the numerical bounds as returned by the  
                     "INPUT_CONTROLS" field of the  
                     <a class='info' href='#GET EFFECT_INSTANCE INFO'>"GET EFFECT_INSTANCE INFO"<span> (</span><span class='info'>Retrieving current information about an effect instance</span><span>)</span></a>  
                     command and &lt;value&gt; is the new (optional dotted)  
                     floating point value for this effect parameter.  
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>"OK" -  
                                 </p>  
 <blockquote class="text">  
 <p>in case the effect was altered successfully  
 </p>  
 </blockquote>  
                               
   
 <p>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" -  
                                 </p>  
 <blockquote class="text">  
 <p>in case it failed, providing an appropriate error code and  
                                     error message  
 </p>  
 </blockquote>  
                               
   
 </blockquote><p>  
                       
 </p>  
 <p>Examples:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "SET EFFECT_INSTANCE_INPUT_CONTROL VALUE 0 1 0.5"  
 </p>  
 <p>S: "OK"  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="GET SEND_EFFECT_CHAINS"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.11.12"></a><h3>6.11.12.&nbsp;  
 Retrieve amount of send effect chains</h3>  
   
 <p>The front-end can retrieve the current amount of send  
                     effect chains of an audio output device by sending the  
                     following command:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>GET SEND_EFFECT_CHAINS &lt;audio-device&gt;  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Where &lt;audio-device&gt; should be replaced by the  
                     numerical ID of the audio output device as given by the  
                     <a class='info' href='#CREATE AUDIO_OUTPUT_DEVICE'>"CREATE AUDIO_OUTPUT_DEVICE"<span> (</span><span class='info'>Creating an audio output device</span><span>)</span></a>  
                     or <a class='info' href='#LIST AUDIO_OUTPUT_DEVICES'>"LIST AUDIO_OUTPUT_DEVICES"<span> (</span><span class='info'>Getting all created audio output device list</span><span>)</span></a>  
                     command.  
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>The sampler will answer by returning the current  
                             number of send effect chains of the supplied audio  
                             output device.  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Examples:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "GET SEND_EFFECT_CHAINS 0"  
 </p>  
 <p>S: "4"  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="LIST SEND_EFFECT_CHAINS"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.11.13"></a><h3>6.11.13.&nbsp;  
 Retrieve list of send effect chains</h3>  
   
 <p>The front-end can retrieve the current list of send  
                     effect chains of an audio output device by sending the  
                     following command:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>LIST SEND_EFFECT_CHAINS &lt;audio-device&gt;  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Where &lt;audio-device&gt; should be replaced by the  
                     numerical ID of the audio output device as given by the  
                     <a class='info' href='#CREATE AUDIO_OUTPUT_DEVICE'>"CREATE AUDIO_OUTPUT_DEVICE"<span> (</span><span class='info'>Creating an audio output device</span><span>)</span></a>  
                     or <a class='info' href='#LIST AUDIO_OUTPUT_DEVICES'>"LIST AUDIO_OUTPUT_DEVICES"<span> (</span><span class='info'>Getting all created audio output device list</span><span>)</span></a>  
                     command.  
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>The sampler will answer by returning a comma  
                             separated list with numerical IDs of send effect  
                             chains of the supplied audio output device.  
                               
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Examples:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "LIST SEND_EFFECT_CHAINS 0"  
 </p>  
 <p>S: "3,4,7"  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="ADD SEND_EFFECT_CHAIN"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.11.14"></a><h3>6.11.14.&nbsp;  
 Add send effect chain</h3>  
   
 <p>The front-end can add a send effect chain by sending the  
                     following command:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>ADD SEND_EFFECT_CHAIN &lt;audio-device&gt;  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Where &lt;audio-device&gt; should be replaced by the  
                     numerical ID of the audio output device as given by the  
                     <a class='info' href='#CREATE AUDIO_OUTPUT_DEVICE'>"CREATE AUDIO_OUTPUT_DEVICE"<span> (</span><span class='info'>Creating an audio output device</span><span>)</span></a>  
                     or <a class='info' href='#LIST AUDIO_OUTPUT_DEVICES'>"LIST AUDIO_OUTPUT_DEVICES"<span> (</span><span class='info'>Getting all created audio output device list</span><span>)</span></a>  
                     command.  
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>"OK[&lt;effect-chain&gt;]" -  
                                 </p>  
 <blockquote class="text">  
 <p>in case the send effect chain was  
                                     added successfully, where  
                                     &lt;effect-chain&gt; is the numerical ID  
                                     of the new send effect chain  
 </p>  
 </blockquote>  
                               
   
 <p>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" -  
                                 </p>  
 <blockquote class="text">  
 <p>if the send effect chain could not be added  
 </p>  
 </blockquote>  
                               
   
 </blockquote><p>  
                       
 </p>  
 <p>Examples:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "ADD SEND_EFFECT_CHAIN 0"  
 </p>  
 <p>S: "OK[2]"  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="REMOVE SEND_EFFECT_CHAIN"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.11.15"></a><h3>6.11.15.&nbsp;  
 Remove send effect chain</h3>  
   
 <p>The front-end can remove a send effect chain by sending  
                     the following command:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>REMOVE SEND_EFFECT_CHAIN &lt;audio-device&gt; &lt;effect-chain&gt;  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Where &lt;audio-device&gt; should be replaced by the  
                     numerical ID of the audio output device as given by the  
                     <a class='info' href='#CREATE AUDIO_OUTPUT_DEVICE'>"CREATE AUDIO_OUTPUT_DEVICE"<span> (</span><span class='info'>Creating an audio output device</span><span>)</span></a>  
                     or <a class='info' href='#LIST AUDIO_OUTPUT_DEVICES'>"LIST AUDIO_OUTPUT_DEVICES"<span> (</span><span class='info'>Getting all created audio output device list</span><span>)</span></a>  
                     command and &lt;effect-chain&gt; by the numerical ID as  
                     returned by the  
                     <a class='info' href='#ADD SEND_EFFECT_CHAIN'>"ADD SEND_EFFECT_CHAIN"<span> (</span><span class='info'>Add send effect chain</span><span>)</span></a>  
                     or  
                     <a class='info' href='#LIST SEND_EFFECT_CHAINS'>"LIST SEND_EFFECT_CHAINS"<span> (</span><span class='info'>Retrieve list of send effect chains</span><span>)</span></a>  
                     command.  
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>"OK" -  
                                 </p>  
 <blockquote class="text">  
 <p>in case the send effect chain was  
                                     removed successfully  
 </p>  
 </blockquote>  
                               
   
 <p>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" -  
                                 </p>  
 <blockquote class="text">  
 <p>if the send effect chain could not be removed  
 </p>  
 </blockquote>  
                               
   
 </blockquote><p>  
                       
 </p>  
 <p>Examples:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "REMOVE SEND_EFFECT_CHAIN 0 2"  
 </p>  
 <p>S: "OK"  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="GET SEND_EFFECT_CHAIN INFO"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.11.16"></a><h3>6.11.16.&nbsp;  
 Retrieving information about a send effect chain</h3>  
   
 <p>The front-end can ask for informations of a send effect  
                     chain by sending the following command:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>GET SEND_EFFECT_CHAIN INFO &lt;audio-device&gt; &lt;effect-chain&gt;  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Where &lt;audio-device&gt; should be replaced by the  
                     numerical ID of the audio output device as given by the  
                     <a class='info' href='#CREATE AUDIO_OUTPUT_DEVICE'>"CREATE AUDIO_OUTPUT_DEVICE"<span> (</span><span class='info'>Creating an audio output device</span><span>)</span></a>  
                     or <a class='info' href='#LIST AUDIO_OUTPUT_DEVICES'>"LIST AUDIO_OUTPUT_DEVICES"<span> (</span><span class='info'>Getting all created audio output device list</span><span>)</span></a>  
                     command and &lt;effect-chain&gt; by the numerical ID as  
                     returned by the  
                     <a class='info' href='#ADD SEND_EFFECT_CHAIN'>"ADD SEND_EFFECT_CHAIN"<span> (</span><span class='info'>Add send effect chain</span><span>)</span></a>  
                     or  
                     <a class='info' href='#LIST SEND_EFFECT_CHAINS'>"LIST SEND_EFFECT_CHAINS"<span> (</span><span class='info'>Retrieve list of send effect chains</span><span>)</span></a>  
                     command.  
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>LinuxSampler will answer by sending a &lt;CRLF&gt; separated list.  
                             Each answer line begins with the information  
                             category name, followed by a colon and then a space  
                             character &lt;SP&gt; and finally the info character  
                             string to that information category.  
                             At the moment the following categories are defined:  
 </p>  
 <p>  
                                 </p>  
 <blockquote class="text">  
 <p>EFFECT_COUNT -  
                                         </p>  
 <blockquote class="text">  
 <p>amount of effects in this send  
                                             effect chain  
 </p>  
 </blockquote>  
                                       
   
 <p>EFFECT_SEQUENCE -  
                                         </p>  
 <blockquote class="text">  
 <p>comma separated list of the  
                                             numerical IDs of the effect  
                                             instances in this send effect chain,  
                                             in the order as they are procssed in  
                                             the effect chain  
 </p>  
 </blockquote>  
                                       
   
 </blockquote>  
                               
   
 </blockquote><p>  
                       
 </p>  
 <p>The mentioned fields above don't have to be in particular order.  
 </p>  
 <p>Example:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "GET SEND_EFFECT_CHAIN INFO 0 2"  
 </p>  
 <p>S: "EFFECT_COUNT: 3"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"EFFECT_SEQUENCE: 31,4,7"  
 </p>  
 <p>&nbsp;&nbsp;&nbsp;"."  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="APPEND SEND_EFFECT_CHAIN EFFECT"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.11.17"></a><h3>6.11.17.&nbsp;  
 Append effect instance to a send effect chain</h3>  
   
 <p>The front-end can add an unused effect instance to the  
                     end of a send effect chain by sending the following command:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>APPEND SEND_EFFECT_CHAIN EFFECT &lt;audio-device&gt; &lt;effect-chain&gt; &lt;effect-instance&gt;  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Where &lt;audio-device&gt; should be replaced by the  
                     numerical ID of the audio output device as given by the  
                     <a class='info' href='#CREATE AUDIO_OUTPUT_DEVICE'>"CREATE AUDIO_OUTPUT_DEVICE"<span> (</span><span class='info'>Creating an audio output device</span><span>)</span></a>  
                     or <a class='info' href='#LIST AUDIO_OUTPUT_DEVICES'>"LIST AUDIO_OUTPUT_DEVICES"<span> (</span><span class='info'>Getting all created audio output device list</span><span>)</span></a>  
                     command and &lt;effect-chain&gt; by the numerical ID as  
                     returned by the  
                     <a class='info' href='#ADD SEND_EFFECT_CHAIN'>"ADD SEND_EFFECT_CHAIN"<span> (</span><span class='info'>Add send effect chain</span><span>)</span></a>  
                     or  
                     <a class='info' href='#LIST SEND_EFFECT_CHAINS'>"LIST SEND_EFFECT_CHAINS"<span> (</span><span class='info'>Retrieve list of send effect chains</span><span>)</span></a>  
                     command and &lt;effect-instance&gt; as returned by the  
                     <a class='info' href='#CREATE EFFECT_INSTANCE'>"CREATE EFFECT_INSTANCE"<span> (</span><span class='info'>Creating an instance of an effect by its portable ID</span><span>)</span></a> or  
                     <a class='info' href='#LIST EFFECT_INSTANCES'>"LIST EFFECT_INSTANCES"<span> (</span><span class='info'>Get list of effect instances</span><span>)</span></a>  
                     command.  
 </p>  
 <p>Only unused effect instances can be added to the effect  
                     chain. Trying to add an effect instance which is already in  
                     use somewhere in the audio signal path of the sampler will  
                     result in an error.  
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>"OK" -  
                                 </p>  
 <blockquote class="text">  
 <p>in case the effect instance was  
                                     added successfully to the chain  
 </p>  
 </blockquote>  
                               
   
 <p>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" -  
                                 </p>  
 <blockquote class="text">  
 <p>if the effect instance could not be added  
 </p>  
 </blockquote>  
                               
   
 </blockquote><p>  
                       
 </p>  
 <p>Examples:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "APPEND SEND_EFFECT_CHAIN EFFECT 0 2 38"  
 </p>  
 <p>S: "OK"  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="INSERT SEND_EFFECT_CHAIN EFFECT"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.11.18"></a><h3>6.11.18.&nbsp;  
 Insert effect instance to a send effect chain</h3>  
   
 <p>The front-end can add an unused effect instance to a  
                     certain position of a send effect chain by sending the  
                     following command:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>INSERT SEND_EFFECT_CHAIN EFFECT &lt;audio-device&gt; &lt;effect-chain&gt; &lt;chain-pos&gt; &lt;effect-instance&gt;  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Where &lt;audio-device&gt; should be replaced by the  
                     numerical ID of the audio output device as given by the  
                     <a class='info' href='#CREATE AUDIO_OUTPUT_DEVICE'>"CREATE AUDIO_OUTPUT_DEVICE"<span> (</span><span class='info'>Creating an audio output device</span><span>)</span></a>  
                     or <a class='info' href='#LIST AUDIO_OUTPUT_DEVICES'>"LIST AUDIO_OUTPUT_DEVICES"<span> (</span><span class='info'>Getting all created audio output device list</span><span>)</span></a>  
                     command, &lt;effect-chain&gt; by the numerical ID as  
                     returned by the  
                     <a class='info' href='#ADD SEND_EFFECT_CHAIN'>"ADD SEND_EFFECT_CHAIN"<span> (</span><span class='info'>Add send effect chain</span><span>)</span></a>  
                     or  
                     <a class='info' href='#LIST SEND_EFFECT_CHAINS'>"LIST SEND_EFFECT_CHAINS"<span> (</span><span class='info'>Retrieve list of send effect chains</span><span>)</span></a>  
                     command, &lt;effect-instance&gt; as returned by the  
                     <a class='info' href='#CREATE EFFECT_INSTANCE'>"CREATE EFFECT_INSTANCE"<span> (</span><span class='info'>Creating an instance of an effect by its portable ID</span><span>)</span></a> or  
                     <a class='info' href='#LIST EFFECT_INSTANCES'>"LIST EFFECT_INSTANCES"<span> (</span><span class='info'>Get list of effect instances</span><span>)</span></a>  
                     command and &lt;chain-pos&gt; the exact position of the  
                     effect chain where the supplied effect shall be inserted  
                     to.  
 </p>  
 <p>Only unused effect instances can be added to the effect  
                     chain. Trying to add an effect instance which is already in  
                     use somewhere in the audio signal path of the sampler will  
                     result in an error.  
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>"OK" -  
                                 </p>  
 <blockquote class="text">  
 <p>in case the effect instance was  
                                     added successfully to the chain  
 </p>  
 </blockquote>  
                               
   
 <p>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" -  
                                 </p>  
 <blockquote class="text">  
 <p>if the effect instance could not be added  
 </p>  
 </blockquote>  
                               
   
 </blockquote><p>  
                       
 </p>  
 <p>Examples:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "INSERT SEND_EFFECT_CHAIN EFFECT 0 2 4 38"  
 </p>  
 <p>S: "OK"  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="REMOVE SEND_EFFECT_CHAIN EFFECT"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.6.11.19"></a><h3>6.11.19.&nbsp;  
 Remove effect instance from send effect chain</h3>  
   
 <p>The front-end can remove an effect instance from a  
                     certain position of a send effect chain by sending the  
                     following command:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>REMOVE SEND_EFFECT_CHAIN EFFECT &lt;audio-device&gt; &lt;effect-chain&gt; &lt;chain-pos&gt;  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <p>Where &lt;audio-device&gt; should be replaced by the  
                     numerical ID of the audio output device as given by the  
                     <a class='info' href='#CREATE AUDIO_OUTPUT_DEVICE'>"CREATE AUDIO_OUTPUT_DEVICE"<span> (</span><span class='info'>Creating an audio output device</span><span>)</span></a>  
                     or <a class='info' href='#LIST AUDIO_OUTPUT_DEVICES'>"LIST AUDIO_OUTPUT_DEVICES"<span> (</span><span class='info'>Getting all created audio output device list</span><span>)</span></a>  
                     command, &lt;effect-chain&gt; by the numerical ID as  
                     returned by the  
                     <a class='info' href='#ADD SEND_EFFECT_CHAIN'>"ADD SEND_EFFECT_CHAIN"<span> (</span><span class='info'>Add send effect chain</span><span>)</span></a>  
                     or  
                     <a class='info' href='#LIST SEND_EFFECT_CHAINS'>"LIST SEND_EFFECT_CHAINS"<span> (</span><span class='info'>Retrieve list of send effect chains</span><span>)</span></a>  
                     command and &lt;chain-pos&gt; the exact position of the  
                     effect instance to be removed from the effect chain.  
 </p>  
 <p>Possible Answers:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>"OK" -  
                                 </p>  
 <blockquote class="text">  
 <p>in case the effect instance was  
                                     removed successfully  
 </p>  
 </blockquote>  
                               
   
 <p>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" -  
                                 </p>  
 <blockquote class="text">  
 <p>if the effect instance could not be removed  
 </p>  
 </blockquote>  
                               
   
 </blockquote><p>  
                       
 </p>  
 <p>Examples:  
 </p>  
 <p>  
                         </p>  
 <blockquote class="text">  
 <p>C: "REMOVE SEND_EFFECT_CHAIN EFFECT 0 2 4"  
 </p>  
 <p>S: "OK"  
 </p>  
 </blockquote><p>  
                       
 </p>  
 <a name="command_syntax"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.7"></a><h3>7.&nbsp;  
 Command Syntax</h3>  
   
 <p>The grammar of the control protocol as descibed in <a class='info' href='#control_commands'>Section&nbsp;6<span> (</span><span class='info'>Description for control commands</span><span>)</span></a>  
             is defined below using Backus-Naur Form (BNF as described in <a class='info' href='#RFC2234'>[RFC2234]<span> (</span><span class='info'>Crocker, D. and P. Overell, &ldquo;Augmented BNF for Syntax Specifications,&rdquo; 1997.</span><span>)</span></a>)  
             where applicable.  
               
 </p>  
 <p>input =  
         </p>  
 <blockquote class="text">  
 <p>line  
                   
 </p>  
 <p>/ error  
                   
 </p>  
 </blockquote><p>  
   
 </p>  
 <p>line =  
         </p>  
 <blockquote class="text">  
 <p>statement LF  
                   
 </p>  
 <p>/ statement CR LF  
                   
 </p>  
 </blockquote><p>  
   
 </p>  
 <p>statement =  
         </p>  
 <blockquote class="text">  
 <p>/* epsilon (empty statement/line ignored) */  
                   
 </p>  
 <p>/ comment  
                   
 </p>  
 <p>/ command  
                   
 </p>  
 </blockquote><p>  
   
 </p>  
 <p>comment =  
         </p>  
 <blockquote class="text">  
 <p>'#'  
                   
 </p>  
 <p>/ comment '#'  
                   
 </p>  
 <p>/ comment SP  
                   
 </p>  
 <p>/ comment number  
                   
 </p>  
 <p>/ comment string  
                   
 </p>  
 </blockquote><p>  
   
 </p>  
 <p>command =  
         </p>  
 <blockquote class="text">  
 <p>ADD SP add_instruction  
                   
 </p>  
 <p>/ MAP SP map_instruction  
                   
 </p>  
 <p>/ UNMAP SP unmap_instruction  
                   
 </p>  
 <p>/ GET SP get_instruction  
                   
 </p>  
 <p>/ CREATE SP create_instruction  
                   
 </p>  
 <p>/ DESTROY SP destroy_instruction  
                   
 </p>  
 <p>/ LIST SP list_instruction  
                   
 </p>  
 <p>/ LOAD SP load_instruction  
                   
 </p>  
 <p>/ REMOVE SP remove_instruction  
                   
 </p>  
 <p>/ SET SP set_instruction  
                   
 </p>  
 <p>/ SUBSCRIBE SP subscribe_event  
                   
 </p>  
 <p>/ UNSUBSCRIBE SP unsubscribe_event  
                   
 </p>  
 <p>/ RESET SP reset_instruction  
                   
 </p>  
 <p>/ CLEAR SP clear_instruction  
                   
 </p>  
 <p>/ FIND SP find_instruction  
                   
 </p>  
 <p>/ MOVE SP move_instruction  
                   
 </p>  
 <p>/ COPY SP copy_instruction  
                   
 </p>  
 <p>/ EDIT SP edit_instruction  
                   
 </p>  
 <p>/ FORMAT SP format_instruction  
                   
 </p>  
 <p>/ SEND SP send_instruction  
                   
 </p>  
 <p>/ APPEND SP append_instruction  
                   
 </p>  
 <p>/ INSERT SP insert_instruction  
                   
 </p>  
 <p>/ RESET  
                   
 </p>  
 <p>/ QUIT  
                   
 </p>  
 </blockquote><p>  
   
 </p>  
 <p>add_instruction =  
         </p>  
 <blockquote class="text">  
 <p>CHANNEL  
                   
 </p>  
 <p>/ CHANNEL SP MIDI_INPUT SP sampler_channel SP device_index  
                   
 </p>  
 <p>/ CHANNEL SP MIDI_INPUT SP sampler_channel SP device_index SP midi_input_port_index  
                   
 </p>  
 <p>/ DB_INSTRUMENT_DIRECTORY SP db_path  
                   
 </p>  
 <p>/ DB_INSTRUMENTS SP NON_MODAL SP scan_mode SP db_path SP filename  
                   
 </p>  
 <p>/ DB_INSTRUMENTS SP NON_MODAL SP scan_mode SP FILE_AS_DIR SP db_path SP filename  
                   
 </p>  
 <p>/ DB_INSTRUMENTS SP scan_mode SP db_path SP filename  
                   
 </p>  
 <p>/ DB_INSTRUMENTS SP scan_mode SP FILE_AS_DIR SP db_path SP filename  
                   
 </p>  
 <p>/ DB_INSTRUMENTS SP NON_MODAL SP db_path SP filename  
                   
 </p>  
 <p>/ DB_INSTRUMENTS SP NON_MODAL SP db_path SP filename SP instrument_index  
                   
 </p>  
 <p>/ DB_INSTRUMENTS SP db_path SP filename  
                   
 </p>  
 <p>/ DB_INSTRUMENTS SP db_path SP filename SP instrument_index  
                   
 </p>  
 <p>/ MIDI_INSTRUMENT_MAP  
                   
 </p>  
 <p>/ MIDI_INSTRUMENT_MAP SP map_name  
                   
 </p>  
 <p>/ SEND_EFFECT_CHAIN SP device_index  
                   
 </p>  
 </blockquote><p>  
   
 </p>  
 <p>subscribe_event =  
         </p>  
 <blockquote class="text">  
 <p>AUDIO_OUTPUT_DEVICE_COUNT  
                   
 </p>  
 <p>/ AUDIO_OUTPUT_DEVICE_INFO  
                   
 </p>  
 <p>/ MIDI_INPUT_DEVICE_COUNT  
                   
 </p>  
 <p>/ MIDI_INPUT_DEVICE_INFO  
                   
 </p>  
 <p>/ CHANNEL_COUNT  
                   
 </p>  
 <p>/ CHANNEL_MIDI  
                   
 </p>  
 <p>/ DEVICE_MIDI  
                   
 </p>  
 <p>/ VOICE_COUNT  
                   
 </p>  
 <p>/ STREAM_COUNT  
                   
 </p>  
 <p>/ BUFFER_FILL  
                   
 </p>  
 <p>/ CHANNEL_INFO  
                   
 </p>  
 <p>/ FX_SEND_COUNT  
                   
 </p>  
 <p>/ FX_SEND_INFO  
                   
 </p>  
 <p>/ MIDI_INSTRUMENT_MAP_COUNT  
                   
 </p>  
 <p>/ MIDI_INSTRUMENT_MAP_INFO  
                   
 </p>  
 <p>/ MIDI_INSTRUMENT_COUNT  
                   
 </p>  
 <p>/ MIDI_INSTRUMENT_INFO  
                   
 </p>  
 <p>/ DB_INSTRUMENT_DIRECTORY_COUNT  
                   
 </p>  
 <p>/ DB_INSTRUMENT_DIRECTORY_INFO  
                   
 </p>  
 <p>/ DB_INSTRUMENT_COUNT  
                   
 </p>  
 <p>/ DB_INSTRUMENT_INFO  
                   
 </p>  
 <p>/ DB_INSTRUMENTS_JOB_INFO  
                   
 </p>  
 <p>/ MISCELLANEOUS  
                   
 </p>  
 <p>/ TOTAL_STREAM_COUNT  
                   
 </p>  
 <p>/ TOTAL_VOICE_COUNT  
                   
 </p>  
 <p>/ GLOBAL_INFO  
                   
 </p>  
 <p>/ EFFECT_INSTANCE_COUNT  
                   
 </p>  
 <p>/ EFFECT_INSTANCE_INFO  
                   
 </p>  
 <p>/ SEND_EFFECT_CHAIN_COUNT  
                   
 </p>  
 <p>/ SEND_EFFECT_CHAIN_INFO  
                   
 </p>  
 </blockquote><p>  
   
 </p>  
 <p>unsubscribe_event =  
         </p>  
 <blockquote class="text">  
 <p>AUDIO_OUTPUT_DEVICE_COUNT  
                   
 </p>  
 <p>/ AUDIO_OUTPUT_DEVICE_INFO  
                   
 </p>  
 <p>/ MIDI_INPUT_DEVICE_COUNT  
                   
 </p>  
 <p>/ MIDI_INPUT_DEVICE_INFO  
                   
 </p>  
 <p>/ CHANNEL_COUNT  
                   
 </p>  
 <p>/ CHANNEL_MIDI  
                   
 </p>  
 <p>/ DEVICE_MIDI  
                   
 </p>  
 <p>/ VOICE_COUNT  
                   
 </p>  
 <p>/ STREAM_COUNT  
                   
 </p>  
 <p>/ BUFFER_FILL  
                   
 </p>  
 <p>/ CHANNEL_INFO  
                   
 </p>  
 <p>/ FX_SEND_COUNT  
                   
 </p>  
 <p>/ FX_SEND_INFO  
                   
 </p>  
 <p>/ MIDI_INSTRUMENT_MAP_COUNT  
                   
 </p>  
 <p>/ MIDI_INSTRUMENT_MAP_INFO  
                   
 </p>  
 <p>/ MIDI_INSTRUMENT_COUNT  
                   
 </p>  
 <p>/ MIDI_INSTRUMENT_INFO  
                   
 </p>  
 <p>/ DB_INSTRUMENT_DIRECTORY_COUNT  
                   
 </p>  
 <p>/ DB_INSTRUMENT_DIRECTORY_INFO  
                   
 </p>  
 <p>/ DB_INSTRUMENT_COUNT  
                   
 </p>  
 <p>/ DB_INSTRUMENT_INFO  
                   
 </p>  
 <p>/ DB_INSTRUMENTS_JOB_INFO  
                   
 </p>  
 <p>/ MISCELLANEOUS  
                   
 </p>  
 <p>/ TOTAL_STREAM_COUNT  
                   
 </p>  
 <p>/ TOTAL_VOICE_COUNT  
                   
 </p>  
 <p>/ GLOBAL_INFO  
                   
 </p>  
 <p>/ EFFECT_INSTANCE_COUNT  
                   
 </p>  
 <p>/ EFFECT_INSTANCE_INFO  
                   
 </p>  
 <p>/ SEND_EFFECT_CHAIN_COUNT  
                   
 </p>  
 <p>/ SEND_EFFECT_CHAIN_INFO  
                   
 </p>  
 </blockquote><p>  
   
 </p>  
 <p>map_instruction =  
         </p>  
 <blockquote class="text">  
 <p>MIDI_INSTRUMENT SP modal_arg midi_map SP midi_bank SP midi_prog SP engine_name SP filename SP instrument_index SP volume_value  
                   
 </p>  
 <p>/ MIDI_INSTRUMENT SP modal_arg midi_map SP midi_bank SP midi_prog SP engine_name SP filename SP instrument_index SP volume_value SP instr_load_mode  
                   
 </p>  
 <p>/ MIDI_INSTRUMENT SP modal_arg midi_map SP midi_bank SP midi_prog SP engine_name SP filename SP instrument_index SP volume_value SP entry_name  
                   
 </p>  
 <p>/ MIDI_INSTRUMENT SP modal_arg midi_map SP midi_bank SP midi_prog SP engine_name SP filename SP instrument_index SP volume_value SP instr_load_mode SP entry_name  
                   
 </p>  
 </blockquote><p>  
   
 </p>  
 <p>unmap_instruction =  
         </p>  
 <blockquote class="text">  
 <p>MIDI_INSTRUMENT SP midi_map SP midi_bank SP midi_prog  
                   
 </p>  
 </blockquote><p>  
   
 </p>  
 <p>remove_instruction =  
         </p>  
 <blockquote class="text">  
 <p>CHANNEL SP sampler_channel  
                   
 </p>  
 <p>/ CHANNEL SP MIDI_INPUT SP sampler_channel  
                   
 </p>  
 <p>/ CHANNEL SP MIDI_INPUT SP sampler_channel SP device_index  
                   
 </p>  
 <p>/ CHANNEL SP MIDI_INPUT SP sampler_channel SP device_index SP midi_input_port_index  
                   
 </p>  
 <p>/ MIDI_INSTRUMENT_MAP SP midi_map  
                   
 </p>  
 <p>/ MIDI_INSTRUMENT_MAP SP ALL  
                   
 </p>  
 <p>/ SEND_EFFECT_CHAIN SP device_index SP effect_chain  
                   
 </p>  
 <p>/ SEND_EFFECT_CHAIN SP EFFECT SP device_index SP effect_chain SP chain_pos  
                   
 </p>  
 <p>/ FX_SEND SP EFFECT SP sampler_channel SP fx_send_id  
                   
 </p>  
 <p>/ DB_INSTRUMENT_DIRECTORY SP FORCE SP db_path  
                   
 </p>  
 <p>/ DB_INSTRUMENT_DIRECTORY SP db_path  
                   
 </p>  
 <p>/ DB_INSTRUMENT SP db_path  
                   
 </p>  
 </blockquote><p>  
   
 </p>  
 <p>get_instruction =  
         </p>  
 <blockquote class="text">  
 <p>AVAILABLE_ENGINES  
                   
 </p>  
 <p>/ AVAILABLE_EFFECTS  
                   
 </p>  
 <p>/ EFFECT_INSTANCES  
                   
 </p>  
 <p>/ EFFECT SP INFO SP effect_index  
                   
 </p>  
 <p>/ EFFECT_INSTANCE SP INFO SP effect_instance  
                   
 </p>  
 <p>/ EFFECT_INSTANCE_INPUT_CONTROL SP INFO SP effect_instance SP input_control  
                   
 </p>  
 <p>/ SEND_EFFECT_CHAINS SP device_index  
                   
 </p>  
 <p>/ SEND_EFFECT_CHAIN SP INFO SP device_index SP effect_chain  
                   
 </p>  
 <p>/ AVAILABLE_MIDI_INPUT_DRIVERS  
                   
 </p>  
 <p>/ MIDI_INPUT_DRIVER SP INFO SP string  
                   
 </p>  
 <p>/ MIDI_INPUT_DRIVER_PARAMETER SP INFO SP string SP string  
                   
 </p>  
 <p>/ MIDI_INPUT_DRIVER_PARAMETER SP INFO SP string SP string SP key_val_list  
                   
 </p>  
 <p>/ AVAILABLE_AUDIO_OUTPUT_DRIVERS  
                   
 </p>  
 <p>/ AUDIO_OUTPUT_DRIVER SP INFO SP string  
                   
 </p>  
 <p>/ AUDIO_OUTPUT_DRIVER_PARAMETER SP INFO SP string SP string  
                   
 </p>  
 <p>/ AUDIO_OUTPUT_DRIVER_PARAMETER SP INFO SP string SP string SP key_val_list  
                   
 </p>  
 <p>/ AUDIO_OUTPUT_DEVICES  
                   
 </p>  
 <p>/ MIDI_INPUT_DEVICES  
                   
 </p>  
 <p>/ AUDIO_OUTPUT_DEVICE SP INFO SP number  
                   
 </p>  
 <p>/ MIDI_INPUT_DEVICE SP INFO SP number  
                   
 </p>  
 <p>/ MIDI_INPUT_PORT SP INFO SP number SP number  
                   
 </p>  
 <p>/ MIDI_INPUT_PORT_PARAMETER SP INFO SP number SP number SP string  
                   
 </p>  
 <p>/ AUDIO_OUTPUT_CHANNEL SP INFO SP number SP number  
                   
 </p>  
 <p>/ AUDIO_OUTPUT_CHANNEL_PARAMETER SP INFO SP number SP number SP string  
                   
 </p>  
 <p>/ CHANNELS  
                   
 </p>  
 <p>/ CHANNEL SP INFO SP sampler_channel  
                   
 </p>  
 <p>/ CHANNEL SP BUFFER_FILL SP buffer_size_type SP sampler_channel  
                   
 </p>  
 <p>/ CHANNEL SP STREAM_COUNT SP sampler_channel  
                   
 </p>  
 <p>/ CHANNEL SP VOICE_COUNT SP sampler_channel  
                   
 </p>  
 <p>/ ENGINE SP INFO SP engine_name  
                   
 </p>  
 <p>/ SERVER SP INFO  
                   
 </p>  
 <p>/ TOTAL_STREAM_COUNT  
                   
 </p>  
 <p>/ TOTAL_VOICE_COUNT  
                   
 </p>  
 <p>/ TOTAL_VOICE_COUNT_MAX  
                   
 </p>  
 <p>/ MIDI_INSTRUMENTS SP midi_map  
                   
 </p>  
 <p>/ MIDI_INSTRUMENTS SP ALL  
                   
 </p>  
 <p>/ MIDI_INSTRUMENT SP INFO SP midi_map SP midi_bank SP midi_prog  
                   
 </p>  
 <p>/ MIDI_INSTRUMENT_MAPS  
                   
 </p>  
 <p>/ MIDI_INSTRUMENT_MAP SP INFO SP midi_map  
                   
 </p>  
 <p>/ FX_SENDS SP sampler_channel  
                   
 </p>  
 <p>/ FX_SEND SP INFO SP sampler_channel SP fx_send_id  
                   
 </p>  
 <p>/ DB_INSTRUMENT_DIRECTORIES SP RECURSIVE SP db_path  
                   
 </p>  
 <p>/ DB_INSTRUMENT_DIRECTORIES SP db_path  
                   
 </p>  
 <p>/ DB_INSTRUMENT_DIRECTORY SP INFO SP db_path  
                   
 </p>  
 <p>/ DB_INSTRUMENTS SP RECURSIVE SP db_path  
                   
 </p>  
 <p>/ DB_INSTRUMENTS SP db_path  
                   
 </p>  
 <p>/ DB_INSTRUMENT SP INFO SP db_path  
                   
 </p>  
 <p>/ DB_INSTRUMENTS_JOB SP INFO SP number  
                   
 </p>  
 <p>/ VOLUME  
                   
 </p>  
 <p>/ VOICES  
                   
 </p>  
 <p>/ STREAMS  
                   
 </p>  
 <p>/ FILE SP INSTRUMENTS SP filename  
                   
 </p>  
 <p>/ FILE SP INSTRUMENT SP INFO SP filename SP instrument_index  
                   
 </p>  
 </blockquote><p>  
   
 </p>  
 <p>set_instruction =  
         </p>  
 <blockquote class="text">  
 <p>AUDIO_OUTPUT_DEVICE_PARAMETER SP number SP string '=' param_val_list  
                   
 </p>  
 <p>/ AUDIO_OUTPUT_CHANNEL_PARAMETER SP number SP number SP string '=' param_val_list  
                   
 </p>  
 <p>/ MIDI_INPUT_DEVICE_PARAMETER SP number SP string '=' param_val_list  
                   
 </p>  
 <p>/ MIDI_INPUT_PORT_PARAMETER SP number SP number SP string '=' NONE  
                   
 </p>  
 <p>/ MIDI_INPUT_PORT_PARAMETER SP number SP number SP string '=' param_val_list  
                   
 </p>  
 <p>/ EFFECT_INSTANCE_INPUT_CONTROL SP VALUE SP effect_instance SP input_control SP control_value  
                   
 </p>  
 <p>/ CHANNEL SP set_chan_instruction  
                   
 </p>  
 <p>/ MIDI_INSTRUMENT_MAP SP NAME SP midi_map SP map_name  
                   
 </p>  
 <p>/ FX_SEND SP NAME SP sampler_channel SP fx_send_id SP fx_send_name  
                   
 </p>  
 <p>/ FX_SEND SP AUDIO_OUTPUT_CHANNEL SP sampler_channel SP fx_send_id SP audio_channel_index SP audio_channel_index  
                   
 </p>  
 <p>/ FX_SEND SP MIDI_CONTROLLER SP sampler_channel SP fx_send_id SP midi_ctrl  
                   
 </p>  
 <p>/ FX_SEND SP LEVEL SP sampler_channel SP fx_send_id SP volume_value  
                   
 </p>  
 <p>/ FX_SEND SP EFFECT SP sampler_channel SP fx_send_id SP effect_chain SP chain_pos  
                   
 </p>  
 <p>/ DB_INSTRUMENT_DIRECTORY SP NAME SP db_path SP stringval_escaped  
                   
 </p>  
 <p>/ DB_INSTRUMENT_DIRECTORY SP DESCRIPTION SP db_path SP stringval_escaped  
                   
 </p>  
 <p>/ DB_INSTRUMENT SP NAME SP db_path SP stringval_escaped  
                   
 </p>  
 <p>/ DB_INSTRUMENT SP DESCRIPTION SP db_path SP stringval_escaped  
                   
 </p>  
 <p>/ DB_INSTRUMENT SP FILE_PATH SP filename SP filename  
                   
 </p>  
 <p>/ ECHO SP boolean  
                   
 </p>  
 <p>/ SHELL SP INTERACT SP boolean  
                   
 </p>  
 <p>/ SHELL SP AUTO_CORRECT SP boolean  
                   
 </p>  
 <p>/ SHELL SP DOC SP boolean  
                   
 </p>  
 <p>/ VOLUME SP volume_value  
                   
 </p>  
 <p>/ VOICES SP number  
                   
 </p>  
 <p>/ STREAMS SP number  
                   
 </p>  
 </blockquote><p>  
   
 </p>  
 <p>create_instruction =  
         </p>  
 <blockquote class="text">  
 <p>AUDIO_OUTPUT_DEVICE SP string SP key_val_list  
                   
 </p>  
 <p>/ AUDIO_OUTPUT_DEVICE SP string  
                   
 </p>  
 <p>/ MIDI_INPUT_DEVICE SP string SP key_val_list  
                   
 </p>  
 <p>/ MIDI_INPUT_DEVICE SP string  
                   
 </p>  
 <p>/ FX_SEND SP sampler_channel SP midi_ctrl  
                   
 </p>  
 <p>/ FX_SEND SP sampler_channel SP midi_ctrl SP fx_send_name  
                   
 </p>  
 <p>/ EFFECT_INSTANCE SP effect_index  
                   
 </p>  
 <p>/ EFFECT_INSTANCE SP effect_system SP module SP effect_name  
                   
 </p>  
 </blockquote><p>  
   
 </p>  
 <p>reset_instruction =  
         </p>  
 <blockquote class="text">  
 <p>CHANNEL SP sampler_channel  
                   
 </p>  
 </blockquote><p>  
   
 </p>  
 <p>clear_instruction =  
         </p>  
 <blockquote class="text">  
 <p>MIDI_INSTRUMENTS SP midi_map  
                   
 </p>  
 <p>/ MIDI_INSTRUMENTS SP ALL  
                   
 </p>  
 </blockquote><p>  
   
 </p>  
 <p>find_instruction =  
         </p>  
 <blockquote class="text">  
 <p>DB_INSTRUMENTS SP NON_RECURSIVE SP db_path SP query_val_list  
                   
 </p>  
 <p>/ DB_INSTRUMENTS SP db_path SP query_val_list  
                   
 </p>  
 <p>/ DB_INSTRUMENT_DIRECTORIES SP NON_RECURSIVE SP db_path SP query_val_list  
                   
 </p>  
 <p>/ DB_INSTRUMENT_DIRECTORIES SP db_path SP query_val_list  
                   
 </p>  
 <p>/ LOST SP DB_INSTRUMENT_FILES  
                   
 </p>  
 </blockquote><p>  
   
 </p>  
 <p>move_instruction =  
         </p>  
 <blockquote class="text">  
 <p>DB_INSTRUMENT_DIRECTORY SP db_path SP db_path  
                   
 </p>  
 <p>/ DB_INSTRUMENT SP db_path SP db_path  
                   
 </p>  
 </blockquote><p>  
   
 </p>  
 <p>copy_instruction =  
         </p>  
 <blockquote class="text">  
 <p>DB_INSTRUMENT_DIRECTORY SP db_path SP db_path  
                   
 </p>  
 <p>/ DB_INSTRUMENT SP db_path SP db_path  
                   
 </p>  
 </blockquote><p>  
   
 </p>  
 <p>destroy_instruction =  
         </p>  
 <blockquote class="text">  
 <p>AUDIO_OUTPUT_DEVICE SP number  
                   
 </p>  
 <p>/ MIDI_INPUT_DEVICE SP number  
                   
 </p>  
 <p>/ FX_SEND SP sampler_channel SP fx_send_id  
                   
 </p>  
 <p>/ EFFECT_INSTANCE SP number  
                   
 </p>  
 </blockquote><p>  
   
 </p>  
 <p>load_instruction =  
         </p>  
 <blockquote class="text">  
 <p>INSTRUMENT SP load_instr_args  
                   
 </p>  
 <p>/ ENGINE SP load_engine_args  
                   
 </p>  
 </blockquote><p>  
   
 </p>  
 <p>append_instruction =  
         </p>  
 <blockquote class="text">  
 <p>SEND_EFFECT_CHAIN SP EFFECT SP device_index SP effect_chain SP effect_instance  
                   
 </p>  
 </blockquote><p>  
   
 </p>  
 <p>insert_instruction =  
         </p>  
 <blockquote class="text">  
 <p>SEND_EFFECT_CHAIN SP EFFECT SP device_index SP effect_chain SP chain_pos SP effect_instance  
                   
 </p>  
 </blockquote><p>  
   
 </p>  
 <p>set_chan_instruction =  
         </p>  
 <blockquote class="text">  
 <p>AUDIO_OUTPUT_DEVICE SP sampler_channel SP device_index  
                   
 </p>  
 <p>/ AUDIO_OUTPUT_CHANNEL SP sampler_channel SP audio_channel_index SP audio_channel_index  
                   
 </p>  
 <p>/ AUDIO_OUTPUT_TYPE SP sampler_channel SP audio_output_type_name  
                   
 </p>  
 <p>/ MIDI_INPUT SP sampler_channel SP device_index SP midi_input_port_index SP midi_input_channel_index  
                   
 </p>  
 <p>/ MIDI_INPUT_DEVICE SP sampler_channel SP device_index  
                   
 </p>  
 <p>/ MIDI_INPUT_PORT SP sampler_channel SP midi_input_port_index  
                   
 </p>  
 <p>/ MIDI_INPUT_CHANNEL SP sampler_channel SP midi_input_channel_index  
                   
 </p>  
 <p>/ MIDI_INPUT_TYPE SP sampler_channel SP midi_input_type_name  
                   
 </p>  
 <p>/ VOLUME SP sampler_channel SP volume_value  
                   
 </p>  
 <p>/ MUTE SP sampler_channel SP boolean  
                   
 </p>  
 <p>/ SOLO SP sampler_channel SP boolean  
                   
 </p>  
 <p>/ MIDI_INSTRUMENT_MAP SP sampler_channel SP midi_map  
                   
 </p>  
 <p>/ MIDI_INSTRUMENT_MAP SP sampler_channel SP NONE  
                   
 </p>  
 <p>/ MIDI_INSTRUMENT_MAP SP sampler_channel SP DEFAULT  
                   
 </p>  
 </blockquote><p>  
   
 </p>  
 <p>edit_instruction =  
         </p>  
 <blockquote class="text">  
 <p>CHANNEL SP INSTRUMENT SP sampler_channel  
                   
 </p>  
 </blockquote><p>  
   
 </p>  
 <p>format_instruction =  
         </p>  
 <blockquote class="text">  
 <p>INSTRUMENTS_DB  
                   
 </p>  
 </blockquote><p>  
   
 </p>  
 <p>modal_arg =  
         </p>  
 <blockquote class="text">  
 <p>/* epsilon (empty argument) */  
                   
 </p>  
 <p>/ NON_MODAL SP  
                   
 </p>  
 </blockquote><p>  
   
 </p>  
 <p>key_val_list =  
         </p>  
 <blockquote class="text">  
 <p>string '=' param_val_list  
                   
 </p>  
 <p>/ key_val_list SP string '=' param_val_list  
                   
 </p>  
 </blockquote><p>  
   
 </p>  
 <p>buffer_size_type =  
         </p>  
 <blockquote class="text">  
 <p>BYTES  
                   
 </p>  
 <p>/ PERCENTAGE  
                   
 </p>  
 </blockquote><p>  
   
 </p>  
 <p>list_instruction =  
         </p>  
 <blockquote class="text">  
 <p>AUDIO_OUTPUT_DEVICES  
                   
 </p>  
 <p>/ MIDI_INPUT_DEVICES  
                   
 </p>  
 <p>/ CHANNELS  
                   
 </p>  
 <p>/ CHANNEL SP MIDI_INPUTS SP sampler_channel  
                   
 </p>  
 <p>/ AVAILABLE_ENGINES  
                   
 </p>  
 <p>/ AVAILABLE_EFFECTS  
                   
 </p>  
 <p>/ EFFECT_INSTANCES  
                   
 </p>  
 <p>/ SEND_EFFECT_CHAINS SP number  
                   
 </p>  
 <p>/ AVAILABLE_MIDI_INPUT_DRIVERS  
                   
 </p>  
 <p>/ AVAILABLE_AUDIO_OUTPUT_DRIVERS  
                   
 </p>  
 <p>/ MIDI_INSTRUMENTS SP midi_map  
                   
 </p>  
 <p>/ MIDI_INSTRUMENTS SP ALL  
                   
 </p>  
 <p>/ MIDI_INSTRUMENT_MAPS  
                   
 </p>  
 <p>/ FX_SENDS SP sampler_channel  
                   
 </p>  
 <p>/ DB_INSTRUMENT_DIRECTORIES SP RECURSIVE SP db_path  
                   
 </p>  
 <p>/ DB_INSTRUMENT_DIRECTORIES SP db_path  
                   
 </p>  
 <p>/ DB_INSTRUMENTS SP RECURSIVE SP db_path  
                   
 </p>  
 <p>/ DB_INSTRUMENTS SP db_path  
                   
 </p>  
 <p>/ FILE SP INSTRUMENTS SP filename  
                   
 </p>  
 </blockquote><p>  
   
 </p>  
 <p>send_instruction =  
         </p>  
 <blockquote class="text">  
 <p>CHANNEL SP MIDI_DATA SP string SP sampler_channel SP number SP number  
                   
 </p>  
 </blockquote><p>  
   
 </p>  
 <p>load_instr_args =  
         </p>  
 <blockquote class="text">  
 <p>filename SP instrument_index SP sampler_channel  
                   
 </p>  
 <p>/ NON_MODAL SP filename SP instrument_index SP sampler_channel  
                   
 </p>  
 </blockquote><p>  
   
 </p>  
 <p>load_engine_args =  
         </p>  
 <blockquote class="text">  
 <p>engine_name SP sampler_channel  
                   
 </p>  
 </blockquote><p>  
   
 </p>  
 <p>instr_load_mode =  
         </p>  
 <blockquote class="text">  
 <p>ON_DEMAND  
                   
 </p>  
 <p>/ ON_DEMAND_HOLD  
                   
 </p>  
 <p>/ PERSISTENT  
                   
 </p>  
 </blockquote><p>  
   
 </p>  
 <p>effect_instance =  
         </p>  
 <blockquote class="text">  
 <p>number  
                   
 </p>  
 </blockquote><p>  
   
 </p>  
 <p>device_index =  
         </p>  
 <blockquote class="text">  
 <p>number  
                   
 </p>  
 </blockquote><p>  
   
 </p>  
 <p>audio_channel_index =  
         </p>  
 <blockquote class="text">  
 <p>number  
                   
 </p>  
 </blockquote><p>  
   
 </p>  
 <p>audio_output_type_name =  
         </p>  
 <blockquote class="text">  
 <p>string  
                   
 </p>  
 </blockquote><p>  
   
 </p>  
 <p>midi_input_port_index =  
         </p>  
 <blockquote class="text">  
 <p>number  
                   
 </p>  
 </blockquote><p>  
   
 </p>  
 <p>midi_input_channel_index =  
         </p>  
 <blockquote class="text">  
 <p>number  
                   
 </p>  
 <p>/ ALL  
                   
 </p>  
 </blockquote><p>  
   
 </p>  
 <p>midi_input_type_name =  
         </p>  
 <blockquote class="text">  
 <p>string  
                   
 </p>  
 </blockquote><p>  
   
 </p>  
 <p>midi_map =  
         </p>  
 <blockquote class="text">  
 <p>number  
                   
 </p>  
 </blockquote><p>  
   
 </p>  
 <p>midi_bank =  
         </p>  
 <blockquote class="text">  
 <p>number  
                   
 </p>  
 </blockquote><p>  
   
 </p>  
 <p>midi_prog =  
         </p>  
 <blockquote class="text">  
 <p>number  
                   
 </p>  
 </blockquote><p>  
   
 </p>  
 <p>midi_ctrl =  
         </p>  
 <blockquote class="text">  
 <p>number  
                   
 </p>  
 </blockquote><p>  
   
 </p>  
 <p>volume_value =  
         </p>  
 <blockquote class="text">  
 <p>dotnum  
                   
 </p>  
 <p>/ number  
                   
 </p>  
 </blockquote><p>  
   
 </p>  
 <p>control_value =  
         </p>  
 <blockquote class="text">  
 <p>real  
                   
 </p>  
 </blockquote><p>  
   
 </p>  
 <p>sampler_channel =  
         </p>  
 <blockquote class="text">  
 <p>number  
                   
 </p>  
 </blockquote><p>  
   
 </p>  
 <p>instrument_index =  
         </p>  
 <blockquote class="text">  
 <p>number  
                   
 </p>  
 </blockquote><p>  
   
 </p>  
 <p>fx_send_id =  
         </p>  
 <blockquote class="text">  
 <p>number  
                   
 </p>  
 </blockquote><p>  
   
 </p>  
 <p>engine_name =  
         </p>  
 <blockquote class="text">  
 <p>string  
                   
 </p>  
 </blockquote><p>  
   
 </p>  
 <p>filename =  
         </p>  
 <blockquote class="text">  
 <p>path  
                   
 </p>  
 </blockquote><p>  
   
 </p>  
 <p>db_path =  
         </p>  
 <blockquote class="text">  
 <p>path  
                   
 </p>  
 </blockquote><p>  
   
 </p>  
 <p>map_name =  
         </p>  
 <blockquote class="text">  
 <p>stringval_escaped  
                   
 </p>  
 </blockquote><p>  
   
 </p>  
 <p>entry_name =  
         </p>  
 <blockquote class="text">  
 <p>stringval_escaped  
                   
 </p>  
 </blockquote><p>  
   
 </p>  
 <p>fx_send_name =  
         </p>  
 <blockquote class="text">  
 <p>stringval_escaped  
                   
 </p>  
 </blockquote><p>  
   
 </p>  
 <p>effect_name =  
         </p>  
 <blockquote class="text">  
 <p>stringval_escaped  
                   
 </p>  
 </blockquote><p>  
   
 </p>  
 <p>effect_index =  
         </p>  
 <blockquote class="text">  
 <p>number  
                   
 </p>  
 </blockquote><p>  
   
 </p>  
 <p>effect_chain =  
         </p>  
 <blockquote class="text">  
 <p>number  
                   
 </p>  
 </blockquote><p>  
   
 </p>  
 <p>chain_pos =  
         </p>  
 <blockquote class="text">  
 <p>number  
                   
 </p>  
 </blockquote><p>  
   
 </p>  
 <p>input_control =  
         </p>  
 <blockquote class="text">  
 <p>number  
                   
 </p>  
 </blockquote><p>  
   
 </p>  
 <p>param_val_list =  
         </p>  
 <blockquote class="text">  
 <p>param_val  
                   
 </p>  
 <p>/ param_val_list','param_val  
                   
 </p>  
 </blockquote><p>  
   
 </p>  
 <p>param_val =  
         </p>  
 <blockquote class="text">  
 <p>string  
                   
 </p>  
 <p>/ stringval  
                   
 </p>  
 <p>/ number  
                   
 </p>  
 <p>/ dotnum  
                   
 </p>  
 </blockquote><p>  
   
 </p>  
 <p>query_val_list =  
         </p>  
 <blockquote class="text">  
 <p>string '=' query_val  
                   
 </p>  
 <p>/ query_val_list SP string '=' query_val  
                   
 </p>  
 </blockquote><p>  
   
 </p>  
 <p>query_val =  
         </p>  
 <blockquote class="text">  
 <p>text_escaped  
                   
 </p>  
 <p>/ stringval_escaped  
                   
 </p>  
 </blockquote><p>  
   
 </p>  
 <p>scan_mode =  
         </p>  
 <blockquote class="text">  
 <p>RECURSIVE  
                   
 </p>  
 <p>/ NON_RECURSIVE  
                   
 </p>  
 <p>/ FLAT  
                   
 </p>  
 </blockquote><p>  
   
 </p>  
 <p>effect_system =  
         </p>  
 <blockquote class="text">  
 <p>string  
                   
 </p>  
 </blockquote><p>  
   
 </p>  
 <p>module =  
         </p>  
 <blockquote class="text">  
 <p>filename  
                   
 </p>  
 </blockquote><p>  
   
 </p>  
 <a name="character_set"></a><br /><hr />  
 <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
 <a name="rfc.section.7.1"></a><h3>7.1.&nbsp;  
 Character Set and Escape Sequences</h3>  
   
 <p>Older versions of this protocol up to and including v1.1 only  
                 supported the standard ASCII character set (ASCII code 0 - 127)  
                 <a class='info' href='#RFC20'>[RFC20]<span> (</span><span class='info'>UCLA, &ldquo;ASCII format for Network Interchange,&rdquo; 1969.</span><span>)</span></a>, all younger versions of this protocol  
                 however support the Extended ASCII character set (ASCII code  
                 0 - 255). The same group of younger protocols also support  
                 escape sequences, but only for certain, explicitly declared  
                 parts of the protocol. The supported escape sequences are  
                 defined as follows:  
 </p><table class="full" align="center" border="0" cellpadding="2" cellspacing="2">  
 <col align="left"><col align="left">  
 <tr><th align="left">ASCII Character Sequence</th><th align="left">Translated into (Name)</th></tr>  
 <tr>  
 <td align="left">\n</td>  
 <td align="left">new line</td>  
 </tr>  
 <tr>  
 <td align="left">\r</td>  
 <td align="left">carriage return</td>  
 </tr>  
 <tr>  
 <td align="left">\f</td>  
 <td align="left">form feed</td>  
 </tr>  
 <tr>  
 <td align="left">\t</td>  
 <td align="left">horizontal tab</td>  
 </tr>  
 <tr>  
 <td align="left">\v</td>  
 <td align="left">vertical tab</td>  
 </tr>  
 <tr>  
 <td align="left">\'</td>  
 <td align="left">apostrophe</td>  
 </tr>  
 <tr>  
 <td align="left">\"</td>  
 <td align="left">quotation mark</td>  
595  </tr>  </tr>
596  <tr>  <tr>
597  <td align="left">\\</td>    <td class="left">Internet-Draft</td>
598  <td align="left">backslash</td>    <td class="right">LinuxSampler.org</td>
599  </tr>  </tr>
600  <tr>  <tr>
601  <td align="left">\OOO</td>    <td class="left">Intended status: Informational</td>
602  <td align="left">three digit octal ASCII code of the character</td>    <td class="right">March 11, 2019</td>
603  </tr>  </tr>
604  <tr>  <tr>
605  <td align="left">\xHH</td>    <td class="left">Expires: September 12, 2019</td>
606  <td align="left">two digit hex ASCII code of the character</td>    <td class="right"></td>
607  </tr>  </tr>
 </table>  
 <br clear="all" />  
608    
609  <p>Notice: due to the transition of certain parts of the          
610                  protocol which now support escape sequences, a slight backward      </tbody>
611                  incompatibility to protocols version v1.1 and younger has been    </table>
612                  introduced. The only difference is that in parts of the protocol  
613                  where escape characters are now supported, a backslash characters    <p class="title">LinuxSampler Control Protocol<br />
614                  MUST be escaped as well (that is as double backslash), whereas    <span class="filename">LSCP 1.7</span></p>
615                  in the old versions a single backslash was sufficient.    
616  </p>    <h1 id="rfc.abstract">
617  <p>The following LSCP commands support escape sequences as part    <a href="#rfc.abstract">Abstract</a>
618                  of their filename / path based arguments and / or may contain  </h1>
619                  a filename / path with escape sequences in their response:  <p>The LinuxSampler Control Protocol (LSCP) is an application-level protocol primarily intended for local and remote controlling the LinuxSampler backend application, which is a sophisticated server-like console application essentially playing back audio samples and manipulating the samples in real time to certain extent.</p>
620                  </p>  <h1 id="rfc.status">
621  <blockquote class="text">    <a href="#rfc.status">Status of This Memo</a>
622  <p><a class='info' href='#LOAD INSTRUMENT'>"LOAD INSTRUMENT"<span> (</span><span class='info'>Loading an instrument</span><span>)</span></a>  </h1>
623  </p>  <p>This Internet-Draft is submitted in full conformance with the provisions of BCP 78 and BCP 79.</p>
624  <p><a class='info' href='#GET CHANNEL INFO'>"GET CHANNEL INFO"<span> (</span><span class='info'>Getting sampler channel information</span><span>)</span></a>  <p>Internet-Drafts are working documents of the Internet Engineering Task Force (IETF).  Note that other groups may also distribute working documents as Internet-Drafts.  The list of current Internet-Drafts is at http://datatracker.ietf.org/drafts/current/.</p>
625  </p>  <p>Internet-Drafts are draft documents valid for a maximum of six months and may be updated, replaced, or obsoleted by other documents at any time.  It is inappropriate to use Internet-Drafts as reference material or to cite them other than as "work in progress."</p>
626  <p><a class='info' href='#MAP MIDI_INSTRUMENT'>"MAP MIDI_INSTRUMENT"<span> (</span><span class='info'>Create or replace a MIDI instrument map entry</span><span>)</span></a>  <p>This Internet-Draft will expire on September 12, 2019.</p>
627  </p>  <h1 id="rfc.copyrightnotice">
628  <p><a class='info' href='#GET MIDI_INSTRUMENT INFO'>"GET MIDI_INSTRUMENT INFO"<span> (</span><span class='info'>Get current settings of MIDI instrument map entry</span><span>)</span></a>    <a href="#rfc.copyrightnotice">Copyright Notice</a>
629  </p>  </h1>
630  <p><a class='info' href='#ADD DB_INSTRUMENT_DIRECTORY'>"ADD DB_INSTRUMENT_DIRECTORY"<span> (</span><span class='info'>Creating a new instrument directory</span><span>)</span></a>  <p>Copyright (c) 2019 IETF Trust and the persons identified as the document authors.  All rights reserved.</p>
631  </p>  <p>This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (http://trustee.ietf.org/license-info) in effect on the date of publication of this document.  Please review these documents carefully, as they describe your rights and restrictions with respect to this document.  Code Components extracted from this document must include Simplified BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Simplified BSD License.</p>
632  <p><a class='info' href='#ADD DB_INSTRUMENTS'>"ADD DB_INSTRUMENTS"<span> (</span><span class='info'>Adding instruments to the instruments database</span><span>)</span></a>  <p>This document may not be modified, and derivative works of it may not be created, and it may not be published except as an Internet-Draft.</p>
633  </p>  
634  <p><a class='info' href='#REMOVE DB_INSTRUMENT_DIRECTORY'>"REMOVE DB_INSTRUMENT_DIRECTORY"<span> (</span><span class='info'>Deleting an instrument directory</span><span>)</span></a>    
635  </p>    <hr class="noprint" />
636  <p><a class='info' href='#REMOVE DB_INSTRUMENT'>"REMOVE DB_INSTRUMENT"<span> (</span><span class='info'>Removing an instrument</span><span>)</span></a>    <h1 class="np" id="rfc.toc"><a href="#rfc.toc">Table of Contents</a></h1>
637  </p>    <ul class="toc">
638  <p><a class='info' href='#GET DB_INSTRUMENT_DIRECTORIES'>"GET DB_INSTRUMENT_DIRECTORIES"<span> (</span><span class='info'>Getting amount of instrument directories</span><span>)</span></a>  
639  </p>          <li>1.   <a href="#rfc.section.1">Requirements notation</a></li>
640  <p><a class='info' href='#LIST DB_INSTRUMENT_DIRECTORIES'>"LIST DB_INSTRUMENT_DIRECTORIES"<span> (</span><span class='info'>Listing all directories in specific directory</span><span>)</span></a>  <li>2.   <a href="#rfc.section.2">Versioning of this specification</a></li>
641  </p>  <li>3.   <a href="#rfc.section.3">Introduction</a></li>
642  <p><a class='info' href='#GET DB_INSTRUMENT_DIRECTORY INFO'>"GET DB_INSTRUMENT_DIRECTORY INFO"<span> (</span><span class='info'>Getting instrument directory information</span><span>)</span></a>  <li>4.   <a href="#rfc.section.4">Focus of this protocol</a></li>
643  </p>  <li>5.   <a href="#rfc.section.5">Communication Overview</a></li>
644  <p><a class='info' href='#GET DB_INSTRUMENTS'>"GET DB_INSTRUMENTS"<span> (</span><span class='info'>Getting amount of instruments</span><span>)</span></a>  <ul><li>5.1.   <a href="#rfc.section.5.1">Request/response communication method</a></li>
645  </p>  <ul><li>5.1.1.   <a href="#rfc.section.5.1.1">Result format</a></li>
646  <p><a class='info' href='#LIST DB_INSTRUMENTS'>"LIST DB_INSTRUMENTS"<span> (</span><span class='info'>Listing all instruments in specific directory</span><span>)</span></a>  </ul><li>5.2.   <a href="#rfc.section.5.2">Subscribe/notify communication method</a></li>
647  </p>  </ul><li>6.   <a href="#rfc.section.6">Description for control commands</a></li>
648  <p><a class='info' href='#GET DB_INSTRUMENT INFO'>"GET DB_INSTRUMENT INFO"<span> (</span><span class='info'>Getting instrument information</span><span>)</span></a>  <ul><li>6.1.   <a href="#rfc.section.6.1">Ignored lines and comments</a></li>
649  </p>  <li>6.2.   <a href="#rfc.section.6.2">Configuring audio drivers</a></li>
650  <p><a class='info' href='#SET DB_INSTRUMENT_DIRECTORY NAME'>"SET DB_INSTRUMENT_DIRECTORY NAME"<span> (</span><span class='info'>Renaming an instrument directory</span><span>)</span></a>  <ul><li>6.2.1.   <a href="#rfc.section.6.2.1">Getting amount of available audio output drivers</a></li>
651  </p>  <li>6.2.2.   <a href="#rfc.section.6.2.2">Getting all available audio output drivers</a></li>
652  <p><a class='info' href='#SET DB_INSTRUMENT_DIRECTORY DESCRIPTION'>"SET DB_INSTRUMENT_DIRECTORY DESCRIPTION"<span> (</span><span class='info'>Changing the description of directory</span><span>)</span></a>  <li>6.2.3.   <a href="#rfc.section.6.2.3">Getting information about a specific audio                 output driver</a></li>
653  </p>  <li>6.2.4.   <a href="#rfc.section.6.2.4">Getting information about specific audio                 output driver parameter</a></li>
654  <p><a class='info' href='#SET DB_INSTRUMENT NAME'>"SET DB_INSTRUMENT NAME"<span> (</span><span class='info'>Renaming an instrument</span><span>)</span></a>  <li>6.2.5.   <a href="#rfc.section.6.2.5">Creating an audio output device</a></li>
655  </p>  <li>6.2.6.   <a href="#rfc.section.6.2.6">Destroying an audio output device</a></li>
656  <p><a class='info' href='#SET DB_INSTRUMENT DESCRIPTION'>"SET DB_INSTRUMENT DESCRIPTION"<span> (</span><span class='info'>Changing the description of instrument</span><span>)</span></a>  <li>6.2.7.   <a href="#rfc.section.6.2.7">Getting all created audio output device count</a></li>
657  </p>  <li>6.2.8.   <a href="#rfc.section.6.2.8">Getting all created audio output device list</a></li>
658  <p><a class='info' href='#FIND DB_INSTRUMENTS'>"FIND DB_INSTRUMENTS"<span> (</span><span class='info'>Finding instruments</span><span>)</span></a>  <li>6.2.9.   <a href="#rfc.section.6.2.9">Getting current settings of an audio output device</a></li>
659  </p>  <li>6.2.10.   <a href="#rfc.section.6.2.10">Changing settings of audio output devices</a></li>
660  <p><a class='info' href='#FIND DB_INSTRUMENT_DIRECTORIES'>"FIND DB_INSTRUMENT_DIRECTORIES"<span> (</span><span class='info'>Finding directories</span><span>)</span></a>  <li>6.2.11.   <a href="#rfc.section.6.2.11">Getting information about an audio channel</a></li>
661  </p>  <li>6.2.12.   <a href="#rfc.section.6.2.12">Getting information about specific audio channel parameter</a></li>
662  <p><a class='info' href='#MOVE DB_INSTRUMENT'>"MOVE DB_INSTRUMENT"<span> (</span><span class='info'>Moving an instrument</span><span>)</span></a>  <li>6.2.13.   <a href="#rfc.section.6.2.13">Changing settings of audio output channels</a></li>
663  </p>  </ul><li>6.3.   <a href="#rfc.section.6.3">Configuring MIDI input drivers</a></li>
664  <p><a class='info' href='#MOVE DB_INSTRUMENT_DIRECTORY'>"MOVE DB_INSTRUMENT_DIRECTORY"<span> (</span><span class='info'>Moving an instrument directory</span><span>)</span></a>  <ul><li>6.3.1.   <a href="#rfc.section.6.3.1">Getting amount of available MIDI input drivers</a></li>
665  </p>  <li>6.3.2.   <a href="#rfc.section.6.3.2">Getting all available MIDI input drivers</a></li>
666  <p><a class='info' href='#COPY DB_INSTRUMENT'>"COPY DB_INSTRUMENT"<span> (</span><span class='info'>Copying instruments</span><span>)</span></a>  <li>6.3.3.   <a href="#rfc.section.6.3.3">Getting information about a specific MIDI input driver</a></li>
667  </p>  <li>6.3.4.   <a href="#rfc.section.6.3.4">Getting information about specific MIDI input driver parameter</a></li>
668  <p><a class='info' href='#COPY DB_INSTRUMENT_DIRECTORY'>"COPY DB_INSTRUMENT_DIRECTORY"<span> (</span><span class='info'>Copying instrument directories</span><span>)</span></a>  <li>6.3.5.   <a href="#rfc.section.6.3.5">Creating a MIDI input device</a></li>
669  </p>  <li>6.3.6.   <a href="#rfc.section.6.3.6">Destroying a MIDI input device</a></li>
670  <p><a class='info' href='#FIND LOST DB_INSTRUMENT_FILES'>"FIND LOST DB_INSTRUMENT_FILES"<span> (</span><span class='info'>Checking for lost instrument files</span><span>)</span></a>  <li>6.3.7.   <a href="#rfc.section.6.3.7">Getting all created MIDI input device count</a></li>
671  </p>  <li>6.3.8.   <a href="#rfc.section.6.3.8">Getting all created MIDI input device list</a></li>
672  <p><a class='info' href='#SET DB_INSTRUMENT FILE_PATH'>"SET DB_INSTRUMENT FILE_PATH"<span> (</span><span class='info'>Replacing an instrument file</span><span>)</span></a>  <li>6.3.9.   <a href="#rfc.section.6.3.9">Getting current settings of a MIDI input device</a></li>
673  </p>  <li>6.3.10.   <a href="#rfc.section.6.3.10">Changing settings of MIDI input devices</a></li>
674  <p><a class='info' href='#GET FILE INSTRUMENTS'>"GET FILE INSTRUMENTS"<span> (</span><span class='info'>Retrieving amount of instruments of a file</span><span>)</span></a>  <li>6.3.11.   <a href="#rfc.section.6.3.11">Getting information about a MIDI port</a></li>
675  </p>  <li>6.3.12.   <a href="#rfc.section.6.3.12">Getting information about specific MIDI port parameter</a></li>
676  <p><a class='info' href='#LIST FILE INSTRUMENTS'>"LIST FILE INSTRUMENTS"<span> (</span><span class='info'>Retrieving all instruments of a file</span><span>)</span></a>  <li>6.3.13.   <a href="#rfc.section.6.3.13">Changing settings of MIDI input ports</a></li>
677  </p>  </ul><li>6.4.   <a href="#rfc.section.6.4">Configuring sampler channels</a></li>
678  <p><a class='info' href='#GET FILE INSTRUMENT INFO'>"GET FILE INSTRUMENT INFO"<span> (</span><span class='info'>Retrieving informations about one instrument in a file</span><span>)</span></a>  <ul><li>6.4.1.   <a href="#rfc.section.6.4.1">Loading an instrument</a></li>
679  </p>  <li>6.4.2.   <a href="#rfc.section.6.4.2">Loading a sampler engine</a></li>
680  <p><a class='info' href='#GET EFFECT INFO'>"GET EFFECT INFO"<span> (</span><span class='info'>Retrieving general information about an effect</span><span>)</span></a>  <li>6.4.3.   <a href="#rfc.section.6.4.3">Getting all created sampler channel count</a></li>
681  </p>  <li>6.4.4.   <a href="#rfc.section.6.4.4">Getting all created sampler channel list</a></li>
682  <p><a class='info' href='#GET EFFECT_INSTANCE INFO'>"GET EFFECT_INSTANCE INFO"<span> (</span><span class='info'>Retrieving current information about an effect instance</span><span>)</span></a>  <li>6.4.5.   <a href="#rfc.section.6.4.5">Adding a new sampler channel</a></li>
683  </p>  <li>6.4.6.   <a href="#rfc.section.6.4.6">Removing a sampler channel</a></li>
684  <p><a class='info' href='#CREATE EFFECT_INSTANCE'>"CREATE EFFECT_INSTANCE"<span> (</span><span class='info'>Creating an instance of an effect by its portable ID</span><span>)</span></a>  <li>6.4.7.   <a href="#rfc.section.6.4.7">Getting amount of available engines</a></li>
685  </p>  <li>6.4.8.   <a href="#rfc.section.6.4.8">Getting all available engines</a></li>
686  </blockquote><p>  <li>6.4.9.   <a href="#rfc.section.6.4.9">Getting information about an engine</a></li>
687                  Note that the forward slash character ('/') has a special meaning in  <li>6.4.10.   <a href="#rfc.section.6.4.10">Getting sampler channel information</a></li>
688                  filename / path based arguments: it acts as separator of the nodes in  <li>6.4.11.   <a href="#rfc.section.6.4.11">Current number of active voices</a></li>
689                  the path, thus if a directory- or filename includes a forward slash  <li>6.4.12.   <a href="#rfc.section.6.4.12">Current number of active disk streams</a></li>
690                  (not intended as path node separator), you MUST escape that slash  <li>6.4.13.   <a href="#rfc.section.6.4.13">Current fill state of disk stream buffers</a></li>
691                  either with the respective hex escape sequence ("\x2f") or with the  <li>6.4.14.   <a href="#rfc.section.6.4.14">Setting audio output device</a></li>
692                  respective octal escape sequence ("\057").  <li>6.4.15.   <a href="#rfc.section.6.4.15">Setting audio output type</a></li>
693                    <li>6.4.16.   <a href="#rfc.section.6.4.16">Setting audio output channel</a></li>
694  </p>  <li>6.4.17.   <a href="#rfc.section.6.4.17">Add MIDI input to sampler channel</a></li>
695  <p>  <li>6.4.18.   <a href="#rfc.section.6.4.18">Remove MIDI input(s) from sampler channel</a></li>
696                  Note for Windows: file path arguments in LSCP are expected  <li>6.4.19.   <a href="#rfc.section.6.4.19">Getting all MIDI inputs of a sampler channel</a></li>
697                  to use forward slashes as directory node separator similar  <li>6.4.20.   <a href="#rfc.section.6.4.20">Setting MIDI input device</a></li>
698                  to Unix based operating systems. In contrast to Unix however  <li>6.4.21.   <a href="#rfc.section.6.4.21">Setting MIDI input type</a></li>
699                  a Windows typical drive character is expected to be  <li>6.4.22.   <a href="#rfc.section.6.4.22">Setting MIDI input port</a></li>
700                  prefixed to the path. That is an original Windows file path  <li>6.4.23.   <a href="#rfc.section.6.4.23">Setting MIDI input channel</a></li>
701                  like "D:\Sounds\My.gig" would become in LSCP:  <li>6.4.24.   <a href="#rfc.section.6.4.24">Setting channel volume</a></li>
702                  "D:/Sounds/My.gig".  <li>6.4.25.   <a href="#rfc.section.6.4.25">Muting a sampler channel</a></li>
703                    <li>6.4.26.   <a href="#rfc.section.6.4.26">Soloing a sampler channel</a></li>
704  </p>  <li>6.4.27.   <a href="#rfc.section.6.4.27">Assigning a MIDI instrument map to a sampler channel</a></li>
705  <p>  <li>6.4.28.   <a href="#rfc.section.6.4.28">Adding an effect send to a sampler channel</a></li>
706                  The following LSCP commands even support escape sequences as  <li>6.4.29.   <a href="#rfc.section.6.4.29">Removing an effect send from a sampler channel</a></li>
707                  part of at least one of their text-based arguments (i.e. entity name,  <li>6.4.30.   <a href="#rfc.section.6.4.30">Getting amount of effect sends on a sampler channel</a></li>
708                  description) and / or may contain escape sequences in at least one of  <li>6.4.31.   <a href="#rfc.section.6.4.31">Listing all effect sends on a sampler channel</a></li>
709                  their text-based fields in their response:  <li>6.4.32.   <a href="#rfc.section.6.4.32">Getting effect send information</a></li>
710                  </p>  <li>6.4.33.   <a href="#rfc.section.6.4.33">Changing effect send's name</a></li>
711  <blockquote class="text">  <li>6.4.34.   <a href="#rfc.section.6.4.34">Altering effect send's audio routing</a></li>
712  <p><a class='info' href='#GET SERVER INFO'>"GET SERVER INFO"<span> (</span><span class='info'>General sampler informations</span><span>)</span></a>  <li>6.4.35.   <a href="#rfc.section.6.4.35">Assigning destination effect to an effect send</a></li>
713  </p>  <li>6.4.36.   <a href="#rfc.section.6.4.36">Removing destination effect from an effect send</a></li>
714  <p><a class='info' href='#GET ENGINE INFO'>"GET ENGINE INFO"<span> (</span><span class='info'>Getting information about an engine</span><span>)</span></a>  <li>6.4.37.   <a href="#rfc.section.6.4.37">Altering effect send's MIDI controller</a></li>
715  </p>  <li>6.4.38.   <a href="#rfc.section.6.4.38">Altering effect send's send level</a></li>
716  <p><a class='info' href='#GET CHANNEL INFO'>"GET CHANNEL INFO"<span> (</span><span class='info'>Getting sampler channel information</span><span>)</span></a>  <li>6.4.39.   <a href="#rfc.section.6.4.39">Sending MIDI messages to sampler channel</a></li>
717  </p>  <li>6.4.40.   <a href="#rfc.section.6.4.40">Resetting a sampler channel</a></li>
718  <p><a class='info' href='#CREATE FX_SEND'>"CREATE FX_SEND"<span> (</span><span class='info'>Adding an effect send to a sampler channel</span><span>)</span></a>  </ul><li>6.5.   <a href="#rfc.section.6.5">Controlling connection</a></li>
719  </p>  <ul><li>6.5.1.   <a href="#rfc.section.6.5.1">Register front-end for receiving event messages</a></li>
720  <p><a class='info' href='#GET FX_SEND INFO'>"GET FX_SEND INFO"<span> (</span><span class='info'>Getting effect send information</span><span>)</span></a>  <li>6.5.2.   <a href="#rfc.section.6.5.2">Unregister front-end for not receiving event messages</a></li>
721  </p>  <li>6.5.3.   <a href="#rfc.section.6.5.3">Enable or disable echo of commands</a></li>
722  <p><a class='info' href='#SET FX_SEND NAME'>"SET FX_SEND NAME"<span> (</span><span class='info'>Changing effect send's name</span><span>)</span></a>  <li>6.5.4.   <a href="#rfc.section.6.5.4">Close client connection</a></li>
723  </p>  </ul><li>6.6.   <a href="#rfc.section.6.6">Global commands</a></li>
724  <p><a class='info' href='#GET MIDI_INSTRUMENT INFO'>"GET MIDI_INSTRUMENT INFO"<span> (</span><span class='info'>Get current settings of MIDI instrument map entry</span><span>)</span></a>  <ul><li>6.6.1.   <a href="#rfc.section.6.6.1">Current number of active voices</a></li>
725  </p>  <li>6.6.2.   <a href="#rfc.section.6.6.2">Maximum amount of active voices</a></li>
726  <p><a class='info' href='#GET MIDI_INSTRUMENT_MAP INFO'>"GET MIDI_INSTRUMENT_MAP INFO"<span> (</span><span class='info'>Getting MIDI instrument map information</span><span>)</span></a>  <li>6.6.3.   <a href="#rfc.section.6.6.3">Current number of active disk streams</a></li>
727  </p>  <li>6.6.4.   <a href="#rfc.section.6.6.4">Reset sampler</a></li>
728  <p><a class='info' href='#ADD MIDI_INSTRUMENT_MAP'>"ADD MIDI_INSTRUMENT_MAP"<span> (</span><span class='info'>Create a new MIDI instrument map</span><span>)</span></a>  <li>6.6.5.   <a href="#rfc.section.6.6.5">General sampler information</a></li>
729  </p>  <li>6.6.6.   <a href="#rfc.section.6.6.6">Getting global volume attenuation</a></li>
730  <p><a class='info' href='#MAP MIDI_INSTRUMENT'>"MAP MIDI_INSTRUMENT"<span> (</span><span class='info'>Create or replace a MIDI instrument map entry</span><span>)</span></a>  <li>6.6.7.   <a href="#rfc.section.6.6.7">Setting global volume attenuation</a></li>
731  </p>  <li>6.6.8.   <a href="#rfc.section.6.6.8">Getting global voice limit</a></li>
732  <p><a class='info' href='#SET MIDI_INSTRUMENT_MAP NAME'>"SET MIDI_INSTRUMENT_MAP NAME"<span> (</span><span class='info'>Renaming a MIDI instrument map</span><span>)</span></a>  <li>6.6.9.   <a href="#rfc.section.6.6.9">Setting global voice limit</a></li>
733  </p>  <li>6.6.10.   <a href="#rfc.section.6.6.10">Getting global disk stream limit</a></li>
734  <p><a class='info' href='#GET DB_INSTRUMENT_DIRECTORY INFO'>"GET DB_INSTRUMENT_DIRECTORY INFO"<span> (</span><span class='info'>Getting instrument directory information</span><span>)</span></a>  <li>6.6.11.   <a href="#rfc.section.6.6.11">Setting global disk stream limit</a></li>
735  </p>  </ul><li>6.7.   <a href="#rfc.section.6.7">MIDI Instrument Mapping</a></li>
736  <p><a class='info' href='#SET DB_INSTRUMENT_DIRECTORY NAME'>"SET DB_INSTRUMENT_DIRECTORY NAME"<span> (</span><span class='info'>Renaming an instrument directory</span><span>)</span></a>  <ul><li>6.7.1.   <a href="#rfc.section.6.7.1">Create a new MIDI instrument map</a></li>
737  </p>  <li>6.7.2.   <a href="#rfc.section.6.7.2">Delete one particular or all MIDI instrument maps</a></li>
738  <p><a class='info' href='#SET DB_INSTRUMENT_DIRECTORY DESCRIPTION'>"SET DB_INSTRUMENT_DIRECTORY DESCRIPTION"<span> (</span><span class='info'>Changing the description of directory</span><span>)</span></a>  <li>6.7.3.   <a href="#rfc.section.6.7.3">Get amount of existing MIDI instrument maps</a></li>
739  </p>  <li>6.7.4.   <a href="#rfc.section.6.7.4">Getting all created MIDI instrument maps</a></li>
740  <p><a class='info' href='#FIND DB_INSTRUMENT_DIRECTORIES'>"FIND DB_INSTRUMENT_DIRECTORIES"<span> (</span><span class='info'>Finding directories</span><span>)</span></a>  <li>6.7.5.   <a href="#rfc.section.6.7.5">Getting MIDI instrument map information</a></li>
741  </p>  <li>6.7.6.   <a href="#rfc.section.6.7.6">Renaming a MIDI instrument map</a></li>
742  <p><a class='info' href='#GET DB_INSTRUMENT INFO'>"GET DB_INSTRUMENT INFO"<span> (</span><span class='info'>Getting instrument information</span><span>)</span></a>  <li>6.7.7.   <a href="#rfc.section.6.7.7">Create or replace a MIDI instrument map entry</a></li>
743  </p>  <li>6.7.8.   <a href="#rfc.section.6.7.8">Getting amount of MIDI instrument map entries</a></li>
744  <p><a class='info' href='#SET DB_INSTRUMENT NAME'>"SET DB_INSTRUMENT NAME"<span> (</span><span class='info'>Renaming an instrument</span><span>)</span></a>  <li>6.7.9.   <a href="#rfc.section.6.7.9">Getting indeces of all entries of a MIDI instrument map</a></li>
745  </p>  <li>6.7.10.   <a href="#rfc.section.6.7.10">Remove an entry from the MIDI instrument map</a></li>
746  <p><a class='info' href='#SET DB_INSTRUMENT DESCRIPTION'>"SET DB_INSTRUMENT DESCRIPTION"<span> (</span><span class='info'>Changing the description of instrument</span><span>)</span></a>  <li>6.7.11.   <a href="#rfc.section.6.7.11">Get current settings of MIDI instrument map entry</a></li>
747  </p>  <li>6.7.12.   <a href="#rfc.section.6.7.12">Clear MIDI instrument map</a></li>
748  <p><a class='info' href='#FIND DB_INSTRUMENTS'>"FIND DB_INSTRUMENTS"<span> (</span><span class='info'>Finding instruments</span><span>)</span></a>  </ul><li>6.8.   <a href="#rfc.section.6.8">Managing Instruments Database</a></li>
749  </p>  <ul><li>6.8.1.   <a href="#rfc.section.6.8.1">Creating a new instrument directory</a></li>
750  <p><a class='info' href='#GET EFFECT INFO'>"GET EFFECT INFO"<span> (</span><span class='info'>Retrieving general information about an effect</span><span>)</span></a>  <li>6.8.2.   <a href="#rfc.section.6.8.2">Deleting an instrument directory</a></li>
751  </p>  <li>6.8.3.   <a href="#rfc.section.6.8.3">Getting amount of instrument directories</a></li>
752  <p><a class='info' href='#GET EFFECT_INSTANCE INFO'>"GET EFFECT_INSTANCE INFO"<span> (</span><span class='info'>Retrieving current information about an effect instance</span><span>)</span></a>  <li>6.8.4.   <a href="#rfc.section.6.8.4">Listing all directories in specific directory</a></li>
753  </p>  <li>6.8.5.   <a href="#rfc.section.6.8.5">Getting instrument directory information</a></li>
754  <p><a class='info' href='#CREATE EFFECT_INSTANCE'>"CREATE EFFECT_INSTANCE"<span> (</span><span class='info'>Creating an instance of an effect by its portable ID</span><span>)</span></a>  <li>6.8.6.   <a href="#rfc.section.6.8.6">Renaming an instrument directory</a></li>
755  </p>  <li>6.8.7.   <a href="#rfc.section.6.8.7">Moving an instrument directory</a></li>
756  </blockquote><p>  <li>6.8.8.   <a href="#rfc.section.6.8.8">Copying instrument directories</a></li>
757                  Please note that these lists are manually maintained. If you  <li>6.8.9.   <a href="#rfc.section.6.8.9">Changing the description of directory</a></li>
758                  find a command that also supports escape sequences we forgot to  <li>6.8.10.   <a href="#rfc.section.6.8.10">Finding directories</a></li>
759                  mention here, please report it!  <li>6.8.11.   <a href="#rfc.section.6.8.11">Adding instruments to the instruments database</a></li>
760                    <li>6.8.12.   <a href="#rfc.section.6.8.12">Removing an instrument</a></li>
761  </p>  <li>6.8.13.   <a href="#rfc.section.6.8.13">Getting amount of instruments</a></li>
762  <a name="events"></a><br /><hr />  <li>6.8.14.   <a href="#rfc.section.6.8.14">Listing all instruments in specific directory</a></li>
763  <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  <li>6.8.15.   <a href="#rfc.section.6.8.15">Getting instrument information</a></li>
764  <a name="rfc.section.8"></a><h3>8.&nbsp;  <li>6.8.16.   <a href="#rfc.section.6.8.16">Renaming an instrument</a></li>
765  Events</h3>  <li>6.8.17.   <a href="#rfc.section.6.8.17">Moving an instrument</a></li>
766    <li>6.8.18.   <a href="#rfc.section.6.8.18">Copying instruments</a></li>
767  <p>This chapter will describe all currently defined events supported by LinuxSampler.  <li>6.8.19.   <a href="#rfc.section.6.8.19">Changing the description of instrument</a></li>
768  </p>  <li>6.8.20.   <a href="#rfc.section.6.8.20">Finding instruments</a></li>
769  <a name="SUBSCRIBE AUDIO_OUTPUT_DEVICE_COUNT"></a><br /><hr />  <li>6.8.21.   <a href="#rfc.section.6.8.21">Getting job status information</a></li>
770  <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  <li>6.8.22.   <a href="#rfc.section.6.8.22">Formatting the instruments database</a></li>
771  <a name="rfc.section.8.1"></a><h3>8.1.&nbsp;  <li>6.8.23.   <a href="#rfc.section.6.8.23">Checking for lost instrument files</a></li>
772  Number of audio output devices changed</h3>  <li>6.8.24.   <a href="#rfc.section.6.8.24">Replacing an instrument file</a></li>
773    </ul><li>6.9.   <a href="#rfc.section.6.9">Editing Instruments</a></li>
774  <p>Client may want to be notified when the total number of audio output devices on the  <ul><li>6.9.1.   <a href="#rfc.section.6.9.1">Opening an appropriate instrument editor application</a></li>
775                  back-end changes by issuing the following command:  </ul><li>6.10.   <a href="#rfc.section.6.10">Managing Files</a></li>
776  </p>  <ul><li>6.10.1.   <a href="#rfc.section.6.10.1">Retrieving amount of instruments of a file</a></li>
777  <p>  <li>6.10.2.   <a href="#rfc.section.6.10.2">Retrieving all instruments of a file</a></li>
778                      </p>  <li>6.10.3.   <a href="#rfc.section.6.10.3">Retrieving information about one instrument in a file</a></li>
779  <blockquote class="text">  </ul><li>6.11.   <a href="#rfc.section.6.11">Managing Effects</a></li>
780  <p>SUBSCRIBE AUDIO_OUTPUT_DEVICE_COUNT  <ul><li>6.11.1.   <a href="#rfc.section.6.11.1">Retrieve amount of available effects</a></li>
781  </p>  <li>6.11.2.   <a href="#rfc.section.6.11.2">Get list of available effects</a></li>
782  </blockquote><p>  <li>6.11.3.   <a href="#rfc.section.6.11.3">Retrieving general information about an effect</a></li>
783                    <li>6.11.4.   <a href="#rfc.section.6.11.4">Creating an instance of an effect by its portable ID</a></li>
784  </p>  <li>6.11.5.   <a href="#rfc.section.6.11.5">Creating an instance of an effect by its numerical ID</a></li>
785  <p>Server will start sending the following notification messages:  <li>6.11.6.   <a href="#rfc.section.6.11.6">Destroy an effect instance</a></li>
786  </p>  <li>6.11.7.   <a href="#rfc.section.6.11.7">Retrieve amount of effect instances</a></li>
787  <p>  <li>6.11.8.   <a href="#rfc.section.6.11.8">Get list of effect instances</a></li>
788                      </p>  <li>6.11.9.   <a href="#rfc.section.6.11.9">Retrieving current information about an effect instance</a></li>
789  <blockquote class="text">  <li>6.11.10.   <a href="#rfc.section.6.11.10">Retrieving information about an effect parameter</a></li>
790  <p>"NOTIFY:AUDIO_OUTPUT_DEVICE_COUNT:&lt;devices&gt;"  <li>6.11.11.   <a href="#rfc.section.6.11.11">Altering an effect parameter</a></li>
791  </p>  <li>6.11.12.   <a href="#rfc.section.6.11.12">Retrieve amount of send effect chains</a></li>
792  </blockquote><p>  <li>6.11.13.   <a href="#rfc.section.6.11.13">Retrieve list of send effect chains</a></li>
793                    <li>6.11.14.   <a href="#rfc.section.6.11.14">Add send effect chain</a></li>
794  </p>  <li>6.11.15.   <a href="#rfc.section.6.11.15">Remove send effect chain</a></li>
795  <p>where &lt;devices&gt; will be replaced by the new number  <li>6.11.16.   <a href="#rfc.section.6.11.16">Retrieving information about a send effect chain</a></li>
796                  of audio output devices.  <li>6.11.17.   <a href="#rfc.section.6.11.17">Append effect instance to a send effect chain</a></li>
797  </p>  <li>6.11.18.   <a href="#rfc.section.6.11.18">Insert effect instance to a send effect chain</a></li>
798  <a name="SUBSCRIBE AUDIO_OUTPUT_DEVICE_INFO"></a><br /><hr />  <li>6.11.19.   <a href="#rfc.section.6.11.19">Remove effect instance from send effect chain</a></li>
799  <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  </ul></ul><li>7.   <a href="#rfc.section.7">Command Syntax</a></li>
800  <a name="rfc.section.8.2"></a><h3>8.2.&nbsp;  <ul><li>7.1.   <a href="#rfc.section.7.1">Character Set and Escape Sequences</a></li>
801  Audio output device's settings changed</h3>  </ul><li>8.   <a href="#rfc.section.8">Events</a></li>
802    <ul><li>8.1.   <a href="#rfc.section.8.1">Number of audio output devices changed</a></li>
803  <p>Client may want to be notified when changes were made to audio output devices on the  <li>8.2.   <a href="#rfc.section.8.2">Audio output device's settings changed</a></li>
804                  back-end by issuing the following command:  <li>8.3.   <a href="#rfc.section.8.3">Number of MIDI input devices changed</a></li>
805  </p>  <li>8.4.   <a href="#rfc.section.8.4">MIDI input device's settings changed</a></li>
806  <p>  <li>8.5.   <a href="#rfc.section.8.5">Number of sampler channels changed</a></li>
807                      </p>  <li>8.6.   <a href="#rfc.section.8.6">MIDI data on a sampler channel arrived</a></li>
808  <blockquote class="text">  <li>8.7.   <a href="#rfc.section.8.7">MIDI data on a MIDI input device arrived</a></li>
809  <p>SUBSCRIBE AUDIO_OUTPUT_DEVICE_INFO  <li>8.8.   <a href="#rfc.section.8.8">Number of active voices changed</a></li>
810  </p>  <li>8.9.   <a href="#rfc.section.8.9">Number of active disk streams changed</a></li>
811  </blockquote><p>  <li>8.10.   <a href="#rfc.section.8.10">Disk stream buffer fill state changed</a></li>
812                    <li>8.11.   <a href="#rfc.section.8.11">Channel information changed</a></li>
813  </p>  <li>8.12.   <a href="#rfc.section.8.12">Number of effect sends changed</a></li>
814  <p>Server will start sending the following notification messages:  <li>8.13.   <a href="#rfc.section.8.13">Effect send information changed</a></li>
815  </p>  <li>8.14.   <a href="#rfc.section.8.14">Total number of active voices changed</a></li>
816  <p>  <li>8.15.   <a href="#rfc.section.8.15">Total number of active disk streams changed</a></li>
817                      </p>  <li>8.16.   <a href="#rfc.section.8.16">Number of MIDI instrument maps changed</a></li>
818  <blockquote class="text">  <li>8.17.   <a href="#rfc.section.8.17">MIDI instrument map information changed</a></li>
819  <p>"NOTIFY:AUDIO_OUTPUT_DEVICE_INFO:&lt;device-id&gt;"  <li>8.18.   <a href="#rfc.section.8.18">Number of MIDI instruments changed</a></li>
820  </p>  <li>8.19.   <a href="#rfc.section.8.19">MIDI instrument information changed</a></li>
821  </blockquote><p>  <li>8.20.   <a href="#rfc.section.8.20">Global settings changed</a></li>
822                    <li>8.21.   <a href="#rfc.section.8.21">Number of database instrument directories changed</a></li>
823  </p>  <li>8.22.   <a href="#rfc.section.8.22">Database instrument directory information changed</a></li>
824  <p>where &lt;device-id&gt; will be replaced by the numerical ID of the audio output device,  <li>8.23.   <a href="#rfc.section.8.23">Number of database instruments changed</a></li>
825                  which settings has been changed. The front-end will have to send  <li>8.24.   <a href="#rfc.section.8.24">Database instrument information changed</a></li>
826                  the respective command to actually get the audio output device info. Because these messages  <li>8.25.   <a href="#rfc.section.8.25">Database job status information changed</a></li>
827                  will be triggered by LSCP commands issued by other clients rather than real  <li>8.26.   <a href="#rfc.section.8.26">Number of effect instances changed</a></li>
828                  time events happening on the server, it is believed that an empty notification  <li>8.27.   <a href="#rfc.section.8.27">Effect instance information changed</a></li>
829                  message is sufficient here.  <li>8.28.   <a href="#rfc.section.8.28">Number of send effect chains changed</a></li>
830  </p>  <li>8.29.   <a href="#rfc.section.8.29">Send effect chain information changed</a></li>
831  <a name="SUBSCRIBE MIDI_INPUT_DEVICE_COUNT"></a><br /><hr />  <li>8.30.   <a href="#rfc.section.8.30">Miscellaneous and debugging events</a></li>
832  <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  </ul><li>9.   <a href="#rfc.section.9">Security Considerations</a></li>
833  <a name="rfc.section.8.3"></a><h3>8.3.&nbsp;  <li>10.   <a href="#rfc.section.10">Acknowledgments</a></li>
834  Number of MIDI input devices changed</h3>  <li>11.   <a href="#rfc.references">References</a></li>
835    <li><a href="#rfc.authors">Author's Address</a></li>
836  <p>Client may want to be notified when the total number of MIDI input devices on the  
837                  back-end changes by issuing the following command:  
838  </p>    </ul>
839  <p>  
840                      </p>    <h1 id="rfc.section.1"><a href="#rfc.section.1">1.</a> Requirements notation</h1>
841  <blockquote class="text">  <p id="rfc.section.1.p.1">The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in <a href="#RFC2119">[RFC2119]</a>.</p>
842  <p>SUBSCRIBE MIDI_INPUT_DEVICE_COUNT  <p id="rfc.section.1.p.2">This protocol is always case-sensitive if not explicitly claimed the opposite.</p>
843  </p>  <p id="rfc.section.1.p.3">In examples, "C:" and "S:" indicate lines sent by the client (front-end) and server (LinuxSampler) respectively. Lines in examples must be interpreted as every line being CRLF terminated (carriage return character followed by line feed character as defined in the ASCII standard <a href="#RFC20">[RFC20]</a>), thus the following example:</p>
844  </blockquote><p>  <p/>
845                    
846  </p>  <ul class="empty">
847  <p>Server will start sending the following notification messages:    <li>C: "some line"</li>
848  </p>    <li>"another line"</li>
849  <p>  </ul>
850                      </p>  
851  <blockquote class="text">  <p> </p>
852  <p>"NOTIFY:MIDI_INPUT_DEVICE_COUNT:&lt;devices&gt;"  <p id="rfc.section.1.p.5">must actually be interpreted as client sending the following message:</p>
853  </p>  <p/>
854  </blockquote><p>  
855                    <ul class="empty">
856  </p>    <li>"some line&lt;CR&gt;&lt;LF&gt;another line&lt;CR&gt;&lt;LF&gt;"</li>
857  <p>where &lt;devices&gt; will be replaced by the new number  </ul>
858                  of MIDI input devices.  
859  </p>  <p> </p>
860  <a name="SUBSCRIBE MIDI_INPUT_DEVICE_INFO"></a><br /><hr />  <p id="rfc.section.1.p.7">where &lt;CR&gt; symbolizes the carriage return character and &lt;LF&gt; the line feed character as defined in the ASCII standard.</p>
861  <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  <p id="rfc.section.1.p.8">Due to technical reasons, messages can arbitrary be fragmented, means the following example:</p>
862  <a name="rfc.section.8.4"></a><h3>8.4.&nbsp;  <p/>
863  MIDI input device's settings changed</h3>  
864    <ul class="empty">
865  <p>Client may want to be notified when changes were made to MIDI input devices on the    <li>S: "abcd"</li>
866                  back-end by issuing the following command:  </ul>
867  </p>  
868  <p>  <p> </p>
869                      </p>  <p id="rfc.section.1.p.10">could also happen to be sent in three messages like in the following sequence scenario:</p>
870  <blockquote class="text">  <p/>
871  <p>SUBSCRIBE MIDI_INPUT_DEVICE_INFO  
872  </p>  <ul>
873  </blockquote><p>    <li>server sending message "a"</li>
874                      <li>followed by a delay (pause) with arbitrary duration</li>
875  </p>    <li>followed by server sending message "bcd&lt;CR&gt;"</li>
876  <p>Server will start sending the following notification messages:    <li>again followed by a delay (pause) with arbitrary duration</li>
877  </p>    <li>followed by server sending the message "&lt;LF&gt;"</li>
878  <p>  </ul>
879                      </p>  
880  <blockquote class="text">  <p> </p>
881  <p>"NOTIFY:MIDI_INPUT_DEVICE_INFO:&lt;device-id&gt;"  <p id="rfc.section.1.p.12">where again &lt;CR&gt; and &lt;LF&gt; symbolize the carriage return and line feed characters respectively.</p>
882  </p>  <h1 id="rfc.section.2"><a href="#rfc.section.2">2.</a> <a href="#LSCP versioning" id="LSCP versioning">Versioning of this specification</a></h1>
883  </blockquote><p>  <p id="rfc.section.2.p.1">LSCP will certainly be extended and enhanced by-and-by. Each official release of the LSCP specification will be tagged with a unique version tuple. The version tuple consists at least of a major and minor version number like: </p>
884                    <p/>
885  </p>  
886  <p>where &lt;device-id&gt; will be replaced by the numerical ID of the MIDI input device,  <ul class="empty">
887                  which settings has been changed. The front-end will have to send    <li>"1.2"</li>
888                  the respective command to actually get the MIDI input device info. Because these messages  </ul>
889                  will be triggered by LSCP commands issued by other clients rather than real  
890                  time events happening on the server, it is believed that an empty notification  <p> </p>
891                  message is sufficient here.  <p id="rfc.section.2.p.3">In this example the major version number would be "1" and the minor version number would be "2". Note that the version tuple might also have more than two elements. The major version number defines a group of backward compatible versions. That means a frontend is compatible to the connected sampler if and only if the LSCP versions to which each of the two parties complies to, match both of the following rules: </p>
892  </p>  <p id="rfc.section.2.p.4">Compatibility:</p>
893  <a name="SUBSCRIBE CHANNEL_COUNT"></a><br /><hr />  <p/>
894  <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
895  <a name="rfc.section.8.5"></a><h3>8.5.&nbsp;  <ol>
896  Number of sampler channels changed</h3>    <li>The frontend's LSCP major version and the sampler's LSCP major version are exactly equal.</li>
897      <li>The frontend's LSCP minor version is less or equal than the sampler's LSCP minor version.</li>
898  <p>Client may want to be notified when the total number of channels on the  </ol>
899                  back-end changes by issuing the following command:  
900  </p>  <p> </p>
901  <p>  <p id="rfc.section.2.p.6">Compatibility can only be claimed if both rules are true.  The frontend can use the <a href="#GET SERVER INFO">"GET SERVER INFO"</a> <cite title="NONE">[GET SERVER INFO]</cite> command to get the version of the LSCP specification the sampler complies with.  </p>
902                      </p>  <h1 id="rfc.section.3"><a href="#rfc.section.3">3.</a> Introduction</h1>
903  <blockquote class="text">  <p id="rfc.section.3.p.1">LinuxSampler is a so called software sampler application capable to playback audio samples from a computer's Random Access Memory (RAM) as well as directly streaming it from disk.  LinuxSampler is designed to be modular. It provides several so called "sampler engines" where each engine is specialized for a certain purpose. LinuxSampler has virtual channels which will be referred in this document as "sampler channels". The channels are in such way virtual as they can be connected to an arbitrary MIDI input method and arbitrary MIDI channel (e.g.  sampler channel 17 could be connected to an ALSA sequencer device 64:0 and listening to MIDI channel 1 there). Each sampler channel will be associated with an instance of one of the available sampler engines (e.g. GigEngine, DLSEngine). The audio output of each sampler channel can be routed to an arbitrary audio output method (ALSA / JACK) and an arbitrary audio output channel there.</p>
904  <p>SUBSCRIBE CHANNEL_COUNT  <h1 id="rfc.section.4"><a href="#rfc.section.4">4.</a> Focus of this protocol</h1>
905  </p>  <p id="rfc.section.4.p.1">Main focus of this protocol is to provide a way to configure a running LinuxSampler instance and to retrieve information about it. The focus of this protocol is not to provide a way to control synthesis parameters or even to trigger or release notes. Or in other words; the focus are those functionalities which are not covered by MIDI or which may at most be handled via MIDI System Exclusive Messages.</p>
906  </blockquote><p>  <h1 id="rfc.section.5"><a href="#rfc.section.5">5.</a> Communication Overview</h1>
907                    <p id="rfc.section.5.p.1">There are two distinct methods of communication between a running instance of LinuxSampler and one or more control applications, so called "front-ends": a simple request/response communication method used by the clients to give commands to the server as well as to inquire about server's status and a subscribe/notify communication method used by the client to subscribe to and receive notifications of certain events as they happen on the server. The latter needs more effort to be implemented in the front-end application. The two communication methods will be described next.</p>
908  </p>  <h1 id="rfc.section.5.1"><a href="#rfc.section.5.1">5.1.</a> Request/response communication method</h1>
909  <p>Server will start sending the following notification messages:  <p id="rfc.section.5.1.p.1">This simple communication method is based on <a href="#RFC793">TCP</a> <cite title="NONE">[RFC793]</cite>. The front-end application establishes a TCP connection to the LinuxSampler instance on a certain host system. Then the front-end application will send certain ASCII based commands as defined in this document (every command line must be CRLF terminated - see "Conventions used in this document" at the beginning of this document) and the LinuxSampler application will response after a certain process time with an appropriate ASCII based answer, also as defined in this document. So this TCP communication is simply based on query and answer paradigm. That way LinuxSampler is only able to answer on queries from front-ends, but not able to automatically send messages to the client if it's not asked to. The fronted should not reconnect to LinuxSampler for every single command, instead it should keep the connection established and simply resend message(s) for subsequent commands. To keep information in the front-end up-to-date the front-end has to periodically send new requests to get the current information from the LinuxSampler instance. This is often referred to as "polling". While polling is simple to implement and may be OK to use in some cases, there may be disadvantages to polling such as network traffic overhead and information being out of date.  It is possible for a client or several clients to open more than one connection to the server at the same time. It is also possible to send more than one request to the server at the same time but if those requests are sent over the same connection server MUST execute them sequentially. Upon executing a request server will produce a result set and send it to the client. Each and every request made by the client MUST result in a result set being sent back to the client. No other data other than a result set may be sent by a server to a client. No result set may be sent to a client without the client sending request to the server first. On any particular connection, result sets MUST be sent in their entirety without being interrupted by other result sets. If several requests got queued up at the server they MUST be processed in the order they were received and result sets MUST be sent back in the same order.</p>
910  </p>  <h1 id="rfc.section.5.1.1"><a href="#rfc.section.5.1.1">5.1.1.</a> Result format</h1>
911  <p>  <p id="rfc.section.5.1.1.p.1">Result set could be one of the following types:</p>
912                      </p>  <p/>
913  <blockquote class="text">  
914  <p>"NOTIFY:CHANNEL_COUNT:&lt;channels&gt;"  <ol>
915  </p>    <li>Normal</li>
916  </blockquote><p>    <li>Warning</li>
917                      <li>Error</li>
918  </p>  </ol>
919  <p>where &lt;channels&gt; will be replaced by the new number  
920                  of sampler channels.  <p> </p>
921  </p>  <p id="rfc.section.5.1.1.p.3">Warning and Error result sets MUST be single line and have the following format:</p>
922  <a name="SUBSCRIBE CHANNEL_MIDI"></a><br /><hr />  <p/>
923  <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
924  <a name="rfc.section.8.6"></a><h3>8.6.&nbsp;  <ul>
925  MIDI data on a sampler channel arrived</h3>    <li>"WRN:&lt;warning-code&gt;:&lt;warning-message&gt;"</li>
926      <li>"ERR:&lt;error-code&gt;:&lt;error-message&gt;"</li>
927  <p>Client may want to be notified when MIDI data arrive on sampler channels on  </ul>
928                  back-end side, by issuing the following command:  
929  </p>  <p> </p>
930  <p>  <p id="rfc.section.5.1.1.p.5">Where &lt;warning-code&gt; and &lt;error-code&gt; are numeric unique identifiers of the warning or error and &lt;warning-message&gt; and &lt;error-message&gt; are human readable descriptions of the warning or error respectively.</p>
931                      </p>  <p id="rfc.section.5.1.1.p.6">Examples:</p>
932  <blockquote class="text">  <p/>
933  <p>SUBSCRIBE CHANNEL_MIDI  
934  </p>  <ul class="empty">
935  </blockquote><p>    <li>C: "LOAD INSTRUMENT '/home/me/Boesendorfer24bit.gig" 0 0</li>
936                      <li>S: "WRN:32:This is a 24 bit patch which is not supported natively yet."</li>
937  </p>  </ul>
938  <p>Server will start sending one of the the following notification messages:  
939  </p>  <p> </p>
940  <p>  <p/>
941                      </p>  
942  <blockquote class="text">  <ul class="empty">
943  <p>"NOTIFY:CHANNEL_MIDI:&lt;channel-id&gt; NOTE_ON  &lt;note&gt; &lt;velocity&gt;"    <li>C: "GET AUDIO_OUTPUT_DRIVER_PARAMETER INFO ALSA EAR"</li>
944  </p>    <li>S: "ERR:3456:Audio output driver 'ALSA' does not have a parameter 'EAR'."</li>
945  <p>"NOTIFY:CHANNEL_MIDI:&lt;channel-id&gt; NOTE_OFF &lt;note&gt; &lt;velocity&gt;"  </ul>
946  </p>  
947  </blockquote><p>  <p> </p>
948                    <p/>
949  </p>  
950  <p>where &lt;channel-id&gt; will be replaced by the ID of the sampler channel where the MIDI  <ul class="empty">
951                  data arrived. &lt;note&gt; and &lt;velocity&gt; are integer values in the range between    <li>C: "GET AUDIO_OUTPUT_DEVICE INFO 123456"</li>
952                  0 .. 127, reflecting the analog meaning of the MIDI specification.    <li>S: "ERR:9:There is no audio output device with index 123456."</li>
953                    </ul>
954  </p>  
955  <p>CAUTION: no guarantee whatsoever will be made that MIDI events are actually all  <p> </p>
956                  delivered by this mechanism! With other words: events could be lost at any time!  <p id="rfc.section.5.1.1.p.10">Normal result sets could be:</p>
957                  This restriction was made to keep the RT-safeness of the backend's MIDI and audio  <p/>
958                  thread unaffected by this feature.  
959  </p>  <ol>
960  <a name="SUBSCRIBE DEVICE_MIDI"></a><br /><hr />    <li>Empty</li>
961  <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>    <li>Single line</li>
962  <a name="rfc.section.8.7"></a><h3>8.7.&nbsp;    <li>Multi-line</li>
963  MIDI data on a MIDI input device arrived</h3>  </ol>
964    
965  <p>Client may want to be notified when MIDI data arrive on MIDI input devices by issuing the following command:  <p> </p>
966  </p>  <p id="rfc.section.5.1.1.p.12">Empty result set is issued when the server only needed to acknowledge the fact that the request was received and it was processed successfully and no additional information is available. This result set has the following format:</p>
967  <p>  <p/>
968                              </p>  
969  <blockquote class="text">  <ul class="empty">
970  <p>SUBSCRIBE DEVICE_MIDI    <li>"OK"</li>
971  </p>  </ul>
972  </blockquote><p>  
973                        <p> </p>
974  </p>  <p id="rfc.section.5.1.1.p.14">Example:</p>
975  <p>Server will start sending one of the the following notification messages:  <p/>
976  </p>  
977  <p>  <ul class="empty">
978                              </p>    <li>C: "SET AUDIO_OUTPUT_DEVICE_PARAMETER 0 CHANNELS=4"</li>
979  <blockquote class="text">    <li>S: "OK"</li>
980  <p>"NOTIFY:DEVICE_MIDI:&lt;device-id&gt; &lt;port-id&gt; NOTE_ON &lt;note&gt; &lt;velocity&gt;"  </ul>
981  </p>  
982  <p>"NOTIFY:DEVICE_MIDI:&lt;device-id&gt; &lt;port-id&gt; NOTE_OFF &lt;note&gt; &lt;velocity&gt;"  <p> </p>
983  </p>  <p id="rfc.section.5.1.1.p.16">Single line result sets are command specific. One example of a single line result set is an empty line.  Multi-line result sets are command specific and may include one or more lines of information. They MUST always end with the following line:</p>
984  </blockquote><p>  <p/>
985                        
986  </p>  <ul class="empty">
987  <p>where &lt;device-id&gt; &lt;port-id&gt; will be replaced    <li>"."</li>
988                         by the IDs of the respective MIDI input device and the device's MIDI port where the MIDI  </ul>
989                         data arrived. &lt;note&gt; and &lt;velocity&gt; are integer values in the range between  
990                         0 .. 127, reflecting the analog meaning of the MIDI specification.  <p> </p>
991                        <p id="rfc.section.5.1.1.p.18">Example:</p>
992  </p>  <p/>
993  <p>CAUTION: no guarantee whatsoever will be made that MIDI events are actually all  
994                         delivered by this mechanism! With other words: events could be lost at any time!  <ul class="empty">
995                         This restriction was made to keep the RT-safeness of the backend's MIDI and audio    <li>C: "GET AUDIO_OUTPUT_DEVICE INFO 0"</li>
996                         thread unaffected by this feature.    <li>S: "DRIVER: ALSA"</li>
997  </p>    <li>"CHANNELS: 2"</li>
998  <a name="SUBSCRIBE VOICE_COUNT"></a><br /><hr />    <li>"SAMPLERATE: 44100"</li>
999  <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>    <li>"ACTIVE: true"</li>
1000  <a name="rfc.section.8.8"></a><h3>8.8.&nbsp;    <li>"FRAGMENTS: 2"</li>
1001  Number of active voices changed</h3>    <li>"FRAGMENTSIZE: 128"</li>
1002      <li>"CARD: '0,0'"</li>
1003  <p>Client may want to be notified when the number of voices on the    <li>"."</li>
1004                  back-end changes by issuing the following command:  </ul>
1005  </p>  
1006  <p>  <p> </p>
1007                      </p>  <p id="rfc.section.5.1.1.p.20">In addition to above mentioned formats, warnings and empty result sets MAY be indexed. In this case, they have the following formats respectively:</p>
1008  <blockquote class="text">  <p/>
1009  <p>SUBSCRIBE VOICE_COUNT  
1010  </p>  <ul>
1011  </blockquote><p>    <li>"WRN[&lt;index&gt;]:&lt;warning-code&gt;:&lt;warning-message&gt;"</li>
1012                      <li>"OK[&lt;index&gt;]"</li>
1013  </p>  </ul>
1014  <p>Server will start sending the following notification messages:  
1015  </p>  <p> </p>
1016  <p>  <p id="rfc.section.5.1.1.p.22">where &lt;index&gt; is command specific and is used to indicate channel number that the result set was related to or other integer value.</p>
1017                      </p>  <p id="rfc.section.5.1.1.p.23">Each line of the result set MUST end with &lt;CRLF&gt;.</p>
1018  <blockquote class="text">  <p id="rfc.section.5.1.1.p.24">Examples:</p>
1019  <p>"NOTIFY:VOICE_COUNT:&lt;sampler-channel&gt; &lt;voices&gt;"  <p/>
1020  </p>  
1021  </blockquote><p>  <ul class="empty">
1022                      <li>C: "ADD CHANNEL"</li>
1023  </p>    <li>S: "OK[12]"</li>
1024  <p>where &lt;sampler-channel&gt; will be replaced by the sampler channel the  </ul>
1025                  voice count change occurred and &lt;voices&gt; by the new number of  
1026                  active voices on that channel.  <p> </p>
1027  </p>  <p/>
1028  <a name="SUBSCRIBE STREAM_COUNT"></a><br /><hr />  
1029  <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  <ul class="empty">
1030  <a name="rfc.section.8.9"></a><h3>8.9.&nbsp;    <li>C: "CREATE AUDIO_OUTPUT_DEVICE ALSA SAMPLERATE=96000"</li>
1031  Number of active disk streams changed</h3>    <li>S: "WRN[0]:32:Sample rate not supported, using 44100 instead."</li>
1032    </ul>
1033  <p>Client may want to be notified when the number of streams on the back-end  
1034                  changes by issuing the following command: SUBSCRIBE STREAM_COUNT  <p> </p>
1035  </p>  <h1 id="rfc.section.5.2"><a href="#rfc.section.5.2">5.2.</a> Subscribe/notify communication method</h1>
1036  <p>  <p id="rfc.section.5.2.p.1">This more sophisticated communication method is actually only an extension of the simple request/response communication method. The front-end still uses a TCP connection and sends the same commands on the TCP connection. Two extra commands are SUBSCRIBE and UNSUBSCRIBE commands that allow a client to tell the server that it is interested in receiving notifications about certain events as they happen on the server. The SUBSCRIBE command has the following syntax:</p>
1037                      </p>  <p/>
1038  <blockquote class="text">  
1039  <p>SUBSCRIBE STREAM_COUNT  <ul class="empty">
1040  </p>    <li>SUBSCRIBE &lt;event-id&gt;</li>
1041  </blockquote><p>  </ul>
1042                    
1043  </p>  <p> </p>
1044  <p>Server will start sending the following notification messages:  <p id="rfc.section.5.2.p.3">where &lt;event-id&gt; will be replaced by the respective event that client wants to subscribe to. Upon receiving such request, server SHOULD respond with OK and start sending EVENT notifications when a given even has occurred to the front-end when an event has occurred. It MAY be possible certain events may be sent before OK response during real time nature of their generation. Event messages have the following format:</p>
1045  </p>  <p/>
1046  <p>  
1047                      </p>  <ul class="empty">
1048  <blockquote class="text">    <li>NOTIFY:&lt;event-id&gt;:&lt;custom-event-data&gt;</li>
1049  <p>"NOTIFY:STREAM_COUNT:&lt;sampler-channel&gt; &lt;streams&gt;"  </ul>
1050  </p>  
1051  </blockquote><p>  <p> </p>
1052                    <p id="rfc.section.5.2.p.5">where &lt;event-id&gt; uniquely identifies the event that has occurred and &lt;custom-event-data&gt; is event specific.</p>
1053  </p>  <p id="rfc.section.5.2.p.6">Several rules must be followed by the server when generating events:</p>
1054  <p>where &lt;sampler-channel&gt; will be replaced by the sampler channel the  <p/>
1055                  stream count change occurred and &lt;streams&gt; by the new number of  
1056                  active disk streams on that channel.  <ol>
1057  </p>    <li>Events MUST NOT be sent to any client who has not issued an appropriate SUBSCRIBE command.</li>
1058  <a name="SUBSCRIBE BUFFER_FILL"></a><br /><hr />    <li>Events MUST only be sent using the same connection that was used to subscribe to them.</li>
1059  <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>    <li>When response is being sent to the client, event MUST be inserted in the stream before or after the response, but NOT in the middle. Same is true about the response. It should never be inserted in the middle of the event message as well as any other response.</li>
1060  <a name="rfc.section.8.10"></a><h3>8.10.&nbsp;  </ol>
1061  Disk stream buffer fill state changed</h3>  
1062    <p> </p>
1063  <p>Client may want to be notified when the buffer fill state of a disk stream  <p id="rfc.section.5.2.p.8">If the client is not interested in a particular event anymore it MAY issue UNSUBSCRIBE command using the following syntax:</p>
1064                  on the back-end changes by issuing the following command:  <p/>
1065  </p>  
1066  <p>  <ul class="empty">
1067                      </p>    <li>UNSUBSCRIBE &lt;event-id&gt;</li>
1068  <blockquote class="text">  </ul>
1069  <p>SUBSCRIBE BUFFER_FILL  
1070  </p>  <p> </p>
1071  </blockquote><p>  <p id="rfc.section.5.2.p.10">where &lt;event-id&gt; will be replace by the respective event that client is no longer interested in receiving. For a list of supported events see <a href="#events">Section 8</a>.</p>
1072                    <p id="rfc.section.5.2.p.11">Example: the fill states of disk stream buffers have changed on sampler channel 4 and the LinuxSampler instance will react by sending the following message to all clients who subscribed to this event:</p>
1073  </p>  <p/>
1074  <p>Server will start sending the following notification messages:  
1075  </p>  <ul class="empty">
1076  <p>    <li>NOTIFY:CHANNEL_BUFFER_FILL:4 [35]62%,[33]80%,[37]98%</li>
1077                      </p>  </ul>
1078  <blockquote class="text">  
1079  <p>"NOTIFY:BUFFER_FILL:&lt;sampler-channel&gt; &lt;fill-data&gt;"  <p> </p>
1080  </p>  <p id="rfc.section.5.2.p.13">Which means there are currently three active streams on sampler channel 4, where the stream with ID "35" is filled by 62%, stream with ID 33 is filled by 80% and stream with ID 37 is filled by 98%.</p>
1081  </blockquote><p>  <p id="rfc.section.5.2.p.14">Clients may choose to open more than one connection to the server and use some connections to receive notifications while using other connections to issue commands to the back-end. This is entirely legal and up to the implementation. This does not change the protocol in any way and no special restrictions exist on the server to allow or disallow this or to track what connections belong to what front-ends. Server will listen on a single port, accept multiple connections and support protocol described in this specification in it's entirety on this single port on each connection that it accepted.</p>
1082                    <p id="rfc.section.5.2.p.15">Due to the fact that TCP is used for this communication, dead peers will be detected automatically by the OS TCP stack. While it may take a while to detect dead peers if no traffic is being sent from server to client (TCP keep-alive timer is set to 2 hours on many OSes) it will not be an issue here as when notifications are sent by the server, dead client will be detected quickly.</p>
1083  </p>  <p id="rfc.section.5.2.p.16">When connection is closed for any reason server MUST forget all subscriptions that were made on this connection.  If client reconnects it MUST resubscribe to all events that it wants to receive.</p>
1084  <p>where &lt;sampler-channel&gt; will be replaced by the sampler channel the  <h1 id="rfc.section.6"><a href="#rfc.section.6">6.</a> <a href="#control_commands" id="control_commands">Description for control commands</a></h1>
1085                  buffer fill state change occurred on and &lt;fill-data&gt; will be replaced by the  <p id="rfc.section.6.p.1">This chapter will describe the available control commands that can be sent on the TCP connection in detail. Some certain commands (e.g. <a href="#GET CHANNEL INFO">"GET CHANNEL INFO"</a> <cite title="NONE">[GET CHANNEL INFO]</cite> or <a href="#GET ENGINE INFO">"GET ENGINE INFO"</a> <cite title="NONE">[GET ENGINE INFO]</cite>) lead to multiple-line responses. In this case LinuxSampler signals the end of the response by a "." (single dot) line.</p>
1086                  buffer fill data for this channel as described in <a class='info' href='#GET CHANNEL BUFFER_FILL'>Section&nbsp;6.4.13<span> (</span><span class='info'>Current fill state of disk stream buffers</span><span>)</span></a>  <h1 id="rfc.section.6.1"><a href="#rfc.section.6.1">6.1.</a> Ignored lines and comments</h1>
1087                  as if the <a class='info' href='#GET CHANNEL BUFFER_FILL'>"GET CHANNEL BUFFER_FILL PERCENTAGE"<span> (</span><span class='info'>Current fill state of disk stream buffers</span><span>)</span></a> command was issued on this channel.  <p id="rfc.section.6.1.p.1">White lines, that is lines which only contain space and tabulator characters, and lines that start with a "#" character are ignored, thus it's possible for example to group commands and to place comments in a LSCP script file.</p>
1088  </p>  <h1 id="rfc.section.6.2"><a href="#rfc.section.6.2">6.2.</a> Configuring audio drivers</h1>
1089  <a name="SUBSCRIBE CHANNEL_INFO"></a><br /><hr />  <p id="rfc.section.6.2.p.1">Instances of drivers in LinuxSampler are called devices.  You can use multiple audio devices simultaneously, e.g. to output the sound of one sampler channel using the ALSA audio output driver, and on another sampler channel you might want to use the JACK audio output driver. For particular audio output systems it's also possible to create several devices of the same audio output driver, e.g. two separate ALSA audio output devices for using two different sound cards at the same time. This chapter describes all commands to configure LinuxSampler's audio output devices and their parameters.</p>
1090  <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  <p id="rfc.section.6.2.p.2">Instead of defining commands and parameters for each driver individually, all possible parameters, their meanings and possible values have to be obtained at runtime. This makes the protocol a bit abstract, but has the advantage, that front-ends can be written independently of what drivers are currently implemented and what parameters these drivers are actually offering. This means front-ends can even handle drivers which are implemented somewhere in future without modifying the front-end at all.</p>
1091  <a name="rfc.section.8.11"></a><h3>8.11.&nbsp;  <p id="rfc.section.6.2.p.3">Note: examples in this chapter showing particular parameters of drivers are not meant as specification of the drivers' parameters. Driver implementations in LinuxSampler might have complete different parameter names and meanings than shown in these examples or might change in future, so these examples are only meant for showing how to retrieve what parameters drivers are offering, how to retrieve their possible values, etc.</p>
1092  Channel information changed</h3>  <h1 id="rfc.section.6.2.1"><a href="#rfc.section.6.2.1">6.2.1.</a> <a href="#GET AVAILABLE_AUDIO_OUTPUT_DRIVERS" id="GET AVAILABLE_AUDIO_OUTPUT_DRIVERS">Getting amount of available audio output drivers</a></h1>
1093    <p id="rfc.section.6.2.1.p.1">Use the following command to get the number of audio output drivers currently available for the LinuxSampler instance:</p>
1094  <p>Client may want to be notified when changes were made to sampler channels on the  <p/>
1095                  back-end by issuing the following command:  
1096  </p>  <ul class="empty">
1097  <p>    <li>GET AVAILABLE_AUDIO_OUTPUT_DRIVERS</li>
1098                      </p>  </ul>
1099  <blockquote class="text">  
1100  <p>SUBSCRIBE CHANNEL_INFO  <p> </p>
1101  </p>  <p id="rfc.section.6.2.1.p.3">Possible Answers:</p>
1102  </blockquote><p>  <p/>
1103                    
1104  </p>  <ul class="empty">
1105  <p>Server will start sending the following notification messages:    <li>LinuxSampler will answer by sending the number of audio output drivers.</li>
1106  </p>  </ul>
1107  <p>  
1108                      </p>  <p> </p>
1109  <blockquote class="text">  <p id="rfc.section.6.2.1.p.5">Example:</p>
1110  <p>"NOTIFY:CHANNEL_INFO:&lt;sampler-channel&gt;"  <p/>
1111  </p>  
1112  </blockquote><p>  <ul class="empty">
1113                      <li>C: "GET AVAILABLE_AUDIO_OUTPUT_DRIVERS"</li>
1114  </p>    <li>S: "2"</li>
1115  <p>where &lt;sampler-channel&gt; will be replaced by the sampler channel the  </ul>
1116                  channel info change occurred. The front-end will have to send  
1117                  the respective command to actually get the channel info. Because these messages  <p> </p>
1118                  will be triggered by LSCP commands issued by other clients rather than real  <h1 id="rfc.section.6.2.2"><a href="#rfc.section.6.2.2">6.2.2.</a> <a href="#LIST AVAILABLE_AUDIO_OUTPUT_DRIVERS" id="LIST AVAILABLE_AUDIO_OUTPUT_DRIVERS">Getting all available audio output drivers</a></h1>
1119                  time events happening on the server, it is believed that an empty notification  <p id="rfc.section.6.2.2.p.1">Use the following command to list all audio output drivers currently available for the LinuxSampler instance:</p>
1120                  message is sufficient here.  <p/>
1121  </p>  
1122  <a name="SUBSCRIBE FX_SEND_COUNT"></a><br /><hr />  <ul class="empty">
1123  <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>    <li>LIST AVAILABLE_AUDIO_OUTPUT_DRIVERS</li>
1124  <a name="rfc.section.8.12"></a><h3>8.12.&nbsp;  </ul>
1125  Number of effect sends changed</h3>  
1126    <p> </p>
1127  <p>Client may want to be notified when the number of effect sends on  <p id="rfc.section.6.2.2.p.3">Possible Answers:</p>
1128                  a particular sampler channel is changed by issuing the following command:  <p/>
1129  </p>  
1130  <p>  <ul class="empty">
1131                      </p>    <li>LinuxSampler will answer by sending comma separated character strings, each symbolizing an audio output driver.</li>
1132  <blockquote class="text">  </ul>
1133  <p>SUBSCRIBE FX_SEND_COUNT  
1134  </p>  <p> </p>
1135  </blockquote><p>  <p id="rfc.section.6.2.2.p.5">Example:</p>
1136                    <p/>
1137  </p>  
1138  <p>Server will start sending the following notification messages:  <ul class="empty">
1139  </p>    <li>C: "LIST AVAILABLE_AUDIO_OUTPUT_DRIVERS"</li>
1140  <p>    <li>S: "ALSA,JACK"</li>
1141                      </p>  </ul>
1142  <blockquote class="text">  
1143  <p>"NOTIFY:FX_SEND_COUNT:&lt;channel-id&gt; &lt;fx-sends&gt;"  <p> </p>
1144  </p>  <h1 id="rfc.section.6.2.3"><a href="#rfc.section.6.2.3">6.2.3.</a> <a href="#GET AUDIO_OUTPUT_DRIVER INFO" id="GET AUDIO_OUTPUT_DRIVER INFO">Getting information about a specific audio                 output driver</a></h1>
1145  </blockquote><p>  <p id="rfc.section.6.2.3.p.1">Use the following command to get detailed information about a specific audio output driver:</p>
1146                    <p/>
1147  </p>  
1148  <p>where &lt;channel-id&gt; will be replaced by the numerical ID of the sampler  <ul class="empty">
1149                  channel, on which the effect sends number is changed and &lt;fx-sends&gt; will    <li>GET AUDIO_OUTPUT_DRIVER INFO &lt;audio-output-driver&gt;</li>
1150                  be replaced by the new number of effect sends on that channel.  </ul>
1151  </p>  
1152  <a name="SUBSCRIBE FX_SEND_INFO"></a><br /><hr />  <p> </p>
1153  <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  <p id="rfc.section.6.2.3.p.3">Where &lt;audio-output-driver&gt; is the name of the audio output driver, returned by the <a href="#LIST AVAILABLE_AUDIO_OUTPUT_DRIVERS">"LIST AVAILABLE_AUDIO_OUTPUT_DRIVERS"</a> <cite title="NONE">[LIST AVAILABLE_AUDIO_OUTPUT_DRIVERS]</cite> command.</p>
1154  <a name="rfc.section.8.13"></a><h3>8.13.&nbsp;  <p id="rfc.section.6.2.3.p.4">Possible Answers:</p>
1155  Effect send information changed</h3>  <p/>
1156    
1157  <p>Client may want to be notified when changes were made to effect sends on a  <ul class="empty">
1158                  a particular sampler channel by issuing the following command:    <li>LinuxSampler will answer by sending a &lt;CRLF&gt; separated list. Each answer line begins with the information category name followed by a colon and then a space character &lt;SP&gt; and finally the info character string to that info category. At the moment the following information categories are defined:</li>
1159  </p>    <li>
1160  <p>      <ul class="empty">
1161                      </p>        <li>DESCRIPTION - <ul class="empty"><li>character string describing the audio output driver</li></ul><p> </p></li>
1162  <blockquote class="text">        <li>VERSION - <ul class="empty"><li>character string reflecting the driver's version</li></ul><p> </p></li>
1163  <p>SUBSCRIBE FX_SEND_INFO        <li>PARAMETERS - <ul class="empty"><li>comma separated list of all parameters available for the given audio output driver, at least parameters 'channels', 'samplerate' and 'active' are offered by all audio output drivers</li></ul><p> </p></li>
1164  </p>      </ul>
1165  </blockquote><p>      <p> </p>
1166                      </li>
1167  </p>    <li>The mentioned fields above don't have to be in particular order.</li>
1168  <p>Server will start sending the following notification messages:  </ul>
1169  </p>  
1170  <p>  <p> </p>
1171                      </p>  <p id="rfc.section.6.2.3.p.6">Example:</p>
1172  <blockquote class="text">  <p/>
1173  <p>"NOTIFY:FX_SEND_INFO:&lt;channel-id&gt; &lt;fx-send-id&gt;"  
1174  </p>  <ul class="empty">
1175  </blockquote><p>    <li>C: "GET AUDIO_OUTPUT_DRIVER INFO ALSA"</li>
1176                      <li>S: "DESCRIPTION: Advanced Linux Sound Architecture"</li>
1177  </p>    <li>"VERSION: 1.0"</li>
1178  <p>where &lt;channel-id&gt; will be replaced by the numerical ID of the sampler    <li>"PARAMETERS: DRIVER,CHANNELS,SAMPLERATE,ACTIVE,FRAGMENTS, FRAGMENTSIZE,CARD"</li>
1179                  channel, on which an effect send entity is changed and &lt;fx-send-id&gt; will    <li>"."</li>
1180                  be replaced by the numerical ID of the changed effect send.  </ul>
1181  </p>  
1182  <a name="SUBSCRIBE TOTAL_VOICE_COUNT"></a><br /><hr />  <p> </p>
1183  <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  <h1 id="rfc.section.6.2.4"><a href="#rfc.section.6.2.4">6.2.4.</a> <a href="#GET AUDIO_OUTPUT_DRIVER_PARAMETER INFO" id="GET AUDIO_OUTPUT_DRIVER_PARAMETER INFO">Getting information about specific audio                 output driver parameter</a></h1>
1184  <a name="rfc.section.8.14"></a><h3>8.14.&nbsp;  <p id="rfc.section.6.2.4.p.1">Use the following command to get detailed information about a  specific audio output driver parameter:</p>
1185  Total number of active voices changed</h3>  <p/>
1186    
1187  <p>Client may want to be notified when the total number of voices on the  <ul class="empty">
1188                  back-end changes by issuing the following command:    <li>GET AUDIO_OUTPUT_DRIVER_PARAMETER INFO &lt;audio&gt; &lt;prm&gt; [&lt;deplist&gt;]</li>
1189  </p>  </ul>
1190  <p>  
1191                      </p>  <p> </p>
1192  <blockquote class="text">  <p id="rfc.section.6.2.4.p.3">Where &lt;audio&gt; is the name of the audio output driver as returned by the <a href="#LIST AVAILABLE_AUDIO_OUTPUT_DRIVERS">"LIST AVAILABLE_AUDIO_OUTPUT_DRIVERS"</a> <cite title="NONE">[LIST AVAILABLE_AUDIO_OUTPUT_DRIVERS]</cite> command, &lt;prm&gt; a specific parameter name for which information should be obtained (as returned by the <a href="#GET AUDIO_OUTPUT_DRIVER INFO">"GET AUDIO_OUTPUT_DRIVER INFO"</a> <cite title="NONE">[GET AUDIO_OUTPUT_DRIVER INFO]</cite> command) and &lt;deplist&gt; is an optional list of parameters on which the sought parameter &lt;prm&gt; depends on, &lt;deplist&gt; is a list of key-value pairs in form of "key1=val1 key2=val2 ...", where character string values are encapsulated into apostrophes ('). Arguments given with &lt;deplist&gt; which are not dependency parameters of &lt;prm&gt; will be ignored, means the front-end application can simply put all parameters into &lt;deplist&gt; with the values already selected by the user.</p>
1193  <p>SUBSCRIBE TOTAL_VOICE_COUNT  <p id="rfc.section.6.2.4.p.4">Possible Answers:</p>
1194  </p>  <p/>
1195  </blockquote><p>  
1196                    <ul class="empty">
1197  </p>    <li>LinuxSampler will answer by sending a &lt;CRLF&gt; separated list.  Each answer line begins with the information category name followed by a colon and then a space character &lt;SP&gt; and finally the info character string to that info category. There are information which is always returned, independently of the given driver parameter and there are optional information which is only shown dependently to given driver parameter. At the moment the following information categories are defined:</li>
1198  <p>Server will start sending the following notification messages:  </ul>
1199  </p>  
1200  <p>  <p> </p>
1201                      </p>  <p/>
1202  <blockquote class="text">  
1203  <p>"NOTIFY:TOTAL_VOICE_COUNT:&lt;voices&gt;"  <ul class="empty">
1204  </p>    <li>TYPE - <ul class="empty"><li>either "BOOL" for boolean value(s) or "INT" for integer value(s) or "FLOAT" for dotted number(s) or "STRING" for character string(s) (always returned, no matter which driver parameter)</li></ul><p> </p></li>
1205  </blockquote><p>    <li>DESCRIPTION - <ul class="empty"><li>arbitrary text describing the purpose of the parameter (always returned, no matter which driver parameter)</li></ul><p> </p></li>
1206                      <li>MANDATORY - <ul class="empty"><li>either true or false, defines if this parameter must be given when the device is to be created with the <a href="#CREATE AUDIO_OUTPUT_DEVICE">'CREATE AUDIO_OUTPUT_DEVICE'</a> <cite title="NONE">[CREATE AUDIO_OUTPUT_DEVICE]</cite> command (always returned, no matter which driver parameter)</li></ul><p> </p></li>
1207  </p>    <li>FIX - <ul class="empty"><li>either true or false, if false then this parameter can be changed at any time, once the device is created by the <a href="#CREATE AUDIO_OUTPUT_DEVICE">'CREATE AUDIO_OUTPUT_DEVICE'</a> <cite title="NONE">[CREATE AUDIO_OUTPUT_DEVICE]</cite> command (always returned, no matter which driver parameter)</li></ul><p> </p></li>
1208  <p>where &lt;voices&gt; will be replaced by the new number of    <li>MULTIPLICITY - <ul class="empty"><li>either true or false, defines if this parameter allows only one value or a list of values, where true means multiple values and false only a single value allowed (always returned, no matter which driver parameter)</li></ul><p> </p></li>
1209                  all currently active voices.    <li>DEPENDS - <ul class="empty"><li>comma separated list of parameters this parameter depends on, means the values for fields 'DEFAULT', 'RANGE_MIN', 'RANGE_MAX' and 'POSSIBILITIES' might depend on these listed parameters, for example assuming that an audio driver (like the ALSA driver) offers parameters 'card' and 'samplerate' then parameter 'samplerate' would depend on 'card' because the possible values for 'samplerate' depends on the sound card which can be chosen by the 'card' parameter (optionally returned, dependent to driver parameter)</li></ul><p> </p></li>
1210  </p>    <li>DEFAULT - <ul class="empty"><li>reflects the default value for this parameter which is used when the device is created and not explicitly given with the <a href="#CREATE AUDIO_OUTPUT_DEVICE">'CREATE AUDIO_OUTPUT_DEVICE'</a> <cite title="NONE">[CREATE AUDIO_OUTPUT_DEVICE]</cite> command, in case of MULTIPLCITY=true, this is a comma separated list, that's why character strings are encapsulated into apostrophes (') (optionally returned, dependent to driver parameter)</li></ul><p> </p></li>
1211  <a name="SUBSCRIBE TOTAL_STREAM_COUNT"></a><br /><hr />    <li>RANGE_MIN - <ul class="empty"><li>defines lower limit of the allowed value range for this parameter, can be an integer value as well as a dotted number, this parameter is often used in conjunction with RANGE_MAX, but may also appear without (optionally returned, dependent to driver parameter)</li></ul><p> </p></li>
1212  <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>    <li>RANGE_MAX - <ul class="empty"><li>defines upper limit of the allowed value range for this parameter, can be an integer value as well as a dotted number, this parameter is often used in conjunction with RANGE_MIN, but may also appear without (optionally returned, dependent to driver parameter)</li></ul><p> </p></li>
1213  <a name="rfc.section.8.15"></a><h3>8.15.&nbsp;    <li>POSSIBILITIES - <ul class="empty"><li>comma separated list of possible values for this parameter, character strings are encapsulated into apostrophes (optionally returned, dependent to driver parameter)</li></ul><p> </p></li>
1214  Total number of active disk streams changed</h3>  </ul>
1215    
1216  <p>Client may want to be notified when the total number of disk streams on the  <p> </p>
1217                  back-end changes by issuing the following command:  <p id="rfc.section.6.2.4.p.7">The mentioned fields above don't have to be in particular order.</p>
1218  </p>  <p id="rfc.section.6.2.4.p.8">Examples:</p>
1219  <p>  <p/>
1220                      </p>  
1221  <blockquote class="text">  <ul class="empty">
1222  <p>SUBSCRIBE TOTAL_STREAM_COUNT    <li>C: "GET AUDIO_OUTPUT_DRIVER_PARAMETER INFO ALSA CARD"</li>
1223  </p>    <li>S: "DESCRIPTION: sound card to be used"</li>
1224  </blockquote><p>    <li>"TYPE: STRING"</li>
1225                      <li>"MANDATORY: false"</li>
1226  </p>    <li>"FIX: true"</li>
1227  <p>Server will start sending the following notification messages:    <li>"MULTIPLICITY: false"</li>
1228  </p>    <li>"DEFAULT: '0,0'"</li>
1229  <p>    <li>"POSSIBILITIES: '0,0','1,0','2,0'"</li>
1230                      </p>    <li>"."</li>
1231  <blockquote class="text">  </ul>
1232  <p>"NOTIFY:TOTAL_STREAM_COUNT:&lt;streams&gt;"  
1233  </p>  <p> </p>
1234  </blockquote><p>  <p/>
1235                    
1236  </p>  <ul class="empty">
1237  <p>where &lt;streams&gt; will be replaced by the new number of    <li>C: "GET AUDIO_OUTPUT_DRIVER_PARAMETER INFO ALSA SAMPLERATE"</li>
1238                  all currently active disk streams.    <li>S: "DESCRIPTION: output sample rate in Hz"</li>
1239  </p>    <li>"TYPE: INT"</li>
1240  <a name="SUBSCRIBE MIDI_INSTRUMENT_MAP_COUNT"></a><br /><hr />    <li>"MANDATORY: false"</li>
1241  <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>    <li>"FIX: false"</li>
1242  <a name="rfc.section.8.16"></a><h3>8.16.&nbsp;    <li>"MULTIPLICITY: false"</li>
1243  Number of MIDI instrument maps changed</h3>    <li>"DEPENDS: card"</li>
1244      <li>"DEFAULT: 44100"</li>
1245  <p>Client may want to be notified when the number of MIDI instrument maps on the    <li>"."</li>
1246                  back-end changes by issuing the following command:  </ul>
1247  </p>  
1248  <p>  <p> </p>
1249                      </p>  <p/>
1250  <blockquote class="text">  
1251  <p>SUBSCRIBE MIDI_INSTRUMENT_MAP_COUNT  <ul class="empty">
1252  </p>    <li>C: "GET AUDIO_OUTPUT_DRIVER_PARAMETER INFO ALSA SAMPLERATE CARD='0,0'"</li>
1253  </blockquote><p>    <li>S: "DESCRIPTION: output sample rate in Hz"</li>
1254                      <li>"TYPE: INT"</li>
1255  </p>    <li>"MANDATORY: false"</li>
1256  <p>Server will start sending the following notification messages:    <li>"FIX: false"</li>
1257  </p>    <li>"MULTIPLICITY: false"</li>
1258  <p>    <li>"DEPENDS: card"</li>
1259                      </p>    <li>"DEFAULT: 44100"</li>
1260  <blockquote class="text">    <li>"RANGE_MIN: 22050"</li>
1261  <p>"NOTIFY:MIDI_INSTRUMENT_MAP_COUNT:&lt;maps&gt;"    <li>"RANGE_MAX: 96000"</li>
1262  </p>    <li>"."</li>
1263  </blockquote><p>  </ul>
1264                    
1265  </p>  <p> </p>
1266  <p>where &lt;maps&gt; will be replaced by the new number  <h1 id="rfc.section.6.2.5"><a href="#rfc.section.6.2.5">6.2.5.</a> <a href="#CREATE AUDIO_OUTPUT_DEVICE" id="CREATE AUDIO_OUTPUT_DEVICE">Creating an audio output device</a></h1>
1267                  of MIDI instrument maps.  <p id="rfc.section.6.2.5.p.1">Use the following command to create a new audio output device for  the desired audio output system:</p>
1268  </p>  <p/>
1269  <a name="SUBSCRIBE MIDI_INSTRUMENT_MAP_INFO"></a><br /><hr />  
1270  <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  <ul class="empty">
1271  <a name="rfc.section.8.17"></a><h3>8.17.&nbsp;    <li>CREATE AUDIO_OUTPUT_DEVICE &lt;audio-output-driver&gt; [&lt;param-list&gt;]</li>
1272  MIDI instrument map information changed</h3>  </ul>
1273    
1274  <p>Client may want to be notified when changes were made to MIDI instrument maps on the  <p> </p>
1275                  back-end by issuing the following command:  <p id="rfc.section.6.2.5.p.3">Where &lt;audio-output-driver&gt; should be replaced by the desired audio output system as returned by the <a href="#LIST AVAILABLE_AUDIO_OUTPUT_DRIVERS">"LIST AVAILABLE_AUDIO_OUTPUT_DRIVERS"</a> <cite title="NONE">[LIST AVAILABLE_AUDIO_OUTPUT_DRIVERS]</cite> command and &lt;param-list&gt; by an optional list of driver specific parameters in form of "key1=val1 key2=val2 ...", where character string values should be encapsulated into apostrophes (').  Note that there might be drivers which require parameter(s) to be given with this command. Use the previously described commands in this chapter to get this information.</p>
1276  </p>  <p id="rfc.section.6.2.5.p.4">Possible Answers:</p>
1277  <p>  <p/>
1278                      </p>  
1279  <blockquote class="text">  <ul class="empty">
1280  <p>SUBSCRIBE MIDI_INSTRUMENT_MAP_INFO    <li>"OK[&lt;device-id&gt;]" - <ul class="empty"><li>in case the device was successfully created, where &lt;device-id&gt; is the numerical ID of the new device</li></ul><p> </p></li>
1281  </p>    <li>"WRN[&lt;device-id&gt;]:&lt;warning-code&gt;:&lt;warning-message&gt;" - <ul class="empty"><li>in case the device was created successfully, where &lt;device-id&gt; is the numerical ID of the new device, but there are noteworthy issue(s) related (e.g. sound card doesn't support given hardware parameters and the driver is using fall-back values), providing an appropriate warning code and warning message</li></ul><p> </p></li>
1282  </blockquote><p>    <li>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" - <ul class="empty"><li>in case it failed, providing an appropriate error code and error message</li></ul><p> </p></li>
1283                    </ul>
1284  </p>  
1285  <p>Server will start sending the following notification messages:  <p> </p>
1286  </p>  <p id="rfc.section.6.2.5.p.6">Examples:</p>
1287  <p>  <p/>
1288                      </p>  
1289  <blockquote class="text">  <ul class="empty">
1290  <p>"NOTIFY:MIDI_INSTRUMENT_MAP_INFO:&lt;map-id&gt;"    <li>C: "CREATE AUDIO_OUTPUT_DEVICE ALSA"</li>
1291  </p>    <li>S: "OK[0]"</li>
1292  </blockquote><p>  </ul>
1293                    
1294  </p>  <p> </p>
1295  <p>where &lt;map-id&gt; will be replaced by the numerical ID of the MIDI instrument map,  <p/>
1296                  for which information changes occurred. The front-end will have to send  
1297                  the respective command to actually get the MIDI instrument map info. Because these messages  <ul class="empty">
1298                  will be triggered by LSCP commands issued by other clients rather than real    <li>C: "CREATE AUDIO_OUTPUT_DEVICE ALSA CARD='2,0' SAMPLERATE=96000"</li>
1299                  time events happening on the server, it is believed that an empty notification    <li>S: "OK[1]"</li>
1300                  message is sufficient here.  </ul>
1301  </p>  
1302  <a name="SUBSCRIBE MIDI_INSTRUMENT_COUNT"></a><br /><hr />  <p> </p>
1303  <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  <h1 id="rfc.section.6.2.6"><a href="#rfc.section.6.2.6">6.2.6.</a> <a href="#DESTROY AUDIO_OUTPUT_DEVICE" id="DESTROY AUDIO_OUTPUT_DEVICE">Destroying an audio output device</a></h1>
1304  <a name="rfc.section.8.18"></a><h3>8.18.&nbsp;  <p id="rfc.section.6.2.6.p.1">Use the following command to destroy a created output device:</p>
1305  Number of MIDI instruments changed</h3>  <p/>
1306    
1307  <p>Client may want to be notified when the number of MIDI instrument maps on the  <ul class="empty">
1308                  back-end changes by issuing the following command:    <li>DESTROY AUDIO_OUTPUT_DEVICE &lt;device-id&gt;</li>
1309  </p>  </ul>
1310  <p>  
1311                      </p>  <p> </p>
1312  <blockquote class="text">  <p id="rfc.section.6.2.6.p.3">Where &lt;device-id&gt; should be replaced by the numerical ID of the audio output device as given by the <a href="#CREATE AUDIO_OUTPUT_DEVICE">"CREATE AUDIO_OUTPUT_DEVICE"</a> <cite title="NONE">[CREATE AUDIO_OUTPUT_DEVICE]</cite> or <a href="#LIST AUDIO_OUTPUT_DEVICES">"LIST AUDIO_OUTPUT_DEVICES"</a> <cite title="NONE">[LIST AUDIO_OUTPUT_DEVICES]</cite> command.</p>
1313  <p>SUBSCRIBE MIDI_INSTRUMENT_COUNT  <p id="rfc.section.6.2.6.p.4">Possible Answers:</p>
1314  </p>  <p/>
1315  </blockquote><p>  
1316                    <ul class="empty">
1317  </p>    <li>"OK" - <ul class="empty"><li>in case the device was successfully destroyed</li></ul><p> </p></li>
1318  <p>Server will start sending the following notification messages:    <li>"WRN:&lt;warning-code&gt;:&lt;warning-message&gt;" - <ul class="empty"><li>in case the device was destroyed successfully, but there are noteworthy issue(s) related (e.g. an audio over ethernet driver was unloaded but the other host might not be informed about this situation), providing an appropriate warning code and warning message</li></ul><p> </p></li>
1319  </p>    <li>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" - <ul class="empty"><li>in case it failed, providing an appropriate error code and error message</li></ul><p> </p></li>
1320  <p>  </ul>
1321                      </p>  
1322  <blockquote class="text">  <p> </p>
1323  <p>"NOTIFY:MIDI_INSTRUMENT_COUNT:&lt;map-id&gt; &lt;instruments&gt;"  <p id="rfc.section.6.2.6.p.6">Example:</p>
1324  </p>  <p/>
1325  </blockquote><p>  
1326                    <ul class="empty">
1327  </p>    <li>C: "DESTROY AUDIO_OUTPUT_DEVICE 0"</li>
1328  <p>where &lt;map-id&gt; is the numerical ID of the MIDI instrument map, in which    <li>S: "OK"</li>
1329                  the nuber of instruments has changed and &lt;instruments&gt; will be replaced by  </ul>
1330                  the new number of MIDI instruments in the specified map.  
1331  </p>  <p> </p>
1332  <a name="SUBSCRIBE MIDI_INSTRUMENT_INFO"></a><br /><hr />  <h1 id="rfc.section.6.2.7"><a href="#rfc.section.6.2.7">6.2.7.</a> <a href="#GET AUDIO_OUTPUT_DEVICES" id="GET AUDIO_OUTPUT_DEVICES">Getting all created audio output device count</a></h1>
1333  <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  <p id="rfc.section.6.2.7.p.1">Use the following command to count all created audio output devices:</p>
1334  <a name="rfc.section.8.19"></a><h3>8.19.&nbsp;  <p/>
1335  MIDI instrument information changed</h3>  
1336    <ul class="empty">
1337  <p>Client may want to be notified when changes were made to MIDI instruments on the    <li>GET AUDIO_OUTPUT_DEVICES</li>
1338                  back-end by issuing the following command:  </ul>
1339  </p>  
1340  <p>  <p> </p>
1341                      </p>  <p id="rfc.section.6.2.7.p.3">Possible Answers:</p>
1342  <blockquote class="text">  <p/>
1343  <p>SUBSCRIBE MIDI_INSTRUMENT_INFO  
1344  </p>  <ul class="empty">
1345  </blockquote><p>    <li>LinuxSampler will answer by sending the current number of all audio output devices.</li>
1346                    </ul>
1347  </p>  
1348  <p>Server will start sending the following notification messages:  <p> </p>
1349  </p>  <p id="rfc.section.6.2.7.p.5">Example:</p>
1350  <p>  <p/>
1351                      </p>  
1352  <blockquote class="text">  <ul class="empty">
1353  <p>"NOTIFY:MIDI_INSTRUMENT_INFO:&lt;map-id&gt; &lt;bank&gt; &lt;program&gt;"    <li>C: "GET AUDIO_OUTPUT_DEVICES"</li>
1354  </p>    <li>S: "4"</li>
1355  </blockquote><p>  </ul>
1356                    
1357  </p>  <p> </p>
1358  <p>where &lt;map-id&gt; will be replaced by the numerical ID of the MIDI instrument map,  <h1 id="rfc.section.6.2.8"><a href="#rfc.section.6.2.8">6.2.8.</a> <a href="#LIST AUDIO_OUTPUT_DEVICES" id="LIST AUDIO_OUTPUT_DEVICES">Getting all created audio output device list</a></h1>
1359                  in which a MIDI instrument is changed. &lt;bank&gt; and &lt;program&gt; specifies  <p id="rfc.section.6.2.8.p.1">Use the following command to list all created audio output devices:</p>
1360                  the location of the changed MIDI instrument in the map. The front-end will have to send  <p/>
1361                  the respective command to actually get the MIDI instrument info. Because these messages  
1362                  will be triggered by LSCP commands issued by other clients rather than real  <ul class="empty">
1363                  time events happening on the server, it is believed that an empty notification    <li>LIST AUDIO_OUTPUT_DEVICES</li>
1364                  message is sufficient here.  </ul>
1365  </p>  
1366  <a name="SUBSCRIBE GLOBAL_INFO"></a><br /><hr />  <p> </p>
1367  <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  <p id="rfc.section.6.2.8.p.3">Possible Answers:</p>
1368  <a name="rfc.section.8.20"></a><h3>8.20.&nbsp;  <p/>
1369  Global settings changed</h3>  
1370    <ul class="empty">
1371  <p>Client may want to be notified when changes to the global settings    <li>LinuxSampler will answer by sending a comma separated list with the numerical IDs of all audio output devices.</li>
1372                  of the sampler were made by issuing the following command:  </ul>
1373  </p>  
1374  <p>  <p> </p>
1375                      </p>  <p id="rfc.section.6.2.8.p.5">Example:</p>
1376  <blockquote class="text">  <p/>
1377  <p>SUBSCRIBE GLOBAL_INFO  
1378  </p>  <ul class="empty">
1379  </blockquote><p>    <li>C: "LIST AUDIO_OUTPUT_DEVICES"</li>
1380                      <li>S: "0,1,4,5"</li>
1381  </p>  </ul>
1382  <p>Server will start sending the following types of notification messages:  
1383  </p>  <p> </p>
1384  <p>  <h1 id="rfc.section.6.2.9"><a href="#rfc.section.6.2.9">6.2.9.</a> <a href="#GET AUDIO_OUTPUT_DEVICE INFO" id="GET AUDIO_OUTPUT_DEVICE INFO">Getting current settings of an audio output device</a></h1>
1385                      </p>  <p id="rfc.section.6.2.9.p.1">Use the following command to get current settings of a specific, created audio output device:</p>
1386  <blockquote class="text">  <p/>
1387  <p>"NOTIFY:GLOBAL_INFO:VOLUME &lt;volume&gt;" - Notifies that the  
1388                          golbal volume of the sampler is changed, where &lt;volume&gt; will be  <ul class="empty">
1389                          replaced by the optional dotted floating point value, reflecting the    <li>GET AUDIO_OUTPUT_DEVICE INFO &lt;device-id&gt;</li>
1390                          new global volume parameter.  </ul>
1391  </p>  
1392  </blockquote><p>  <p> </p>
1393                      </p>  <p id="rfc.section.6.2.9.p.3">Where &lt;device-id&gt; should be replaced by numerical ID of the audio output device as e.g. returned by the <a href="#LIST AUDIO_OUTPUT_DEVICES">"LIST AUDIO_OUTPUT_DEVICES"</a> <cite title="NONE">[LIST AUDIO_OUTPUT_DEVICES]</cite> command.</p>
1394  <blockquote class="text">  <p id="rfc.section.6.2.9.p.4">Possible Answers:</p>
1395  <p>"NOTIFY:GLOBAL_INFO:VOICES &lt;max-voices&gt;" - Notifies that the  <p id="rfc.section.6.2.9.p.5">LinuxSampler will answer by sending a &lt;CRLF&gt; separated list.  Each answer line begins with the information category name followed by a colon and then a space character &lt;SP&gt; and finally the info character string to that info category. As some parameters might allow multiple values, character strings are encapsulated into apostrophes ('). At the moment the following information categories are defined (independently of device):</p>
1396                          golbal limit of the sampler for maximum voices is changed, where  <p/>
1397                          &lt;max-voices&gt; will be an integer value, reflecting the  
1398                          new global voice limit parameter.  <ul class="empty">
1399  </p>    <li>DRIVER - <ul class="empty"><li>identifier of the used audio output driver, as also returned by the <a href="#LIST AVAILABLE_AUDIO_OUTPUT_DRIVERS">"LIST AVAILABLE_AUDIO_OUTPUT_DRIVERS"</a> <cite title="NONE">[LIST AVAILABLE_AUDIO_OUTPUT_DRIVERS]</cite> command</li></ul><p> </p></li>
1400  </blockquote><p>    <li>CHANNELS - <ul class="empty"><li>amount of audio output channels this device currently offers</li></ul><p> </p></li>
1401                      </p>    <li>SAMPLERATE - <ul class="empty"><li>playback sample rate the device uses</li></ul><p> </p></li>
1402  <blockquote class="text">    <li>ACTIVE - <ul class="empty"><li>either true or false, if false then the audio device is inactive and doesn't output any sound, nor do the sampler channels connected to this audio device render any audio</li></ul><p> </p></li>
1403  <p>"NOTIFY:GLOBAL_INFO:STREAMS &lt;max-streams&gt;" - Notifies that the  </ul>
1404                          golbal limit of the sampler for maximum disk streams is changed, where  
1405                          &lt;max-streams&gt; will be an integer value, reflecting the  <p> </p>
1406                          new global disk streams limit parameter.  <p id="rfc.section.6.2.9.p.7">The mentioned fields above don't have to be in particular order. The fields above are only those fields which are returned by all audio output devices. Every audio output driver might have its own, additional driver specific parameters (see <a href="#GET AUDIO_OUTPUT_DRIVER INFO">Section 6.2.3</a>) which are also returned by this command.</p>
1407  </p>  <p id="rfc.section.6.2.9.p.8">Example:</p>
1408  </blockquote><p>  <p/>
1409                    
1410  </p>  <ul class="empty">
1411  <a name="SUBSCRIBE DB_INSTRUMENT_DIRECTORY_COUNT"></a><br /><hr />    <li>C: "GET AUDIO_OUTPUT_DEVICE INFO 0"</li>
1412  <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>    <li>S: "DRIVER: ALSA"</li>
1413  <a name="rfc.section.8.21"></a><h3>8.21.&nbsp;    <li>"CHANNELS: 2"</li>
1414  Number of database instrument directories changed</h3>    <li>"SAMPLERATE: 44100"</li>
1415      <li>"ACTIVE: true"</li>
1416  <p>Client may want to be notified when the number of instrument    <li>"FRAGMENTS: 2"</li>
1417                  directories in a particular directory in the instruments database    <li>"FRAGMENTSIZE: 128"</li>
1418                  is changed by issuing the following command:    <li>"CARD: '0,0'"</li>
1419  </p>    <li>"."</li>
1420  <p>  </ul>
1421                      </p>  
1422  <blockquote class="text">  <p> </p>
1423  <p>SUBSCRIBE DB_INSTRUMENT_DIRECTORY_COUNT  <h1 id="rfc.section.6.2.10"><a href="#rfc.section.6.2.10">6.2.10.</a> <a href="#SET AUDIO_OUTPUT_DEVICE_PARAMETER" id="SET AUDIO_OUTPUT_DEVICE_PARAMETER">Changing settings of audio output devices</a></h1>
1424  </p>  <p id="rfc.section.6.2.10.p.1">Use the following command to alter a specific setting of a created audio output device:</p>
1425  </blockquote><p>  <p/>
1426                    
1427  </p>  <ul class="empty">
1428  <p>Server will start sending the following notification messages:    <li>SET AUDIO_OUTPUT_DEVICE_PARAMETER &lt;device-id&gt; &lt;key&gt;=&lt;value&gt;</li>
1429  </p>  </ul>
1430  <p>  
1431                      </p>  <p> </p>
1432  <blockquote class="text">  <p id="rfc.section.6.2.10.p.3">Where &lt;device-id&gt; should be replaced by the numerical ID of the audio output device as given by the <a href="#CREATE AUDIO_OUTPUT_DEVICE">"CREATE AUDIO_OUTPUT_DEVICE"</a> <cite title="NONE">[CREATE AUDIO_OUTPUT_DEVICE]</cite> or <a href="#LIST AUDIO_OUTPUT_DEVICES">"LIST AUDIO_OUTPUT_DEVICES"</a> <cite title="NONE">[LIST AUDIO_OUTPUT_DEVICES]</cite> command, &lt;key&gt; by the name of the parameter to change and &lt;value&gt; by the new value for this parameter.</p>
1433  <p>"NOTIFY:DB_INSTRUMENT_DIRECTORY_COUNT:&lt;dir-path&gt;"  <p id="rfc.section.6.2.10.p.4">Possible Answers:</p>
1434  </p>  <p/>
1435  </blockquote><p>  
1436                    <ul class="empty">
1437  </p>    <li>"OK" - <ul class="empty"><li>in case setting was successfully changed</li></ul><p> </p></li>
1438  <p>where &lt;dir-path&gt; will be replaced by the absolute path    <li>"WRN:&lt;warning-code&gt;:&lt;warning-message&gt;" - <ul class="empty"><li>in case setting was changed successfully, but there are noteworthy issue(s) related, providing an appropriate warning code and warning message</li></ul><p> </p></li>
1439                  name of the directory in the instruments database,    <li>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" - <ul class="empty"><li>in case it failed, providing an appropriate error code and error message</li></ul><p> </p></li>
1440                  in which the number of directories is changed.  </ul>
1441  </p>  
1442  <p>Note that when a non-empty directory is removed, this event  <p> </p>
1443                  is not sent for the subdirectories in that directory.  <p id="rfc.section.6.2.10.p.6">Example:</p>
1444  </p>  <p/>
1445  <a name="SUBSCRIBE DB_INSTRUMENT_DIRECTORY_INFO"></a><br /><hr />  
1446  <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  <ul class="empty">
1447  <a name="rfc.section.8.22"></a><h3>8.22.&nbsp;    <li>C: "SET AUDIO_OUTPUT_DEVICE_PARAMETER 0 FRAGMENTSIZE=128"</li>
1448  Database instrument directory information changed</h3>    <li>S: "OK"</li>
1449    </ul>
1450  <p>Client may want to be notified when changes were made to directories  
1451                  in the instruments database by issuing the following command:  <p> </p>
1452  </p>  <h1 id="rfc.section.6.2.11"><a href="#rfc.section.6.2.11">6.2.11.</a> <a href="#GET AUDIO_OUTPUT_CHANNEL INFO" id="GET AUDIO_OUTPUT_CHANNEL INFO">Getting information about an audio channel</a></h1>
1453  <p>  <p id="rfc.section.6.2.11.p.1">Use the following command to get information about an audio channel:</p>
1454                      </p>  <p/>
1455  <blockquote class="text">  
1456  <p>SUBSCRIBE DB_INSTRUMENT_DIRECTORY_INFO  <ul class="empty">
1457  </p>    <li>GET AUDIO_OUTPUT_CHANNEL INFO &lt;device-id&gt; &lt;audio-chan&gt;</li>
1458  </blockquote><p>  </ul>
1459                    
1460  </p>  <p> </p>
1461  <p>Server will start sending the following notification messages:  <p id="rfc.section.6.2.11.p.3">Where &lt;device-id&gt; is the numerical ID of the audio output device as given by the <a href="#CREATE AUDIO_OUTPUT_DEVICE">"CREATE AUDIO_OUTPUT_DEVICE"</a> <cite title="NONE">[CREATE AUDIO_OUTPUT_DEVICE]</cite> or <a href="#LIST AUDIO_OUTPUT_DEVICES">"LIST AUDIO_OUTPUT_DEVICES"</a> <cite title="NONE">[LIST AUDIO_OUTPUT_DEVICES]</cite> command and &lt;audio-chan&gt; the audio channel number.</p>
1462  </p>  <p id="rfc.section.6.2.11.p.4">Possible Answers:</p>
1463  <p>  <p/>
1464                      </p>  
1465  <blockquote class="text">  <ul class="empty">
1466  <p>"NOTIFY:DB_INSTRUMENT_DIRECTORY_INFO:&lt;dir-path&gt;"    <li>LinuxSampler will answer by sending a &lt;CRLF&gt; separated list.  Each answer line begins with the information category name followed by a colon and then a space character &lt;SP&gt; and finally the info character string to that info category. At the moment the following information categories are defined:</li>
1467  </p>    <li>
1468  </blockquote><p>      <ul class="empty">
1469                          <li>NAME - <ul class="empty"><li>arbitrary character string naming the channel, which doesn't have to be unique (always returned by all audio channels)</li></ul><p> </p></li>
1470  </p>        <li>IS_MIX_CHANNEL - <ul class="empty"><li>either true or false, a mix-channel is not a real, independent audio channel, but a virtual channel which is mixed to another real channel, this mechanism is needed for sampler engines which need more audio channels than the used audio system might be able to offer (always returned by all audio channels)</li></ul><p> </p></li>
1471  <p>where &lt;dir-path&gt; will be replaced by the absolute path name        <li>MIX_CHANNEL_DESTINATION - <ul class="empty"><li>numerical ID (positive integer including 0) which reflects the real audio channel (of the same audio output device) this mix channel refers to, means where the audio signal actually will be routed / added to (only returned in case the audio channel is mix channel)</li></ul><p> </p></li>
1472                  of the directory, for which information changes occurred. The front-end will have to send      </ul>
1473                  the respective command to actually get the updated directory info. Because these messages      <p> </p>
1474                  will be triggered by LSCP commands issued by other clients rather than real    </li>
1475                  time events happening on the server, it is believed that an empty notification  </ul>
1476                  message is sufficient here.  
1477  </p>  <p> </p>
1478  <p>  <p id="rfc.section.6.2.11.p.6">The mentioned fields above don't have to be in particular order. The fields above are only those fields which are generally returned for the described cases by all audio channels regardless of the audio driver. Every audio channel might have its own, additional driver and channel specific parameters.</p>
1479                      </p>  <p id="rfc.section.6.2.11.p.7">Examples:</p>
1480  <blockquote class="text">  <p/>
1481  <p>"NOTIFY:DB_INSTRUMENT_DIRECTORY_INFO:NAME &lt;old-dir-path&gt; &lt;new-name&gt;"  
1482  </p>  <ul class="empty">
1483  </blockquote><p>    <li>C: "GET AUDIO_OUTPUT_CHANNEL INFO 0 0"</li>
1484                      <li>S: "NAME: studio monitor left"</li>
1485  </p>    <li>"IS_MIX_CHANNEL: false"</li>
1486  <p>where &lt;old-dir-path&gt; is the old absolute path name of the directory    <li>"."</li>
1487                  (encapsulated into apostrophes), which name is changes and &lt;new-name&gt; is  </ul>
1488                  the new name of the directory, encapsulated into apostrophes.  
1489  </p>  <p> </p>
1490  <a name="SUBSCRIBE DB_INSTRUMENT_COUNT"></a><br /><hr />  <p/>
1491  <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
1492  <a name="rfc.section.8.23"></a><h3>8.23.&nbsp;  <ul class="empty">
1493  Number of database instruments changed</h3>    <li>C: "GET AUDIO_OUTPUT_CHANNEL INFO 0 1"</li>
1494      <li>S: "NAME: studio monitor right"</li>
1495  <p>Client may want to be notified when the number of instruments    <li>"IS_MIX_CHANNEL: false"</li>
1496                  in a particular directory in the instruments database    <li>"."</li>
1497                  is changed by issuing the following command:  </ul>
1498  </p>  
1499  <p>  <p> </p>
1500                      </p>  <p/>
1501  <blockquote class="text">  
1502  <p>SUBSCRIBE DB_INSTRUMENT_COUNT  <ul class="empty">
1503  </p>    <li>C: "GET AUDIO_OUTPUT_CHANNEL INFO 0 2"</li>
1504  </blockquote><p>    <li>S: "NAME: studio monitor left"</li>
1505                      <li>"IS_MIX_CHANNEL: true"</li>
1506  </p>    <li>"MIX_CHANNEL_DESTINATION: 1"</li>
1507  <p>Server will start sending the following notification messages:    <li>"."</li>
1508  </p>  </ul>
1509  <p>  
1510                      </p>  <p> </p>
1511  <blockquote class="text">  <p/>
1512  <p>"NOTIFY:DB_INSTRUMENT_COUNT:&lt;dir-path&gt;"  
1513  </p>  <ul class="empty">
1514  </blockquote><p>    <li>C: "GET AUDIO_OUTPUT_CHANNEL INFO 1 0"</li>
1515                      <li>S: "NAME: 'ardour (left)'"</li>
1516  </p>    <li>"IS_MIX_CHANNEL: false"</li>
1517  <p>where &lt;dir-path&gt; will be replaced by the absolute path    <li>"JACK_BINDINGS: 'ardour:0'"</li>
1518                  name of the directory in the instruments database,    <li>"."</li>
1519                  in which the number of instruments is changed.  </ul>
1520  </p>  
1521  <p>Note that when a non-empty directory is removed, this event  <p> </p>
1522                  is not sent for the instruments in that directory.  <h1 id="rfc.section.6.2.12"><a href="#rfc.section.6.2.12">6.2.12.</a> <a href="#GET AUDIO_OUTPUT_CHANNEL_PARAMETER INFO" id="GET AUDIO_OUTPUT_CHANNEL_PARAMETER INFO">Getting information about specific audio channel parameter</a></h1>
1523  </p>  <p id="rfc.section.6.2.12.p.1">Use the following command to get detailed information about specific audio channel parameter:</p>
1524  <a name="SUBSCRIBE DB_INSTRUMENT_INFO"></a><br /><hr />  <p/>
1525  <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
1526  <a name="rfc.section.8.24"></a><h3>8.24.&nbsp;  <ul class="empty">
1527  Database instrument information changed</h3>    <li>GET AUDIO_OUTPUT_CHANNEL_PARAMETER INFO &lt;dev-id&gt; &lt;chan&gt; &lt;param&gt;</li>
1528    </ul>
1529  <p>Client may want to be notified when changes were made to instruments  
1530                  in the instruments database by issuing the following command:  <p> </p>
1531  </p>  <p id="rfc.section.6.2.12.p.3">Where &lt;dev-id&gt; is the numerical ID of the audio output device as returned by the <a href="#CREATE AUDIO_OUTPUT_DEVICE">"CREATE AUDIO_OUTPUT_DEVICE"</a> <cite title="NONE">[CREATE AUDIO_OUTPUT_DEVICE]</cite> or <a href="#LIST AUDIO_OUTPUT_DEVICES">"LIST AUDIO_OUTPUT_DEVICES"</a> <cite title="NONE">[LIST AUDIO_OUTPUT_DEVICES]</cite> command, &lt;chan&gt; the audio channel number and &lt;param&gt; a specific channel parameter name for which information should be obtained (as returned by the <a href="#GET AUDIO_OUTPUT_CHANNEL INFO">"GET AUDIO_OUTPUT_CHANNEL INFO"</a> <cite title="NONE">[GET AUDIO_OUTPUT_CHANNEL INFO]</cite> command).</p>
1532  <p>  <p id="rfc.section.6.2.12.p.4">Possible Answers:</p>
1533                      </p>  <p/>
1534  <blockquote class="text">  
1535  <p>SUBSCRIBE DB_INSTRUMENT_INFO  <ul class="empty">
1536  </p>    <li>LinuxSampler will answer by sending a &lt;CRLF&gt; separated list.  Each answer line begins with the information category name followed by a colon and then a space character &lt;SP&gt; and finally the info character string to that info category. There are information which is always returned, independently of the given channel parameter and there is optional information which is only shown dependently to the given audio channel. At the moment the following information categories are defined:</li>
1537  </blockquote><p>    <li>
1538                        <ul class="empty">
1539  </p>        <li>TYPE - <ul class="empty"><li>either "BOOL" for boolean value(s) or "INT" for integer value(s) or "FLOAT" for dotted number(s) or "STRING" for character string(s) (always returned)</li></ul><p> </p></li>
1540  <p>Server will start sending the following notification messages:        <li>DESCRIPTION - <ul class="empty"><li>arbitrary text describing the purpose of the parameter (always returned)</li></ul><p> </p></li>
1541  </p>        <li>FIX - <ul class="empty"><li>either true or false, if true then this parameter is read only, thus cannot be altered (always returned)</li></ul><p> </p></li>
1542  <p>        <li>MULTIPLICITY - <ul class="empty"><li>either true or false, defines if this parameter allows only one value or a list of values, where true means multiple values and false only a single value allowed (always returned)</li></ul><p> </p></li>
1543                      </p>        <li>RANGE_MIN - <ul class="empty"><li>defines lower limit of the allowed value range for this parameter, can be an integer value as well as a dotted number, usually used in conjunction with 'RANGE_MAX', but may also appear without (optionally returned, dependent to driver and channel parameter)</li></ul><p> </p></li>
1544  <blockquote class="text">        <li>RANGE_MAX - <ul class="empty"><li>defines upper limit of the allowed value range for this parameter, can be an integer value as well as a dotted number, usually used in conjunction with 'RANGE_MIN', but may also appear without (optionally returned, dependent to driver and channel parameter)</li></ul><p> </p></li>
1545  <p>"NOTIFY:DB_INSTRUMENT_INFO:&lt;instr-path&gt;"        <li>POSSIBILITIES - <ul class="empty"><li>comma separated list of possible values for this parameter, character strings are encapsulated into apostrophes (optionally returned, dependent to driver and channel parameter)</li></ul><p> </p></li>
1546  </p>      </ul>
1547  </blockquote><p>      <p> </p>
1548                      </li>
1549  </p>    <li>The mentioned fields above don't have to be in particular order.</li>
1550  <p>where &lt;instr-path&gt; will be replaced by the absolute path name  </ul>
1551                  of the instrument, which settings are changed. The front-end will have to send  
1552                  the respective command to actually get the updated directory info. Because these messages  <p> </p>
1553                  will be triggered by LSCP commands issued by other clients rather than real  <p id="rfc.section.6.2.12.p.6">Example:</p>
1554                  time events happening on the server, it is believed that an empty notification  <p/>
1555                  message is sufficient here.  
1556  </p>  <ul class="empty">
1557  <p>    <li>C: "GET AUDIO_OUTPUT_CHANNEL_PARAMETER INFO 1 0 JACK_BINDINGS"</li>
1558                      </p>    <li>S: "DESCRIPTION: bindings to other JACK clients"</li>
1559  <blockquote class="text">    <li>"TYPE: STRING"</li>
1560  <p>"NOTIFY:DB_INSTRUMENT_INFO:NAME &lt;old-instr-path&gt; &lt;new-name&gt;"    <li>"FIX: false"</li>
1561  </p>    <li>"MULTIPLICITY: true"</li>
1562  </blockquote><p>    <li>"POSSIBILITIES: 'PCM:0','PCM:1','ardour:0','ardour:1'"</li>
1563                      <li>"."</li>
1564  </p>  </ul>
1565  <p>where &lt;old-instr-path&gt; is the old absolute path name of the instrument  
1566                  (encapsulated into apostrophes), which name is changes and &lt;new-name&gt; is  <p> </p>
1567                  the new name of the instrument, encapsulated into apostrophes.  <h1 id="rfc.section.6.2.13"><a href="#rfc.section.6.2.13">6.2.13.</a> <a href="#SET AUDIO_OUTPUT_CHANNEL_PARAMETER" id="SET AUDIO_OUTPUT_CHANNEL_PARAMETER">Changing settings of audio output channels</a></h1>
1568  </p>  <p id="rfc.section.6.2.13.p.1">Use the following command to alter a specific setting of an audio output channel:</p>
1569  <a name="SUBSCRIBE DB_INSTRUMENTS_JOB_INFO"></a><br /><hr />  <p/>
1570  <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  
1571  <a name="rfc.section.8.25"></a><h3>8.25.&nbsp;  <ul class="empty">
1572  Database job status information changed</h3>    <li>SET AUDIO_OUTPUT_CHANNEL_PARAMETER &lt;dev-id&gt; &lt;chn&gt; &lt;key&gt;=&lt;value&gt;</li>
1573    </ul>
1574  <p>Client may want to be notified when the status of particular database  
1575                  instruments job is changed by issuing the following command:  <p> </p>
1576  </p>  <p id="rfc.section.6.2.13.p.3">Where &lt;dev-id&gt; should be replaced by the numerical ID of the audio output device as returned by the <a href="#CREATE AUDIO_OUTPUT_DEVICE">"CREATE AUDIO_OUTPUT_DEVICE"</a> <cite title="NONE">[CREATE AUDIO_OUTPUT_DEVICE]</cite> or <a href="#LIST AUDIO_OUTPUT_DEVICES">"LIST AUDIO_OUTPUT_DEVICES"</a> <cite title="NONE">[LIST AUDIO_OUTPUT_DEVICES]</cite> command, &lt;chn&gt; by the audio channel number, &lt;key&gt; by the name of the parameter to change and &lt;value&gt; by the new value for this parameter.</p>
1577  <p>  <p id="rfc.section.6.2.13.p.4">Possible Answers:</p>
1578                      </p>  <p/>
1579  <blockquote class="text">  
1580  <p>SUBSCRIBE DB_INSTRUMENTS_JOB_INFO  <ul class="empty">
1581  </p>    <li>"OK" - <ul class="empty"><li>in case setting was successfully changed</li></ul><p> </p></li>
1582  </blockquote><p>    <li>"WRN:&lt;warning-code&gt;:&lt;warning-message&gt;" - <ul class="empty"><li>in case setting was changed successfully, but there are noteworthy issue(s) related, providing an appropriate warning code and warning message</li></ul><p> </p></li>
1583                      <li>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" - <ul class="empty"><li>in case it failed, providing an appropriate error code and error message</li></ul><p> </p></li>
1584  </p>  </ul>
1585  <p>Server will start sending the following notification messages:  
1586  </p>  <p> </p>
1587  <p>  <p id="rfc.section.6.2.13.p.6">Example:</p>
1588                      </p>  <p/>
1589  <blockquote class="text">  
1590  <p>"NOTIFY:DB_INSTRUMENTS_JOB_INFO:&lt;job-id&gt;"  <ul class="empty">
1591  </p>    <li>C: "SET AUDIO_OUTPUT_CHANNEL PARAMETER 0 0 JACK_BINDINGS='PCM:0'"</li>
1592  </blockquote><p>    <li>S: "OK"</li>
1593                    </ul>
1594  </p>  
1595  <p>where &lt;job-id&gt; will be replaced by the numerical ID of the job,  <p> </p>
1596                  which status is changed. The front-end will have to send the respective  <p/>
1597                  command to actually get the status info. Because these messages  
1598                  will be triggered by LSCP commands issued by other clients rather than real  <ul class="empty">
1599                  time events happening on the server, it is believed that an empty notification    <li>C: "SET AUDIO_OUTPUT_CHANNEL PARAMETER 0 0 NAME='monitor left'"</li>
1600                  message is sufficient here.    <li>S: "OK"</li>
1601  </p>  </ul>
1602  <a name="SUBSCRIBE EFFECT_INSTANCE_COUNT"></a><br /><hr />  
1603  <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  <p> </p>
1604  <a name="rfc.section.8.26"></a><h3>8.26.&nbsp;  <h1 id="rfc.section.6.3"><a href="#rfc.section.6.3">6.3.</a> Configuring MIDI input drivers</h1>
1605  Number of effect instances changed</h3>  <p id="rfc.section.6.3.p.1">Instances of drivers in LinuxSampler are called devices. You can use multiple MIDI devices simultaneously, e.g. to use MIDI over ethernet as MIDI input on one sampler channel and ALSA as MIDI input on another sampler channel. For particular MIDI input systems it's also possible to create several devices of the same MIDI input type. This chapter describes all commands to configure LinuxSampler's MIDI input devices and their parameters.</p>
1606    <p id="rfc.section.6.3.p.2">Instead of defining commands and parameters for each driver individually, all possible parameters, their meanings and possible values have to be obtained at runtime. This makes the protocol a bit abstract, but has the advantage, that front-ends can be written independently of what drivers are currently implemented and what parameters these drivers are actually offering. This means front-ends can even handle drivers which are implemented somewhere in future without modifying the front-end at all.</p>
1607  <p>Client may want to be notified when the number of effect instances  <p id="rfc.section.6.3.p.3">Commands for configuring MIDI input devices are pretty much the same as the commands for configuring audio output drivers, already described in the last chapter.</p>
1608                  is changed by issuing the following command:  <p id="rfc.section.6.3.p.4">Note: examples in this chapter showing particular parameters of drivers are not meant as specification of the drivers' parameters. Driver implementations in LinuxSampler might have complete different parameter names and meanings than shown in these examples or might change in future, so these examples are only meant for showing how to retrieve what parameters drivers are offering, how to retrieve their possible values, etc.</p>
1609  </p>  <h1 id="rfc.section.6.3.1"><a href="#rfc.section.6.3.1">6.3.1.</a> <a href="#GET AVAILABLE_MIDI_INPUT_DRIVERS" id="GET AVAILABLE_MIDI_INPUT_DRIVERS">Getting amount of available MIDI input drivers</a></h1>
1610  <p>  <p id="rfc.section.6.3.1.p.1">Use the following command to get the number of MIDI input drivers currently available for the LinuxSampler instance:</p>
1611                      </p>  <p/>
1612  <blockquote class="text">  
1613  <p>SUBSCRIBE EFFECT_INSTANCE_COUNT  <ul class="empty">
1614  </p>    <li>GET AVAILABLE_MIDI_INPUT_DRIVERS</li>
1615  </blockquote><p>  </ul>
1616                    
1617  </p>  <p> </p>
1618  <p>Server will start sending the following notification messages:  <p id="rfc.section.6.3.1.p.3">Possible Answers:</p>
1619  </p>  <p/>
1620  <p>  
1621                      </p>  <ul class="empty">
1622  <blockquote class="text">    <li>LinuxSampler will answer by sending the number of available MIDI input drivers.</li>
1623  <p>"EFFECT_INSTANCE_COUNT:&lt;instances&gt;"  </ul>
1624  </p>  
1625  </blockquote><p>  <p> </p>
1626                    <p id="rfc.section.6.3.1.p.5">Example:</p>
1627  </p>  <p/>
1628  <p>where &lt;instances&gt; will be replaced by the new number  
1629                  of effect instances.  <ul class="empty">
1630  </p>    <li>C: "GET AVAILABLE_MIDI_INPUT_DRIVERS"</li>
1631  <a name="SUBSCRIBE EFFECT_INSTANCE_INFO"></a><br /><hr />    <li>S: "2"</li>
1632  <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  </ul>
1633  <a name="rfc.section.8.27"></a><h3>8.27.&nbsp;  
1634  Effect instance information changed</h3>  <p> </p>
1635    <h1 id="rfc.section.6.3.2"><a href="#rfc.section.6.3.2">6.3.2.</a> <a href="#LIST AVAILABLE_MIDI_INPUT_DRIVERS" id="LIST AVAILABLE_MIDI_INPUT_DRIVERS">Getting all available MIDI input drivers</a></h1>
1636  <p>Client may want to be notified when changes were made to effect instances  <p id="rfc.section.6.3.2.p.1">Use the following command to list all MIDI input drivers currently available for the LinuxSampler instance:</p>
1637                  on the back-end by issuing the following command:  <p/>
1638  </p>  
1639  <p>  <ul class="empty">
1640                      </p>    <li>LIST AVAILABLE_MIDI_INPUT_DRIVERS</li>
1641  <blockquote class="text">  </ul>
1642  <p>SUBSCRIBE EFFECT_INSTANCE_INFO  
1643  </p>  <p> </p>
1644  </blockquote><p>  <p id="rfc.section.6.3.2.p.3">Possible Answers:</p>
1645                    <p/>
1646  </p>  
1647  <p>Server will start sending the following notification messages:  <ul class="empty">
1648  </p>    <li>LinuxSampler will answer by sending comma separated character strings, each symbolizing a MIDI input driver.</li>
1649  <p>  </ul>
1650                     </p>  
1651  <blockquote class="text">  <p> </p>
1652  <p>"EFFECT_INSTANCE_INFO:&lt;instance-id&gt;"  <p id="rfc.section.6.3.2.p.5">Example:</p>
1653  </p>  <p/>
1654  </blockquote><p>  
1655                    <ul class="empty">
1656  </p>    <li>C: "LIST AVAILABLE_MIDI_INPUT_DRIVERS"</li>
1657  <p>where &lt;instance-id&gt; will be replaced by the numerical ID    <li>S: "ALSA,JACK"</li>
1658                  of the effect instance.  </ul>
1659  </p>  
1660  <a name="SUBSCRIBE SEND_EFFECT_CHAIN_COUNT"></a><br /><hr />  <p> </p>
1661  <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  <h1 id="rfc.section.6.3.3"><a href="#rfc.section.6.3.3">6.3.3.</a> <a href="#GET MIDI_INPUT_DRIVER INFO" id="GET MIDI_INPUT_DRIVER INFO">Getting information about a specific MIDI input driver</a></h1>
1662  <a name="rfc.section.8.28"></a><h3>8.28.&nbsp;  <p id="rfc.section.6.3.3.p.1">Use the following command to get detailed information about a specific MIDI input driver:</p>
1663  Number of send effect chains changed</h3>  <p/>
1664    
1665  <p>Client may want to be notified when the number of send effect chains  <ul class="empty">
1666                  is changed by issuing the following command:    <li>GET MIDI_INPUT_DRIVER INFO &lt;midi-input-driver&gt;</li>
1667  </p>  </ul>
1668  <p>  
1669                      </p>  <p> </p>
1670  <blockquote class="text">  <p id="rfc.section.6.3.3.p.3">Where &lt;midi-input-driver&gt; is the name of the MIDI input driver as returned by the <a href="#LIST AVAILABLE_MIDI_INPUT_DRIVERS">"LIST AVAILABLE_MIDI_INPUT_DRIVERS"</a> <cite title="NONE">[LIST AVAILABLE_MIDI_INPUT_DRIVERS]</cite> command.</p>
1671  <p>SUBSCRIBE SEND_EFFECT_CHAIN_COUNT  <p id="rfc.section.6.3.3.p.4">Possible Answers:</p>
1672  </p>  <p/>
1673  </blockquote><p>  
1674                    <ul class="empty">
1675  </p>    <li>LinuxSampler will answer by sending a &lt;CRLF&gt; separated list.  Each answer line begins with the information category name followed by a colon and then a space character &lt;SP&gt; and finally the info character string to that info category. At the moment the following information categories are defined:</li>
1676  <p>Server will start sending the following notification messages:    <li>
1677  </p>      <ul class="empty">
1678  <p>        <li>DESCRIPTION - <ul class="empty"><li>arbitrary description text about the MIDI input driver</li></ul><p> </p></li>
1679                      </p>        <li>VERSION - <ul class="empty"><li>arbitrary character string regarding the driver's version</li></ul><p> </p></li>
1680  <blockquote class="text">        <li>PARAMETERS - <ul class="empty"><li>comma separated list of all parameters available for the given MIDI input driver</li></ul><p> </p></li>
1681  <p>"NOTIFY:SEND_EFFECT_CHAIN_COUNT:&lt;device-id&gt; &lt;chains&gt;"      </ul>
1682  </p>      <p> </p>
1683  </blockquote><p>    </li>
1684                      <li>The mentioned fields above don't have to be in particular order.</li>
1685  </p>  </ul>
1686  <p>where &lt;device-id&gt; will be replaced by the numerical ID of the audio  
1687                  output device, in which the number of send effect chains is changed and  <p> </p>
1688                  &lt;chains&gt; will be replaced by the new number of send effect chains.  <p id="rfc.section.6.3.3.p.6">Example:</p>
1689  </p>  <p/>
1690  <a name="SUBSCRIBE SEND_EFFECT_CHAIN_INFO"></a><br /><hr />  
1691  <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  <ul class="empty">
1692  <a name="rfc.section.8.29"></a><h3>8.29.&nbsp;    <li>C: "GET MIDI_INPUT_DRIVER INFO ALSA"</li>
1693  Send effect chain information changed</h3>    <li>S: "DESCRIPTION: Advanced Linux Sound Architecture"</li>
1694      <li>"VERSION: 1.0"</li>
1695  <p>Client may want to be notified when changes were made to send effect chains    <li>"PARAMETERS: DRIVER,ACTIVE"</li>
1696                  on the back-end by issuing the following command:    <li>"."</li>
1697  </p>  </ul>
1698  <p>  
1699                      </p>  <p> </p>
1700  <blockquote class="text">  <h1 id="rfc.section.6.3.4"><a href="#rfc.section.6.3.4">6.3.4.</a> <a href="#GET MIDI_INPUT_DRIVER_PARAMETER INFO" id="GET MIDI_INPUT_DRIVER_PARAMETER INFO">Getting information about specific MIDI input driver parameter</a></h1>
1701  <p>SUBSCRIBE SEND_EFFECT_CHAIN_INFO  <p id="rfc.section.6.3.4.p.1">Use the following command to get detailed information about a specific parameter of a specific MIDI input driver:</p>
1702  </p>  <p/>
1703  </blockquote><p>  
1704                    <ul class="empty">
1705  </p>    <li>GET MIDI_INPUT_DRIVER_PARAMETER INFO &lt;midit&gt; &lt;param&gt; [&lt;deplist&gt;]</li>
1706  <p>Server will start sending the following notification messages:  </ul>
1707  </p>  
1708  <p>  <p> </p>
1709                     </p>  <p id="rfc.section.6.3.4.p.3">Where &lt;midit&gt; is the name of the MIDI input driver as returned by the <a href="#LIST AVAILABLE_MIDI_INPUT_DRIVERS">"LIST AVAILABLE_MIDI_INPUT_DRIVERS"</a> <cite title="NONE">[LIST AVAILABLE_MIDI_INPUT_DRIVERS]</cite> command, &lt;param&gt; a specific parameter name for which information should be obtained (as returned by the <a href="#GET MIDI_INPUT_DRIVER INFO">"GET MIDI_INPUT_DRIVER INFO"</a> <cite title="NONE">[GET MIDI_INPUT_DRIVER INFO]</cite> command) and &lt;deplist&gt; is an optional list of parameters on which the sought parameter &lt;param&gt; depends on, &lt;deplist&gt; is a key-value pair list in form of "key1=val1 key2=val2 ...", where character string values are encapsulated into apostrophes ('). Arguments given with &lt;deplist&gt; which are not dependency parameters of &lt;param&gt; will be ignored, means the front-end application can simply put all parameters in &lt;deplist&gt; with the values selected by the user.</p>
1710  <blockquote class="text">  <p id="rfc.section.6.3.4.p.4">Possible Answers:</p>
1711  <p>"SEND_EFFECT_CHAIN_INFO:&lt;device-id&gt; &lt;chain-id&gt; &lt;instances&gt;" -  <p id="rfc.section.6.3.4.p.5">LinuxSampler will answer by sending a &lt;CRLF&gt; separated list.  Each answer line begins with the information category name followed by a colon and then a space character &lt;SP&gt; and finally the info character string to that info category. There is information which is always returned, independent of the given driver parameter and there is optional information which is only shown dependent to given driver parameter. At the moment the following information categories are defined:</p>
1712                          Notifies that the number of effect instances in a particular send effect chain  <p/>
1713                          is changed, where &lt;device-id&gt; will be replaced by the numerical ID of the audio  
1714                          output device the send effect chain belongs to, &lt;chain-id&gt; will be replaced  <ul class="empty">
1715                          by the numerical ID of the send effect chain in which the number of effect instances    <li>TYPE - <ul class="empty"><li>either "BOOL" for boolean value(s) or "INT" for integer value(s) or "FLOAT" for dotted number(s) or "STRING" for character string(s) (always returned, no matter which driver parameter)</li></ul><p> </p></li>
1716                          has changed and &lt;instances&gt; will be replaced by the new number    <li>DESCRIPTION - <ul class="empty"><li>arbitrary text describing the purpose of the parameter (always returned, no matter which driver parameter)</li></ul><p> </p></li>
1717                          of effect instances in the specified send effect chain.    <li>MANDATORY - <ul class="empty"><li>either true or false, defines if this parameter must be given when the device is to be created with the <a href="#CREATE MIDI_INPUT_DEVICE">'CREATE MIDI_INPUT_DEVICE'</a> <cite title="NONE">[CREATE MIDI_INPUT_DEVICE]</cite> command (always returned, no matter which driver parameter)</li></ul><p> </p></li>
1718  </p>    <li>FIX - <ul class="empty"><li>either true or false, if false then this parameter can be changed at any time, once the device is created by the <a href="#CREATE MIDI_INPUT_DEVICE">'CREATE MIDI_INPUT_DEVICE'</a> <cite title="NONE">[CREATE MIDI_INPUT_DEVICE]</cite> command (always returned, no matter which driver parameter)</li></ul><p> </p></li>
1719  </blockquote><p>    <li>MULTIPLICITY - <ul class="empty"><li>either true or false, defines if this parameter allows only one value or a list of values, where true means multiple values and false only a single value allowed (always returned, no matter which driver parameter)</li></ul><p> </p></li>
1720                      <li>DEPENDS - <ul class="empty"><li>comma separated list of parameters this parameter depends on, means the values for fields 'DEFAULT', 'RANGE_MIN', 'RANGE_MAX' and 'POSSIBILITIES' might depend on these listed parameters, for example assuming that an audio driver (like the ALSA driver) offers parameters 'card' and 'samplerate' then parameter 'samplerate' would depend on 'card' because the possible values for 'samplerate' depends on the sound card which can be chosen by the 'card' parameter (optionally returned, dependent to driver parameter)</li></ul><p> </p></li>
1721  </p>    <li>DEFAULT - <ul class="empty"><li>reflects the default value for this parameter which is used when the device is created and not explicitly given with the <a href="#CREATE MIDI_INPUT_DEVICE">'CREATE MIDI_INPUT_DEVICE'</a> <cite title="NONE">[CREATE MIDI_INPUT_DEVICE]</cite> command, in case of MULTIPLCITY=true, this is a comma separated list, that's why character strings are encapsulated into apostrophes (') (optionally returned, dependent to driver parameter)</li></ul><p> </p></li>
1722  <a name="SUBSCRIBE MISCELLANEOUS"></a><br /><hr />    <li>RANGE_MIN - <ul class="empty"><li>defines lower limit of the allowed value range for this parameter, can be an integer value as well as a dotted number, this parameter is often used in conjunction with RANGE_MAX, but may also appear without (optionally returned, dependent to driver parameter)</li></ul><p> </p></li>
1723  <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>    <li>RANGE_MAX - <ul class="empty"><li>defines upper limit of the allowed value range for this parameter, can be an integer value as well as a dotted number, this parameter is often used in conjunction with RANGE_MIN, but may also appear without (optionally returned, dependent to driver parameter)</li></ul><p> </p></li>
1724  <a name="rfc.section.8.30"></a><h3>8.30.&nbsp;    <li>POSSIBILITIES - <ul class="empty"><li>comma separated list of possible values for this parameter, character strings are encapsulated into apostrophes (optionally returned, dependent to driver parameter)</li></ul><p> </p></li>
1725  Miscellaneous and debugging events</h3>  </ul>
1726    
1727  <p>Client may want to be notified of miscellaneous and debugging events occurring at  <p> </p>
1728                  the server by issuing the following command:  <p id="rfc.section.6.3.4.p.7">The mentioned fields above don't have to be in particular order.</p>
1729  </p>  <p id="rfc.section.6.3.4.p.8">Example:</p>
1730  <p>  <p/>
1731                      </p>  
1732  <blockquote class="text">  <ul class="empty">
1733  <p>SUBSCRIBE MISCELLANEOUS    <li>C: "GET MIDI_INPUT_DRIVER_PARAMETER INFO ALSA ACTIVE"</li>
1734  </p>    <li>S: "DESCRIPTION: Whether device is enabled"</li>
1735  </blockquote><p>    <li>"TYPE: BOOL"</li>
1736                      <li>"MANDATORY: false"</li>
1737  </p>    <li>"FIX: false"</li>
1738  <p>Server will start sending the following notification messages:    <li>"MULTIPLICITY: false"</li>
1739  </p>    <li>"DEFAULT: true"</li>
1740  <p>    <li>"."</li>
1741                      </p>  </ul>
1742  <blockquote class="text">  
1743  <p>"NOTIFY:MISCELLANEOUS:&lt;string&gt;"  <p> </p>
1744  </p>  <h1 id="rfc.section.6.3.5"><a href="#rfc.section.6.3.5">6.3.5.</a> <a href="#CREATE MIDI_INPUT_DEVICE" id="CREATE MIDI_INPUT_DEVICE">Creating a MIDI input device</a></h1>
1745  </blockquote><p>  <p id="rfc.section.6.3.5.p.1">Use the following command to create a new MIDI input device for  the desired MIDI input system:</p>
1746                    <p/>
1747  </p>  
1748  <p>where &lt;string&gt; will be replaced by whatever data server  <ul class="empty">
1749                  wants to send to the client. Client MAY display this data to the    <li>CREATE MIDI_INPUT_DEVICE &lt;midi-input-driver&gt; [&lt;param-list&gt;]</li>
1750                  user AS IS to facilitate debugging.  </ul>
1751  </p>  
1752  <a name="anchor14"></a><br /><hr />  <p> </p>
1753  <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  <p id="rfc.section.6.3.5.p.3">Where &lt;midi-input-driver&gt; should be replaced by the desired MIDI input system as returned by the <a href="#LIST AVAILABLE_MIDI_INPUT_DRIVERS">"LIST AVAILABLE_MIDI_INPUT_DRIVERS"</a> <cite title="NONE">[LIST AVAILABLE_MIDI_INPUT_DRIVERS]</cite> command and &lt;param-list&gt; by an optional list of driver specific parameters in form of "key1=val1 key2=val2 ...", where character string values should be encapsulated into apostrophes (').  Note that there might be drivers which require parameter(s) to be given with this command. Use the previously described commands in this chapter to get that information.</p>
1754  <a name="rfc.section.9"></a><h3>9.&nbsp;  <p id="rfc.section.6.3.5.p.4">Possible Answers:</p>
1755  Security Considerations</h3>  <p/>
1756    
1757  <p>As there is so far no method of authentication and authorization  <ul class="empty">
1758              defined and so not required for a client applications to succeed to    <li>"OK[&lt;device-id&gt;]" - <ul class="empty"><li>in case the device was successfully created, where &lt;device-id&gt; is the numerical ID of the new device</li></ul><p> </p></li>
1759              connect, running LinuxSampler might be a security risk for the host    <li>"WRN[&lt;device-id&gt;]:&lt;warning-code&gt;:&lt;warning-message&gt;" - <ul class="empty"><li>in case the driver was loaded successfully, where &lt;device-id&gt; is the numerical ID of the new device, but there are noteworthy issue(s) related, providing an appropriate warning code and warning message</li></ul><p> </p></li>
1760              system the LinuxSampler instance is running on.    <li>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" - <ul class="empty"><li>in case it failed, providing an appropriate error code and error message</li></ul><p> </p></li>
1761  </p>  </ul>
1762  <a name="anchor15"></a><br /><hr />  
1763  <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  <p> </p>
1764  <a name="rfc.section.10"></a><h3>10.&nbsp;  <p id="rfc.section.6.3.5.p.6">Example:</p>
1765  Acknowledgments</h3>  <p/>
1766    
1767  <p>This document has benefited greatly from the comments of the  <ul class="empty">
1768              following people, discussed on the LinuxSampler developer's mailing    <li>C: "CREATE MIDI_INPUT_DEVICE ALSA"</li>
1769              list:    <li>S: "OK[0]"</li>
1770  </p>  </ul>
1771  <p>  
1772                  </p>  <p> </p>
1773  <blockquote class="text">  <h1 id="rfc.section.6.3.6"><a href="#rfc.section.6.3.6">6.3.6.</a> <a href="#DESTROY MIDI_INPUT_DEVICE" id="DESTROY MIDI_INPUT_DEVICE">Destroying a MIDI input device</a></h1>
1774  <p>Rui Nuno Capela  <p id="rfc.section.6.3.6.p.1">Use the following command to destroy a created MIDI input device:</p>
1775  </p>  <p/>
1776  <p>Vladimir Senkov  
1777  </p>  <ul class="empty">
1778  <p>Mark Knecht    <li>DESTROY MIDI_INPUT_DEVICE &lt;device-id&gt;</li>
1779  </p>  </ul>
1780  <p>Grigor Iliev  
1781  </p>  <p> </p>
1782  </blockquote><p>  <p id="rfc.section.6.3.6.p.3">Where &lt;device-id&gt; should be replaced by the device's numerical ID as returned by the <a href="#CREATE MIDI_INPUT_DEVICE">"CREATE MIDI_INPUT_DEVICE"</a> <cite title="NONE">[CREATE MIDI_INPUT_DEVICE]</cite> or <a href="#LIST MIDI_INPUT_DEVICES">"LIST MIDI_INPUT_DEVICES"</a> <cite title="NONE">[LIST MIDI_INPUT_DEVICES]</cite> command.</p>
1783                <p id="rfc.section.6.3.6.p.4">Possible Answers:</p>
1784  </p>  <p/>
1785  <a name="rfc.references1"></a><br /><hr />  
1786  <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>  <ul class="empty">
1787  <h3>11.&nbsp;References</h3>    <li>"OK" - <ul class="empty"><li>in case the device was successfully destroyed</li></ul><p> </p></li>
1788  <table width="99%" border="0">    <li>"WRN:&lt;warning-code&gt;:&lt;warning-message&gt;" - <ul class="empty"><li>in case the device was destroyed, but there are noteworthy issue(s) related, providing an appropriate warning code and warning message</li></ul><p> </p></li>
1789  <tr><td class="author-text" valign="top"><a name="RFC20">[RFC20]</a></td>    <li>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" - <ul class="empty"><li>in case it failed, providing an appropriate error code and error message</li></ul><p> </p></li>
1790  <td class="author-text">UCLA, &ldquo;<a href="http://tools.ietf.org/html/rfc20">ASCII format for Network Interchange</a>,&rdquo; RFC&nbsp;20, 1969.</td></tr>  </ul>
1791  <tr><td class="author-text" valign="top"><a name="RFC2119">[RFC2119]</a></td>  
1792  <td class="author-text">Bradner, S., &ldquo;<a href="http://tools.ietf.org/html/rfc2119">Key words for use in RFCs to Indicate Requirement Levels</a>,&rdquo; RFC&nbsp;2119, 1997.</td></tr>  <p> </p>
1793  <tr><td class="author-text" valign="top"><a name="RFC2234">[RFC2234]</a></td>  <p id="rfc.section.6.3.6.p.6">Example:</p>
1794  <td class="author-text">Crocker, D. and P. Overell, &ldquo;<a href="http://tools.ietf.org/html/rfc2234">Augmented BNF for Syntax Specifications</a>,&rdquo; RFC&nbsp;2234, 1997.</td></tr>  <p/>
1795  <tr><td class="author-text" valign="top"><a name="RFC793">[RFC793]</a></td>  
1796  <td class="author-text">Defense Advanced Research Projects Agency, &ldquo;<a href="http://tools.ietf.org/html/rfc793">TRANSMISSION CONTROL PROTOCOL</a>,&rdquo; RFC&nbsp;793, 1981.</td></tr>  <ul class="empty">
1797      <li>C: "DESTROY MIDI_INPUT_DEVICE 0"</li>
1798      <li>S: "OK"</li>
1799    </ul>
1800    
1801    <p> </p>
1802    <h1 id="rfc.section.6.3.7"><a href="#rfc.section.6.3.7">6.3.7.</a> <a href="#GET MIDI_INPUT_DEVICES" id="GET MIDI_INPUT_DEVICES">Getting all created MIDI input device count</a></h1>
1803    <p id="rfc.section.6.3.7.p.1">Use the following command to count all created MIDI input devices:</p>
1804    <p/>
1805    
1806    <ul class="empty">
1807      <li>GET MIDI_INPUT_DEVICES</li>
1808    </ul>
1809    
1810    <p> </p>
1811    <p id="rfc.section.6.3.7.p.3">Possible Answers:</p>
1812    <p/>
1813    
1814    <ul class="empty">
1815      <li>LinuxSampler will answer by sending the current number of all MIDI input devices.</li>
1816    </ul>
1817    
1818    <p> </p>
1819    <p id="rfc.section.6.3.7.p.5">Example:</p>
1820    <p/>
1821    
1822    <ul class="empty">
1823      <li>C: "GET MIDI_INPUT_DEVICES"</li>
1824      <li>S: "3"</li>
1825    </ul>
1826    
1827    <p> </p>
1828    <h1 id="rfc.section.6.3.8"><a href="#rfc.section.6.3.8">6.3.8.</a> <a href="#LIST MIDI_INPUT_DEVICES" id="LIST MIDI_INPUT_DEVICES">Getting all created MIDI input device list</a></h1>
1829    <p id="rfc.section.6.3.8.p.1">Use the following command to list all created MIDI input devices:</p>
1830    <p/>
1831    
1832    <ul class="empty">
1833      <li>LIST MIDI_INPUT_DEVICES</li>
1834    </ul>
1835    
1836    <p> </p>
1837    <p id="rfc.section.6.3.8.p.3">Possible Answers:</p>
1838    <p/>
1839    
1840    <ul class="empty">
1841      <li>LinuxSampler will answer by sending a comma separated list with the numerical Ids of all created MIDI input devices.</li>
1842    </ul>
1843    
1844    <p> </p>
1845    <p id="rfc.section.6.3.8.p.5">Examples:</p>
1846    <p/>
1847    
1848    <ul class="empty">
1849      <li>C: "LIST MIDI_INPUT_DEVICES"</li>
1850      <li>S: "0,1,2"</li>
1851    </ul>
1852    
1853    <p> </p>
1854    <p/>
1855    
1856    <ul class="empty">
1857      <li>C: "LIST MIDI_INPUT_DEVICES"</li>
1858      <li>S: "1,3"</li>
1859    </ul>
1860    
1861    <p> </p>
1862    <h1 id="rfc.section.6.3.9"><a href="#rfc.section.6.3.9">6.3.9.</a> <a href="#GET MIDI_INPUT_DEVICE INFO" id="GET MIDI_INPUT_DEVICE INFO">Getting current settings of a MIDI input device</a></h1>
1863    <p id="rfc.section.6.3.9.p.1">Use the following command to get current settings of a specific, created MIDI input device:</p>
1864    <p/>
1865    
1866    <ul class="empty">
1867      <li>GET MIDI_INPUT_DEVICE INFO &lt;device-id&gt;</li>
1868    </ul>
1869    
1870    <p> </p>
1871    <p id="rfc.section.6.3.9.p.3">Where &lt;device-id&gt; is the numerical ID of the MIDI input device as returned by the <a href="#CREATE MIDI_INPUT_DEVICE">"CREATE MIDI_INPUT_DEVICE"</a> <cite title="NONE">[CREATE MIDI_INPUT_DEVICE]</cite> or <a href="#LIST MIDI_INPUT_DEVICES">"LIST MIDI_INPUT_DEVICES"</a> <cite title="NONE">[LIST MIDI_INPUT_DEVICES]</cite> command.</p>
1872    <p id="rfc.section.6.3.9.p.4">Possible Answers:</p>
1873    <p/>
1874    
1875    <ul class="empty">
1876      <li>LinuxSampler will answer by sending a &lt;CRLF&gt; separated list.  Each answer line begins with the information category name followed by a colon and then a space character &lt;SP&gt; and finally the info character string to that info category. As some parameters might allow multiple values, character strings are encapsulated into apostrophes ('). At the moment the following information categories are defined (independent of driver):</li>
1877      <li>
1878        <ul class="empty">
1879          <li>DRIVER - <ul class="empty"><li>identifier of the used MIDI input driver, as e.g.  returned by the <a href="#LIST AVAILABLE_MIDI_INPUT_DRIVERS">"LIST AVAILABLE_MIDI_INPUT_DRIVERS"</a> <cite title="NONE">[LIST AVAILABLE_MIDI_INPUT_DRIVERS]</cite> command</li></ul><p> </p></li>
1880        </ul>
1881        <p> </p>
1882        <ul class="empty">
1883          <li>ACTIVE - <ul class="empty"><li>either true or false, if false then the MIDI device is inactive and doesn't listen to any incoming MIDI events and thus doesn't forward them to connected sampler channels</li></ul><p> </p></li>
1884        </ul>
1885        <p> </p>
1886      </li>
1887    </ul>
1888    
1889    <p> </p>
1890    <p id="rfc.section.6.3.9.p.6">The mentioned fields above don't have to be in particular order. The fields above are only those fields which are returned by all MIDI input devices. Every MIDI input driver might have its own, additional driver specific parameters (see <a href="#GET MIDI_INPUT_DRIVER INFO">"GET MIDI_INPUT_DRIVER INFO"</a> <cite title="NONE">[GET MIDI_INPUT_DRIVER INFO]</cite> command) which are also returned by this command.</p>
1891    <p id="rfc.section.6.3.9.p.7">Example:</p>
1892    <p/>
1893    
1894    <ul class="empty">
1895      <li>C: "GET MIDI_INPUT_DEVICE INFO 0"</li>
1896      <li>S: "DRIVER: ALSA"</li>
1897      <li>"ACTIVE: true"</li>
1898      <li>"."</li>
1899    </ul>
1900    
1901    <p> </p>
1902    <h1 id="rfc.section.6.3.10"><a href="#rfc.section.6.3.10">6.3.10.</a> <a href="#SET MIDI_INPUT_DEVICE_PARAMETER" id="SET MIDI_INPUT_DEVICE_PARAMETER">Changing settings of MIDI input devices</a></h1>
1903    <p id="rfc.section.6.3.10.p.1">Use the following command to alter a specific setting of a created MIDI input device:</p>
1904    <p/>
1905    
1906    <ul class="empty">
1907      <li>SET MIDI_INPUT_DEVICE_PARAMETER &lt;device-id&gt; &lt;key&gt;=&lt;value&gt;</li>
1908    </ul>
1909    
1910    <p> </p>
1911    <p id="rfc.section.6.3.10.p.3">Where &lt;device-id&gt; should be replaced by the numerical ID of the MIDI input device as returned by the <a href="#CREATE MIDI_INPUT_DEVICE">"CREATE MIDI_INPUT_DEVICE"</a> <cite title="NONE">[CREATE MIDI_INPUT_DEVICE]</cite> or <a href="#LIST MIDI_INPUT_DEVICES">"LIST MIDI_INPUT_DEVICES"</a> <cite title="NONE">[LIST MIDI_INPUT_DEVICES]</cite> command, &lt;key&gt; by the name of the parameter to change and &lt;value&gt; by the new value for this parameter.</p>
1912    <p id="rfc.section.6.3.10.p.4">Possible Answers:</p>
1913    <p/>
1914    
1915    <ul class="empty">
1916      <li>"OK" - <ul class="empty"><li>in case setting was successfully changed</li></ul><p> </p></li>
1917      <li>"WRN:&lt;warning-code&gt;:&lt;warning-message&gt;" - <ul class="empty"><li>in case setting was changed successfully, but there are noteworthy issue(s) related, providing an appropriate warning code and warning message</li></ul><p> </p></li>
1918      <li>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" - <ul class="empty"><li>in case it failed, providing an appropriate error code and error message</li></ul><p> </p></li>
1919    </ul>
1920    
1921    <p> </p>
1922    <p id="rfc.section.6.3.10.p.6">Example:</p>
1923    <p/>
1924    
1925    <ul class="empty">
1926      <li>C: "SET MIDI_INPUT_DEVICE_PARAMETER 0 ACTIVE=false"</li>
1927      <li>S: "OK"</li>
1928    </ul>
1929    
1930    <p> </p>
1931    <h1 id="rfc.section.6.3.11"><a href="#rfc.section.6.3.11">6.3.11.</a> <a href="#GET MIDI_INPUT_PORT INFO" id="GET MIDI_INPUT_PORT INFO">Getting information about a MIDI port</a></h1>
1932    <p id="rfc.section.6.3.11.p.1">Use the following command to get information about a MIDI port:</p>
1933    <p/>
1934    
1935    <ul class="empty">
1936      <li>GET MIDI_INPUT_PORT INFO &lt;device-id&gt; &lt;midi-port&gt;</li>
1937    </ul>
1938    
1939    <p> </p>
1940    <p id="rfc.section.6.3.11.p.3">Where &lt;device-id&gt; is the numerical ID of the MIDI input device as returned by the <a href="#CREATE MIDI_INPUT_DEVICE">"CREATE MIDI_INPUT_DEVICE"</a> <cite title="NONE">[CREATE MIDI_INPUT_DEVICE]</cite> or <a href="#LIST MIDI_INPUT_DEVICES">"LIST MIDI_INPUT_DEVICES"</a> <cite title="NONE">[LIST MIDI_INPUT_DEVICES]</cite> command and &lt;midi-port&gt; the MIDI input port number.</p>
1941    <p id="rfc.section.6.3.11.p.4">Possible Answers:</p>
1942    <p/>
1943    
1944    <ul class="empty">
1945      <li>LinuxSampler will answer by sending a &lt;CRLF&gt; separated list.  Each answer line begins with the information category name followed by a colon and then a space character &lt;SP&gt; and finally the info character string to that info category. At the moment the following information categories are defined:</li>
1946      <li>NAME - <ul class="empty"><li>arbitrary character string naming the port</li></ul><p> </p></li>
1947    </ul>
1948    
1949    <p> </p>
1950    <p id="rfc.section.6.3.11.p.6">The field above is only the one which is returned by all MIDI ports regardless of the MIDI driver and port. Every MIDI port might have its own, additional driver and port specific parameters.</p>
1951    <p id="rfc.section.6.3.11.p.7">Example:</p>
1952    <p/>
1953    
1954    <ul class="empty">
1955      <li>C: "GET MIDI_INPUT_PORT INFO 0 0"</li>
1956      <li>S: "NAME: 'Masterkeyboard'"</li>
1957      <li>"ALSA_SEQ_BINDINGS: '64:0'"</li>
1958      <li>"."</li>
1959    </ul>
1960    
1961    <p> </p>
1962    <h1 id="rfc.section.6.3.12"><a href="#rfc.section.6.3.12">6.3.12.</a> <a href="#GET MIDI_INPUT_PORT_PARAMETER INFO" id="GET MIDI_INPUT_PORT_PARAMETER INFO">Getting information about specific MIDI port parameter</a></h1>
1963    <p id="rfc.section.6.3.12.p.1">Use the following command to get detailed information about specific MIDI port parameter:</p>
1964    <p/>
1965    
1966    <ul class="empty">
1967      <li>GET MIDI_INPUT_PORT_PARAMETER INFO &lt;dev-id&gt; &lt;port&gt; &lt;param&gt;</li>
1968    </ul>
1969    
1970    <p> </p>
1971    <p id="rfc.section.6.3.12.p.3">Where &lt;dev-id&gt; is the numerical ID of the MIDI input device as returned by the <a href="#CREATE MIDI_INPUT_DEVICE">"CREATE MIDI_INPUT_DEVICE"</a> <cite title="NONE">[CREATE MIDI_INPUT_DEVICE]</cite> or <a href="#LIST MIDI_INPUT_DEVICES">"LIST MIDI_INPUT_DEVICES"</a> <cite title="NONE">[LIST MIDI_INPUT_DEVICES]</cite> command, &lt;port&gt; the MIDI port number and &lt;param&gt; a specific port parameter name for which information should be obtained (as returned by the <a href="#GET MIDI_INPUT_PORT INFO">"GET MIDI_INPUT_PORT INFO"</a> <cite title="NONE">[GET MIDI_INPUT_PORT INFO]</cite> command).</p>
1972    <p id="rfc.section.6.3.12.p.4">Possible Answers:</p>
1973    <p/>
1974    
1975    <ul class="empty">
1976      <li>LinuxSampler will answer by sending a &lt;CRLF&gt; separated list.  Each answer line begins with the information category name followed by a colon and then a space character &lt;SP&gt; and finally the info character string to that info category. There is information which is always returned, independently of the given channel parameter and there is optional information which are only shown dependently to the given MIDI port. At the moment the following information categories are defined:</li>
1977      <li>TYPE - <ul class="empty"><li>either "BOOL" for boolean value(s) or "INT" for integer value(s) or "FLOAT" for dotted number(s) or "STRING" for character string(s) (always returned)</li></ul><p> </p></li>
1978      <li>DESCRIPTION - <ul class="empty"><li>arbitrary text describing the purpose of the parameter (always returned)</li></ul><p> </p></li>
1979      <li>FIX - <ul class="empty"><li>either true or false, if true then this parameter is read only, thus cannot be altered (always returned)</li></ul><p> </p></li>
1980      <li>MULTIPLICITY - <ul class="empty"><li>either true or false, defines if this parameter allows only one value or a list of values, where true means multiple values and false only a single value allowed (always returned)</li></ul><p> </p></li>
1981      <li>RANGE_MIN - <ul class="empty"><li>defines lower limit of the allowed value range for this parameter, can be an integer value as well as a dotted number, this parameter is usually used in conjunction with 'RANGE_MAX' but may also appear without (optionally returned, dependent to driver and port parameter)</li></ul><p> </p></li>
1982      <li>RANGE_MAX - <ul class="empty"><li>defines upper limit of the allowed value range for this parameter, can be an integer value as well as a dotted number, this parameter is usually used in conjunction with 'RANGE_MIN' but may also appear without (optionally returned, dependent to driver and port parameter)</li></ul><p> </p></li>
1983      <li>POSSIBILITIES - <ul class="empty"><li>comma separated list of possible values for this parameter, character strings are encapsulated into apostrophes (optionally returned, dependent to device and port parameter)</li></ul><p> </p></li>
1984    </ul>
1985    
1986    <p> </p>
1987    <p id="rfc.section.6.3.12.p.6">The mentioned fields above don't have to be in particular order.</p>
1988    <p id="rfc.section.6.3.12.p.7">Example:</p>
1989    <p/>
1990    
1991    <ul class="empty">
1992      <li>C: "GET MIDI_INPUT_PORT_PARAMETER INFO 0 0 ALSA_SEQ_BINDINGS"</li>
1993      <li>S: "DESCRIPTION: bindings to other ALSA sequencer clients"</li>
1994      <li>"TYPE: STRING"</li>
1995      <li>"FIX: false"</li>
1996      <li>"MULTIPLICITY: true"</li>
1997      <li>"POSSIBILITIES: '64:0','68:0','68:1'"</li>
1998      <li>"."</li>
1999    </ul>
2000    
2001    <p> </p>
2002    <h1 id="rfc.section.6.3.13"><a href="#rfc.section.6.3.13">6.3.13.</a> <a href="#SET MIDI_INPUT_PORT_PARAMETER" id="SET MIDI_INPUT_PORT_PARAMETER">Changing settings of MIDI input ports</a></h1>
2003    <p id="rfc.section.6.3.13.p.1">Use the following command to alter a specific setting of a MIDI input port:</p>
2004    <p/>
2005    
2006    <ul class="empty">
2007      <li>SET MIDI_INPUT_PORT_PARAMETER &lt;device-id&gt; &lt;port&gt; &lt;key&gt;=&lt;value&gt;</li>
2008    </ul>
2009    
2010    <p> </p>
2011    <p id="rfc.section.6.3.13.p.3">Where &lt;device-id&gt; should be replaced by the numerical ID of the MIDI device as returned by the <a href="#CREATE MIDI_INPUT_DEVICE">"CREATE MIDI_INPUT_DEVICE"</a> <cite title="NONE">[CREATE MIDI_INPUT_DEVICE]</cite> or <a href="#LIST MIDI_INPUT_DEVICES">"LIST MIDI_INPUT_DEVICES"</a> <cite title="NONE">[LIST MIDI_INPUT_DEVICES]</cite> command, &lt;port&gt; by the MIDI port number, &lt;key&gt; by the name of the parameter to change and &lt;value&gt; by the new value for this parameter (encapsulated into apostrophes) or NONE (not encapsulated into apostrophes) for specifying no value for parameters allowing a list of values.</p>
2012    <p id="rfc.section.6.3.13.p.4">Possible Answers:</p>
2013    <p/>
2014    
2015    <ul class="empty">
2016      <li>"OK" - <ul class="empty"><li>in case setting was successfully changed</li></ul><p> </p></li>
2017      <li>"WRN:&lt;warning-code&gt;:&lt;warning-message&gt;" - <ul class="empty"><li>in case setting was changed successfully, but there are noteworthy issue(s) related, providing an appropriate warning code and warning message</li></ul><p> </p></li>
2018      <li>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" - <ul class="empty"><li>in case it failed, providing an appropriate error code and error message</li></ul><p> </p></li>
2019    </ul>
2020    
2021    <p> </p>
2022    <p id="rfc.section.6.3.13.p.6">Example:</p>
2023    <p/>
2024    
2025    <ul class="empty">
2026      <li>C: "SET MIDI_INPUT_PORT_PARAMETER 0 0 ALSA_SEQ_BINDINGS='20:0'"</li>
2027      <li>S: "OK"</li>
2028    </ul>
2029    
2030    <p> </p>
2031    <p/>
2032    
2033    <ul class="empty">
2034      <li>C: "SET MIDI_INPUT_PORT_PARAMETER 0 0 ALSA_SEQ_BINDINGS=NONE"</li>
2035      <li>S: "OK"</li>
2036    </ul>
2037    
2038    <p> </p>
2039    <h1 id="rfc.section.6.4"><a href="#rfc.section.6.4">6.4.</a> Configuring sampler channels</h1>
2040    <p id="rfc.section.6.4.p.1">The following commands describe how to add and remove sampler channels, associate a sampler channel with a sampler engine, load instruments and connect sampler channels to MIDI and audio devices.</p>
2041    <h1 id="rfc.section.6.4.1"><a href="#rfc.section.6.4.1">6.4.1.</a> <a href="#LOAD INSTRUMENT" id="LOAD INSTRUMENT">Loading an instrument</a></h1>
2042    <p id="rfc.section.6.4.1.p.1">An instrument file can be loaded and assigned to a sampler channel by one of the following commands:</p>
2043    <p/>
2044    
2045    <ul class="empty">
2046      <li>LOAD INSTRUMENT [NON_MODAL] '&lt;filename&gt;' &lt;instr-index&gt; &lt;sampler-channel&gt;</li>
2047    </ul>
2048    
2049    <p> </p>
2050    <p id="rfc.section.6.4.1.p.3">Where &lt;filename&gt; is the name of the instrument file on the LinuxSampler instance's host system, &lt;instr-index&gt; the index of the instrument in the instrument file and &lt;sampler-channel&gt; is the number of the sampler channel the instrument should be assigned to.  Each sampler channel can only have one instrument.</p>
2051    <p id="rfc.section.6.4.1.p.4">Notice: since LSCP 1.2 the &lt;filename&gt; argument supports escape characters for special characters (see chapter "<a href="#character_set">Character Set and Escape Sequences</a> <cite title="NONE">[character_set]</cite>" for details) and accordingly backslash characters in the filename MUST now be escaped as well!</p>
2052    <p id="rfc.section.6.4.1.p.5">The difference between regular and NON_MODAL versions of the command is that the regular command returns OK only after the instrument has been fully loaded and the channel is ready to be used while NON_MODAL version returns immediately and a background process is launched to load the instrument on the channel. The <a href="#GET CHANNEL INFO">GET CHANNEL INFO</a> <cite title="NONE">[GET CHANNEL INFO]</cite> command can be used to obtain loading progress from INSTRUMENT_STATUS field. LOAD command will perform sanity checks such as making sure that the file could be read and it is of a proper format and SHOULD return ERR and SHOULD not launch the background process should any errors be detected at that point.</p>
2053    <p id="rfc.section.6.4.1.p.6">Possible Answers:</p>
2054    <p/>
2055    
2056    <ul class="empty">
2057      <li>"OK" - <ul class="empty"><li>in case the instrument was successfully loaded</li></ul><p> </p></li>
2058      <li>"WRN:&lt;warning-code&gt;:&lt;warning-message&gt;" - <ul class="empty"><li>in case the instrument was loaded successfully, but there are noteworthy issue(s) related (e.g. Engine doesn't support one or more patch parameters provided by the loaded instrument file), providing an appropriate warning code and warning message</li></ul><p> </p></li>
2059      <li>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" - <ul class="empty"><li>in case it failed, providing an appropriate error code and error message</li></ul><p> </p></li>
2060    </ul>
2061    
2062    <p> </p>
2063    <p id="rfc.section.6.4.1.p.8">Example (Unix):</p>
2064    <p/>
2065    
2066    <ul class="empty">
2067      <li>C: LOAD INSTRUMENT '/home/joe/gigs/cello.gig' 0 0</li>
2068      <li>S: OK</li>
2069    </ul>
2070    
2071    <p> </p>
2072    <p id="rfc.section.6.4.1.p.10">Example (Windows):</p>
2073    <p/>
2074    
2075    <ul class="empty">
2076      <li>C: LOAD INSTRUMENT 'D:/MySounds/cello.gig' 0 0</li>
2077      <li>S: OK</li>
2078    </ul>
2079    
2080    <p> </p>
2081    <h1 id="rfc.section.6.4.2"><a href="#rfc.section.6.4.2">6.4.2.</a> <a href="#LOAD ENGINE" id="LOAD ENGINE">Loading a sampler engine</a></h1>
2082    <p id="rfc.section.6.4.2.p.1">A sampler engine type can be associated to a specific sampler channel by the following command:</p>
2083    <p/>
2084    
2085    <ul class="empty">
2086      <li>LOAD ENGINE &lt;engine-name&gt; &lt;sampler-channel&gt;</li>
2087    </ul>
2088    
2089    <p> </p>
2090    <p id="rfc.section.6.4.2.p.3">Where &lt;engine-name&gt; is an engine name as obtained by the <a href="#LIST AVAILABLE_ENGINES">"LIST AVAILABLE_ENGINES"</a> <cite title="NONE">[LIST AVAILABLE_ENGINES]</cite> command and &lt;sampler-channel&gt; the sampler channel as returned by the <a href="#ADD CHANNEL">"ADD CHANNEL"</a> <cite title="NONE">[ADD CHANNEL]</cite> or <a href="#LIST CHANNELS">"LIST CHANNELS"</a> <cite title="NONE">[LIST CHANNELS]</cite> command where the engine type should be assigned to. This command should be issued after adding a new sampler channel and before any other control commands on the new sampler channel. It can also be used to change the engine type of a sampler channel. This command has (currently) no way to define or force if a new engine instance should be created and assigned to the given sampler channel or if an already existing instance of that engine type, shared with other sampler channels, should be used.</p>
2091    <p id="rfc.section.6.4.2.p.4">Possible Answers:</p>
2092    <p/>
2093    
2094    <ul class="empty">
2095      <li>"OK" - <ul class="empty"><li>in case the engine was successfully deployed</li></ul><p> </p></li>
2096      <li>"WRN:&lt;warning-code&gt;:&lt;warning-message&gt;" - <ul class="empty"><li>in case the engine was deployed successfully, but there are noteworthy issue(s) related, providing an appropriate warning code and warning message</li></ul><p> </p></li>
2097      <li>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" - <ul class="empty"><li>in case it failed, providing an appropriate error code and error message</li></ul><p> </p></li>
2098    </ul>
2099    
2100    <p> </p>
2101    <p id="rfc.section.6.4.2.p.6">Example:</p>
2102    <p/>
2103    
2104    <ul class="empty">
2105      <li/>
2106    </ul>
2107    
2108    <p> </p>
2109    <h1 id="rfc.section.6.4.3"><a href="#rfc.section.6.4.3">6.4.3.</a> <a href="#GET CHANNELS" id="GET CHANNELS">Getting all created sampler channel count</a></h1>
2110    <p id="rfc.section.6.4.3.p.1">The number of sampler channels can change on runtime. To get the current amount of sampler channels, the front-end can send the following command:</p>
2111    <p/>
2112    
2113    <ul class="empty">
2114      <li>GET CHANNELS</li>
2115    </ul>
2116    
2117    <p> </p>
2118    <p id="rfc.section.6.4.3.p.3">Possible Answers:</p>
2119    <p/>
2120    
2121    <ul class="empty">
2122      <li>LinuxSampler will answer by returning the current number of sampler channels.</li>
2123    </ul>
2124    
2125    <p> </p>
2126    <p id="rfc.section.6.4.3.p.5">Example:</p>
2127    <p/>
2128    
2129    <ul class="empty">
2130      <li>C: "GET CHANNELS"</li>
2131      <li>S: "12"</li>
2132    </ul>
2133    
2134    <p> </p>
2135    <h1 id="rfc.section.6.4.4"><a href="#rfc.section.6.4.4">6.4.4.</a> <a href="#LIST CHANNELS" id="LIST CHANNELS">Getting all created sampler channel list</a></h1>
2136    <p id="rfc.section.6.4.4.p.1">The number of sampler channels can change on runtime. To get the current list of sampler channels, the front-end can send the following command:</p>
2137    <p/>
2138    
2139    <ul class="empty">
2140      <li>LIST CHANNELS</li>
2141    </ul>
2142    
2143    <p> </p>
2144    <p id="rfc.section.6.4.4.p.3">Possible Answers:</p>
2145    <p/>
2146    
2147    <ul class="empty">
2148      <li>LinuxSampler will answer by returning a comma separated list with all sampler channels numerical IDs.</li>
2149    </ul>
2150    
2151    <p> </p>
2152    <p id="rfc.section.6.4.4.p.5">Example:</p>
2153    <p/>
2154    
2155    <ul class="empty">
2156      <li>C: "LIST CHANNELS"</li>
2157      <li>S: "0,1,2,3,4,5,6,9,10,11,15,20"</li>
2158    </ul>
2159    
2160    <p> </p>
2161    <h1 id="rfc.section.6.4.5"><a href="#rfc.section.6.4.5">6.4.5.</a> <a href="#ADD CHANNEL" id="ADD CHANNEL">Adding a new sampler channel</a></h1>
2162    <p id="rfc.section.6.4.5.p.1">A new sampler channel can be added to the end of the sampler channel list by sending the following command:</p>
2163    <p/>
2164    
2165    <ul class="empty">
2166      <li>ADD CHANNEL</li>
2167    </ul>
2168    
2169    <p> </p>
2170    <p id="rfc.section.6.4.5.p.3">This will increment the sampler channel count by one and the new sampler channel will be appended to the end of the sampler channel list. The front-end should send the respective, related commands right after to e.g. load an engine, load an instrument and setting input, output method and eventually other commands to initialize the new channel. The front-end should use the sampler channel returned by the answer of this command to perform the previously recommended commands, to avoid race conditions e.g. with other front-ends that might also have sent an "ADD CHANNEL" command.</p>
2171    <p id="rfc.section.6.4.5.p.4">Possible Answers:</p>
2172    <p/>
2173    
2174    <ul class="empty">
2175      <li>"OK[&lt;sampler-channel&gt;]" - <ul class="empty"><li>in case a new sampler channel could be added, where &lt;sampler-channel&gt; reflects the channel number of the new created sampler channel which should be used to set up the sampler channel by sending subsequent initialization commands</li></ul><p> </p></li>
2176      <li>"WRN:&lt;warning-code&gt;:&lt;warning-message&gt;" - <ul class="empty"><li>in case a new channel was added successfully, but there are noteworthy issue(s) related, providing an appropriate warning code and warning message</li></ul><p> </p></li>
2177      <li>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" - <ul class="empty"><li>in case it failed, providing an appropriate error code and error message</li></ul><p> </p></li>
2178    </ul>
2179    
2180    <p> </p>
2181    <p id="rfc.section.6.4.5.p.6">Example:</p>
2182    <p/>
2183    
2184    <ul class="empty">
2185      <li/>
2186    </ul>
2187    
2188    <p> </p>
2189    <h1 id="rfc.section.6.4.6"><a href="#rfc.section.6.4.6">6.4.6.</a> <a href="#REMOVE CHANNEL" id="REMOVE CHANNEL">Removing a sampler channel</a></h1>
2190    <p id="rfc.section.6.4.6.p.1">A sampler channel can be removed by sending the following command:</p>
2191    <p/>
2192    
2193    <ul class="empty">
2194      <li>REMOVE CHANNEL &lt;sampler-channel&gt;</li>
2195    </ul>
2196    
2197    <p> </p>
2198    <p id="rfc.section.6.4.6.p.3">Where &lt;sampler-channel&gt; should be replaced by the number of the sampler channel as given by the <a href="#ADD CHANNEL">"ADD CHANNEL"</a> <cite title="NONE">[ADD CHANNEL]</cite> or <a href="#LIST CHANNELS">"LIST CHANNELS"</a> <cite title="NONE">[LIST CHANNELS]</cite> command. The channel numbers of all subsequent sampler channels remain the same.</p>
2199    <p id="rfc.section.6.4.6.p.4">Possible Answers:</p>
2200    <p/>
2201    
2202    <ul class="empty">
2203      <li>"OK" - <ul class="empty"><li>in case the given sampler channel could be removed</li></ul><p> </p></li>
2204      <li>"WRN:&lt;warning-code&gt;:&lt;warning-message&gt;" - <ul class="empty"><li>in case the given channel was removed, but there are noteworthy issue(s) related, providing an appropriate warning code and warning message</li></ul><p> </p></li>
2205      <li>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" - <ul class="empty"><li>in case it failed, providing an appropriate error code and error message</li></ul><p> </p></li>
2206    </ul>
2207    
2208    <p> </p>
2209    <p id="rfc.section.6.4.6.p.6">Example:</p>
2210    <p/>
2211    
2212    <ul class="empty">
2213      <li/>
2214    </ul>
2215    
2216    <p> </p>
2217    <h1 id="rfc.section.6.4.7"><a href="#rfc.section.6.4.7">6.4.7.</a> <a href="#GET AVAILABLE_ENGINES" id="GET AVAILABLE_ENGINES">Getting amount of available engines</a></h1>
2218    <p id="rfc.section.6.4.7.p.1">The front-end can ask for the number of available engines by sending the following command:</p>
2219    <p/>
2220    
2221    <ul class="empty">
2222      <li>GET AVAILABLE_ENGINES</li>
2223    </ul>
2224    
2225    <p> </p>
2226    <p id="rfc.section.6.4.7.p.3">Possible Answers:</p>
2227    <p/>
2228    
2229    <ul class="empty">
2230      <li>LinuxSampler will answer by sending the number of available engines.</li>
2231    </ul>
2232    
2233    <p> </p>
2234    <p id="rfc.section.6.4.7.p.5">Example:</p>
2235    <p/>
2236    
2237    <ul class="empty">
2238      <li>C: "GET AVAILABLE_ENGINES"</li>
2239      <li>S: "4"</li>
2240    </ul>
2241    
2242    <p> </p>
2243    <h1 id="rfc.section.6.4.8"><a href="#rfc.section.6.4.8">6.4.8.</a> <a href="#LIST AVAILABLE_ENGINES" id="LIST AVAILABLE_ENGINES">Getting all available engines</a></h1>
2244    <p id="rfc.section.6.4.8.p.1">The front-end can ask for a list of all available engines by sending the following command:</p>
2245    <p/>
2246    
2247    <ul class="empty">
2248      <li>LIST AVAILABLE_ENGINES</li>
2249    </ul>
2250    
2251    <p> </p>
2252    <p id="rfc.section.6.4.8.p.3">Possible Answers:</p>
2253    <p/>
2254    
2255    <ul class="empty">
2256      <li>LinuxSampler will answer by sending a comma separated list of the engines' names encapsulated into apostrophes (').  Engine names can consist of lower and upper cases, digits and underlines ("_" character).</li>
2257    </ul>
2258    
2259    <p> </p>
2260    <p id="rfc.section.6.4.8.p.5">Example:</p>
2261    <p/>
2262    
2263    <ul class="empty">
2264      <li>C: "LIST AVAILABLE_ENGINES"</li>
2265      <li>S: "'gig','sfz','sf2'"</li>
2266    </ul>
2267    
2268    <p> </p>
2269    <h1 id="rfc.section.6.4.9"><a href="#rfc.section.6.4.9">6.4.9.</a> <a href="#GET ENGINE INFO" id="GET ENGINE INFO">Getting information about an engine</a></h1>
2270    <p id="rfc.section.6.4.9.p.1">The front-end can ask for information about a specific engine by sending the following command:</p>
2271    <p/>
2272    
2273    <ul class="empty">
2274      <li>GET ENGINE INFO &lt;engine-name&gt;</li>
2275    </ul>
2276    
2277    <p> </p>
2278    <p id="rfc.section.6.4.9.p.3">Where &lt;engine-name&gt; is an engine name as obtained by the <a href="#LIST AVAILABLE_ENGINES">"LIST AVAILABLE_ENGINES"</a> <cite title="NONE">[LIST AVAILABLE_ENGINES]</cite> command.</p>
2279    <p id="rfc.section.6.4.9.p.4">Possible Answers:</p>
2280    <p/>
2281    
2282    <ul class="empty">
2283      <li>LinuxSampler will answer by sending a &lt;CRLF&gt; separated list.  Each answer line begins with the information category name followed by a colon and then a space character &lt;SP&gt; and finally the info character string to that info category. At the moment the following categories are defined:</li>
2284      <li>
2285        <ul class="empty">
2286          <li>DESCRIPTION - <ul class="empty"><li>arbitrary description text about the engine (note that the character string may contain <a href="#character_set">escape sequences</a> <cite title="NONE">[character_set]</cite>)</li></ul><p> </p></li>
2287          <li>VERSION - <ul class="empty"><li>arbitrary character string regarding the engine's version</li></ul><p> </p></li>
2288        </ul>
2289        <p> </p>
2290      </li>
2291    </ul>
2292    
2293    <p> </p>
2294    <p id="rfc.section.6.4.9.p.6">The mentioned fields above don't have to be in particular order.</p>
2295    <p id="rfc.section.6.4.9.p.7">Examples:</p>
2296    <p/>
2297    
2298    <ul class="empty">
2299      <li>C: "GET ENGINE INFO gig"</li>
2300      <li>S: "DESCRIPTION: GigaSampler Format Engine"</li>
2301      <li>"VERSION: 1.110"</li>
2302      <li>"."</li>
2303      <li>C: "GET ENGINE INFO sf2"</li>
2304      <li>S: "DESCRIPTION: SoundFont Format Engine"</li>
2305      <li>"VERSION: 1.4"</li>
2306      <li>"."</li>
2307      <li>C: "GET ENGINE INFO sfz"</li>
2308      <li>S: "DESCRIPTION: SFZ Format Engine"</li>
2309      <li>"VERSION: 1.11"</li>
2310      <li>"."</li>
2311    </ul>
2312    
2313    <p> </p>
2314    <h1 id="rfc.section.6.4.10"><a href="#rfc.section.6.4.10">6.4.10.</a> <a href="#GET CHANNEL INFO" id="GET CHANNEL INFO">Getting sampler channel information</a></h1>
2315    <p id="rfc.section.6.4.10.p.1">The front-end can ask for the current settings of a sampler channel by sending the following command:</p>
2316    <p/>
2317    
2318    <ul class="empty">
2319      <li>GET CHANNEL INFO &lt;sampler-channel&gt;</li>
2320    </ul>
2321    
2322    <p> </p>
2323    <p id="rfc.section.6.4.10.p.3">Where &lt;sampler-channel&gt; is the sampler channel number the front-end is interested in as returned by the <a href="#ADD CHANNEL">"ADD CHANNEL"</a> <cite title="NONE">[ADD CHANNEL]</cite> or <a href="#LIST CHANNELS">"LIST CHANNELS"</a> <cite title="NONE">[LIST CHANNELS]</cite> command.</p>
2324    <p id="rfc.section.6.4.10.p.4">Possible Answers:</p>
2325    <p/>
2326    
2327    <ul class="empty">
2328      <li>LinuxSampler will answer by sending a &lt;CRLF&gt; separated list.  Each answer line begins with the settings category name followed by a colon and then a space character &lt;SP&gt; and finally the info character string to that setting category. At the moment the following categories are defined:</li>
2329      <li>
2330        <ul class="empty">
2331          <li>ENGINE_NAME - <ul class="empty"><li>name of the engine that is associated with the sampler channel, "NONE" if there's no engine associated yet for this sampler channel</li></ul><p> </p></li>
2332          <li>AUDIO_OUTPUT_DEVICE - <ul class="empty"><li>numerical ID of the audio output device which is currently connected to this sampler channel to output the audio signal, "-1" if there's no device connected to this sampler channel</li></ul><p> </p></li>
2333          <li>AUDIO_OUTPUT_CHANNELS - <ul class="empty"><li>number of output channels the sampler channel offers (dependent to used sampler engine and loaded instrument)</li></ul><p> </p></li>
2334          <li>AUDIO_OUTPUT_ROUTING - <ul class="empty"><li>comma separated list which reflects to which audio channel of the selected audio output device each sampler output channel is routed to, e.g. "0,3" would mean the engine's output channel 0 is routed to channel 0 of the audio output device and the engine's output channel 1 is routed to the channel 3 of the audio output device</li></ul><p> </p></li>
2335          <li>INSTRUMENT_FILE - <ul class="empty"><li>the file name of the loaded instrument, "NONE" if there's no instrument yet loaded for this sampler channel (note: since LSCP 1.2 this path may contain <a href="#character_set">escape sequences</a> <cite title="NONE">[character_set]</cite>)</li></ul><p> </p></li>
2336          <li>INSTRUMENT_NR - <ul class="empty"><li>the instrument index number of the loaded instrument, "-1" if there's no instrument loaded for this sampler channel</li></ul><p> </p></li>
2337          <li>INSTRUMENT_NAME - <ul class="empty"><li>the instrument name of the loaded instrument (note: since LSCP 1.2 this character string may contain <a href="#character_set">escape sequences</a> <cite title="NONE">[character_set]</cite>)</li></ul><p> </p></li>
2338          <li>INSTRUMENT_STATUS - <ul class="empty"><li>Integer values 0 to 100 indicating loading progress percentage for the instrument. Negative value indicates a loading exception (also returns "-1" in case no instrument was yet to be loaded on the sampler channel).  Value of 100 indicates that the instrument is fully loaded.</li></ul><p> </p></li>
2339          <li>MIDI_INPUT_DEVICE - <ul class="empty"><li>DEPRECATED: THIS FIELD WILL DISAPPEAR!</li><li>numerical ID of the MIDI input device which is currently connected to this sampler channel to deliver MIDI input commands, "-1" if there's no device connected to this sampler channel</li><li>Should not be used anymore as of LSCP v1.6 and younger.  This field is currently only preserved for backward compatibility.  </li><li>This field a relict from times where only one MIDI input per sampler channel was allowed. Use <a href="#LIST CHANNEL MIDI_INPUTS">"GET CHANNEL MIDI_INPUTS"</a> <cite title="NONE">[LIST CHANNEL MIDI_INPUTS]</cite> instead.</li></ul><p> </p></li>
2340          <li>MIDI_INPUT_PORT - <ul class="empty"><li>DEPRECATED: THIS FIELD WILL DISAPPEAR!</li><li>port number of the MIDI input device (in case a MIDI device was already assigned to the sampler channel)</li><li>Should not be used anymore as of LSCP v1.6 and younger.  This field is currently only preserved for backward compatibility.  </li><li>This field a relict from times where only one MIDI input per sampler channel was allowed. Use <a href="#LIST CHANNEL MIDI_INPUTS">"GET CHANNEL MIDI_INPUTS"</a> <cite title="NONE">[LIST CHANNEL MIDI_INPUTS]</cite> instead.</li></ul><p> </p></li>
2341          <li>MIDI_INPUT_CHANNEL - <ul class="empty"><li>the MIDI input channel number this sampler channel should listen to or "ALL" to listen on all MIDI channels</li></ul><p> </p></li>
2342          <li>VOLUME - <ul class="empty"><li>optionally dotted number for the channel volume factor (where a value &lt; 1.0 means attenuation and a value &gt; 1.0 means amplification)</li></ul><p> </p></li>
2343          <li>MUTE - <ul class="empty"><li>Determines whether the channel is muted, "true" if the channel is muted, "false" if the channel is not muted, and "MUTED_BY_SOLO" if the channel is muted because of the presence of a solo channel and will be unmuted when there are no solo channels left</li></ul><p> </p></li>
2344          <li>SOLO - <ul class="empty"><li>Determines whether this is a solo channel, "true" if the channel is a solo channel; "false" otherwise</li></ul><p> </p></li>
2345          <li>MIDI_INSTRUMENT_MAP - <ul class="empty"><li>Determines to which MIDI instrument map this sampler channel is assigned to. Read chapter <a href="#SET CHANNEL MIDI_INSTRUMENT_MAP">"SET CHANNEL MIDI_INSTRUMENT_MAP"</a> <cite title="NONE">[SET CHANNEL MIDI_INSTRUMENT_MAP]</cite> for a list of possible values.</li></ul><p> </p></li>
2346        </ul>
2347        <p> </p>
2348      </li>
2349    </ul>
2350    
2351    <p> </p>
2352    <p id="rfc.section.6.4.10.p.6">The mentioned fields above don't have to be in particular order.</p>
2353    <p id="rfc.section.6.4.10.p.7">Example:</p>
2354    <p/>
2355    
2356    <ul class="empty">
2357      <li>C: "GET CHANNEL INFO 34"</li>
2358      <li>S: "ENGINE_NAME: gig"</li>
2359      <li>"VOLUME: 1.0"</li>
2360      <li>"AUDIO_OUTPUT_DEVICE: 0"</li>
2361      <li>"AUDIO_OUTPUT_CHANNELS: 2"</li>
2362      <li>"AUDIO_OUTPUT_ROUTING: 0,1"</li>
2363      <li>"INSTRUMENT_FILE: /home/joe/FazioliPiano.gig"</li>
2364      <li>"INSTRUMENT_NR: 0"</li>
2365      <li>"INSTRUMENT_NAME: Fazioli Piano"</li>
2366      <li>"INSTRUMENT_STATUS: 100"</li>
2367      <li>"MIDI_INPUT_DEVICE: 0"</li>
2368      <li>"MIDI_INPUT_PORT: 0"</li>
2369      <li>"MIDI_INPUT_CHANNEL: 5"</li>
2370      <li>"VOLUME: 1.0"</li>
2371      <li>"MUTE: false"</li>
2372      <li>"SOLO: false"</li>
2373      <li>"MIDI_INSTRUMENT_MAP: NONE"</li>
2374      <li>"."</li>
2375    </ul>
2376    
2377    <p> </p>
2378    <h1 id="rfc.section.6.4.11"><a href="#rfc.section.6.4.11">6.4.11.</a> <a href="#GET CHANNEL VOICE_COUNT" id="GET CHANNEL VOICE_COUNT">Current number of active voices</a></h1>
2379    <p id="rfc.section.6.4.11.p.1">The front-end can ask for the current number of active voices on a sampler channel by sending the following command:</p>
2380    <p/>
2381    
2382    <ul class="empty">
2383      <li>GET CHANNEL VOICE_COUNT &lt;sampler-channel&gt;</li>
2384    </ul>
2385    
2386    <p> </p>
2387    <p id="rfc.section.6.4.11.p.3">Where &lt;sampler-channel&gt; is the sampler channel number the front-end is interested in as returned by the <a href="#ADD CHANNEL">"ADD CHANNEL"</a> <cite title="NONE">[ADD CHANNEL]</cite> or <a href="#LIST CHANNELS">"LIST CHANNELS"</a> <cite title="NONE">[LIST CHANNELS]</cite> command.</p>
2388    <p id="rfc.section.6.4.11.p.4">Possible Answers:</p>
2389    <p/>
2390    
2391    <ul class="empty">
2392      <li>LinuxSampler will answer by returning the number of active voices on that channel.</li>
2393    </ul>
2394    
2395    <p> </p>
2396    <p id="rfc.section.6.4.11.p.6">Example:</p>
2397    <p/>
2398    
2399    <ul class="empty">
2400      <li/>
2401    </ul>
2402    
2403    <p> </p>
2404    <h1 id="rfc.section.6.4.12"><a href="#rfc.section.6.4.12">6.4.12.</a> <a href="#GET CHANNEL STREAM_COUNT" id="GET CHANNEL STREAM_COUNT">Current number of active disk streams</a></h1>
2405    <p id="rfc.section.6.4.12.p.1">The front-end can ask for the current number of active disk streams on a sampler channel by sending the following command:</p>
2406    <p/>
2407    
2408    <ul class="empty">
2409      <li>GET CHANNEL STREAM_COUNT &lt;sampler-channel&gt;</li>
2410    </ul>
2411    
2412    <p> </p>
2413    <p id="rfc.section.6.4.12.p.3">Where &lt;sampler-channel&gt; is the sampler channel number the front-end is interested in as returned by the <a href="#ADD CHANNEL">"ADD CHANNEL"</a> <cite title="NONE">[ADD CHANNEL]</cite> or <a href="#LIST CHANNELS">"LIST CHANNELS"</a> <cite title="NONE">[LIST CHANNELS]</cite> command.</p>
2414    <p id="rfc.section.6.4.12.p.4">Possible Answers:</p>
2415    <p/>
2416    
2417    <ul class="empty">
2418      <li>LinuxSampler will answer by returning the number of active disk streams on that channel in case the engine supports disk streaming, if the engine doesn't support disk streaming it will return "NA" for not available.</li>
2419    </ul>
2420    
2421    <p> </p>
2422    <p id="rfc.section.6.4.12.p.6">Example:</p>
2423    <p/>
2424    
2425    <ul class="empty">
2426      <li/>
2427    </ul>
2428    
2429    <p> </p>
2430    <h1 id="rfc.section.6.4.13"><a href="#rfc.section.6.4.13">6.4.13.</a> <a href="#GET CHANNEL BUFFER_FILL" id="GET CHANNEL BUFFER_FILL">Current fill state of disk stream buffers</a></h1>
2431    <p id="rfc.section.6.4.13.p.1">The front-end can ask for the current fill state of all disk streams on a sampler channel by sending the following command:</p>
2432    <p/>
2433    
2434    <ul class="empty">
2435      <li>GET CHANNEL BUFFER_FILL BYTES &lt;sampler-channel&gt;</li>
2436    </ul>
2437    
2438    <p> </p>
2439    <p id="rfc.section.6.4.13.p.3">to get the fill state in bytes or</p>
2440    <p/>
2441    
2442    <ul class="empty">
2443      <li>GET CHANNEL BUFFER_FILL PERCENTAGE &lt;sampler-channel&gt;</li>
2444    </ul>
2445    
2446    <p> </p>
2447    <p id="rfc.section.6.4.13.p.5">to get the fill state in percent, where &lt;sampler-channel&gt; is the sampler channel number the front-end is interested in as returned by the <a href="#ADD CHANNEL">"ADD CHANNEL"</a> <cite title="NONE">[ADD CHANNEL]</cite> or <a href="#LIST CHANNELS">"LIST CHANNELS"</a> <cite title="NONE">[LIST CHANNELS]</cite> command.</p>
2448    <p id="rfc.section.6.4.13.p.6">Possible Answers:</p>
2449    <p/>
2450    
2451    <ul class="empty">
2452      <li>LinuxSampler will either answer by returning a comma separated string with the fill state of all disk stream buffers on that channel or an empty line if there are no active disk streams or "NA" for *not available* in case the engine which is deployed doesn't support disk streaming. Each entry in the answer list will begin with the stream's ID in brackets followed by the numerical representation of the fill size (either in bytes or percentage). Note: due to efficiency reasons the fill states in the response are not in particular order, thus the front-end has to sort them by itself if necessary.</li>
2453    </ul>
2454    
2455    <p> </p>
2456    <p id="rfc.section.6.4.13.p.8">Examples:</p>
2457    <p/>
2458    
2459    <ul class="empty">
2460      <li>C: "GET CHANNEL BUFFER_FILL BYTES 4"</li>
2461      <li>S: "[115]420500,[116]510300,[75]110000,[120]230700"</li>
2462    </ul>
2463    
2464    <p> </p>
2465    
2466    <ul class="empty">
2467      <li>C: "GET CHANNEL BUFFER_FILL PERCENTAGE 4"</li>
2468      <li>S: "[115]90%,[116]98%,[75]40%,[120]62%"</li>
2469    </ul>
2470    
2471    <p> </p>
2472    
2473    <ul class="empty">
2474      <li>C: "GET CHANNEL BUFFER_FILL PERCENTAGE 4"</li>
2475      <li>S: ""</li>
2476    </ul>
2477    
2478    <p> </p>
2479    <h1 id="rfc.section.6.4.14"><a href="#rfc.section.6.4.14">6.4.14.</a> <a href="#SET CHANNEL AUDIO_OUTPUT_DEVICE" id="SET CHANNEL AUDIO_OUTPUT_DEVICE">Setting audio output device</a></h1>
2480    <p id="rfc.section.6.4.14.p.1">The front-end can set the audio output device on a specific sampler channel by sending the following command:</p>
2481    <p/>
2482    
2483    <ul class="empty">
2484      <li>SET CHANNEL AUDIO_OUTPUT_DEVICE &lt;sampler-channel&gt; &lt;audio-device-id&gt;</li>
2485    </ul>
2486    
2487    <p> </p>
2488    <p id="rfc.section.6.4.14.p.3">Where &lt;sampler-channel&gt; is the respective sampler channel number as returned by the <a href="#ADD CHANNEL">"ADD CHANNEL"</a> <cite title="NONE">[ADD CHANNEL]</cite> or <a href="#LIST CHANNELS">"LIST CHANNELS"</a> <cite title="NONE">[LIST CHANNELS]</cite> command and &lt;audio-device-id&gt; is the numerical ID of the audio output device as given by the <a href="#CREATE AUDIO_OUTPUT_DEVICE">"CREATE AUDIO_OUTPUT_DEVICE"</a> <cite title="NONE">[CREATE AUDIO_OUTPUT_DEVICE]</cite> or <a href="#LIST AUDIO_OUTPUT_DEVICES">"LIST AUDIO_OUTPUT_DEVICES"</a> <cite title="NONE">[LIST AUDIO_OUTPUT_DEVICES]</cite> command.</p>
2489    <p id="rfc.section.6.4.14.p.4">Possible Answers:</p>
2490    <p/>
2491    
2492    <ul class="empty">
2493      <li>"OK" - <ul class="empty"><li>on success</li></ul><p> </p></li>
2494      <li>"WRN:&lt;warning-code&gt;:&lt;warning-message&gt;" - <ul class="empty"><li>if audio output device was set, but there are noteworthy issue(s) related, providing an appropriate warning code and warning message</li></ul><p> </p></li>
2495      <li>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" - <ul class="empty"><li>in case it failed, providing an appropriate error code and error message</li></ul><p> </p></li>
2496    </ul>
2497    
2498    <p> </p>
2499    <p id="rfc.section.6.4.14.p.6">Examples:</p>
2500    <p/>
2501    
2502    <ul class="empty">
2503      <li/>
2504    </ul>
2505    
2506    <p> </p>
2507    <h1 id="rfc.section.6.4.15"><a href="#rfc.section.6.4.15">6.4.15.</a> <a href="#SET CHANNEL AUDIO_OUTPUT_TYPE" id="SET CHANNEL AUDIO_OUTPUT_TYPE">Setting audio output type</a></h1>
2508    <p id="rfc.section.6.4.15.p.1">DEPRECATED: THIS COMMAND WILL DISAPPEAR!</p>
2509    <p id="rfc.section.6.4.15.p.2">The front-end can alter the audio output type on a specific sampler channel by sending the following command:</p>
2510    <p/>
2511    
2512    <ul class="empty">
2513      <li>SET CHANNEL AUDIO_OUTPUT_TYPE &lt;sampler-channel&gt; &lt;audio-output-type&gt;</li>
2514    </ul>
2515    
2516    <p> </p>
2517    <p id="rfc.section.6.4.15.p.4">Where &lt;audio-output-type&gt; is currently either "ALSA" or "JACK" and &lt;sampler-channel&gt; is the respective sampler channel number.</p>
2518    <p id="rfc.section.6.4.15.p.5">Possible Answers:</p>
2519    <p/>
2520    
2521    <ul class="empty">
2522      <li>"OK" - <ul class="empty"><li>on success</li></ul><p> </p></li>
2523      <li>"WRN:&lt;warning-code&gt;:&lt;warning-message&gt;" - <ul class="empty"><li>if audio output type was set, but there are noteworthy issue(s) related, providing an appropriate warning code and warning message</li></ul><p> </p></li>
2524      <li>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" - <ul class="empty"><li>in case it failed, providing an appropriate error code and error message</li></ul><p> </p></li>
2525    </ul>
2526    
2527    <p> </p>
2528    <p id="rfc.section.6.4.15.p.7">Examples:</p>
2529    <p/>
2530    
2531    <ul class="empty">
2532      <li/>
2533    </ul>
2534    
2535    <p> </p>
2536    <p id="rfc.section.6.4.15.p.9">Deprecated:</p>
2537    <p/>
2538    
2539    <ul class="empty">
2540      <li>Should not be used anymore. This command is currently only preserved for backward compatibility.</li>
2541      <li>This command is a relict from times where there was no sophisticated driver management yet. Use <a href="#CREATE AUDIO_OUTPUT_DEVICE">"CREATE AUDIO_OUTPUT_DEVICE"</a> <cite title="NONE">[CREATE AUDIO_OUTPUT_DEVICE]</cite> and <a href="#SET CHANNEL AUDIO_OUTPUT_DEVICE">"SET CHANNEL AUDIO_OUTPUT_DEVICE"</a> <cite title="NONE">[SET CHANNEL AUDIO_OUTPUT_DEVICE]</cite> instead.</li>
2542    </ul>
2543    
2544    <p> </p>
2545    <h1 id="rfc.section.6.4.16"><a href="#rfc.section.6.4.16">6.4.16.</a> <a href="#SET CHANNEL AUDIO_OUTPUT_CHANNEL" id="SET CHANNEL AUDIO_OUTPUT_CHANNEL">Setting audio output channel</a></h1>
2546    <p id="rfc.section.6.4.16.p.1">The front-end can alter the audio output channel on a specific sampler channel by sending the following command:</p>
2547    <p/>
2548    
2549    <ul class="empty">
2550      <li>SET CHANNEL AUDIO_OUTPUT_CHANNEL &lt;sampler-chan&gt; &lt;audio-out&gt; &lt;audio-in&gt;</li>
2551    </ul>
2552    
2553    <p> </p>
2554    <p id="rfc.section.6.4.16.p.3">Where &lt;sampler-chan&gt; is the sampler channel number as returned by the <a href="#ADD CHANNEL">"ADD CHANNEL"</a> <cite title="NONE">[ADD CHANNEL]</cite> or <a href="#LIST CHANNELS">"LIST CHANNELS"</a> <cite title="NONE">[LIST CHANNELS]</cite> command, &lt;audio-out&gt; is the numerical ID of the sampler channel's audio output channel which should be rerouted and &lt;audio-in&gt; is the numerical ID of the audio channel of the selected audio output device where &lt;audio-out&gt; should be routed to.</p>
2555    <p id="rfc.section.6.4.16.p.4">Possible Answers:</p>
2556    <p/>
2557    
2558    <ul class="empty">
2559      <li>"OK" - <ul class="empty"><li>on success</li></ul><p> </p></li>
2560      <li>"WRN:&lt;warning-code&gt;:&lt;warning-message&gt;" - <ul class="empty"><li>if audio output channel was set, but there are noteworthy issue(s) related, providing an appropriate warning code and warning message</li></ul><p> </p></li>
2561      <li>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" - <ul class="empty"><li>in case it failed, providing an appropriate error code and error message</li></ul><p> </p></li>
2562    </ul>
2563    
2564    <p> </p>
2565    <p id="rfc.section.6.4.16.p.6">Examples:</p>
2566    <p/>
2567    
2568    <ul class="empty">
2569      <li/>
2570    </ul>
2571    
2572    <p> </p>
2573    <h1 id="rfc.section.6.4.17"><a href="#rfc.section.6.4.17">6.4.17.</a> <a href="#ADD CHANNEL MIDI_INPUT" id="ADD CHANNEL MIDI_INPUT">Add MIDI input to sampler channel</a></h1>
2574    <p id="rfc.section.6.4.17.p.1">The front-end can add a MIDI input on a specific sampler channel by sending the following command:</p>
2575    <p/>
2576    
2577    <ul class="empty">
2578      <li>ADD CHANNEL MIDI_INPUT &lt;sampler-channel&gt; &lt;midi-device-id&gt; [&lt;midi-input-port&gt;]</li>
2579    </ul>
2580    
2581    <p> </p>
2582    <p id="rfc.section.6.4.17.p.3">Where &lt;sampler-channel&gt; is the sampler channel number as returned by the <a href="#ADD CHANNEL">"ADD CHANNEL"</a> <cite title="NONE">[ADD CHANNEL]</cite> or <a href="#LIST CHANNELS">"LIST CHANNELS"</a> <cite title="NONE">[LIST CHANNELS]</cite> command and &lt;midi-device-id&gt; is the numerical ID of the MIDI input device as returned by the <a href="#CREATE MIDI_INPUT_DEVICE">"CREATE MIDI_INPUT_DEVICE"</a> <cite title="NONE">[CREATE MIDI_INPUT_DEVICE]</cite> or <a href="#LIST MIDI_INPUT_DEVICES">"LIST MIDI_INPUT_DEVICES"</a> <cite title="NONE">[LIST MIDI_INPUT_DEVICES]</cite> command, and &lt;midi-input-port&gt; is an optional MIDI input port number of that MIDI input device. If &lt;midi-input-port&gt; is omitted, then the MIDI input device's first port (port number 0) is used.  </p>
2583    <p id="rfc.section.6.4.17.p.4">Possible Answers:</p>
2584    <p/>
2585    
2586    <ul class="empty">
2587      <li>"OK" - <ul class="empty"><li>on success</li></ul><p> </p></li>
2588      <li>"WRN:&lt;warning-code&gt;:&lt;warning-message&gt;" - <ul class="empty"><li>if MIDI input port was connected, but there are noteworthy issue(s) related, providing an appropriate warning code and warning message</li></ul><p> </p></li>
2589      <li>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" - <ul class="empty"><li>in case it failed, providing an appropriate error code and error message</li></ul><p> </p></li>
2590    </ul>
2591    
2592    <p> </p>
2593    <p id="rfc.section.6.4.17.p.6">Examples:</p>
2594    <p/>
2595    
2596    <ul class="empty">
2597      <li>C: "ADD CHANNEL MIDI_INPUT 0 0"</li>
2598      <li>S: "OK"</li>
2599      <li>C: "ADD CHANNEL MIDI_INPUT 1 0"</li>
2600      <li>S: "OK"</li>
2601      <li>C: "ADD CHANNEL MIDI_INPUT 1 1 1"</li>
2602      <li>S: "OK"</li>
2603      <li>C: "ADD CHANNEL MIDI_INPUT 1 2 0"</li>
2604      <li>S: "OK"</li>
2605    </ul>
2606    
2607    <p> </p>
2608    <p id="rfc.section.6.4.17.p.8">Since:</p>
2609    <p/>
2610    
2611    <ul class="empty">
2612      <li>Introduced with LSCP v1.6</li>
2613    </ul>
2614    
2615    <p> </p>
2616    <h1 id="rfc.section.6.4.18"><a href="#rfc.section.6.4.18">6.4.18.</a> <a href="#REMOVE CHANNEL MIDI_INPUT" id="REMOVE CHANNEL MIDI_INPUT">Remove MIDI input(s) from sampler channel</a></h1>
2617    <p id="rfc.section.6.4.18.p.1">The front-end can remove one ore more MIDI input(s) on a specific sampler channel by sending the following command:</p>
2618    <p/>
2619    
2620    <ul class="empty">
2621      <li>REMOVE CHANNEL MIDI_INPUT &lt;sampler-channel&gt; [&lt;midi-device-id&gt; [&lt;midi-input-port&gt;]]</li>
2622    </ul>
2623    
2624    <p> </p>
2625    <p id="rfc.section.6.4.18.p.3">Where &lt;sampler-channel&gt; is the sampler channel number as returned by the <a href="#ADD CHANNEL">"ADD CHANNEL"</a> <cite title="NONE">[ADD CHANNEL]</cite> or <a href="#LIST CHANNELS">"LIST CHANNELS"</a> <cite title="NONE">[LIST CHANNELS]</cite> command and &lt;midi-device-id&gt; and &lt;midi-input-port&gt; are optional numerical IDs defining the MIDI input device and one of its MIDI ports as returned by the <a href="#LIST CHANNEL MIDI_INPUTS">"LIST CHANNEL MIDI_INPUTS"</a> <cite title="NONE">[LIST CHANNEL MIDI_INPUTS]</cite> command.  </p>
2626    <p id="rfc.section.6.4.18.p.4">If &lt;midi-input-port&gt; is omitted, then all MIDI input ports of &lt;midi-device-id&gt; are disconnected from this sampler channel.  </p>
2627    <p id="rfc.section.6.4.18.p.5">If both, &lt;midi-device-id&gt; and &lt;midi-input-port&gt; are omitted, then all MIDI input ports currently connected to this sampler channel are disconnected from this sampler channel.  </p>
2628    <p id="rfc.section.6.4.18.p.6">Possible Answers:</p>
2629    <p/>
2630    
2631    <ul class="empty">
2632      <li>"OK" - <ul class="empty"><li>on success</li></ul><p> </p></li>
2633      <li>"WRN:&lt;warning-code&gt;:&lt;warning-message&gt;" - <ul class="empty"><li>if MIDI input porst were disconnected, but there are noteworthy issue(s) related, providing an appropriate warning code and warning message</li></ul><p> </p></li>
2634      <li>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" - <ul class="empty"><li>in case it failed, providing an appropriate error code and error message</li></ul><p> </p></li>
2635    </ul>
2636    
2637    <p> </p>
2638    <p id="rfc.section.6.4.18.p.8">Examples:</p>
2639    <p/>
2640    
2641    <ul class="empty">
2642      <li>C: "REMOVE CHANNEL MIDI_INPUT 0"</li>
2643      <li>S: "OK"</li>
2644      <li>C: "REMOVE CHANNEL MIDI_INPUT 1"</li>
2645      <li>S: "OK"</li>
2646      <li>C: "REMOVE CHANNEL MIDI_INPUT 1 2 0"</li>
2647      <li>S: "OK"</li>
2648    </ul>
2649    
2650    <p> </p>
2651    <p id="rfc.section.6.4.18.p.10">Since:</p>
2652    <p/>
2653    
2654    <ul class="empty">
2655      <li>Introduced with LSCP v1.6</li>
2656    </ul>
2657    
2658    <p> </p>
2659    <h1 id="rfc.section.6.4.19"><a href="#rfc.section.6.4.19">6.4.19.</a> <a href="#LIST CHANNEL MIDI_INPUTS" id="LIST CHANNEL MIDI_INPUTS">Getting all MIDI inputs of a sampler channel</a></h1>
2660    <p id="rfc.section.6.4.19.p.1">The front-end can query a list of all currently connected MIDI inputs of a certain sampler channel by sending the following command:</p>
2661    <p/>
2662    
2663    <ul class="empty">
2664      <li>LIST CHANNEL MIDI_INPUTS &lt;sampler-channel&gt;</li>
2665    </ul>
2666    
2667    <p> </p>
2668    <p id="rfc.section.6.4.19.p.3">Where &lt;sampler-channel&gt; is the sampler channel number as returned by the <a href="#ADD CHANNEL">"ADD CHANNEL"</a> <cite title="NONE">[ADD CHANNEL]</cite> or <a href="#LIST CHANNELS">"LIST CHANNELS"</a> <cite title="NONE">[LIST CHANNELS]</cite> command.  </p>
2669    <p id="rfc.section.6.4.19.p.4">Possible Answers:</p>
2670    <p/>
2671    
2672    <ul class="empty">
2673      <li>The sampler will answer by sending a comma separated list of MIDI input device ID - MIDI input port number pairs, where each pair is encapsulated into curly braces. The list is returned in one single line. The MIDI input device ID corresponds to the number returned by <a href="#LIST MIDI_INPUT_DEVICES">"LIST MIDI_INPUT_DEVICES"</a> <cite title="NONE">[LIST MIDI_INPUT_DEVICES]</cite> and the port number is the index of the respective MIDI port of that MIDI input device.</li>
2674    </ul>
2675    
2676    <p> </p>
2677    <p id="rfc.section.6.4.19.p.6">Example:</p>
2678    <p/>
2679    
2680    <ul class="empty">
2681      <li>C: "LIST CHANNEL MIDI_INPUTS 0"</li>
2682      <li>S: "{0,0},{1,3},{2,0}"</li>
2683    </ul>
2684    
2685    <p> </p>
2686    <p id="rfc.section.6.4.19.p.8">Since:</p>
2687    <p/>
2688    
2689    <ul class="empty">
2690      <li>Introduced with LSCP v1.6</li>
2691    </ul>
2692    
2693    <p> </p>
2694    <h1 id="rfc.section.6.4.20"><a href="#rfc.section.6.4.20">6.4.20.</a> <a href="#SET CHANNEL MIDI_INPUT_DEVICE" id="SET CHANNEL MIDI_INPUT_DEVICE">Setting MIDI input device</a></h1>
2695    <p id="rfc.section.6.4.20.p.1">DEPRECATED: THIS COMMAND WILL DISAPPEAR!</p>
2696    <p id="rfc.section.6.4.20.p.2">The front-end can set the MIDI input device on a specific sampler channel by sending the following command:</p>
2697    <p/>
2698    
2699    <ul class="empty">
2700      <li>SET CHANNEL MIDI_INPUT_DEVICE &lt;sampler-channel&gt; &lt;midi-device-id&gt;</li>
2701    </ul>
2702    
2703    <p> </p>
2704    <p id="rfc.section.6.4.20.p.4">Where &lt;sampler-channel&gt; is the sampler channel number as returned by the <a href="#ADD CHANNEL">"ADD CHANNEL"</a> <cite title="NONE">[ADD CHANNEL]</cite> or <a href="#LIST CHANNELS">"LIST CHANNELS"</a> <cite title="NONE">[LIST CHANNELS]</cite> command and &lt;midi-device-id&gt; is  the numerical ID of the MIDI input device as returned by the <a href="#CREATE MIDI_INPUT_DEVICE">"CREATE MIDI_INPUT_DEVICE"</a> <cite title="NONE">[CREATE MIDI_INPUT_DEVICE]</cite> or <a href="#LIST MIDI_INPUT_DEVICES">"LIST MIDI_INPUT_DEVICES"</a> <cite title="NONE">[LIST MIDI_INPUT_DEVICES]</cite> command.</p>
2705    <p id="rfc.section.6.4.20.p.5">If more than 1 MIDI inputs are currently connected to this sampler channel: Sending this command will disconnect ALL currently connected MIDI input ports connected to this sampler channel before establishing the new MIDI input connection. So this command does NOT add the connection, it replaces all existing ones instead. This behavior is due to preserving full behavior backward compatibility.  </p>
2706    <p id="rfc.section.6.4.20.p.6">Possible Answers:</p>
2707    <p/>
2708    
2709    <ul class="empty">
2710      <li>"OK" - <ul class="empty"><li>on success</li></ul><p> </p></li>
2711      <li>"WRN:&lt;warning-code&gt;:&lt;warning-message&gt;" - <ul class="empty"><li>if MIDI input device was set, but there are noteworthy issue(s) related, providing an appropriate warning code and warning message</li></ul><p> </p></li>
2712      <li>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" - <ul class="empty"><li>in case it failed, providing an appropriate error code and error message</li></ul><p> </p></li>
2713    </ul>
2714    
2715    <p> </p>
2716    <p id="rfc.section.6.4.20.p.8">Examples:</p>
2717    <p/>
2718    
2719    <ul class="empty">
2720      <li/>
2721    </ul>
2722    
2723    <p> </p>
2724    <p id="rfc.section.6.4.20.p.10">Deprecated:</p>
2725    <p/>
2726    
2727    <ul class="empty">
2728      <li>Should not be used anymore as of LSCP v1.6 and younger. This command is currently only preserved for backward compatibility.</li>
2729      <li>This command is a relict from times where only one MIDI input per sampler channel was allowed. Use <a href="#ADD CHANNEL MIDI_INPUT">"ADD CHANNEL MIDI_INPUT"</a> <cite title="NONE">[ADD CHANNEL MIDI_INPUT]</cite> and <a href="#REMOVE CHANNEL MIDI_INPUT">"REMOVE CHANNEL MIDI_INPUT"</a> <cite title="NONE">[REMOVE CHANNEL MIDI_INPUT]</cite> instead.</li>
2730    </ul>
2731    
2732    <p> </p>
2733    <h1 id="rfc.section.6.4.21"><a href="#rfc.section.6.4.21">6.4.21.</a> <a href="#SET CHANNEL MIDI_INPUT_TYPE" id="SET CHANNEL MIDI_INPUT_TYPE">Setting MIDI input type</a></h1>
2734    <p id="rfc.section.6.4.21.p.1">DEPRECATED: THIS COMMAND WILL DISAPPEAR!</p>
2735    <p id="rfc.section.6.4.21.p.2">The front-end can alter the MIDI input type on a specific sampler channel by sending the following command:</p>
2736    <p/>
2737    
2738    <ul class="empty">
2739      <li>SET CHANNEL MIDI_INPUT_TYPE &lt;sampler-channel&gt; &lt;midi-input-type&gt;</li>
2740    </ul>
2741    
2742    <p> </p>
2743    <p id="rfc.section.6.4.21.p.4">Where &lt;midi-input-type&gt; is currently only "ALSA" and &lt;sampler-channel&gt; is the respective sampler channel number.</p>
2744    <p id="rfc.section.6.4.21.p.5">If more than 1 MIDI inputs are currently connected to this sampler channel: Sending this command will disconnect ALL currently connected MIDI input ports connected to this sampler channel before establishing the new MIDI input connection. So this command does NOT add the connection, it replaces all existing ones instead. This behavior is due to preserving full behavior backward compatibility.  </p>
2745    <p id="rfc.section.6.4.21.p.6">Possible Answers:</p>
2746    <p/>
2747    
2748    <ul class="empty">
2749      <li>"OK" - <ul class="empty"><li>on success</li></ul><p> </p></li>
2750      <li>"WRN:&lt;warning-code&gt;:&lt;warning-message&gt;" - <ul class="empty"><li>if MIDI input type was set, but there are noteworthy issue(s) related, providing an appropriate warning code and warning message</li></ul><p> </p></li>
2751      <li>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" - <ul class="empty"><li>in case it failed, providing an appropriate error code and error message</li></ul><p> </p></li>
2752    </ul>
2753    
2754    <p> </p>
2755    <p id="rfc.section.6.4.21.p.8">Examples:</p>
2756    <p/>
2757    
2758    <ul class="empty">
2759      <li/>
2760    </ul>
2761    
2762    <p> </p>
2763    <p id="rfc.section.6.4.21.p.10">Deprecated:</p>
2764    <p/>
2765    
2766    <ul class="empty">
2767      <li>Should not be used anymore. This command is currently only preserved for backward compatibility.</li>
2768      <li>This command is a relict from times where only 1 MIDI input per sampler channels was allowed and where no sophisticated driver management existed yet. Use <a href="#ADD CHANNEL MIDI_INPUT">"ADD CHANNEL MIDI_INPUT"</a> <cite title="NONE">[ADD CHANNEL MIDI_INPUT]</cite> and <a href="#REMOVE CHANNEL MIDI_INPUT">"REMOVE CHANNEL MIDI_INPUT"</a> <cite title="NONE">[REMOVE CHANNEL MIDI_INPUT]</cite> instead.</li>
2769    </ul>
2770    
2771    <p> </p>
2772    <h1 id="rfc.section.6.4.22"><a href="#rfc.section.6.4.22">6.4.22.</a> <a href="#SET CHANNEL MIDI_INPUT_PORT" id="SET CHANNEL MIDI_INPUT_PORT">Setting MIDI input port</a></h1>
2773    <p id="rfc.section.6.4.22.p.1">DEPRECATED: THIS COMMAND WILL DISAPPEAR!</p>
2774    <p id="rfc.section.6.4.22.p.2">The front-end can alter the MIDI input port on a specific sampler channel by sending the following command:</p>
2775    <p/>
2776    
2777    <ul class="empty">
2778      <li>SET CHANNEL MIDI_INPUT_PORT &lt;sampler-channel&gt; &lt;midi-input-port&gt;</li>
2779    </ul>
2780    
2781    <p> </p>
2782    <p id="rfc.section.6.4.22.p.4">Where &lt;midi-input-port&gt; is a MIDI input port number of the MIDI input device connected to the sampler channel given by &lt;sampler-channel&gt;.</p>
2783    <p id="rfc.section.6.4.22.p.5">If more than 1 MIDI inputs are currently connected to this sampler channel: Sending this command will switch the connection of the first (and only the first) MIDI input port currently being connected to this sampler channel, to another port of the same MIDI input device. Or in other words: the first MIDI input port currently connected to this sampler channel will be disconnected, and the requested other port of its MIDI input device will be connected to this sampler channel instead. This behavior is due to preserving full behavior backward compatibility.  </p>
2784    <p id="rfc.section.6.4.22.p.6">Possible Answers:</p>
2785    <p/>
2786    
2787    <ul class="empty">
2788      <li>"OK" - <ul class="empty"><li>on success</li></ul><p> </p></li>
2789      <li>"WRN:&lt;warning-code&gt;:&lt;warning-message&gt;" - <ul class="empty"><li>if MIDI input port was set, but there are noteworthy issue(s) related, providing an appropriate warning code and warning message</li></ul><p> </p></li>
2790      <li>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" - <ul class="empty"><li>in case it failed, providing an appropriate error code and error message</li></ul><p> </p></li>
2791    </ul>
2792    
2793    <p> </p>
2794    <p id="rfc.section.6.4.22.p.8">Examples:</p>
2795    <p/>
2796    
2797    <ul class="empty">
2798      <li/>
2799    </ul>
2800    
2801    <p> </p>
2802    <p id="rfc.section.6.4.22.p.10">Deprecated:</p>
2803    <p/>
2804    
2805    <ul class="empty">
2806      <li>Should not be used anymore. This command is currently only preserved for backward compatibility.</li>
2807      <li>This command is a relict from times where only one MIDI input per sampler channel was allowed. Use <a href="#ADD CHANNEL MIDI_INPUT">"ADD CHANNEL MIDI_INPUT"</a> <cite title="NONE">[ADD CHANNEL MIDI_INPUT]</cite> and <a href="#REMOVE CHANNEL MIDI_INPUT">"REMOVE CHANNEL MIDI_INPUT"</a> <cite title="NONE">[REMOVE CHANNEL MIDI_INPUT]</cite> instead.</li>
2808    </ul>
2809    
2810    <p> </p>
2811    <h1 id="rfc.section.6.4.23"><a href="#rfc.section.6.4.23">6.4.23.</a> <a href="#SET CHANNEL MIDI_INPUT_CHANNEL" id="SET CHANNEL MIDI_INPUT_CHANNEL">Setting MIDI input channel</a></h1>
2812    <p id="rfc.section.6.4.23.p.1">The front-end can alter the MIDI channel a sampler channel should listen to by sending the following command:</p>
2813    <p/>
2814    
2815    <ul class="empty">
2816      <li>SET CHANNEL MIDI_INPUT_CHANNEL &lt;sampler-channel&gt; &lt;midi-input-chan&gt;</li>
2817    </ul>
2818    
2819    <p> </p>
2820    <p id="rfc.section.6.4.23.p.3">Where &lt;midi-input-chan&gt; is the number of the new MIDI input channel (zero indexed!) where &lt;sampler-channel&gt; should listen to, or "ALL" to listen on all 16 MIDI channels.</p>
2821    <p id="rfc.section.6.4.23.p.4">Possible Answers:</p>
2822    <p/>
2823    
2824    <ul class="empty">
2825      <li>"OK" - <ul class="empty"><li>on success</li></ul><p> </p></li>
2826      <li>"WRN:&lt;warning-code&gt;:&lt;warning-message&gt;" - <ul class="empty"><li>if MIDI input channel was set, but there are noteworthy issue(s) related, providing an appropriate warning code and warning message</li></ul><p> </p></li>
2827      <li>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" - <ul class="empty"><li>in case it failed, providing an appropriate error code and error message</li></ul><p> </p></li>
2828    </ul>
2829    
2830    <p> </p>
2831    <p id="rfc.section.6.4.23.p.6">Examples:</p>
2832    <p/>
2833    
2834    <ul class="empty">
2835      <li>C: "SET CHANNEL MIDI_INPUT_CHANNEL 0 0"</li>
2836      <li>S: "OK"</li>
2837      <li>C: "SET CHANNEL MIDI_INPUT_CHANNEL 1 ALL"</li>
2838      <li>S: "OK"</li>
2839    </ul>
2840    
2841    <p> </p>
2842    <h1 id="rfc.section.6.4.24"><a href="#rfc.section.6.4.24">6.4.24.</a> <a href="#SET CHANNEL VOLUME" id="SET CHANNEL VOLUME">Setting channel volume</a></h1>
2843    <p id="rfc.section.6.4.24.p.1">The front-end can alter the volume of a sampler channel by sending the following command:</p>
2844    <p/>
2845    
2846    <ul class="empty">
2847      <li>SET CHANNEL VOLUME &lt;sampler-channel&gt; &lt;volume&gt;</li>
2848    </ul>
2849    
2850    <p> </p>
2851    <p id="rfc.section.6.4.24.p.3">Where &lt;volume&gt; is an optionally dotted positive number (a value smaller than 1.0 means attenuation, whereas a value greater than 1.0 means amplification) and &lt;sampler-channel&gt; defines the sampler channel where this volume factor should be set.</p>
2852    <p id="rfc.section.6.4.24.p.4">Possible Answers:</p>
2853    <p/>
2854    
2855    <ul class="empty">
2856      <li>"OK" - <ul class="empty"><li>on success</li></ul><p> </p></li>
2857      <li>"WRN:&lt;warning-code&gt;:&lt;warning-message&gt;" - <ul class="empty"><li>if channel volume was set, but there are noteworthy issue(s) related, providing an appropriate warning code and warning message</li></ul><p> </p></li>
2858      <li>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" - <ul class="empty"><li>in case it failed, providing an appropriate error code and error message</li></ul><p> </p></li>
2859    </ul>
2860    
2861    <p> </p>
2862    <p id="rfc.section.6.4.24.p.6">Examples:</p>
2863    <p/>
2864    
2865    <ul class="empty">
2866      <li/>
2867    </ul>
2868    
2869    <p> </p>
2870    <h1 id="rfc.section.6.4.25"><a href="#rfc.section.6.4.25">6.4.25.</a> <a href="#SET CHANNEL MUTE" id="SET CHANNEL MUTE">Muting a sampler channel</a></h1>
2871    <p id="rfc.section.6.4.25.p.1">The front-end can mute/unmute a specific sampler channel by sending the following command:</p>
2872    <p/>
2873    
2874    <ul class="empty">
2875      <li>SET CHANNEL MUTE &lt;sampler-channel&gt; &lt;mute&gt;</li>
2876    </ul>
2877    
2878    <p> </p>
2879    <p id="rfc.section.6.4.25.p.3">Where &lt;sampler-channel&gt; is the respective sampler channel number as returned by the <a href="#ADD CHANNEL">"ADD CHANNEL"</a> <cite title="NONE">[ADD CHANNEL]</cite> or <a href="#LIST CHANNELS">"LIST CHANNELS"</a> <cite title="NONE">[LIST CHANNELS]</cite> command and &lt;mute&gt; should be replaced either by "1" to mute the channel or "0" to unmute the channel.</p>
2880    <p id="rfc.section.6.4.25.p.4">Possible Answers:</p>
2881    <p/>
2882    
2883    <ul class="empty">
2884      <li>"OK" - <ul class="empty"><li>on success</li></ul><p> </p></li>
2885      <li>"WRN:&lt;warning-code&gt;:&lt;warning-message&gt;" - <ul class="empty"><li>if the channel was muted/unmuted, but there are noteworthy issue(s) related, providing an appropriate warning code and warning message</li></ul><p> </p></li>
2886      <li>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" - <ul class="empty"><li>in case it failed, providing an appropriate error code and error message</li></ul><p> </p></li>
2887    </ul>
2888    
2889    <p> </p>
2890    <p id="rfc.section.6.4.25.p.6">Examples:</p>
2891    <p/>
2892    
2893    <ul class="empty">
2894      <li/>
2895    </ul>
2896    
2897    <p> </p>
2898    <h1 id="rfc.section.6.4.26"><a href="#rfc.section.6.4.26">6.4.26.</a> <a href="#SET CHANNEL SOLO" id="SET CHANNEL SOLO">Soloing a sampler channel</a></h1>
2899    <p id="rfc.section.6.4.26.p.1">The front-end can solo/unsolo a specific sampler channel by sending the following command:</p>
2900    <p/>
2901    
2902    <ul class="empty">
2903      <li>SET CHANNEL SOLO &lt;sampler-channel&gt; &lt;solo&gt;</li>
2904    </ul>
2905    
2906    <p> </p>
2907    <p id="rfc.section.6.4.26.p.3">Where &lt;sampler-channel&gt; is the respective sampler channel number as returned by the <a href="#ADD CHANNEL">"ADD CHANNEL"</a> <cite title="NONE">[ADD CHANNEL]</cite> or <a href="#LIST CHANNELS">"LIST CHANNELS"</a> <cite title="NONE">[LIST CHANNELS]</cite> command and &lt;solo&gt; should be replaced either by "1" to solo the channel or "0" to unsolo the channel.</p>
2908    <p id="rfc.section.6.4.26.p.4">Possible Answers:</p>
2909    <p/>
2910    
2911    <ul class="empty">
2912      <li>"OK" - <ul class="empty"><li>on success</li></ul><p> </p></li>
2913      <li>"WRN:&lt;warning-code&gt;:&lt;warning-message&gt;" - <ul class="empty"><li>if the channel was soloed/unsoloed, but there are noteworthy issue(s) related, providing an appropriate warning code and warning message</li></ul><p> </p></li>
2914      <li>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" - <ul class="empty"><li>in case it failed, providing an appropriate error code and error message</li></ul><p> </p></li>
2915    </ul>
2916    
2917    <p> </p>
2918    <p id="rfc.section.6.4.26.p.6">Examples:</p>
2919    <p/>
2920    
2921    <ul class="empty">
2922      <li/>
2923    </ul>
2924    
2925    <p> </p>
2926    <h1 id="rfc.section.6.4.27"><a href="#rfc.section.6.4.27">6.4.27.</a> <a href="#SET CHANNEL MIDI_INSTRUMENT_MAP" id="SET CHANNEL MIDI_INSTRUMENT_MAP">Assigning a MIDI instrument map to a sampler channel</a></h1>
2927    <p id="rfc.section.6.4.27.p.1">The front-end can assign a MIDI instrument map to a specific sampler channel by sending the following command:</p>
2928    <p/>
2929    
2930    <ul class="empty">
2931      <li>SET CHANNEL MIDI_INSTRUMENT_MAP &lt;sampler-channel&gt; &lt;map&gt;</li>
2932    </ul>
2933    
2934    <p> </p>
2935    <p id="rfc.section.6.4.27.p.3">Where &lt;sampler-channel&gt; is the respective sampler channel number as returned by the <a href="#ADD CHANNEL">"ADD CHANNEL"</a> <cite title="NONE">[ADD CHANNEL]</cite> or <a href="#LIST CHANNELS">"LIST CHANNELS"</a> <cite title="NONE">[LIST CHANNELS]</cite> command and &lt;map&gt; can have the following possibilites:</p>
2936    <p/>
2937    
2938    <ul class="empty">
2939      <li>"NONE" - <ul class="empty"><li>This is the default setting. In this case the sampler channel is not assigned any MIDI instrument map and thus will ignore all MIDI program change messages.</li></ul><p> </p></li>
2940      <li>"DEFAULT" - <ul class="empty"><li>The sampler channel will always use the default MIDI instrument map to handle MIDI program change messages.</li></ul><p> </p></li>
2941      <li>numeric ID - <ul class="empty"><li>You can assign a specific MIDI instrument map by replacing &lt;map&gt; with the respective numeric ID of the MIDI instrument map as returned by the <a href="#LIST MIDI_INSTRUMENT_MAPS">"LIST MIDI_INSTRUMENT_MAPS"</a> <cite title="NONE">[LIST MIDI_INSTRUMENT_MAPS]</cite> command. Once that map will be deleted, the sampler channel would fall back to "NONE".</li></ul><p> </p></li>
2942    </ul>
2943    
2944    <p> </p>
2945    <p id="rfc.section.6.4.27.p.5">Read chapter <a href="#MIDI Instrument Mapping">"MIDI Instrument Mapping"</a> <cite title="NONE">[MIDI Instrument Mapping]</cite> for details regarding MIDI instrument mapping.</p>
2946    <p id="rfc.section.6.4.27.p.6">Possible Answers:</p>
2947    <p/>
2948    
2949    <ul class="empty">
2950      <li>"OK" - <ul class="empty"><li>on success</li></ul><p> </p></li>
2951      <li>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" - <ul class="empty"><li>in case it failed, providing an appropriate error code and error message</li></ul><p> </p></li>
2952    </ul>
2953    
2954    <p> </p>
2955    <p id="rfc.section.6.4.27.p.8">Examples:</p>
2956    <p/>
2957    
2958    <ul class="empty">
2959      <li/>
2960    </ul>
2961    
2962    <p> </p>
2963    <h1 id="rfc.section.6.4.28"><a href="#rfc.section.6.4.28">6.4.28.</a> <a href="#CREATE FX_SEND" id="CREATE FX_SEND">Adding an effect send to a sampler channel</a></h1>
2964    <p id="rfc.section.6.4.28.p.1">The front-end can create an additional effect send on a specific sampler channel by sending the following command:</p>
2965    <p/>
2966    
2967    <ul class="empty">
2968      <li>CREATE FX_SEND &lt;sampler-channel&gt; &lt;midi-ctrl&gt; [&lt;name&gt;]</li>
2969    </ul>
2970    
2971    <p> </p>
2972    <p id="rfc.section.6.4.28.p.3">Where &lt;sampler-channel&gt; is the respective sampler channel number as returned by the <a href="#ADD CHANNEL">"ADD CHANNEL"</a> <cite title="NONE">[ADD CHANNEL]</cite> or <a href="#LIST CHANNELS">"LIST CHANNELS"</a> <cite title="NONE">[LIST CHANNELS]</cite> command, that is the sampler channel on which the effect send should be created on, &lt;midi-ctrl&gt; is a number between 0..127 defining the MIDI controller which can alter the effect send level and &lt;name&gt; is an optional argument defining a name for the effect send entity. The name does not have to be unique, but MUST be encapsulated into apostrophes and supports escape sequences as described in chapter "<a href="#character_set">Character Set and Escape Sequences</a> <cite title="NONE">[character_set]</cite>".</p>
2973    <p id="rfc.section.6.4.28.p.4">Note: there are two possible approaches to apply audio effects with FX sends: you can either use a) internal effects or b) external effects.  By default, that is as initial routing, effect sends are automatically routed directly to the sampler channel's audio output device and the effect send's audio channels are by default automatically routed to the last audio channels of that audio output device (for the purpose of applying effects externally that is, e.g. by using another application), that way you can i.e. first increase the amount of audio channels on the audio output device for having dedicated effect send output channels and when "CREATE FX_SEND" is called, those channels will automatically be picked. You can alter the destination channels however with <a href="#SET FX_SEND AUDIO_OUTPUT_CHANNEL">"SET FX_SEND AUDIO_OUTPUT_CHANNEL"</a> <cite title="NONE">[SET FX_SEND AUDIO_OUTPUT_CHANNEL]</cite>.  If your intention is rather to use internal effects instead of external effects, then you first need to <a href="#effects">load those internal effects</a> <cite title="NONE">[effects]</cite> and then assign the FX sends to the desired internal effect by sending <a href="#SET FX_SEND EFFECT">"SET FX_SEND EFFECT"</a> <cite title="NONE">[SET FX_SEND EFFECT]</cite>.  </p>
2974    <p id="rfc.section.6.4.28.p.5">Note: Create effect sends on a sampler channel only when needed, because having effect sends on a sampler channel will decrease runtime performance, because for implementing channel effect sends, separate (sampler channel local) audio buffers are needed to render and mix the voices and route the audio signal afterwards to the master outputs and effect send outputs (along with their respective effect send levels). A sampler channel without effect sends however can mix its voices directly into the audio output devices's audio buffers and is thus faster.  </p>
2975    <p id="rfc.section.6.4.28.p.6">Possible Answers:</p>
2976    <p/>
2977    
2978    <ul class="empty">
2979      <li>"OK[&lt;fx-send-id&gt;]" - <ul class="empty"><li>in case a new effect send could be added to the sampler channel, where &lt;fx-send-id&gt; reflects the unique ID of the newly created effect send entity</li></ul><p> </p></li>
2980      <li>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" - <ul class="empty"><li>when a new effect send could not be added, i.e.  due to invalid parameters</li></ul><p> </p></li>
2981    </ul>
2982    
2983    <p> </p>
2984    <p id="rfc.section.6.4.28.p.8">Examples:</p>
2985    <p/>
2986    
2987    <ul class="empty">
2988      <li>C: "CREATE FX_SEND 0 91 'Reverb Send'"</li>
2989      <li>S: "OK[0]"</li>
2990    </ul>
2991    
2992    <p> </p>
2993    <p/>
2994    
2995    <ul class="empty">
2996      <li>C: "CREATE FX_SEND 0 93"</li>
2997      <li>S: "OK[1]"</li>
2998    </ul>
2999    
3000    <p> </p>
3001    <h1 id="rfc.section.6.4.29"><a href="#rfc.section.6.4.29">6.4.29.</a> <a href="#DESTROY FX_SEND" id="DESTROY FX_SEND">Removing an effect send from a sampler channel</a></h1>
3002    <p id="rfc.section.6.4.29.p.1">The front-end can remove an existing effect send on a specific sampler channel by sending the following command:</p>
3003    <p/>
3004    
3005    <ul class="empty">
3006      <li>DESTROY FX_SEND &lt;sampler-channel&gt; &lt;fx-send-id&gt;</li>
3007    </ul>
3008    
3009    <p> </p>
3010    <p id="rfc.section.6.4.29.p.3">Where &lt;sampler-channel&gt; is the respective sampler channel number as returned by the <a href="#ADD CHANNEL">"ADD CHANNEL"</a> <cite title="NONE">[ADD CHANNEL]</cite> or <a href="#LIST CHANNELS">"LIST CHANNELS"</a> <cite title="NONE">[LIST CHANNELS]</cite> command, that is the sampler channel from which the effect send should be removed from and &lt;fx-send-id&gt; is the respective effect send number as returned by the <a href="#CREATE FX_SEND">"CREATE FX_SEND"</a> <cite title="NONE">[CREATE FX_SEND]</cite> or <a href="#LIST FX_SENDS">"LIST FX_SENDS"</a> <cite title="NONE">[LIST FX_SENDS]</cite> command.</p>
3011    <p id="rfc.section.6.4.29.p.4">Possible Answers:</p>
3012    <p/>
3013    
3014    <ul class="empty">
3015      <li>"OK" - <ul class="empty"><li>on success</li></ul><p> </p></li>
3016      <li>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" - <ul class="empty"><li>in case it failed, providing an appropriate error code and error message</li></ul><p> </p></li>
3017    </ul>
3018    
3019    <p> </p>
3020    <p id="rfc.section.6.4.29.p.6">Example:</p>
3021    <p/>
3022    
3023    <ul class="empty">
3024      <li>C: "DESTROY FX_SEND 0 0"</li>
3025      <li>S: "OK"</li>
3026    </ul>
3027    
3028    <p> </p>
3029    <h1 id="rfc.section.6.4.30"><a href="#rfc.section.6.4.30">6.4.30.</a> <a href="#GET FX_SENDS" id="GET FX_SENDS">Getting amount of effect sends on a sampler channel</a></h1>
3030    <p id="rfc.section.6.4.30.p.1">The front-end can ask for the amount of effect sends on a specific sampler channel by sending the following command:</p>
3031    <p/>
3032    
3033    <ul class="empty">
3034      <li>GET FX_SENDS &lt;sampler-channel&gt;</li>
3035    </ul>
3036    
3037    <p> </p>
3038    <p id="rfc.section.6.4.30.p.3">Where &lt;sampler-channel&gt; is the respective sampler channel number as returned by the <a href="#ADD CHANNEL">"ADD CHANNEL"</a> <cite title="NONE">[ADD CHANNEL]</cite> or <a href="#LIST CHANNELS">"LIST CHANNELS"</a> <cite title="NONE">[LIST CHANNELS]</cite> command.</p>
3039    <p id="rfc.section.6.4.30.p.4">Possible Answers:</p>
3040    <p/>
3041    
3042    <ul class="empty">
3043      <li>The sampler will answer by returning the number of effect sends on the given sampler channel.</li>
3044    </ul>
3045    
3046    <p> </p>
3047    <p id="rfc.section.6.4.30.p.6">Example:</p>
3048    <p/>
3049    
3050    <ul class="empty">
3051      <li>C: "GET FX_SENDS 0"</li>
3052      <li>S: "2"</li>
3053    </ul>
3054    
3055    <p> </p>
3056    <h1 id="rfc.section.6.4.31"><a href="#rfc.section.6.4.31">6.4.31.</a> <a href="#LIST FX_SENDS" id="LIST FX_SENDS">Listing all effect sends on a sampler channel</a></h1>
3057    <p id="rfc.section.6.4.31.p.1">The front-end can ask for a list of effect sends on a specific sampler channel by sending the following command:</p>
3058    <p/>
3059    
3060    <ul class="empty">
3061      <li>LIST FX_SENDS &lt;sampler-channel&gt;</li>
3062    </ul>
3063    
3064    <p> </p>
3065    <p id="rfc.section.6.4.31.p.3">Where &lt;sampler-channel&gt; is the respective sampler channel number as returned by the <a href="#ADD CHANNEL">"ADD CHANNEL"</a> <cite title="NONE">[ADD CHANNEL]</cite> or <a href="#LIST CHANNELS">"LIST CHANNELS"</a> <cite title="NONE">[LIST CHANNELS]</cite> command.</p>
3066    <p id="rfc.section.6.4.31.p.4">Possible Answers:</p>
3067    <p/>
3068    
3069    <ul class="empty">
3070      <li>The sampler will answer by returning a comma separated list with all effect sends' numerical IDs on the given sampler channel.</li>
3071    </ul>
3072    
3073    <p> </p>
3074    <p id="rfc.section.6.4.31.p.6">Examples:</p>
3075    <p/>
3076    
3077    <ul class="empty">
3078      <li>C: "LIST FX_SENDS 0"</li>
3079      <li>S: "0,1"</li>
3080    </ul>
3081    
3082    <p> </p>
3083    <p/>
3084    
3085    <ul class="empty">
3086      <li>C: "LIST FX_SENDS 1"</li>
3087      <li>S: ""</li>
3088    </ul>
3089    
3090    <p> </p>
3091    <h1 id="rfc.section.6.4.32"><a href="#rfc.section.6.4.32">6.4.32.</a> <a href="#GET FX_SEND INFO" id="GET FX_SEND INFO">Getting effect send information</a></h1>
3092    <p id="rfc.section.6.4.32.p.1">The front-end can ask for the current settings of an effect send entity by sending the following command:</p>
3093    <p/>
3094    
3095    <ul class="empty">
3096      <li>GET FX_SEND INFO &lt;sampler-channel&gt; &lt;fx-send-id&gt;</li>
3097    </ul>
3098    
3099    <p> </p>
3100    <p id="rfc.section.6.4.32.p.3">Where &lt;sampler-channel&gt; is the sampler channel number as returned by the <a href="#ADD CHANNEL">"ADD CHANNEL"</a> <cite title="NONE">[ADD CHANNEL]</cite> or <a href="#LIST CHANNELS">"LIST CHANNELS"</a> <cite title="NONE">[LIST CHANNELS]</cite> command and &lt;fx-send-id&gt; reflects the numerical ID of the effect send entity as returned by the <a href="#CREATE FX_SEND">"CREATE FX_SEND"</a> <cite title="NONE">[CREATE FX_SEND]</cite> or <a href="#LIST FX_SENDS">"LIST FX_SENDS"</a> <cite title="NONE">[LIST FX_SENDS]</cite> command.  </p>
3101    <p id="rfc.section.6.4.32.p.4">Possible Answers:</p>
3102    <p/>
3103    
3104    <ul class="empty">
3105      <li>The sampler will answer by sending a &lt;CRLF&gt; separated list.  Each answer line begins with the settings category name followed by a colon and then a space character &lt;SP&gt; and finally the info character string to that setting category. At the moment the following categories are defined:</li>
3106      <li>
3107        <ul class="empty">
3108          <li>NAME - <ul class="empty"><li>name of the effect send entity (note that this character string may contain <a href="#character_set">escape sequences</a> <cite title="NONE">[character_set]</cite>)</li></ul><p> </p></li>
3109          <li>MIDI_CONTROLLER - <ul class="empty"><li>a value between 0 and 127 reflecting the MIDI controller which is able to modify the effect send's send level</li></ul><p> </p></li>
3110          <li>LEVEL - <ul class="empty"><li>optionally dotted number reflecting the effect send's current send level (where a value &lt; 1.0 means attenuation and a value &gt; 1.0 means amplification)</li></ul><p> </p></li>
3111          <li>AUDIO_OUTPUT_ROUTING - <ul class="empty"><li>comma separated list which reflects to which audio channel of the selected audio output device each effect send output channel is routed to, e.g. "0,3" would mean the effect send's output channel 0 is routed to channel 0 of the audio output device and the effect send's output channel 1 is routed to the channel 3 of the audio output device (see <a href="#SET FX_SEND AUDIO_OUTPUT_CHANNEL">"SET FX_SEND AUDIO_OUTPUT_CHANNEL"</a> <cite title="NONE">[SET FX_SEND AUDIO_OUTPUT_CHANNEL]</cite> for details), if an internal send effect is assigned to the effect send, then this setting defines the audio channel routing to that effect instance respectively</li></ul><p> </p></li>
3112          <li>EFFECT - <ul class="empty"><li>destination send effect chain ID and destination effect chain position, separated by comma in the form "&lt;effect-chain&gt;,&lt;chain-pos&gt;" or "NONE" if there is no send effect assigned to the effect send</li></ul><p> </p></li>
3113        </ul>
3114        <p> </p>
3115      </li>
3116    </ul>
3117    
3118    <p> </p>
3119    <p id="rfc.section.6.4.32.p.6">The mentioned fields above don't have to be in particular order.</p>
3120    <p id="rfc.section.6.4.32.p.7">Example:</p>
3121    <p/>
3122    
3123    <ul class="empty">
3124      <li>C: "GET FX_SEND INFO 0 0"</li>
3125      <li>S: "NAME: Reverb Send"</li>
3126      <li>"MIDI_CONTROLLER: 91"</li>
3127      <li>"LEVEL: 0.3"</li>
3128      <li>"AUDIO_OUTPUT_ROUTING: 2,3"</li>
3129      <li>"EFFECT: NONE"</li>
3130      <li>"."</li>
3131    </ul>
3132    
3133    <p> </p>
3134    <p/>
3135    
3136    <ul class="empty">
3137      <li>C: "GET FX_SEND INFO 0 1"</li>
3138      <li>S: "NAME: Delay Send (Internal)"</li>
3139      <li>"MIDI_CONTROLLER: 93"</li>
3140      <li>"LEVEL: 0.51"</li>
3141      <li>"AUDIO_OUTPUT_ROUTING: 1,2"</li>
3142      <li>"EFFECT: 2,0"</li>
3143      <li>"."</li>
3144    </ul>
3145    
3146    <p> </p>
3147    <h1 id="rfc.section.6.4.33"><a href="#rfc.section.6.4.33">6.4.33.</a> <a href="#SET FX_SEND NAME" id="SET FX_SEND NAME">Changing effect send's name</a></h1>
3148    <p id="rfc.section.6.4.33.p.1">The front-end can alter the current name of an effect send entity by sending the following command:</p>
3149    <p/>
3150    
3151    <ul class="empty">
3152      <li>SET FX_SEND NAME &lt;sampler-chan&gt; &lt;fx-send-id&gt; &lt;name&gt;</li>
3153    </ul>
3154    
3155    <p> </p>
3156    <p id="rfc.section.6.4.33.p.3">Where &lt;sampler-chan&gt; is the sampler channel number as returned by the <a href="#ADD CHANNEL">"ADD CHANNEL"</a> <cite title="NONE">[ADD CHANNEL]</cite> or <a href="#LIST CHANNELS">"LIST CHANNELS"</a> <cite title="NONE">[LIST CHANNELS]</cite> command, &lt;fx-send-id&gt; reflects the numerical ID of the effect send entity as returned by the <a href="#CREATE FX_SEND">"CREATE FX_SEND"</a> <cite title="NONE">[CREATE FX_SEND]</cite> or <a href="#LIST FX_SENDS">"LIST FX_SENDS"</a> <cite title="NONE">[LIST FX_SENDS]</cite> command and &lt;name&gt; is the new name of the effect send entity, which does not have to be unique (name MUST be encapsulated into apostrophes and supports escape sequences as described in chapter "<a href="#character_set">Character Set and Escape Sequences</a> <cite title="NONE">[character_set]</cite>").  </p>
3157    <p id="rfc.section.6.4.33.p.4">Possible Answers:</p>
3158    <p/>
3159    
3160    <ul class="empty">
3161      <li>"OK" - <ul class="empty"><li>on success</li></ul><p> </p></li>
3162      <li>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" - <ul class="empty"><li>in case it failed, providing an appropriate error code and error message</li></ul><p> </p></li>
3163    </ul>
3164    
3165    <p> </p>
3166    <p id="rfc.section.6.4.33.p.6">Example:</p>
3167    <p/>
3168    
3169    <ul class="empty">
3170      <li>C: "SET FX_SEND NAME 0 0 'Fx Send 1'"</li>
3171      <li>S: "OK"</li>
3172    </ul>
3173    
3174    <p> </p>
3175    <h1 id="rfc.section.6.4.34"><a href="#rfc.section.6.4.34">6.4.34.</a> <a href="#SET FX_SEND AUDIO_OUTPUT_CHANNEL" id="SET FX_SEND AUDIO_OUTPUT_CHANNEL">Altering effect send's audio routing</a></h1>
3176    <p id="rfc.section.6.4.34.p.1">The front-end can alter the destination of an effect send's audio channel on a specific sampler channel by sending the following command:</p>
3177    <p/>
3178    
3179    <ul class="empty">
3180      <li>SET FX_SEND AUDIO_OUTPUT_CHANNEL &lt;sampler-chan&gt; &lt;fx-send-id&gt; &lt;audio-src&gt; &lt;audio-dst&gt;</li>
3181    </ul>
3182    
3183    <p> </p>
3184    <p id="rfc.section.6.4.34.p.3">Where &lt;sampler-chan&gt; is the sampler channel number as returned by the <a href="#ADD CHANNEL">"ADD CHANNEL"</a> <cite title="NONE">[ADD CHANNEL]</cite> or <a href="#LIST CHANNELS">"LIST CHANNELS"</a> <cite title="NONE">[LIST CHANNELS]</cite> command, &lt;fx-send-id&gt; reflects the numerical ID of the effect send entity as returned by the <a href="#CREATE FX_SEND">"CREATE FX_SEND"</a> <cite title="NONE">[CREATE FX_SEND]</cite> or <a href="#LIST FX_SENDS">"LIST FX_SENDS"</a> <cite title="NONE">[LIST FX_SENDS]</cite> command, &lt;audio-src&gt; is the numerical ID of the effect send's audio channel which should be rerouted and &lt;audio-dst&gt; is the numerical ID of either a) the audio output channel of the sampler channel's audio output device (i.e. if external effect shall be applied) or b) of the audio input channel of an internal effect assigned to the FX send where &lt;audio-src&gt; should be routed to.</p>
3185    <p id="rfc.section.6.4.34.p.4">Note that effect sends can only route audio to the same audio output device as assigned to the effect send's sampler channel. Also note that an effect send entity does always have exactly as much audio channels as its sampler channel. So if the sampler channel is stereo, the effect send does have two audio channels as well. Also keep in mind that the amount of audio channels on a sampler channel might be dependant not only to the deployed sampler engine on the sampler channel, but also dependant to the instrument currently loaded. However you can (effectively) turn an i.e. stereo effect send into a mono one by simply altering its audio routing appropriately.</p>
3186    <p id="rfc.section.6.4.34.p.5">Possible Answers:</p>
3187    <p/>
3188    
3189    <ul class="empty">
3190      <li>"OK" - <ul class="empty"><li>on success</li></ul><p> </p></li>
3191      <li>"WRN:&lt;warning-code&gt;:&lt;warning-message&gt;" - <ul class="empty"><li>if audio output channel was set, but there are noteworthy issue(s) related, providing an appropriate warning code and warning message</li></ul><p> </p></li>
3192      <li>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" - <ul class="empty"><li>in case it failed, providing an appropriate error code and error message</li></ul><p> </p></li>
3193    </ul>
3194    
3195    <p> </p>
3196    <p id="rfc.section.6.4.34.p.7">Example:</p>
3197    <p/>
3198    
3199    <ul class="empty">
3200      <li>C: "SET FX_SEND AUDIO_OUTPUT_CHANNEL 0 0 0 2"</li>
3201      <li>S: "OK"</li>
3202    </ul>
3203    
3204    <p> </p>
3205    <h1 id="rfc.section.6.4.35"><a href="#rfc.section.6.4.35">6.4.35.</a> <a href="#SET FX_SEND EFFECT" id="SET FX_SEND EFFECT">Assigning destination effect to an effect send</a></h1>
3206    <p id="rfc.section.6.4.35.p.1">The front-end can (re-)assign an internal destination effect to an effect send by sending the following command:</p>
3207    <p/>
3208    
3209    <ul class="empty">
3210      <li>SET FX_SEND EFFECT &lt;sampler-chan&gt; &lt;fx-send-id&gt; &lt;effect-chain&gt; &lt;chain-pos&gt;</li>
3211    </ul>
3212    
3213    <p> </p>
3214    <p id="rfc.section.6.4.35.p.3">Where &lt;sampler-chan&gt; is the sampler channel number as returned by the <a href="#ADD CHANNEL">"ADD CHANNEL"</a> <cite title="NONE">[ADD CHANNEL]</cite> or <a href="#LIST CHANNELS">"LIST CHANNELS"</a> <cite title="NONE">[LIST CHANNELS]</cite> command, &lt;fx-send-id&gt; reflects the numerical ID of the effect send entity as returned by the <a href="#CREATE FX_SEND">"CREATE FX_SEND"</a> <cite title="NONE">[CREATE FX_SEND]</cite> or <a href="#LIST FX_SENDS">"LIST FX_SENDS"</a> <cite title="NONE">[LIST FX_SENDS]</cite> command, &lt;effect-chain&gt; by the numerical ID of the destination effect chain as returned by the <a href="#ADD SEND_EFFECT_CHAIN">"ADD SEND_EFFECT_CHAIN"</a> <cite title="NONE">[ADD SEND_EFFECT_CHAIN]</cite> or <a href="#LIST SEND_EFFECT_CHAINS">"LIST SEND_EFFECT_CHAINS"</a> <cite title="NONE">[LIST SEND_EFFECT_CHAINS]</cite> command and &lt;chain-pos&gt; reflects the exact effect chain position in the effect chain which hosts the actual destination effect.</p>
3215    <p id="rfc.section.6.4.35.p.4">Note: This command MUST NOT be used if you want to apply audio effects externally! By default FX sends are routed directly to the audio output device for that purpose.  You can also revert this command later on by sending <a href="#REMOVE FX_SEND EFFECT">"REMOVE FX_SEND EFFECT"</a> <cite title="NONE">[REMOVE FX_SEND EFFECT]</cite>, which will cause the FX send to be routed directly to the sampler channel's audio output device instead (i.e. for using external effects instead of internal effects).  </p>
3216    <p id="rfc.section.6.4.35.p.5">Possible Answers:</p>
3217    <p/>
3218    
3219    <ul class="empty">
3220      <li>"OK" - <ul class="empty"><li>on success</li></ul><p> </p></li>
3221      <li>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" - <ul class="empty"><li>in case it failed, providing an appropriate error code and error message</li></ul><p> </p></li>
3222    </ul>
3223    
3224    <p> </p>
3225    <p id="rfc.section.6.4.35.p.7">Example:</p>
3226    <p/>
3227    
3228    <ul class="empty">
3229      <li>C: "SET FX_SEND EFFECT 0 0 2 5"</li>
3230      <li>S: "OK"</li>
3231    </ul>
3232    
3233    <p> </p>
3234    <h1 id="rfc.section.6.4.36"><a href="#rfc.section.6.4.36">6.4.36.</a> <a href="#REMOVE FX_SEND EFFECT" id="REMOVE FX_SEND EFFECT">Removing destination effect from an effect send</a></h1>
3235    <p id="rfc.section.6.4.36.p.1">The front-end can (re-)assign a destination effect to an effect send by sending the following command:</p>
3236    <p/>
3237    
3238    <ul class="empty">
3239      <li>REMOVE FX_SEND EFFECT &lt;sampler-chan&gt; &lt;fx-send-id&gt;</li>
3240    </ul>
3241    
3242    <p> </p>
3243    <p id="rfc.section.6.4.36.p.3">Where &lt;sampler-chan&gt; is the sampler channel number as returned by the <a href="#ADD CHANNEL">"ADD CHANNEL"</a> <cite title="NONE">[ADD CHANNEL]</cite> or <a href="#LIST CHANNELS">"LIST CHANNELS"</a> <cite title="NONE">[LIST CHANNELS]</cite> command, &lt;fx-send-id&gt; reflects the numerical ID of the effect send entity as returned by the <a href="#CREATE FX_SEND">"CREATE FX_SEND"</a> <cite title="NONE">[CREATE FX_SEND]</cite> or <a href="#LIST FX_SENDS">"LIST FX_SENDS"</a> <cite title="NONE">[LIST FX_SENDS]</cite> command.</p>
3244    <p id="rfc.section.6.4.36.p.4">After the destination effect has been removed from the effect send, the audio signal of the effect send will be routed directly to the audio output device, according to the audio channel routing setting of the effect send.  </p>
3245    <p id="rfc.section.6.4.36.p.5">Possible Answers:</p>
3246    <p/>
3247    
3248    <ul class="empty">
3249      <li>"OK" - <ul class="empty"><li>on success</li></ul><p> </p></li>
3250      <li>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" - <ul class="empty"><li>in case it failed, providing an appropriate error code and error message</li></ul><p> </p></li>
3251    </ul>
3252    
3253    <p> </p>
3254    <p id="rfc.section.6.4.36.p.7">Example:</p>
3255    <p/>
3256    
3257    <ul class="empty">
3258      <li>C: "REMOVE FX_SEND EFFECT 0 0"</li>
3259      <li>S: "OK"</li>
3260    </ul>
3261    
3262    <p> </p>
3263    <h1 id="rfc.section.6.4.37"><a href="#rfc.section.6.4.37">6.4.37.</a> <a href="#SET FX_SEND MIDI_CONTROLLER" id="SET FX_SEND MIDI_CONTROLLER">Altering effect send's MIDI controller</a></h1>
3264    <p id="rfc.section.6.4.37.p.1">The front-end can alter the MIDI controller of an effect send entity by sending the following command:</p>
3265    <p/>
3266    
3267    <ul class="empty">
3268      <li>SET FX_SEND MIDI_CONTROLLER &lt;sampler-chan&gt; &lt;fx-send-id&gt; &lt;midi-ctrl&gt;</li>
3269    </ul>
3270    
3271    <p> </p>
3272    <p id="rfc.section.6.4.37.p.3">Where &lt;sampler-chan&gt; is the sampler channel number as returned by the <a href="#ADD CHANNEL">"ADD CHANNEL"</a> <cite title="NONE">[ADD CHANNEL]</cite> or <a href="#LIST CHANNELS">"LIST CHANNELS"</a> <cite title="NONE">[LIST CHANNELS]</cite> command, &lt;fx-send-id&gt; reflects the numerical ID of the effect send entity as returned by the <a href="#CREATE FX_SEND">"CREATE FX_SEND"</a> <cite title="NONE">[CREATE FX_SEND]</cite> or <a href="#LIST FX_SENDS">"LIST FX_SENDS"</a> <cite title="NONE">[LIST FX_SENDS]</cite> command and &lt;midi-ctrl&gt; reflects the MIDI controller which shall be able to modify the effect send's send level.</p>
3273    <p id="rfc.section.6.4.37.p.4">Possible Answers:</p>
3274    <p/>
3275    
3276    <ul class="empty">
3277      <li>"OK" - <ul class="empty"><li>on success</li></ul><p> </p></li>
3278      <li>"WRN:&lt;warning-code&gt;:&lt;warning-message&gt;" - <ul class="empty"><li>if MIDI controller was set, but there are noteworthy issue(s) related, providing an appropriate warning code and warning message</li></ul><p> </p></li>
3279      <li>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" - <ul class="empty"><li>in case it failed, providing an appropriate error code and error message</li></ul><p> </p></li>
3280    </ul>
3281    
3282    <p> </p>
3283    <p id="rfc.section.6.4.37.p.6">Example:</p>
3284    <p/>
3285    
3286    <ul class="empty">
3287      <li>C: "SET FX_SEND MIDI_CONTROLLER 0 0 91"</li>
3288      <li>S: "OK"</li>
3289    </ul>
3290    
3291    <p> </p>
3292    <h1 id="rfc.section.6.4.38"><a href="#rfc.section.6.4.38">6.4.38.</a> <a href="#SET FX_SEND LEVEL" id="SET FX_SEND LEVEL">Altering effect send's send level</a></h1>
3293    <p id="rfc.section.6.4.38.p.1">The front-end can alter the current send level of an effect send entity by sending the following command:</p>
3294    <p/>
3295    
3296    <ul class="empty">
3297      <li>SET FX_SEND LEVEL &lt;sampler-chan&gt; &lt;fx-send-id&gt; &lt;volume&gt;</li>
3298    </ul>
3299    
3300    <p> </p>
3301    <p id="rfc.section.6.4.38.p.3">Where &lt;sampler-chan&gt; is the sampler channel number as returned by the <a href="#ADD CHANNEL">"ADD CHANNEL"</a> <cite title="NONE">[ADD CHANNEL]</cite> or <a href="#LIST CHANNELS">"LIST CHANNELS"</a> <cite title="NONE">[LIST CHANNELS]</cite> command, &lt;fx-send-id&gt; reflects the numerical ID of the effect send entity as returned by the <a href="#CREATE FX_SEND">"CREATE FX_SEND"</a> <cite title="NONE">[CREATE FX_SEND]</cite> or <a href="#LIST FX_SENDS">"LIST FX_SENDS"</a> <cite title="NONE">[LIST FX_SENDS]</cite> command and &lt;volume&gt; is an optionally dotted positive number (a value smaller than 1.0 means attenuation, whereas a value greater than 1.0 means amplification) reflecting the new send level.</p>
3302    <p id="rfc.section.6.4.38.p.4">Possible Answers:</p>
3303    <p/>
3304    
3305    <ul class="empty">
3306      <li>"OK" - <ul class="empty"><li>on success</li></ul><p> </p></li>
3307      <li>"WRN:&lt;warning-code&gt;:&lt;warning-message&gt;" - <ul class="empty"><li>if new send level was set, but there are noteworthy issue(s) related, providing an appropriate warning code and warning message</li></ul><p> </p></li>
3308      <li>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" - <ul class="empty"><li>in case it failed, providing an appropriate error code and error message</li></ul><p> </p></li>
3309    </ul>
3310    
3311    <p> </p>
3312    <p id="rfc.section.6.4.38.p.6">Example:</p>
3313    <p/>
3314    
3315    <ul class="empty">
3316      <li>C: "SET FX_SEND LEVEL 0 0 0.15"</li>
3317      <li>S: "OK"</li>
3318    </ul>
3319    
3320    <p> </p>
3321    <h1 id="rfc.section.6.4.39"><a href="#rfc.section.6.4.39">6.4.39.</a> <a href="#SEND CHANNEL MIDI_DATA" id="SEND CHANNEL MIDI_DATA">Sending MIDI messages to sampler channel</a></h1>
3322    <p id="rfc.section.6.4.39.p.1">The front-end can send MIDI events to a specific sampler channel by sending the following command:</p>
3323    <p/>
3324    
3325    <ul class="empty">
3326      <li>SEND CHANNEL MIDI_DATA &lt;midi-msg&gt; &lt;sampler-chan&gt; &lt;arg1&gt; &lt;arg2&gt;</li>
3327    </ul>
3328    
3329    <p> </p>
3330    <p id="rfc.section.6.4.39.p.3">Where &lt;sampler-chan&gt; is the sampler channel number as returned by the <a href="#ADD CHANNEL">"ADD CHANNEL"</a> <cite title="NONE">[ADD CHANNEL]</cite> or <a href="#LIST CHANNELS">"LIST CHANNELS"</a> <cite title="NONE">[LIST CHANNELS]</cite> command, &lt;arg1&gt; and &lt;arg2&gt; arguments depend on the &lt;midi-msg&gt; argument, which specifies the MIDI message type. Currently, the following MIDI messages are supported:</p>
3331    <p/>
3332    
3333    <ul class="empty">
3334      <li>"NOTE_ON" - <ul class="empty"><li>For turning on MIDI notes, where &lt;arg1&gt; specifies the key number and &lt;arg2&gt; the velocity as described in the MIDI specification.</li></ul><p> </p></li>
3335      <li>"NOTE_OFF" - <ul class="empty"><li>For turning a currently playing MIDI note off, where &lt;arg1&gt; specifies the key number and &lt;arg2&gt; the velocity as described in the MIDI specification.</li></ul><p> </p></li>
3336      <li>"CC" - <ul class="empty"><li>For changing a MIDI controller, where &lt;arg1&gt; specifies the controller number and &lt;arg2&gt; the new value of the controller as described in the Control Change section of the MIDI specification.</li></ul><p> </p></li>
3337    </ul>
3338    
3339    <p> </p>
3340    <p id="rfc.section.6.4.39.p.5">CAUTION: This command is provided for implementations of virtual MIDI keyboards and no realtime guarantee whatsoever will be made!</p>
3341    <p id="rfc.section.6.4.39.p.6">Possible Answers:</p>
3342    <p/>
3343    
3344    <ul class="empty">
3345      <li>"OK" - <ul class="empty"><li>on success</li></ul><p> </p></li>
3346      <li>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" - <ul class="empty"><li>in case it failed, providing an appropriate error code and error message</li></ul><p> </p></li>
3347    </ul>
3348    
3349    <p> </p>
3350    <p id="rfc.section.6.4.39.p.8">Example:</p>
3351    <p/>
3352    
3353    <ul class="empty">
3354      <li>C: "SEND CHANNEL MIDI_DATA NOTE_ON 0 56 112"</li>
3355      <li>S: "OK"</li>
3356    </ul>
3357    
3358    <p> </p>
3359    <h1 id="rfc.section.6.4.40"><a href="#rfc.section.6.4.40">6.4.40.</a> <a href="#RESET CHANNEL" id="RESET CHANNEL">Resetting a sampler channel</a></h1>
3360    <p id="rfc.section.6.4.40.p.1">The front-end can reset a particular sampler channel by sending the following command:</p>
3361    <p/>
3362    
3363    <ul class="empty">
3364      <li>RESET CHANNEL &lt;sampler-channel&gt;</li>
3365    </ul>
3366    
3367    <p> </p>
3368    <p id="rfc.section.6.4.40.p.3">Where &lt;sampler-channel&gt; defines the sampler channel to be reset.  This will cause the engine on that sampler channel, its voices and eventually disk streams and all control and status variables to be reset.</p>
3369    <p id="rfc.section.6.4.40.p.4">Possible Answers:</p>
3370    <p/>
3371    
3372    <ul class="empty">
3373      <li>"OK" - <ul class="empty"><li>on success</li></ul><p> </p></li>
3374      <li>"WRN:&lt;warning-code&gt;:&lt;warning-message&gt;" - <ul class="empty"><li>if channel was reset, but there are noteworthy issue(s) related, providing an appropriate warning code and warning message</li></ul><p> </p></li>
3375      <li>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" - <ul class="empty"><li>in case it failed, providing an appropriate error code and error message</li></ul><p> </p></li>
3376    </ul>
3377    
3378    <p> </p>
3379    <p id="rfc.section.6.4.40.p.6">Examples:</p>
3380    <p/>
3381    
3382    <ul class="empty">
3383      <li/>
3384    </ul>
3385    
3386    <p> </p>
3387    <h1 id="rfc.section.6.5"><a href="#rfc.section.6.5">6.5.</a> Controlling connection</h1>
3388    <p id="rfc.section.6.5.p.1">The following commands are used to control the connection to LinuxSampler.</p>
3389    <h1 id="rfc.section.6.5.1"><a href="#rfc.section.6.5.1">6.5.1.</a> <a href="#SUBSCRIBE" id="SUBSCRIBE">Register front-end for receiving event messages</a></h1>
3390    <p id="rfc.section.6.5.1.p.1">The front-end can register itself to the LinuxSampler application to be informed about noteworthy events by sending this command:</p>
3391    <p/>
3392    
3393    <ul class="empty">
3394      <li>SUBSCRIBE &lt;event-id&gt;</li>
3395    </ul>
3396    
3397    <p> </p>
3398    <p id="rfc.section.6.5.1.p.3">where &lt;event-id&gt; will be replaced by the respective event that client wants to subscribe to.</p>
3399    <p id="rfc.section.6.5.1.p.4">Possible Answers:</p>
3400    <p/>
3401    
3402    <ul class="empty">
3403      <li>"OK" - <ul class="empty"><li>on success</li></ul><p> </p></li>
3404      <li>"WRN:&lt;warning-code&gt;:&lt;warning-message&gt;" - <ul class="empty"><li>if registration succeeded, but there are noteworthy issue(s) related, providing an appropriate warning code and warning message</li></ul><p> </p></li>
3405      <li>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" - <ul class="empty"><li>in case it failed, providing an appropriate error code and error message</li></ul><p> </p></li>
3406    </ul>
3407    
3408    <p> </p>
3409    <p id="rfc.section.6.5.1.p.6">Examples:</p>
3410    <p/>
3411    
3412    <ul class="empty">
3413      <li/>
3414    </ul>
3415    
3416    <p> </p>
3417    <h1 id="rfc.section.6.5.2"><a href="#rfc.section.6.5.2">6.5.2.</a> <a href="#UNSUBSCRIBE" id="UNSUBSCRIBE">Unregister front-end for not receiving event messages</a></h1>
3418    <p id="rfc.section.6.5.2.p.1">The front-end can unregister itself if it doesn't want to receive event messages anymore by sending the following command:</p>
3419    <p/>
3420    
3421    <ul class="empty">
3422      <li>UNSUBSCRIBE &lt;event-id&gt;</li>
3423    </ul>
3424    
3425    <p> </p>
3426    <p id="rfc.section.6.5.2.p.3">Where &lt;event-id&gt; will be replaced by the respective event that client doesn't want to receive anymore.</p>
3427    <p id="rfc.section.6.5.2.p.4">Possible Answers:</p>
3428    <p/>
3429    
3430    <ul class="empty">
3431      <li>"OK" - <ul class="empty"><li>on success</li></ul><p> </p></li>
3432      <li>"WRN:&lt;warning-code&gt;:&lt;warning-message&gt;" - <ul class="empty"><li>if unregistration succeeded, but there are noteworthy issue(s) related, providing an appropriate warning code and warning message</li></ul><p> </p></li>
3433      <li>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" - <ul class="empty"><li>in case it failed, providing an appropriate error code and error message</li></ul><p> </p></li>
3434    </ul>
3435    
3436    <p> </p>
3437    <p id="rfc.section.6.5.2.p.6">Examples:</p>
3438    <p/>
3439    
3440    <ul class="empty">
3441      <li/>
3442    </ul>
3443    
3444    <p> </p>
3445    <h1 id="rfc.section.6.5.3"><a href="#rfc.section.6.5.3">6.5.3.</a> <a href="#SET ECHO" id="SET ECHO">Enable or disable echo of commands</a></h1>
3446    <p id="rfc.section.6.5.3.p.1">To enable or disable back sending of commands to the client the following command can be used:</p>
3447    <p/>
3448    
3449    <ul class="empty">
3450      <li>SET ECHO &lt;value&gt;</li>
3451    </ul>
3452    
3453    <p> </p>
3454    <p id="rfc.section.6.5.3.p.3">Where &lt;value&gt; should be replaced either by "1" to enable echo mode or "0" to disable echo mode. When echo mode is enabled, all commands send to LinuxSampler will be immediately send back and after this echo the actual response to the command will be returned. Echo mode will only be altered for the client connection that issued the "SET ECHO" command, not globally for all client connections.</p>
3455    <p id="rfc.section.6.5.3.p.4">Possible Answers:</p>
3456    <p/>
3457    
3458    <ul class="empty">
3459      <li>"OK" - <ul class="empty"><li>usually</li></ul><p> </p></li>
3460      <li>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" - <ul class="empty"><li>on syntax error, e.g. non boolean value</li></ul><p> </p></li>
3461    </ul>
3462    
3463    <p> </p>
3464    <p id="rfc.section.6.5.3.p.6">Examples:</p>
3465    <p/>
3466    
3467    <ul class="empty">
3468      <li/>
3469    </ul>
3470    
3471    <p> </p>
3472    <h1 id="rfc.section.6.5.4"><a href="#rfc.section.6.5.4">6.5.4.</a> <a href="#QUIT" id="QUIT">Close client connection</a></h1>
3473    <p id="rfc.section.6.5.4.p.1">The client can close its network connection to LinuxSampler by sending the following command:</p>
3474    <p/>
3475    
3476    <ul class="empty">
3477      <li>QUIT</li>
3478    </ul>
3479    
3480    <p> </p>
3481    <p id="rfc.section.6.5.4.p.3">This is probably more interesting for manual telnet connections to LinuxSampler than really useful for a front-end implementation.</p>
3482    <h1 id="rfc.section.6.6"><a href="#rfc.section.6.6">6.6.</a> Global commands</h1>
3483    <p id="rfc.section.6.6.p.1">The following commands have global impact on the sampler.</p>
3484    <h1 id="rfc.section.6.6.1"><a href="#rfc.section.6.6.1">6.6.1.</a> <a href="#GET TOTAL_VOICE_COUNT" id="GET TOTAL_VOICE_COUNT">Current number of active voices</a></h1>
3485    <p id="rfc.section.6.6.1.p.1">The front-end can ask for the current number of active voices on the sampler by sending the following command:</p>
3486    <p/>
3487    
3488    <ul class="empty">
3489      <li>GET TOTAL_VOICE_COUNT</li>
3490    </ul>
3491    
3492    <p> </p>
3493    <p id="rfc.section.6.6.1.p.3">Possible Answers:</p>
3494    <p/>
3495    
3496    <ul class="empty">
3497      <li>LinuxSampler will answer by returning the number of all active voices on the sampler.</li>
3498    </ul>
3499    
3500    <p> </p>
3501    <h1 id="rfc.section.6.6.2"><a href="#rfc.section.6.6.2">6.6.2.</a> <a href="#GET TOTAL_VOICE_COUNT_MAX" id="GET TOTAL_VOICE_COUNT_MAX">Maximum amount of active voices</a></h1>
3502    <p id="rfc.section.6.6.2.p.1">The front-end can ask for the maximum number of active voices by sending the following command:</p>
3503    <p/>
3504    
3505    <ul class="empty">
3506      <li>GET TOTAL_VOICE_COUNT_MAX</li>
3507    </ul>
3508    
3509    <p> </p>
3510    <p id="rfc.section.6.6.2.p.3">Possible Answers:</p>
3511    <p/>
3512    
3513    <ul class="empty">
3514      <li>LinuxSampler will answer by returning the maximum number of active voices.</li>
3515    </ul>
3516    
3517    <p> </p>
3518    <h1 id="rfc.section.6.6.3"><a href="#rfc.section.6.6.3">6.6.3.</a> <a href="#GET TOTAL_STREAM_COUNT" id="GET TOTAL_STREAM_COUNT">Current number of active disk streams</a></h1>
3519    <p id="rfc.section.6.6.3.p.1">The front-end can ask for the current number of active disk streams on the sampler by sending the following command:</p>
3520    <p/>
3521    
3522    <ul class="empty">
3523      <li>GET TOTAL_STREAM_COUNT</li>
3524    </ul>
3525    
3526    <p> </p>
3527    <p id="rfc.section.6.6.3.p.3">Possible Answers:</p>
3528    <p/>
3529    
3530    <ul class="empty">
3531      <li>LinuxSampler will answer by returning the number of all active disk streams on the sampler.</li>
3532    </ul>
3533    
3534    <p> </p>
3535    <h1 id="rfc.section.6.6.4"><a href="#rfc.section.6.6.4">6.6.4.</a> <a href="#RESET" id="RESET">Reset sampler</a></h1>
3536    <p id="rfc.section.6.6.4.p.1">The front-end can reset the whole sampler by sending the following command:</p>
3537    <p/>
3538    
3539    <ul class="empty">
3540      <li>RESET</li>
3541    </ul>
3542    
3543    <p> </p>
3544    <p id="rfc.section.6.6.4.p.3">Possible Answers:</p>
3545    <p/>
3546    
3547    <ul class="empty">
3548      <li>"OK" - <ul class="empty"><li>always</li></ul><p> </p></li>
3549    </ul>
3550    
3551    <p> </p>
3552    <p id="rfc.section.6.6.4.p.5">Examples:</p>
3553    <p/>
3554    
3555    <ul class="empty">
3556      <li/>
3557    </ul>
3558    
3559    <p> </p>
3560    <h1 id="rfc.section.6.6.5"><a href="#rfc.section.6.6.5">6.6.5.</a> <a href="#GET SERVER INFO" id="GET SERVER INFO">General sampler information</a></h1>
3561    <p id="rfc.section.6.6.5.p.1">The client can ask for general information about the LinuxSampler instance by sending the following command:</p>
3562    <p/>
3563    
3564    <ul class="empty">
3565      <li>GET SERVER INFO</li>
3566    </ul>
3567    
3568    <p> </p>
3569    <p id="rfc.section.6.6.5.p.3">Possible Answers:</p>
3570    <p/>
3571    
3572    <ul class="empty">
3573      <li>LinuxSampler will answer by sending a &lt;CRLF&gt; separated list.  Each answer line begins with the information category name followed by a colon and then a space character &lt;SP&gt; and finally the info character string to that information category. At the moment the following categories are defined: </li>
3574      <li>
3575        <ul class="empty">
3576          <li>DESCRIPTION - <ul class="empty"><li>arbitrary textual description about the sampler (note that the character string may contain <a href="#character_set">escape sequences</a> <cite title="NONE">[character_set]</cite>)</li></ul><p> </p></li>
3577          <li>VERSION - <ul class="empty"><li>version of the sampler</li></ul><p> </p></li>
3578          <li>PROTOCOL_VERSION - <ul class="empty"><li>version of the LSCP specification the sampler complies with (see <a href="#LSCP versioning">Section 2</a> for details)</li></ul><p> </p></li>
3579          <li>INSTRUMENTS_DB_SUPPORT - <ul class="empty"><li>either yes or no, specifies whether the sampler is build with instruments database support.</li></ul><p> </p></li>
3580        </ul>
3581        <p> </p>
3582      </li>
3583    </ul>
3584    
3585    <p> </p>
3586    <p id="rfc.section.6.6.5.p.5">The mentioned fields above don't have to be in particular order.  Other fields might be added in future.</p>
3587    <p id="rfc.section.6.6.5.p.6">Example:</p>
3588    <p/>
3589    
3590    <ul class="empty">
3591      <li>C: "GET SERVER INFO"</li>
3592      <li>S: "DESCRIPTION: LinuxSampler - modular, streaming capable sampler"</li>
3593      <li>"VERSION: 1.0.0.svn23"</li>
3594      <li>"PROTOCOL_VERSION: 1.5"</li>
3595      <li>"INSTRUMENTS_DB_SUPPORT: no"</li>
3596      <li>"."</li>
3597    </ul>
3598    
3599    <p> </p>
3600    <h1 id="rfc.section.6.6.6"><a href="#rfc.section.6.6.6">6.6.6.</a> <a href="#GET VOLUME" id="GET VOLUME">Getting global volume attenuation</a></h1>
3601    <p id="rfc.section.6.6.6.p.1">The client can ask for the current global sampler-wide volume attenuation by sending the following command:</p>
3602    <p/>
3603    
3604    <ul class="empty">
3605      <li>GET VOLUME</li>
3606    </ul>
3607    
3608    <p> </p>
3609    <p id="rfc.section.6.6.6.p.3">Possible Answers:</p>
3610    <p/>
3611    
3612    <ul class="empty">
3613      <li>The sampler will always answer by returning the optional dotted floating point coefficient, reflecting the current global volume attenuation.  </li>
3614    </ul>
3615    
3616    <p> </p>
3617    <p id="rfc.section.6.6.6.p.5">Note: it is up to the respective sampler engine whether to obey that global volume parameter or not, but in general all engines SHOULD use this parameter.</p>
3618    <h1 id="rfc.section.6.6.7"><a href="#rfc.section.6.6.7">6.6.7.</a> <a href="#SET VOLUME" id="SET VOLUME">Setting global volume attenuation</a></h1>
3619    <p id="rfc.section.6.6.7.p.1">The client can alter the current global sampler-wide volume attenuation by sending the following command:</p>
3620    <p/>
3621    
3622    <ul class="empty">
3623      <li>SET VOLUME &lt;volume&gt;</li>
3624    </ul>
3625    
3626    <p> </p>
3627    <p id="rfc.section.6.6.7.p.3">Where &lt;volume&gt; should be replaced by the optional dotted floating point value, reflecting the new global volume parameter.  This value might usually be in the range between 0.0 and 1.0, that is for attenuating the overall volume.</p>
3628    <p id="rfc.section.6.6.7.p.4">Possible Answers:</p>
3629    <p/>
3630    
3631    <ul class="empty">
3632      <li>"OK" - <ul class="empty"><li>on success</li></ul><p> </p></li>
3633      <li>"WRN:&lt;warning-code&gt;:&lt;warning-message&gt;" - <ul class="empty"><li>if the global volume was set, but there are noteworthy issue(s) related, providing an appropriate warning code and warning message</li></ul><p> </p></li>
3634      <li>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" - <ul class="empty"><li>in case it failed, providing an appropriate error code and error message</li></ul><p> </p></li>
3635    </ul>
3636    
3637    <p> </p>
3638    <h1 id="rfc.section.6.6.8"><a href="#rfc.section.6.6.8">6.6.8.</a> <a href="#GET VOICES" id="GET VOICES">Getting global voice limit</a></h1>
3639    <p id="rfc.section.6.6.8.p.1">The client can ask for the current global sampler-wide limit for maximum voices by sending the following command:</p>
3640    <p/>
3641    
3642    <ul class="empty">
3643      <li>GET VOICES</li>
3644    </ul>
3645    
3646    <p> </p>
3647    <p id="rfc.section.6.6.8.p.3">Possible Answers:</p>
3648    <p/>
3649    
3650    <ul class="empty">
3651      <li>LinuxSampler will answer by returning the number for the current limit of maximum voices.</li>
3652    </ul>
3653    
3654    <p> </p>
3655    <p id="rfc.section.6.6.8.p.5">The voice limit setting defines how many voices should maximum be processed by the sampler at the same time. If the user triggers new notes which would exceed that voice limit, the sampler engine will react by stealing old voices for those newly triggered notes. Note that the amount of voices triggered by a new note can be larger than one and is dependent to the respective instrument and probably further criterias.</p>
3656    <h1 id="rfc.section.6.6.9"><a href="#rfc.section.6.6.9">6.6.9.</a> <a href="#SET VOICES" id="SET VOICES">Setting global voice limit</a></h1>
3657    <p id="rfc.section.6.6.9.p.1">The client can alter the current global sampler-wide limit for maximum voices by sending the following command:</p>
3658    <p/>
3659    
3660    <ul class="empty">
3661      <li>SET VOICES &lt;max-voices&gt;</li>
3662    </ul>
3663    
3664    <p> </p>
3665    <p id="rfc.section.6.6.9.p.3">Where &lt;max-voices&gt; should be replaced by the integer value, reflecting the new global amount limit of maximum voices.  This value has to be larger than 0.</p>
3666    <p id="rfc.section.6.6.9.p.4">Possible Answers:</p>
3667    <p/>
3668    
3669    <ul class="empty">
3670      <li>"OK" - <ul class="empty"><li>on success</li></ul><p> </p></li>
3671      <li>"WRN:&lt;warning-code&gt;:&lt;warning-message&gt;" - <ul class="empty"><li>if the voice limit was set, but there are noteworthy issue(s) related, providing an appropriate warning code and warning message</li></ul><p> </p></li>
3672      <li>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" - <ul class="empty"><li>in case it failed, providing an appropriate error code and error message</li></ul><p> </p></li>
3673    </ul>
3674    
3675    <p> </p>
3676    <p id="rfc.section.6.6.9.p.6">Note: the given value will be passed to all sampler engine instances.  The total amount of maximum voices on the running system might thus be as big as the given value multiplied by the current amount of engine instances.</p>
3677    <p id="rfc.section.6.6.9.p.7">Caution: when adjusting the voice limit, you SHOULD also adjust the disk stream limit respectively and vice versa.</p>
3678    <h1 id="rfc.section.6.6.10"><a href="#rfc.section.6.6.10">6.6.10.</a> <a href="#GET STREAMS" id="GET STREAMS">Getting global disk stream limit</a></h1>
3679    <p id="rfc.section.6.6.10.p.1">The client can ask for the current global sampler-wide limit for maximum disk streams by sending the following command:</p>
3680    <p/>
3681    
3682    <ul class="empty">
3683      <li>GET STREAMS</li>
3684    </ul>
3685    
3686    <p> </p>
3687    <p id="rfc.section.6.6.10.p.3">Possible Answers:</p>
3688    <p/>
3689    
3690    <ul class="empty">
3691      <li>LinuxSampler will answer by returning the number for the current limit of maximum disk streams.</li>
3692    </ul>
3693    
3694    <p> </p>
3695    <p id="rfc.section.6.6.10.p.5">The disk stream limit setting defines how many disk streams should maximum be processed by a sampler engine at the same time. The higher this value, the more memory (RAM) will be occupied, since every disk streams allocates a certain buffer size for being able to perform its streaming operations.</p>
3696    <h1 id="rfc.section.6.6.11"><a href="#rfc.section.6.6.11">6.6.11.</a> <a href="#SET STREAMS" id="SET STREAMS">Setting global disk stream limit</a></h1>
3697    <p id="rfc.section.6.6.11.p.1">The client can alter the current global sampler-wide limit for maximum disk streams by sending the following command:</p>
3698    <p/>
3699    
3700    <ul class="empty">
3701      <li>SET STREAMS &lt;max-streams&gt;</li>
3702    </ul>
3703    
3704    <p> </p>
3705    <p id="rfc.section.6.6.11.p.3">Where &lt;max-streams&gt; should be replaced by the integer value, reflecting the new global amount limit of maximum disk streams.  This value has to be positive.</p>
3706    <p id="rfc.section.6.6.11.p.4">Possible Answers:</p>
3707    <p/>
3708    
3709    <ul class="empty">
3710      <li>"OK" - <ul class="empty"><li>on success</li></ul><p> </p></li>
3711      <li>"WRN:&lt;warning-code&gt;:&lt;warning-message&gt;" - <ul class="empty"><li>if the disk stream limit was set, but there are noteworthy issue(s) related, providing an appropriate warning code and warning message</li></ul><p> </p></li>
3712      <li>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" - <ul class="empty"><li>in case it failed, providing an appropriate error code and error message</li></ul><p> </p></li>
3713    </ul>
3714    
3715    <p> </p>
3716    <p id="rfc.section.6.6.11.p.6">Note: the given value will be passed to all sampler engine instances.  The total amount of maximum disk streams on the running system might thus be as big as the given value multiplied by the current amount of engine instances.</p>
3717    <p id="rfc.section.6.6.11.p.7">Caution: when adjusting the disk stream limit, you SHOULD also adjust the voice limit respectively and vice versa.</p>
3718    <h1 id="rfc.section.6.7"><a href="#rfc.section.6.7">6.7.</a> <a href="#MIDI Instrument Mapping" id="MIDI Instrument Mapping">MIDI Instrument Mapping</a></h1>
3719    <p id="rfc.section.6.7.p.1">The MIDI protocol provides a way to switch between instruments by sending so called MIDI bank select and MIDI program change messages which are essentially just numbers. The following commands allow to actually map arbitrary MIDI bank select / program change numbers with real instruments.</p>
3720    <p id="rfc.section.6.7.p.2">The sampler allows to manage an arbitrary amount of MIDI instrument maps which define which instrument to load on which MIDI program change message.</p>
3721    <p id="rfc.section.6.7.p.3">By default, that is when the sampler is launched, there is no map, thus the sampler will simply ignore all program change messages. The front-end has to explicitly create at least one map, add entries to the map and tell the respective sampler channel(s) which MIDI instrument map to use, so the sampler knows how to react on a given program change message on the respective sampler channel, that is by switching to the respectively defined engine type and loading the respective instrument. See command <a href="#SET CHANNEL MIDI_INSTRUMENT_MAP">"SET CHANNEL MIDI_INSTRUMENT_MAP"</a> <cite title="NONE">[SET CHANNEL MIDI_INSTRUMENT_MAP]</cite> for how to assign a MIDI instrument map to a sampler channel.</p>
3722    <p id="rfc.section.6.7.p.4">Also note per MIDI specification a bank select message does not cause to switch to another instrument. Instead when receiving a bank select message the bank value will be stored and a subsequent program change message (which may occur at any time) will finally cause the sampler to switch to the respective instrument as reflected by the current MIDI instrument map.</p>
3723    <h1 id="rfc.section.6.7.1"><a href="#rfc.section.6.7.1">6.7.1.</a> <a href="#ADD MIDI_INSTRUMENT_MAP" id="ADD MIDI_INSTRUMENT_MAP">Create a new MIDI instrument map</a></h1>
3724    <p id="rfc.section.6.7.1.p.1">The front-end can add a new MIDI instrument map by sending the following command:</p>
3725    <p/>
3726    
3727    <ul class="empty">
3728      <li>ADD MIDI_INSTRUMENT_MAP [&lt;name&gt;]</li>
3729    </ul>
3730    
3731    <p> </p>
3732    <p id="rfc.section.6.7.1.p.3">Where &lt;name&gt; is an optional argument allowing to assign a custom name to the new map. MIDI instrument Map names do not have to be unique, but MUST be encapsulated into apostrophes and support escape sequences as described in chapter "<a href="#character_set">Character Set and Escape Sequences</a> <cite title="NONE">[character_set]</cite>".  </p>
3733    <p id="rfc.section.6.7.1.p.4">Possible Answers:</p>
3734    <p/>
3735    
3736    <ul class="empty">
3737      <li>"OK[&lt;map&gt;]" - <ul class="empty"><li>in case a new MIDI instrument map could be added, where &lt;map&gt; reflects the unique ID of the newly created MIDI instrument map</li></ul><p> </p></li>
3738      <li>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" - <ul class="empty"><li>when a new map could not be created, which might never occur in practice</li></ul><p> </p></li>
3739    </ul>
3740    
3741    <p> </p>
3742    <p id="rfc.section.6.7.1.p.6">Examples:</p>
3743    <p/>
3744    
3745    <ul class="empty">
3746      <li>C: "ADD MIDI_INSTRUMENT_MAP 'Standard Map'"</li>
3747      <li>S: "OK[0]"</li>
3748    </ul>
3749    
3750    <p> </p>
3751    <p/>
3752    
3753    <ul class="empty">
3754      <li>C: "ADD MIDI_INSTRUMENT_MAP 'Standard Drumkit'"</li>
3755      <li>S: "OK[1]"</li>
3756    </ul>
3757    
3758    <p> </p>
3759    <p/>
3760    
3761    <ul class="empty">
3762      <li>C: "ADD MIDI_INSTRUMENT_MAP"</li>
3763      <li>S: "OK[5]"</li>
3764    </ul>
3765    
3766    <p> </p>
3767    <h1 id="rfc.section.6.7.2"><a href="#rfc.section.6.7.2">6.7.2.</a> <a href="#REMOVE MIDI_INSTRUMENT_MAP" id="REMOVE MIDI_INSTRUMENT_MAP">Delete one particular or all MIDI instrument maps</a></h1>
3768    <p id="rfc.section.6.7.2.p.1">The front-end can delete a particular MIDI instrument map by sending the following command:</p>
3769    <p/>
3770    
3771    <ul class="empty">
3772      <li>REMOVE MIDI_INSTRUMENT_MAP &lt;map&gt;</li>
3773    </ul>
3774    
3775    <p> </p>
3776    <p id="rfc.section.6.7.2.p.3">Where &lt;map&gt; reflects the unique ID of the map to delete as returned by the <a href="#LIST MIDI_INSTRUMENT_MAPS">"LIST MIDI_INSTRUMENT_MAPS"</a> <cite title="NONE">[LIST MIDI_INSTRUMENT_MAPS]</cite> command.</p>
3777    <p id="rfc.section.6.7.2.p.4">The front-end can delete all MIDI instrument maps by sending the following command:</p>
3778    <p/>
3779    
3780    <ul class="empty">
3781      <li>REMOVE MIDI_INSTRUMENT_MAP ALL</li>
3782    </ul>
3783    
3784    <p> </p>
3785    <p id="rfc.section.6.7.2.p.6">Possible Answers:</p>
3786    <p/>
3787    
3788    <ul class="empty">
3789      <li>"OK" - <ul class="empty"><li>in case the map(s) could be deleted</li></ul><p> </p></li>
3790      <li>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" - <ul class="empty"><li>when the given map does not exist</li></ul><p> </p></li>
3791    </ul>
3792    
3793    <p> </p>
3794    <p id="rfc.section.6.7.2.p.8">Examples:</p>
3795    <p/>
3796    
3797    <ul class="empty">
3798      <li>C: "REMOVE MIDI_INSTRUMENT_MAP 0"</li>
3799      <li>S: "OK"</li>
3800    </ul>
3801    
3802    <p> </p>
3803    <p/>
3804    
3805    <ul class="empty">
3806      <li>C: "REMOVE MIDI_INSTRUMENT_MAP ALL"</li>
3807      <li>S: "OK"</li>
3808    </ul>
3809    
3810    <p> </p>
3811    <h1 id="rfc.section.6.7.3"><a href="#rfc.section.6.7.3">6.7.3.</a> <a href="#GET MIDI_INSTRUMENT_MAPS" id="GET MIDI_INSTRUMENT_MAPS">Get amount of existing MIDI instrument maps</a></h1>
3812    <p id="rfc.section.6.7.3.p.1">The front-end can retrieve the current amount of MIDI instrument maps by sending the following command:</p>
3813    <p/>
3814    
3815    <ul class="empty">
3816      <li>GET MIDI_INSTRUMENT_MAPS</li>
3817    </ul>
3818    
3819    <p> </p>
3820    <p id="rfc.section.6.7.3.p.3">Possible Answers:</p>
3821    <p/>
3822    
3823    <ul class="empty">
3824      <li>The sampler will answer by returning the current number of MIDI instrument maps.</li>
3825    </ul>
3826    
3827    <p> </p>
3828    <p id="rfc.section.6.7.3.p.5">Example:</p>
3829    <p/>
3830    
3831    <ul class="empty">
3832      <li>C: "GET MIDI_INSTRUMENT_MAPS"</li>
3833      <li>S: "2"</li>
3834    </ul>
3835    
3836    <p> </p>
3837    <h1 id="rfc.section.6.7.4"><a href="#rfc.section.6.7.4">6.7.4.</a> <a href="#LIST MIDI_INSTRUMENT_MAPS" id="LIST MIDI_INSTRUMENT_MAPS">Getting all created MIDI instrument maps</a></h1>
3838    <p id="rfc.section.6.7.4.p.1">The number of MIDI instrument maps can change on runtime. To get the current list of MIDI instrument maps, the front-end can send the following command:</p>
3839    <p/>
3840    
3841    <ul class="empty">
3842      <li>LIST MIDI_INSTRUMENT_MAPS</li>
3843    </ul>
3844    
3845    <p> </p>
3846    <p id="rfc.section.6.7.4.p.3">Possible Answers:</p>
3847    <p/>
3848    
3849    <ul class="empty">
3850      <li>The sampler will answer by returning a comma separated list with all MIDI instrument maps' numerical IDs.</li>
3851    </ul>
3852    
3853    <p> </p>
3854    <p id="rfc.section.6.7.4.p.5">Example:</p>
3855    <p/>
3856    
3857    <ul class="empty">
3858      <li>C: "LIST MIDI_INSTRUMENT_MAPS"</li>
3859      <li>S: "0,1,5,12"</li>
3860    </ul>
3861    
3862    <p> </p>
3863    <h1 id="rfc.section.6.7.5"><a href="#rfc.section.6.7.5">6.7.5.</a> <a href="#GET MIDI_INSTRUMENT_MAP INFO" id="GET MIDI_INSTRUMENT_MAP INFO">Getting MIDI instrument map information</a></h1>
3864    <p id="rfc.section.6.7.5.p.1">The front-end can ask for the current settings of a MIDI instrument map by sending the following command:</p>
3865    <p/>
3866    
3867    <ul class="empty">
3868      <li>GET MIDI_INSTRUMENT_MAP INFO &lt;map&gt;</li>
3869    </ul>
3870    
3871    <p> </p>
3872    <p id="rfc.section.6.7.5.p.3">Where &lt;map&gt; is the numerical ID of the map the front-end is interested in as returned by the <a href="#LIST MIDI_INSTRUMENT_MAPS">"LIST MIDI_INSTRUMENT_MAPS"</a> <cite title="NONE">[LIST MIDI_INSTRUMENT_MAPS]</cite> command.</p>
3873    <p id="rfc.section.6.7.5.p.4">Possible Answers:</p>
3874    <p/>
3875    
3876    <ul class="empty">
3877      <li>LinuxSampler will answer by sending a &lt;CRLF&gt; separated list.  Each answer line begins with the settings category name followed by a colon and then a space character &lt;SP&gt; and finally the info character string to that setting category. At the moment the following categories are defined:</li>
3878      <li>
3879        <ul class="empty">
3880          <li>NAME - <ul class="empty"><li>custom name of the given map, which does not have to be unique (note that this character string may contain <a href="#character_set">escape sequences</a> <cite title="NONE">[character_set]</cite>)</li></ul><p> </p></li>
3881          <li>DEFAULT - <ul class="empty"><li>either true or false, defines whether this map is the default map</li></ul><p> </p></li>
3882        </ul>
3883        <p> </p>
3884      </li>
3885    </ul>
3886    
3887    <p> </p>
3888    <p id="rfc.section.6.7.5.p.6">The mentioned fields above don't have to be in particular order.</p>
3889    <p id="rfc.section.6.7.5.p.7">Example:</p>
3890    <p/>
3891    
3892    <ul class="empty">
3893      <li>C: "GET MIDI_INSTRUMENT_MAP INFO 0"</li>
3894      <li>S: "NAME: Standard Map"</li>
3895      <li>"DEFAULT: true"</li>
3896      <li>"."</li>
3897    </ul>
3898    
3899    <p> </p>
3900    <h1 id="rfc.section.6.7.6"><a href="#rfc.section.6.7.6">6.7.6.</a> <a href="#SET MIDI_INSTRUMENT_MAP NAME" id="SET MIDI_INSTRUMENT_MAP NAME">Renaming a MIDI instrument map</a></h1>
3901    <p id="rfc.section.6.7.6.p.1">The front-end can alter the custom name of a MIDI instrument map by sending the following command:</p>
3902    <p/>
3903    
3904    <ul class="empty">
3905      <li>SET MIDI_INSTRUMENT_MAP NAME &lt;map&gt; &lt;name&gt;</li>
3906    </ul>
3907    
3908    <p> </p>
3909    <p id="rfc.section.6.7.6.p.3">Where &lt;map&gt; is the numerical ID of the map and &lt;name&gt; the new custom name of the map, which does not have to be unique (name MUST be encapsulated into apostrophes and supports escape sequences as described in chapter "<a href="#character_set">Character Set and Escape Sequences</a> <cite title="NONE">[character_set]</cite>").  </p>
3910    <p id="rfc.section.6.7.6.p.4">Possible Answers:</p>
3911    <p/>
3912    
3913    <ul class="empty">
3914      <li>"OK" - <ul class="empty"><li>on success</li></ul><p> </p></li>
3915      <li>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" - <ul class="empty"><li>in case the given map does not exist</li></ul><p> </p></li>
3916    </ul>
3917    
3918    <p> </p>
3919    <p id="rfc.section.6.7.6.p.6">Example:</p>
3920    <p/>
3921    
3922    <ul class="empty">
3923      <li>C: "SET MIDI_INSTRUMENT_MAP NAME 0 'Foo instruments'"</li>
3924      <li>S: "OK"</li>
3925    </ul>
3926    
3927    <p> </p>
3928    <h1 id="rfc.section.6.7.7"><a href="#rfc.section.6.7.7">6.7.7.</a> <a href="#MAP MIDI_INSTRUMENT" id="MAP MIDI_INSTRUMENT">Create or replace a MIDI instrument map entry</a></h1>
3929    <p id="rfc.section.6.7.7.p.1">The front-end can create a new or replace an existing entry in a sampler's MIDI instrument map by sending the following command:</p>
3930    <p/>
3931    
3932    <ul class="empty">
3933      <li>MAP MIDI_INSTRUMENT [NON_MODAL] &lt;map&gt; &lt;midi_bank&gt; &lt;midi_prog&gt; &lt;engine_name&gt; &lt;filename&gt; &lt;instrument_index&gt; &lt;volume_value&gt; [&lt;instr_load_mode&gt;] [&lt;name&gt;]</li>
3934    </ul>
3935    
3936    <p> </p>
3937    <p id="rfc.section.6.7.7.p.3">Where &lt;map&gt; is the numeric ID of the map to alter, &lt;midi_bank&gt; is an integer value between 0..16383 reflecting the MIDI bank select index, &lt;midi_prog&gt; an integer value between 0..127 reflecting the MIDI program change index, &lt;engine_name&gt; a sampler engine name as returned by the <a href="#LIST AVAILABLE_ENGINES">"LIST AVAILABLE_ENGINES"</a> <cite title="NONE">[LIST AVAILABLE_ENGINES]</cite> command (not encapsulated into apostrophes), &lt;filename&gt; the name of the instrument's file to be deployed (encapsulated into apostrophes, supporting escape sequences as described in chapter "<a href="#character_set">Character Set and Escape Sequences</a> <cite title="NONE">[character_set]</cite>"), &lt;instrument_index&gt; the index (integer value) of the instrument within the given file, &lt;volume_value&gt; reflects the master volume of the instrument as optionally dotted number (where a value &lt; 1.0 means attenuation and a value &gt; 1.0 means amplification). This parameter easily allows to adjust the volume of all intruments within a custom instrument map without having to adjust their instrument files. The OPTIONAL &lt;instr_load_mode&gt; argument defines the life time of the instrument, that is when the instrument should be loaded, when freed and has exactly the following possibilities:</p>
3938    <p/>
3939    
3940    <ul class="empty">
3941      <li>"ON_DEMAND" - <ul class="empty"><li>The instrument will be loaded when needed, that is when demanded by at least one sampler channel. It will immediately be freed from memory when not needed by any sampler channel anymore.</li></ul><p> </p></li>
3942      <li>"ON_DEMAND_HOLD" - <ul class="empty"><li>The instrument will be loaded when needed, that is when demanded by at least one sampler channel. It will be kept in memory even when not needed by any sampler channel anymore.  Instruments with this mode are only freed when the sampler is reset or all mapping entries with this mode (and respective instrument) are explicitly changed to "ON_DEMAND" and no sampler channel is using the instrument anymore.</li></ul><p> </p></li>
3943      <li>"PERSISTENT" - <ul class="empty"><li>The instrument will immediately be loaded into memory when this mapping command is sent and the instrument is kept all the time. Instruments with this mode are only freed when the sampler is reset or all mapping entries with this mode (and respective instrument) are explicitly changed to "ON_DEMAND" and no sampler channel is using the instrument anymore.</li></ul><p> </p></li>
3944      <li>not supplied - <ul class="empty"><li>In case there is no &lt;instr_load_mode&gt; argument given, it will be up to the InstrumentManager to decide which mode to use.  Usually it will use "ON_DEMAND" if an entry for the given instrument does not exist in the InstrumentManager's list yet, otherwise if an entry already exists, it will simply stick with the mode currently reflected by the already existing entry, that is it will not change the mode.</li></ul><p> </p></li>
3945    </ul>
3946    
3947    <p> </p>
3948    <p id="rfc.section.6.7.7.p.5">The &lt;instr_load_mode&gt; argument thus allows to define an appropriate strategy (low memory consumption vs. fast instrument switching) for each instrument individually. Note, the following restrictions apply to this argument: "ON_DEMAND_HOLD" and "PERSISTENT" have to be supported by the respective sampler engine (which is technically the case when the engine provides an InstrumentManager for its format). If this is not the case the argument will automatically fall back to the default value "ON_DEMAND". Also the load mode of one instrument may automatically change the laod mode of other instrument(s), i.e.  because the instruments are part of the same file and the engine does not allow a way to manage load modes for them individually. Due to this, in case the frontend shows the load modes of entries, the frontend should retrieve the actual mode by i.e. sending <a href="#GET MIDI_INSTRUMENT INFO">"GET MIDI_INSTRUMENT INFO"</a> <cite title="NONE">[GET MIDI_INSTRUMENT INFO]</cite> command(s). Finally the OPTIONAL &lt;name&gt; argument allows to set a custom name (encapsulated into apostrophes, supporting escape sequences as described in chapter "<a href="#character_set">Character Set and Escape Sequences</a> <cite title="NONE">[character_set]</cite>") for the mapping entry, useful for frontends for displaying an appropriate name for mapped instruments (using <a href="#GET MIDI_INSTRUMENT INFO">"GET MIDI_INSTRUMENT INFO"</a> <cite title="NONE">[GET MIDI_INSTRUMENT INFO]</cite>).  </p>
3949    <p id="rfc.section.6.7.7.p.6">By default, "MAP MIDI_INSTRUMENT" commands block until the mapping is completely established in the sampler. The OPTIONAL "NON_MODAL" argument however causes the respective "MAP MIDI_INSTRUMENT" command to return immediately, that is to let the sampler establish the mapping in the background. So this argument might be especially useful for mappings with a "PERSISTENT" type, because these have to load the respective instruments immediately and might thus block for a very long time. It is recommended however to use the OPTIONAL "NON_MODAL" argument only if really necessary, because it has the following drawbacks: as "NON_MODAL" instructions return immediately, they may not necessarily return an error i.e. when the given instrument file turns out to be corrupt, beside that subsequent commands in a LSCP instruction sequence might fail, because mandatory mappings are not yet completed.  </p>
3950    <p id="rfc.section.6.7.7.p.7">Possible Answers:</p>
3951    <p/>
3952    
3953    <ul class="empty">
3954      <li>"OK" - <ul class="empty"><li>usually</li></ul><p> </p></li>
3955      <li>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" - <ul class="empty"><li>when the given map or engine does not exist or a value is out of range</li></ul><p> </p></li>
3956    </ul>
3957    
3958    <p> </p>
3959    <p id="rfc.section.6.7.7.p.9">Examples:</p>
3960    <p/>
3961    
3962    <ul class="empty">
3963      <li>C: "MAP MIDI_INSTRUMENT 0 3 0 gig '/usr/share/Steinway D.gig' 0 0.8 PERSISTENT"</li>
3964      <li>S: "OK"</li>
3965    </ul>
3966    
3967    <p> </p>
3968    <p/>
3969    
3970    <ul class="empty">
3971      <li>C: "MAP MIDI_INSTRUMENT 0 4 50 gig '/home/john/foostrings.gig' 7 1.0"</li>
3972      <li>S: "OK"</li>
3973    </ul>
3974    
3975    <p> </p>
3976    <p/>
3977    
3978    <ul class="empty">
3979      <li>C: "MAP MIDI_INSTRUMENT 0 0 0 gig '/usr/share/piano.gig' 0 1.0 'Normal Piano'"</li>
3980      <li>S: "OK"</li>
3981      <li>C: "MAP MIDI_INSTRUMENT 0 1 0 gig '/usr/share/piano.gig' 0 0.25 'Silent Piano'"</li>
3982      <li>S: "OK"</li>
3983    </ul>
3984    
3985    <p> </p>
3986    <p/>
3987    
3988    <ul class="empty">
3989      <li>C: "MAP MIDI_INSTRUMENT NON_MODAL 1 8 120 gig '/home/joe/foodrums.gig' 0 1.0 PERSISTENT 'Foo Drumkit'"</li>
3990      <li>S: "OK"</li>
3991    </ul>
3992    
3993    <p> </p>
3994    <h1 id="rfc.section.6.7.8"><a href="#rfc.section.6.7.8">6.7.8.</a> <a href="#GET MIDI_INSTRUMENTS" id="GET MIDI_INSTRUMENTS">Getting amount of MIDI instrument map entries</a></h1>
3995    <p id="rfc.section.6.7.8.p.1">The front-end can query the amount of currently existing entries in a MIDI instrument map by sending the following command:</p>
3996    <p/>
3997    
3998    <ul class="empty">
3999      <li>GET MIDI_INSTRUMENTS &lt;map&gt;</li>
4000    </ul>
4001    
4002    <p> </p>
4003    <p id="rfc.section.6.7.8.p.3">The front-end can query the amount of currently existing entries in all MIDI instrument maps by sending the following command:</p>
4004    <p/>
4005    
4006    <ul class="empty">
4007      <li>GET MIDI_INSTRUMENTS ALL</li>
4008    </ul>
4009    
4010    <p> </p>
4011    <p id="rfc.section.6.7.8.p.5">Possible Answers:</p>
4012    <p/>
4013    
4014    <ul class="empty">
4015      <li>The sampler will answer by sending the current number of entries in the MIDI instrument map(s).</li>
4016    </ul>
4017    
4018    <p> </p>
4019    <p id="rfc.section.6.7.8.p.7">Example:</p>
4020    <p/>
4021    
4022    <ul class="empty">
4023      <li>C: "GET MIDI_INSTRUMENTS 0"</li>
4024      <li>S: "234"</li>
4025    </ul>
4026    
4027    <p> </p>
4028    <p/>
4029    
4030    <ul class="empty">
4031      <li>C: "GET MIDI_INSTRUMENTS ALL"</li>
4032      <li>S: "954"</li>
4033    </ul>
4034    
4035    <p> </p>
4036    <h1 id="rfc.section.6.7.9"><a href="#rfc.section.6.7.9">6.7.9.</a> <a href="#LIST MIDI_INSTRUMENTS" id="LIST MIDI_INSTRUMENTS">Getting indeces of all entries of a MIDI instrument map</a></h1>
4037    <p id="rfc.section.6.7.9.p.1">The front-end can query a list of all currently existing entries in a certain MIDI instrument map by sending the following command:</p>
4038    <p/>
4039    
4040    <ul class="empty">
4041      <li>LIST MIDI_INSTRUMENTS &lt;map&gt;</li>
4042    </ul>
4043    
4044    <p> </p>
4045    <p id="rfc.section.6.7.9.p.3">Where &lt;map&gt; is the numeric ID of the MIDI instrument map.</p>
4046    <p id="rfc.section.6.7.9.p.4">The front-end can query a list of all currently existing entries of all MIDI instrument maps by sending the following command:</p>
4047    <p/>
4048    
4049    <ul class="empty">
4050      <li>LIST MIDI_INSTRUMENTS ALL</li>
4051    </ul>
4052    
4053    <p> </p>
4054    <p id="rfc.section.6.7.9.p.6">Possible Answers:</p>
4055    <p/>
4056    
4057    <ul class="empty">
4058      <li>The sampler will answer by sending a comma separated list of map ID - MIDI bank - MIDI program triples, where each triple is encapsulated into curly braces. The list is returned in one single line. Each triple just reflects the key of the respective map entry, thus subsequent <a href="#GET MIDI_INSTRUMENT INFO">"GET MIDI_INSTRUMENT INFO"</a> <cite title="NONE">[GET MIDI_INSTRUMENT INFO]</cite> command(s) are necessary to retrieve detailed information about each entry.</li>
4059    </ul>
4060    
4061    <p> </p>
4062    <p id="rfc.section.6.7.9.p.8">Example:</p>
4063    <p/>
4064    
4065    <ul class="empty">
4066      <li>C: "LIST MIDI_INSTRUMENTS 0"</li>
4067      <li>S: "{0,0,0},{0,0,1},{0,0,3},{0,1,4},{1,127,127}"</li>
4068    </ul>
4069    
4070    <p> </p>
4071    <h1 id="rfc.section.6.7.10"><a href="#rfc.section.6.7.10">6.7.10.</a> <a href="#UNMAP MIDI_INSTRUMENT" id="UNMAP MIDI_INSTRUMENT">Remove an entry from the MIDI instrument map</a></h1>
4072    <p id="rfc.section.6.7.10.p.1">The front-end can delete an entry from a MIDI instrument map by sending the following command:</p>
4073    <p/>
4074    
4075    <ul class="empty">
4076      <li>UNMAP MIDI_INSTRUMENT &lt;map&gt; &lt;midi_bank&gt; &lt;midi_prog&gt;</li>
4077    </ul>
4078    
4079    <p> </p>
4080    <p id="rfc.section.6.7.10.p.3">Where &lt;map&gt; is the numeric ID of the MIDI instrument map, &lt;midi_bank&gt; is an integer value between 0..16383 reflecting the MIDI bank value and &lt;midi_prog&gt; an integer value between 0..127 reflecting the MIDI program value of the map's entrie's key index triple.  </p>
4081    <p id="rfc.section.6.7.10.p.4">Possible Answers:</p>
4082    <p/>
4083    
4084    <ul class="empty">
4085      <li>"OK" - <ul class="empty"><li>usually</li></ul><p> </p></li>
4086      <li>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" - <ul class="empty"><li>when index out of bounds</li></ul><p> </p></li>
4087    </ul>
4088    
4089    <p> </p>
4090    <p id="rfc.section.6.7.10.p.6">Example:</p>
4091    <p/>
4092    
4093    <ul class="empty">
4094      <li>C: "UNMAP MIDI_INSTRUMENT 0 2 127"</li>
4095      <li>S: "OK"</li>
4096    </ul>
4097    
4098    <p> </p>
4099    <h1 id="rfc.section.6.7.11"><a href="#rfc.section.6.7.11">6.7.11.</a> <a href="#GET MIDI_INSTRUMENT INFO" id="GET MIDI_INSTRUMENT INFO">Get current settings of MIDI instrument map entry</a></h1>
4100    <p id="rfc.section.6.7.11.p.1">The front-end can retrieve the current settings of a certain instrument map entry by sending the following command:</p>
4101    <p/>
4102    
4103    <ul class="empty">
4104      <li>GET MIDI_INSTRUMENT INFO &lt;map&gt; &lt;midi_bank&gt; &lt;midi_prog&gt;</li>
4105    </ul>
4106    
4107    <p> </p>
4108    <p id="rfc.section.6.7.11.p.3">Where &lt;map&gt; is the numeric ID of the MIDI instrument map, &lt;midi_bank&gt; is an integer value between 0..16383 reflecting the MIDI bank value, &lt;midi_bank&gt; and &lt;midi_prog&gt; an integer value between 0..127 reflecting the MIDI program value of the map's entrie's key index triple.  </p>
4109    <p id="rfc.section.6.7.11.p.4">Possible Answers:</p>
4110    <p/>
4111    
4112    <ul class="empty">
4113      <li>LinuxSampler will answer by sending a &lt;CRLF&gt; separated list. Each answer line begins with the information category name followed by a colon and then a space character &lt;SP&gt; and finally the info character string to that info category. At the moment the following categories are defined:</li>
4114      <li>"NAME" - <ul class="empty"><li>Name for this MIDI instrument map entry (if defined).  This name shall be used by frontends for displaying a name for this mapped instrument. It can be set and changed with the <a href="#MAP MIDI_INSTRUMENT">"MAP MIDI_INSTRUMENT"</a> <cite title="NONE">[MAP MIDI_INSTRUMENT]</cite> command and does not have to be unique.  (note that this character string may contain <a href="#character_set">escape sequences</a> <cite title="NONE">[character_set]</cite>)</li></ul><p> </p></li>
4115      <li>"ENGINE_NAME" - <ul class="empty"><li>Name of the engine to be deployed for this instrument.</li></ul><p> </p></li>
4116      <li>"INSTRUMENT_FILE" - <ul class="empty"><li>File name of the instrument (note that this path may contain <a href="#character_set">escape sequences</a> <cite title="NONE">[character_set]</cite>).</li></ul><p> </p></li>
4117      <li>"INSTRUMENT_NR" - <ul class="empty"><li>Index of the instrument within the file.</li></ul><p> </p></li>
4118      <li>"INSTRUMENT_NAME" - <ul class="empty"><li>Name of the loaded instrument as reflected by its file.  In contrast to the "NAME" field, the "INSTRUMENT_NAME" field cannot be changed (note that this character string may contain <a href="#character_set">escape sequences</a> <cite title="NONE">[character_set]</cite>).</li></ul><p> </p></li>
4119      <li>"LOAD_MODE" - <ul class="empty"><li>Life time of instrument (see <a href="#MAP MIDI_INSTRUMENT">"MAP MIDI_INSTRUMENT"</a> <cite title="NONE">[MAP MIDI_INSTRUMENT]</cite> for details about this setting).</li></ul><p> </p></li>
4120      <li>"VOLUME" - <ul class="empty"><li>master volume of the instrument as optionally dotted number (where a value &lt; 1.0 means attenuation and a value &gt; 1.0 means amplification)</li></ul><p> </p></li>
4121      <li>The mentioned fields above don't have to be in particular order.</li>
4122    </ul>
4123    
4124    <p> </p>
4125    <p id="rfc.section.6.7.11.p.6">Example:</p>
4126    <p/>
4127    
4128    <ul class="empty">
4129      <li>C: "GET MIDI_INSTRUMENT INFO 1 45 120"</li>
4130      <li>S: "NAME: Drums for Foo Song"</li>
4131      <li>"ENGINE_NAME: GigEngine"</li>
4132      <li>"INSTRUMENT_FILE: /usr/share/joesdrumkit.gig"</li>
4133      <li>"INSTRUMENT_NR: 0"</li>
4134      <li>"INSTRUMENT_NAME: Joe's Drumkit"</li>
4135      <li>"LOAD_MODE: PERSISTENT"</li>
4136      <li>"VOLUME: 1.0"</li>
4137      <li>"."</li>
4138    </ul>
4139    
4140    <p> </p>
4141    <h1 id="rfc.section.6.7.12"><a href="#rfc.section.6.7.12">6.7.12.</a> <a href="#CLEAR MIDI_INSTRUMENTS" id="CLEAR MIDI_INSTRUMENTS">Clear MIDI instrument map</a></h1>
4142    <p id="rfc.section.6.7.12.p.1">The front-end can clear a whole MIDI instrument map, that is delete all its entries by sending the following command:</p>
4143    <p/>
4144    
4145    <ul class="empty">
4146      <li>CLEAR MIDI_INSTRUMENTS &lt;map&gt;</li>
4147    </ul>
4148    
4149    <p> </p>
4150    <p id="rfc.section.6.7.12.p.3">Where &lt;map&gt; is the numeric ID of the map to clear.</p>
4151    <p id="rfc.section.6.7.12.p.4">The front-end can clear all MIDI instrument maps, that is delete all entries of all maps by sending the following command:</p>
4152    <p/>
4153    
4154    <ul class="empty">
4155      <li>CLEAR MIDI_INSTRUMENTS ALL</li>
4156    </ul>
4157    
4158    <p> </p>
4159    <p id="rfc.section.6.7.12.p.6">The command "CLEAR MIDI_INSTRUMENTS ALL" does not delete the maps, only their entries, thus the map's settings like custom name will be preservevd.</p>
4160    <p id="rfc.section.6.7.12.p.7">Possible Answers:</p>
4161    <p/>
4162    
4163    <ul class="empty">
4164      <li>"OK" - <ul class="empty"><li>always</li></ul><p> </p></li>
4165    </ul>
4166    
4167    <p> </p>
4168    <p id="rfc.section.6.7.12.p.9">Examples:</p>
4169    <p/>
4170    
4171    <ul class="empty">
4172      <li>C: "CLEAR MIDI_INSTRUMENTS 0"</li>
4173      <li>S: "OK"</li>
4174    </ul>
4175    
4176    <p> </p>
4177    <p/>
4178    
4179    <ul class="empty">
4180      <li>C: "CLEAR MIDI_INSTRUMENTS ALL"</li>
4181      <li>S: "OK"</li>
4182    </ul>
4183    
4184    <p> </p>
4185    <h1 id="rfc.section.6.8"><a href="#rfc.section.6.8">6.8.</a> <a href="#Managing Instruments Database" id="Managing Instruments Database">Managing Instruments Database</a></h1>
4186    <p id="rfc.section.6.8.p.1">The following commands describe how to use and manage the instruments database.</p>
4187    <p id="rfc.section.6.8.p.2">Notice:</p>
4188    <p/>
4189    
4190    <ul class="empty">
4191      <li>All command arguments representing a path or instrument/directory name support escape sequences as described in chapter "<a href="#character_set">Character Set and Escape Sequences</a> <cite title="NONE">[character_set]</cite>".  </li>
4192      <li>All occurrences of a forward slash in instrument and directory names are escaped with its hex (\x2f) or octal (\057) escape sequence.  </li>
4193    </ul>
4194    
4195    <p> </p>
4196    <h1 id="rfc.section.6.8.1"><a href="#rfc.section.6.8.1">6.8.1.</a> <a href="#ADD DB_INSTRUMENT_DIRECTORY" id="ADD DB_INSTRUMENT_DIRECTORY">Creating a new instrument directory</a></h1>
4197    <p id="rfc.section.6.8.1.p.1">The front-end can add a new instrument directory to the instruments database by sending the following command:</p>
4198    <p/>
4199    
4200    <ul class="empty">
4201      <li>ADD DB_INSTRUMENT_DIRECTORY &lt;dir&gt;</li>
4202    </ul>
4203    
4204    <p> </p>
4205    <p id="rfc.section.6.8.1.p.3">Where &lt;dir&gt; is the absolute path name of the directory to be created (encapsulated into apostrophes).</p>
4206    <p id="rfc.section.6.8.1.p.4">Possible Answers:</p>
4207    <p/>
4208    
4209    <ul class="empty">
4210      <li>"OK" - <ul class="empty"><li>on success</li></ul><p> </p></li>
4211      <li>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" - <ul class="empty"><li>when the directory could not be created, which can happen if the directory already exists or the name contains not allowed symbols</li></ul><p> </p></li>
4212    </ul>
4213    
4214    <p> </p>
4215    <p id="rfc.section.6.8.1.p.6">Examples:</p>
4216    <p/>
4217    
4218    <ul class="empty">
4219      <li>C: "ADD DB_INSTRUMENT_DIRECTORY '/Piano Collection'"</li>
4220      <li>S: "OK"</li>
4221    </ul>
4222    
4223    <p> </p>
4224    <h1 id="rfc.section.6.8.2"><a href="#rfc.section.6.8.2">6.8.2.</a> <a href="#REMOVE DB_INSTRUMENT_DIRECTORY" id="REMOVE DB_INSTRUMENT_DIRECTORY">Deleting an instrument directory</a></h1>
4225    <p id="rfc.section.6.8.2.p.1">The front-end can delete a particular instrument directory from the instruments database by sending the following command:</p>
4226    <p/>
4227    
4228    <ul class="empty">
4229      <li>REMOVE DB_INSTRUMENT_DIRECTORY [FORCE] &lt;dir&gt;</li>
4230    </ul>
4231    
4232    <p> </p>
4233    <p id="rfc.section.6.8.2.p.3">Where &lt;dir&gt; is the absolute path name of the directory to delete. The optional FORCE argument can be used to force the deletion of a non-empty directory and all its content.</p>
4234    <p id="rfc.section.6.8.2.p.4">Possible Answers:</p>
4235    <p/>
4236    
4237    <ul class="empty">
4238      <li>"OK" - <ul class="empty"><li>if the directory is deleted successfully</li></ul><p> </p></li>
4239      <li>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" - <ul class="empty"><li>if the given directory does not exist, or if trying to delete a non-empty directory, without using the FORCE argument.</li></ul><p> </p></li>
4240    </ul>
4241    
4242    <p> </p>
4243    <p id="rfc.section.6.8.2.p.6">Examples:</p>
4244    <p/>
4245    
4246    <ul class="empty">
4247      <li>C: "REMOVE DB_INSTRUMENT_DIRECTORY FORCE '/Piano Collection'"</li>
4248      <li>S: "OK"</li>
4249    </ul>
4250    
4251    <p> </p>
4252    <h1 id="rfc.section.6.8.3"><a href="#rfc.section.6.8.3">6.8.3.</a> <a href="#GET DB_INSTRUMENT_DIRECTORIES" id="GET DB_INSTRUMENT_DIRECTORIES">Getting amount of instrument directories</a></h1>
4253    <p id="rfc.section.6.8.3.p.1">The front-end can retrieve the current amount of directories in a specific directory by sending the following command:</p>
4254    <p/>
4255    
4256    <ul class="empty">
4257      <li>GET DB_INSTRUMENT_DIRECTORIES [RECURSIVE] &lt;dir&gt;</li>
4258    </ul>
4259    
4260    <p> </p>
4261    <p id="rfc.section.6.8.3.p.3">Where &lt;dir&gt; should be replaced by the absolute path name of the directory. If RECURSIVE is specified, the number of all directories, including those located in subdirectories of the specified directory, will be returned.</p>
4262    <p id="rfc.section.6.8.3.p.4">Possible Answers:</p>
4263    <p/>
4264    
4265    <ul class="empty">
4266      <li>The current number of instrument directories in the specified directory.</li>
4267      <li>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" - <ul class="empty"><li>if the given directory does not exist.</li></ul><p> </p></li>
4268    </ul>
4269    
4270    <p> </p>
4271    <p id="rfc.section.6.8.3.p.6">Example:</p>
4272    <p/>
4273    
4274    <ul class="empty">
4275      <li>C: "GET DB_INSTRUMENT_DIRECTORIES '/'"</li>
4276      <li>S: "2"</li>
4277    </ul>
4278    
4279    <p> </p>
4280    <h1 id="rfc.section.6.8.4"><a href="#rfc.section.6.8.4">6.8.4.</a> <a href="#LIST DB_INSTRUMENT_DIRECTORIES" id="LIST DB_INSTRUMENT_DIRECTORIES">Listing all directories in specific directory</a></h1>
4281    <p id="rfc.section.6.8.4.p.1">The front-end can retrieve the current list of directories in specific directory by sending the following command:</p>
4282    <p/>
4283    
4284    <ul class="empty">
4285      <li>LIST DB_INSTRUMENT_DIRECTORIES [RECURSIVE] &lt;dir&gt;</li>
4286    </ul>
4287    
4288    <p> </p>
4289    <p id="rfc.section.6.8.4.p.3">Where &lt;dir&gt; should be replaced by the absolute path name of the directory. If RECURSIVE is specified, the absolute path names of all directories, including those located in subdirectories of the specified directory, will be returned.</p>
4290    <p id="rfc.section.6.8.4.p.4">Possible Answers:</p>
4291    <p/>
4292    
4293    <ul class="empty">
4294      <li>A comma separated list of all instrument directories (encapsulated into apostrophes) in the specified directory.</li>
4295      <li>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" - <ul class="empty"><li>if the given directory does not exist.</li></ul><p> </p></li>
4296    </ul>
4297    
4298    <p> </p>
4299    <p id="rfc.section.6.8.4.p.6">Example:</p>
4300    <p/>
4301    
4302    <ul class="empty">
4303      <li>C: "LIST DB_INSTRUMENT_DIRECTORIES '/'"</li>
4304      <li>S: "'Piano Collection','Percussion Collection'"</li>
4305    </ul>
4306    
4307    <p> </p>
4308    <p/>
4309    
4310    <ul class="empty">
4311      <li>C: "LIST DB_INSTRUMENT_DIRECTORIES RECURSIVE '/'"</li>
4312      <li>S: "'/Piano Collection','/Piano Collection/Acoustic','/Piano Collection/Acoustic/New','/Percussion Collection'"</li>
4313    </ul>
4314    
4315    <p> </p>
4316    <h1 id="rfc.section.6.8.5"><a href="#rfc.section.6.8.5">6.8.5.</a> <a href="#GET DB_INSTRUMENT_DIRECTORY INFO" id="GET DB_INSTRUMENT_DIRECTORY INFO">Getting instrument directory information</a></h1>
4317    <p id="rfc.section.6.8.5.p.1">The front-end can ask for the current settings of an instrument directory by sending the following command:</p>
4318    <p/>
4319    
4320    <ul class="empty">
4321      <li>GET DB_INSTRUMENT_DIRECTORY INFO &lt;dir&gt;</li>
4322    </ul>
4323    
4324    <p> </p>
4325    <p id="rfc.section.6.8.5.p.3">Where &lt;dir&gt; should be replaced by the absolute path name of the directory the front-end is interested in.</p>
4326    <p id="rfc.section.6.8.5.p.4">Possible Answers:</p>
4327    <p/>
4328    
4329    <ul class="empty">
4330      <li>LinuxSampler will answer by sending a &lt;CRLF&gt; separated list.  Each answer line begins with the settings category name followed by a colon and then a space character &lt;SP&gt; and finally the info character string to that setting category. At the moment the following categories are defined:</li>
4331      <li>
4332        <ul class="empty">
4333          <li>DESCRIPTION - <ul class="empty"><li>A brief description of the directory content.  Note that the character string may contain <a href="#character_set">escape sequences</a> <cite title="NONE">[character_set]</cite>.</li></ul><p> </p></li>
4334          <li>CREATED - <ul class="empty"><li>The creation date and time of the directory, represented in "YYYY-MM-DD HH:MM:SS" format</li></ul><p> </p></li>
4335          <li>MODIFIED - <ul class="empty"><li>The date and time of the last modification of the directory, represented in "YYYY-MM-DD HH:MM:SS" format</li></ul><p> </p></li>
4336        </ul>
4337        <p> </p>
4338      </li>
4339    </ul>
4340    
4341    <p> </p>
4342    <p id="rfc.section.6.8.5.p.6">The mentioned fields above don't have to be in particular order.</p>
4343    <p id="rfc.section.6.8.5.p.7">Example:</p>
4344    <p/>
4345    
4346    <ul class="empty">
4347      <li>C: "GET DB_INSTRUMENT_DIRECTORY INFO '/Piano Collection'"</li>
4348      <li>S: "DESCRIPTION: Piano collection of instruments in GigaSampler format."</li>
4349      <li>"CREATED: 2007-02-05 10:23:12"</li>
4350      <li>"MODIFIED: 2007-04-07 12:50:21"</li>
4351      <li>"."</li>
4352    </ul>
4353    
4354    <p> </p>
4355    <h1 id="rfc.section.6.8.6"><a href="#rfc.section.6.8.6">6.8.6.</a> <a href="#SET DB_INSTRUMENT_DIRECTORY NAME" id="SET DB_INSTRUMENT_DIRECTORY NAME">Renaming an instrument directory</a></h1>
4356    <p id="rfc.section.6.8.6.p.1">The front-end can alter the name of a specific instrument directory by sending the following command:</p>
4357    <p/>
4358    
4359    <ul class="empty">
4360      <li>SET DB_INSTRUMENT_DIRECTORY NAME &lt;dir&gt; &lt;name&gt;</li>
4361    </ul>
4362    
4363    <p> </p>
4364    <p id="rfc.section.6.8.6.p.3">Where &lt;dir&gt; is the absolute path name of the directory and &lt;name&gt; is the new name for that directory.</p>
4365    <p id="rfc.section.6.8.6.p.4">Possible Answers:</p>
4366    <p/>
4367    
4368    <ul class="empty">
4369      <li>"OK" - <ul class="empty"><li>on success</li></ul><p> </p></li>
4370      <li>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" - <ul class="empty"><li>in case the given directory does not exists, or if a directory with name equal to the new name already exists.</li></ul><p> </p></li>
4371    </ul>
4372    
4373    <p> </p>
4374    <p id="rfc.section.6.8.6.p.6">Example:</p>
4375    <p/>
4376    
4377    <ul class="empty">
4378      <li>C: "SET DB_INSTRUMENT_DIRECTORY NAME '/Piano Collection/Acustic' 'Acoustic'"</li>
4379      <li>S: "OK"</li>
4380    </ul>
4381    
4382    <p> </p>
4383    <h1 id="rfc.section.6.8.7"><a href="#rfc.section.6.8.7">6.8.7.</a> <a href="#MOVE DB_INSTRUMENT_DIRECTORY" id="MOVE DB_INSTRUMENT_DIRECTORY">Moving an instrument directory</a></h1>
4384    <p id="rfc.section.6.8.7.p.1">The front-end can move a specific instrument directory by sending the following command:</p>
4385    <p/>
4386    
4387    <ul class="empty">
4388      <li>MOVE DB_INSTRUMENT_DIRECTORY &lt;dir&gt; &lt;dst&gt;</li>
4389    </ul>
4390    
4391    <p> </p>
4392    <p id="rfc.section.6.8.7.p.3">Where &lt;dir&gt; is the absolute path name of the directory to move and &lt;dst&gt; is the location where the directory will be moved to.</p>
4393    <p id="rfc.section.6.8.7.p.4">Possible Answers:</p>
4394    <p/>
4395    
4396    <ul class="empty">
4397      <li>"OK" - <ul class="empty"><li>on success</li></ul><p> </p></li>
4398      <li>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" - <ul class="empty"><li>in case a given directory does not exists, or if a directory with name equal to the name of the specified directory already exists in the destination directory. Error is also thrown when trying to move a directory to a subdirectory of itself.</li></ul><p> </p></li>
4399    </ul>
4400    
4401    <p> </p>
4402    <p id="rfc.section.6.8.7.p.6">Example:</p>
4403    <p/>
4404    
4405    <ul class="empty">
4406      <li>C: "MOVE DB_INSTRUMENT_DIRECTORY '/Acoustic' '/Piano Collection/Acoustic'"</li>
4407      <li>S: "OK"</li>
4408    </ul>
4409    
4410    <p> </p>
4411    <h1 id="rfc.section.6.8.8"><a href="#rfc.section.6.8.8">6.8.8.</a> <a href="#COPY DB_INSTRUMENT_DIRECTORY" id="COPY DB_INSTRUMENT_DIRECTORY">Copying instrument directories</a></h1>
4412    <p id="rfc.section.6.8.8.p.1">The front-end can copy a specific instrument directory by sending the following command:</p>
4413    <p/>
4414    
4415    <ul class="empty">
4416      <li>COPY DB_INSTRUMENT_DIRECTORY &lt;dir&gt; &lt;dst&gt;</li>
4417    </ul>
4418    
4419    <p> </p>
4420    <p id="rfc.section.6.8.8.p.3">Where &lt;dir&gt; is the absolute path name of the directory to copy and &lt;dst&gt; is the location where the directory will be copied to.</p>
4421    <p id="rfc.section.6.8.8.p.4">Possible Answers:</p>
4422    <p/>
4423    
4424    <ul class="empty">
4425      <li>"OK" - <ul class="empty"><li>on success</li></ul><p> </p></li>
4426      <li>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" - <ul class="empty"><li>in case a given directory does not exists, or if a directory with name equal to the name of the specified directory already exists in the destination directory. Error is also thrown when trying to copy a directory to a subdirectory of itself.</li></ul><p> </p></li>
4427    </ul>
4428    
4429    <p> </p>
4430    <p id="rfc.section.6.8.8.p.6">Example:</p>
4431    <p/>
4432    
4433    <ul class="empty">
4434      <li>C: "COPY DB_INSTRUMENT_DIRECTORY '/Piano Collection/Acoustic' '/Acoustic/Pianos'"</li>
4435      <li>S: "OK"</li>
4436    </ul>
4437    
4438    <p> </p>
4439    <h1 id="rfc.section.6.8.9"><a href="#rfc.section.6.8.9">6.8.9.</a> <a href="#SET DB_INSTRUMENT_DIRECTORY DESCRIPTION" id="SET DB_INSTRUMENT_DIRECTORY DESCRIPTION">Changing the description of directory</a></h1>
4440    <p id="rfc.section.6.8.9.p.1">The front-end can alter the description of a specific instrument directory by sending the following command:</p>
4441    <p/>
4442    
4443    <ul class="empty">
4444      <li>SET DB_INSTRUMENT_DIRECTORY DESCRIPTION &lt;dir&gt; &lt;desc&gt;</li>
4445    </ul>
4446    
4447    <p> </p>
4448    <p id="rfc.section.6.8.9.p.3">Where &lt;dir&gt; is the absolute path name of the directory and &lt;desc&gt; is the new description for the directory (encapsulated into apostrophes, supporting escape sequences as described in chapter "<a href="#character_set">Character Set and Escape Sequences</a> <cite title="NONE">[character_set]</cite>").</p>
4449    <p id="rfc.section.6.8.9.p.4">Possible Answers:</p>
4450    <p/>
4451    
4452    <ul class="empty">
4453      <li>"OK" - <ul class="empty"><li>on success</li></ul><p> </p></li>
4454      <li>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" - <ul class="empty"><li>in case the given directory does not exists.</li></ul><p> </p></li>
4455    </ul>
4456    
4457    <p> </p>
4458    <p id="rfc.section.6.8.9.p.6">Example:</p>
4459    <p/>
4460    
4461    <ul class="empty">
4462      <li>C: "SET DB_INSTRUMENT_DIRECTORY DESCRIPTION '/Piano Collection' 'A collection of piano instruments in various format.'"</li>
4463      <li>S: "OK"</li>
4464    </ul>
4465    
4466    <p> </p>
4467    <h1 id="rfc.section.6.8.10"><a href="#rfc.section.6.8.10">6.8.10.</a> <a href="#FIND DB_INSTRUMENT_DIRECTORIES" id="FIND DB_INSTRUMENT_DIRECTORIES">Finding directories</a></h1>
4468    <p id="rfc.section.6.8.10.p.1">The front-end can search for directories in specific directory by sending the following command:</p>
4469    <p/>
4470    
4471    <ul class="empty">
4472      <li>FIND DB_INSTRUMENT_DIRECTORIES [NON_RECURSIVE] &lt;dir&gt; &lt;criteria-list&gt;</li>
4473    </ul>
4474    
4475    <p> </p>
4476    <p id="rfc.section.6.8.10.p.3">Where &lt;dir&gt; should be replaced by the absolute path name of the directory to search in. If NON_RECURSIVE is specified, the directories located in subdirectories of the specified directory will not be searched. &lt;criteria-list&gt; is a list of search criterias in form of "key1=val1 key2=val2 ...". The following criterias are allowed:</p>
4477    <p/>
4478    <p id="rfc.section.6.8.10.p.5">Where &lt;search-string&gt; is either a regular expression, or a word list separated with spaces for OR search and with '+' for AND search.</p>
4479    <p id="rfc.section.6.8.10.p.6">Possible Answers:</p>
4480    <p/>
4481    
4482    <ul class="empty">
4483      <li>A comma separated list with the absolute path names (encapsulated into apostrophes) of all directories in the specified directory that satisfy the supplied search criterias.</li>
4484      <li>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" - <ul class="empty"><li>if the given directory does not exist.</li></ul><p> </p></li>
4485    </ul>
4486    
4487    <p> </p>
4488    <p id="rfc.section.6.8.10.p.8">Example:</p>
4489    <p/>
4490    
4491    <ul class="empty">
4492      <li>C: "FIND DB_INSTRUMENT_DIRECTORIES '/' NAME='Piano'"</li>
4493      <li>S: "'/Piano Collection'"</li>
4494    </ul>
4495    
4496    <p> </p>
4497    <p/>
4498    
4499    <ul class="empty">
4500      <li>C: "FIND DB_INSTRUMENT_DIRECTORIES '/' CREATED='..2007-04-01 09:30:13'"</li>
4501      <li>S: "'/Piano Collection','/Percussions'"</li>
4502    </ul>
4503    
4504    <p> </p>
4505    <h1 id="rfc.section.6.8.11"><a href="#rfc.section.6.8.11">6.8.11.</a> <a href="#ADD DB_INSTRUMENTS" id="ADD DB_INSTRUMENTS">Adding instruments to the instruments database</a></h1>
4506    <p id="rfc.section.6.8.11.p.1">The front-end can add one or more instruments to the instruments database by sending the following command:</p>
4507    <p/>
4508    
4509    <ul class="empty">
4510      <li>ADD DB_INSTRUMENTS [NON_MODAL] [&lt;mode&gt;[ FILE_AS_DIR]] &lt;db_dir&gt; &lt;file_path&gt; [&lt;instr_index&gt;]</li>
4511    </ul>
4512    
4513    <p> </p>
4514    <p id="rfc.section.6.8.11.p.3">Where &lt;db_dir&gt; is the absolute path name of a directory (encapsulated into apostrophes) in the instruments database in which only the new instruments (that are not already in the database) will be added, &lt;file_path&gt; is the absolute path name of a file or directory in the file system (encapsulated into apostrophes). In case an instrument file is supplied, only the instruments in the specified file will be added to the instruments database. If the optional &lt;instr_index&gt; (the index of the instrument within the given file) is supplied too, then only the specified instrument will be added.  In case a directory is supplied, the instruments in that directory will be added. The OPTIONAL &lt;mode&gt; argument is only applied when a directory is provided as &lt;file_path&gt; and specifies how the scanning will be done and has exactly the following possibilities:</p>
4515    <p/>
4516    
4517    <ul class="empty">
4518      <li>"RECURSIVE" - <ul class="empty"><li>All instruments will be processed, including those in the subdirectories, and the respective subdirectory tree structure will be recreated in the instruments database</li></ul><p> </p></li>
4519      <li>"NON_RECURSIVE" - <ul class="empty"><li>Only the instruments in the specified directory will be added, the instruments in the subdirectories will not be processed.</li></ul><p> </p></li>
4520      <li>"FLAT" - <ul class="empty"><li>All instruments will be processed, including those in the subdirectories, but the respective subdirectory structure will not be recreated in the instruments database. All instruments will be added directly in the specified database directory.</li></ul><p> </p></li>
4521    </ul>
4522    
4523    <p> </p>
4524    <p id="rfc.section.6.8.11.p.5">If FILE_AS_DIR argument is supplied, all instruments in an instrument file will be added to a separate directory in the instruments database, which name will be the name of the instrument file with the file extension stripped off.  </p>
4525    <p id="rfc.section.6.8.11.p.6">The difference between regular and NON_MODAL versions of the command is that the regular command returns when the scanning is finished while NON_MODAL version returns immediately and a background process is launched.  The <a href="#GET DB_INSTRUMENTS_JOB INFO">GET DB_INSTRUMENTS_JOB INFO</a> <cite title="NONE">[GET DB_INSTRUMENTS_JOB INFO]</cite> command can be used to monitor the scanning progress.</p>
4526    <p id="rfc.section.6.8.11.p.7">Possible Answers:</p>
4527    <p/>
4528    
4529    <ul class="empty">
4530      <li>"OK" - <ul class="empty"><li>on success when NON_MODAL is not supplied</li></ul><p> </p></li>
4531      <li>"OK[&lt;job-id&gt;]" - <ul class="empty"><li>on success when NON_MODAL is supplied, where &lt;job-id&gt; is a numerical ID used to obtain status information about the job progress.  See <a href="#GET DB_INSTRUMENTS_JOB INFO">GET DB_INSTRUMENTS_JOB INFO</a> <cite title="NONE">[GET DB_INSTRUMENTS_JOB INFO]</cite> </li></ul><p> </p></li>
4532      <li>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" - <ul class="empty"><li>if an invalid path is specified.</li></ul><p> </p></li>
4533    </ul>
4534    
4535    <p> </p>
4536    <p id="rfc.section.6.8.11.p.9">Examples:</p>
4537    <p/>
4538    
4539    <ul class="empty">
4540      <li>C: "ADD DB_INSTRUMENTS '/Piano Collection' '/home/me/gigs/PMI Bosendorfer 290.gig' 0"</li>
4541      <li>S: "OK"</li>
4542    </ul>
4543    
4544    <p> </p>
4545    <h1 id="rfc.section.6.8.12"><a href="#rfc.section.6.8.12">6.8.12.</a> <a href="#REMOVE DB_INSTRUMENT" id="REMOVE DB_INSTRUMENT">Removing an instrument</a></h1>
4546    <p id="rfc.section.6.8.12.p.1">The front-end can remove a particular instrument from the instruments database by sending the following command:</p>
4547    <p/>
4548    
4549    <ul class="empty">
4550      <li>REMOVE DB_INSTRUMENT &lt;instr_path&gt;</li>
4551    </ul>
4552    
4553    <p> </p>
4554    <p id="rfc.section.6.8.12.p.3">Where &lt;instr_path&gt; is the absolute path name (in the instruments database) of the instrument to remove.</p>
4555    <p id="rfc.section.6.8.12.p.4">Possible Answers:</p>
4556    <p/>
4557    
4558    <ul class="empty">
4559      <li>"OK" - <ul class="empty"><li>if the instrument is removed successfully</li></ul><p> </p></li>
4560      <li>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" - <ul class="empty"><li>if the given path does not exist or is a directory.</li></ul><p> </p></li>
4561    </ul>
4562    
4563    <p> </p>
4564    <p id="rfc.section.6.8.12.p.6">Examples:</p>
4565    <p/>
4566    
4567    <ul class="empty">
4568      <li>C: "REMOVE DB_INSTRUMENT '/Piano Collection/Bosendorfer 290'"</li>
4569      <li>S: "OK"</li>
4570    </ul>
4571    
4572    <p> </p>
4573    <h1 id="rfc.section.6.8.13"><a href="#rfc.section.6.8.13">6.8.13.</a> <a href="#GET DB_INSTRUMENTS" id="GET DB_INSTRUMENTS">Getting amount of instruments</a></h1>
4574    <p id="rfc.section.6.8.13.p.1">The front-end can retrieve the current amount of instruments in a specific directory by sending the following command:</p>
4575    <p/>
4576    
4577    <ul class="empty">
4578      <li>GET DB_INSTRUMENTS [RECURSIVE] &lt;dir&gt;</li>
4579    </ul>
4580    
4581    <p> </p>
4582    <p id="rfc.section.6.8.13.p.3">Where &lt;dir&gt; should be replaced by the absolute path name of the directory. If RECURSIVE is specified, the number of all instruments, including those located in subdirectories of the specified directory, will be returned.</p>
4583    <p id="rfc.section.6.8.13.p.4">Possible Answers:</p>
4584    <p/>
4585    
4586    <ul class="empty">
4587      <li>The current number of instruments in the specified directory.</li>
4588      <li>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" - <ul class="empty"><li>if the given directory does not exist.</li></ul><p> </p></li>
4589    </ul>
4590    
4591    <p> </p>
4592    <p id="rfc.section.6.8.13.p.6">Example:</p>
4593    <p/>
4594    
4595    <ul class="empty">
4596      <li>C: "GET DB_INSTRUMENTS '/Piano Collection'"</li>
4597      <li>S: "2"</li>
4598    </ul>
4599    
4600    <p> </p>
4601    <h1 id="rfc.section.6.8.14"><a href="#rfc.section.6.8.14">6.8.14.</a> <a href="#LIST DB_INSTRUMENTS" id="LIST DB_INSTRUMENTS">Listing all instruments in specific directory</a></h1>
4602    <p id="rfc.section.6.8.14.p.1">The front-end can retrieve the current list of instruments in specific directory by sending the following command:</p>
4603    <p/>
4604    
4605    <ul class="empty">
4606      <li>LIST DB_INSTRUMENTS [RECURSIVE] &lt;dir&gt;</li>
4607    </ul>
4608    
4609    <p> </p>
4610    <p id="rfc.section.6.8.14.p.3">Where &lt;dir&gt; should be replaced by the absolute path name of the directory. If RECURSIVE is specified, the absolute path names of all instruments, including those located in subdirectories of the specified directory, will be returned.</p>
4611    <p id="rfc.section.6.8.14.p.4">Possible Answers:</p>
4612    <p/>
4613    
4614    <ul class="empty">
4615      <li>A comma separated list of all instruments (encapsulated into apostrophes) in the specified directory.</li>
4616      <li>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" - <ul class="empty"><li>if the given directory does not exist.</li></ul><p> </p></li>
4617    </ul>
4618    
4619    <p> </p>
4620    <p id="rfc.section.6.8.14.p.6">Example:</p>
4621    <p/>
4622    
4623    <ul class="empty">
4624      <li>C: "LIST DB_INSTRUMENTS '/Piano Collection'"</li>
4625      <li>S: "'Bosendorfer 290','Steinway D'"</li>
4626    </ul>
4627    
4628    <p> </p>
4629    <p/>
4630    
4631    <ul class="empty">
4632      <li>C: "LIST DB_INSTRUMENTS RECURSIVE '/Piano Collection'"</li>
4633      <li>S: "'/Piano Collection/Bosendorfer 290','/Piano Collection/Steinway D','/Piano Collection/Lite/Free Piano'"</li>
4634    </ul>
4635    
4636    <p> </p>
4637    <h1 id="rfc.section.6.8.15"><a href="#rfc.section.6.8.15">6.8.15.</a> <a href="#GET DB_INSTRUMENT INFO" id="GET DB_INSTRUMENT INFO">Getting instrument information</a></h1>
4638    <p id="rfc.section.6.8.15.p.1">The front-end can ask for the current settings of an instrument by sending the following command:</p>
4639    <p/>
4640    
4641    <ul class="empty">
4642      <li>GET DB_INSTRUMENT INFO &lt;instr_path&gt;</li>
4643    </ul>
4644    
4645    <p> </p>
4646    <p id="rfc.section.6.8.15.p.3">Where &lt;instr_path&gt; should be replaced by the absolute path name of the instrument the front-end is interested in.</p>
4647    <p id="rfc.section.6.8.15.p.4">Possible Answers:</p>
4648    <p/>
4649    
4650    <ul class="empty">
4651      <li>LinuxSampler will answer by sending a &lt;CRLF&gt; separated list.  Each answer line begins with the settings category name followed by a colon and then a space character &lt;SP&gt; and finally the info character string to that setting category. At the moment the following categories are defined:</li>
4652      <li>
4653        <ul class="empty">
4654          <li>INSTRUMENT_FILE - <ul class="empty"><li>File name of the instrument.  Note that the character string may contain <a href="#character_set">escape sequences</a> <cite title="NONE">[character_set]</cite>.</li></ul><p> </p></li>
4655          <li>INSTRUMENT_NR - <ul class="empty"><li>Index of the instrument within the file.</li></ul><p> </p></li>
4656          <li>FORMAT_FAMILY - <ul class="empty"><li>The format family of the instrument.</li></ul><p> </p></li>
4657          <li>FORMAT_VERSION - <ul class="empty"><li>The format version of the instrument.</li></ul><p> </p></li>
4658          <li>SIZE - <ul class="empty"><li>The size of the instrument in bytes.</li></ul><p> </p></li>
4659          <li>CREATED - <ul class="empty"><li>The date and time when the instrument is added in the instruments database, represented in "YYYY-MM-DD HH:MM:SS" format</li></ul><p> </p></li>
4660          <li>MODIFIED - <ul class="empty"><li>The date and time of the last modification of the instrument's database settings, represented in "YYYY-MM-DD HH:MM:SS" format</li></ul><p> </p></li>
4661          <li>DESCRIPTION - <ul class="empty"><li>A brief description of the instrument.  Note that the character string may contain <a href="#character_set">escape sequences</a> <cite title="NONE">[character_set]</cite>.</li></ul><p> </p></li>
4662          <li>IS_DRUM - <ul class="empty"><li>either true or false, determines whether the instrument is a drumkit or a chromatic instrument</li></ul><p> </p></li>
4663          <li>PRODUCT - <ul class="empty"><li>The product title of the instrument.  Note that the character string may contain <a href="#character_set">escape sequences</a> <cite title="NONE">[character_set]</cite>.</li></ul><p> </p></li>
4664          <li>ARTISTS - <ul class="empty"><li>Lists the artist names.  Note that the character string may contain <a href="#character_set">escape sequences</a> <cite title="NONE">[character_set]</cite>.</li></ul><p> </p></li>
4665          <li>KEYWORDS - <ul class="empty"><li>Provides a list of keywords that refer to the instrument.  Keywords are separated with semicolon and blank.  Note that the character string may contain <a href="#character_set">escape sequences</a> <cite title="NONE">[character_set]</cite>.</li></ul><p> </p></li>
4666        </ul>
4667        <p> </p>
4668      </li>
4669    </ul>
4670    
4671    <p> </p>
4672    <p id="rfc.section.6.8.15.p.6">The mentioned fields above don't have to be in particular order.</p>
4673    <p id="rfc.section.6.8.15.p.7">Example:</p>
4674    <p/>
4675    
4676    <ul class="empty">
4677      <li>C: "GET DB_INSTRUMENT INFO '/Piano Collection/Bosendorfer 290'"</li>
4678      <li>S: "INSTRUMENT_FILE: /home/me/gigs/Bosendorfer 290.gig"</li>
4679      <li>"INSTRUMENT_NR: 0"</li>
4680      <li>"FORMAT_FAMILY: GIG"</li>
4681      <li>"FORMAT_VERSION: 2"</li>
4682      <li>"SIZE: 2050871870"</li>
4683      <li>"CREATED: 2007-02-05 10:23:12"</li>
4684      <li>"MODIFIED: 2007-04-07 12:50:21"</li>
4685      <li>"DESCRIPTION: "</li>
4686      <li>"IS_DRUM: false"</li>
4687      <li>"PRODUCT: GRANDIOSO Bosendorfer 290"</li>
4688      <li>"ARTISTS: Post Musical Instruments"</li>
4689      <li>"KEYWORDS: Bosendorfer"</li>
4690      <li>"."</li>
4691    </ul>
4692    
4693    <p> </p>
4694    <h1 id="rfc.section.6.8.16"><a href="#rfc.section.6.8.16">6.8.16.</a> <a href="#SET DB_INSTRUMENT NAME" id="SET DB_INSTRUMENT NAME">Renaming an instrument</a></h1>
4695    <p id="rfc.section.6.8.16.p.1">The front-end can alter the name of a specific instrument by sending the following command:</p>
4696    <p/>
4697    
4698    <ul class="empty">
4699      <li>SET DB_INSTRUMENT NAME &lt;instr&gt; &lt;name&gt;</li>
4700    </ul>
4701    
4702    <p> </p>
4703    <p id="rfc.section.6.8.16.p.3">Where &lt;instr&gt; is the absolute path name of the instrument and &lt;name&gt; is the new name for that instrument.</p>
4704    <p id="rfc.section.6.8.16.p.4">Possible Answers:</p>
4705    <p/>
4706    
4707    <ul class="empty">
4708      <li>"OK" - <ul class="empty"><li>on success</li></ul><p> </p></li>
4709      <li>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" - <ul class="empty"><li>in case the given instrument does not exists, or if an instrument with name equal to the new name already exists.</li></ul><p> </p></li>
4710    </ul>
4711    
4712    <p> </p>
4713    <p id="rfc.section.6.8.16.p.6">Example:</p>
4714    <p/>
4715    
4716    <ul class="empty">
4717      <li>C: "SET DB_INSTRUMENT NAME '/Piano Collection/Bosendorfer' 'Bosendorfer 290'"</li>
4718      <li>S: "OK"</li>
4719    </ul>
4720    
4721    <p> </p>
4722    <h1 id="rfc.section.6.8.17"><a href="#rfc.section.6.8.17">6.8.17.</a> <a href="#MOVE DB_INSTRUMENT" id="MOVE DB_INSTRUMENT">Moving an instrument</a></h1>
4723    <p id="rfc.section.6.8.17.p.1">The front-end can move a specific instrument to another directory by sending the following command:</p>
4724    <p/>
4725    
4726    <ul class="empty">
4727      <li>MOVE DB_INSTRUMENT &lt;instr&gt; &lt;dst&gt;</li>
4728    </ul>
4729    
4730    <p> </p>
4731    <p id="rfc.section.6.8.17.p.3">Where &lt;instr&gt; is the absolute path name of the instrument to move and &lt;dst&gt; is the directory where the instrument will be moved to.</p>
4732    <p id="rfc.section.6.8.17.p.4">Possible Answers:</p>
4733    <p/>
4734    
4735    <ul class="empty">
4736      <li>"OK" - <ul class="empty"><li>on success</li></ul><p> </p></li>
4737      <li>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" - <ul class="empty"><li>in case the given instrument does not exists, or if an instrument with name equal to the name of the specified instrument already exists in the destination directory.</li></ul><p> </p></li>
4738    </ul>
4739    
4740    <p> </p>
4741    <p id="rfc.section.6.8.17.p.6">Example:</p>
4742    <p/>
4743    
4744    <ul class="empty">
4745      <li>C: "MOVE DB_INSTRUMENT '/Piano Collection/Bosendorfer 290' '/Piano Collection/Acoustic'"</li>
4746      <li>S: "OK"</li>
4747    </ul>
4748    
4749    <p> </p>
4750    <h1 id="rfc.section.6.8.18"><a href="#rfc.section.6.8.18">6.8.18.</a> <a href="#COPY DB_INSTRUMENT" id="COPY DB_INSTRUMENT">Copying instruments</a></h1>
4751    <p id="rfc.section.6.8.18.p.1">The front-end can copy a specific instrument to another directory by sending the following command:</p>
4752    <p/>
4753    
4754    <ul class="empty">
4755      <li>COPY DB_INSTRUMENT &lt;instr&gt; &lt;dst&gt;</li>
4756    </ul>
4757    
4758    <p> </p>
4759    <p id="rfc.section.6.8.18.p.3">Where &lt;instr&gt; is the absolute path name of the instrument to copy and &lt;dst&gt; is the directory where the instrument will be copied to.</p>
4760    <p id="rfc.section.6.8.18.p.4">Possible Answers:</p>
4761    <p/>
4762    
4763    <ul class="empty">
4764      <li>"OK" - <ul class="empty"><li>on success</li></ul><p> </p></li>
4765      <li>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" - <ul class="empty"><li>in case the given instrument does not exists, or if an instrument with name equal to the name of the specified instrument already exists in the destination directory.</li></ul><p> </p></li>
4766    </ul>
4767    
4768    <p> </p>
4769    <p id="rfc.section.6.8.18.p.6">Example:</p>
4770    <p/>
4771    
4772    <ul class="empty">
4773      <li>C: "COPY DB_INSTRUMENT '/Piano Collection/Bosendorfer 290' '/Acoustic/Pianos/'"</li>
4774      <li>S: "OK"</li>
4775    </ul>
4776    
4777    <p> </p>
4778    <h1 id="rfc.section.6.8.19"><a href="#rfc.section.6.8.19">6.8.19.</a> <a href="#SET DB_INSTRUMENT DESCRIPTION" id="SET DB_INSTRUMENT DESCRIPTION">Changing the description of instrument</a></h1>
4779    <p id="rfc.section.6.8.19.p.1">The front-end can alter the description of a specific instrument by sending the following command:</p>
4780    <p/>
4781    
4782    <ul class="empty">
4783      <li>SET DB_INSTRUMENT DESCRIPTION &lt;instr&gt; &lt;desc&gt;</li>
4784    </ul>
4785    
4786    <p> </p>
4787    <p id="rfc.section.6.8.19.p.3">Where &lt;instr&gt; is the absolute path name of the instrument and &lt;desc&gt; is the new description for the instrument (encapsulated into apostrophes, supporting escape sequences as described in chapter "<a href="#character_set">Character Set and Escape Sequences</a> <cite title="NONE">[character_set]</cite>").</p>
4788    <p id="rfc.section.6.8.19.p.4">Possible Answers:</p>
4789    <p/>
4790    
4791    <ul class="empty">
4792      <li>"OK" - <ul class="empty"><li>on success</li></ul><p> </p></li>
4793      <li>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" - <ul class="empty"><li>in case the given instrument does not exists.</li></ul><p> </p></li>
4794    </ul>
4795    
4796    <p> </p>
4797    <p id="rfc.section.6.8.19.p.6">Example:</p>
4798    <p/>
4799    
4800    <ul class="empty">
4801      <li>C: "SET DB_INSTRUMENT DESCRIPTION '/Piano Collection/Acoustic/Bosendorfer 290' 'No comment :)'"</li>
4802      <li>S: "OK"</li>
4803    </ul>
4804    
4805    <p> </p>
4806    <h1 id="rfc.section.6.8.20"><a href="#rfc.section.6.8.20">6.8.20.</a> <a href="#FIND DB_INSTRUMENTS" id="FIND DB_INSTRUMENTS">Finding instruments</a></h1>
4807    <p id="rfc.section.6.8.20.p.1">The front-end can search for instruments in specific directory by sending the following command:</p>
4808    <p/>
4809    
4810    <ul class="empty">
4811      <li>FIND DB_INSTRUMENTS [NON_RECURSIVE] &lt;dir&gt; &lt;criteria-list&gt;</li>
4812    </ul>
4813    
4814    <p> </p>
4815    <p id="rfc.section.6.8.20.p.3">Where &lt;dir&gt; should be replaced by the absolute path name of the directory to search in. If NON_RECURSIVE is specified, the directories located in subdirectories of the specified directory will not be searched. &lt;criteria-list&gt; is a list of search criterias in form of "key1=val1 key2=val2 ...". The following criterias are allowed:</p>
4816    <p/>
4817    <p id="rfc.section.6.8.20.p.5">Where &lt;search-string&gt; is either a regular expression, or a word list separated with spaces for OR search and with '+' for AND search.</p>
4818    <p id="rfc.section.6.8.20.p.6">Possible Answers:</p>
4819    <p/>
4820    
4821    <ul class="empty">
4822      <li>A comma separated list with the absolute path names (encapsulated into apostrophes) of all instruments in the specified directory that satisfy the supplied search criterias.</li>
4823      <li>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" - <ul class="empty"><li>if the given directory does not exist.</li></ul><p> </p></li>
4824    </ul>
4825    
4826    <p> </p>
4827    <p id="rfc.section.6.8.20.p.8">Example:</p>
4828    <p/>
4829    
4830    <ul class="empty">
4831      <li>C: "FIND DB_INSTRUMENTS '/Piano Collection' NAME='bosendorfer+290'"</li>
4832      <li>S: "'/Piano Collection/Bosendorfer 290'"</li>
4833    </ul>
4834    
4835    <p> </p>
4836    <p/>
4837    
4838    <ul class="empty">
4839      <li>C: "FIND DB_INSTRUMENTS '/Piano Collection' CREATED='2007-04-01 09:30:13..'"</li>
4840      <li>S: "'/Piano Collection/Bosendorfer 290','/Piano Collection/Steinway D'"</li>
4841    </ul>
4842    
4843    <p> </p>
4844    <h1 id="rfc.section.6.8.21"><a href="#rfc.section.6.8.21">6.8.21.</a> <a href="#GET DB_INSTRUMENTS_JOB INFO" id="GET DB_INSTRUMENTS_JOB INFO">Getting job status information</a></h1>
4845    <p id="rfc.section.6.8.21.p.1">The front-end can ask for the current status of a particular database instruments job by sending the following command:</p>
4846    <p/>
4847    
4848    <ul class="empty">
4849      <li>GET DB_INSTRUMENTS_JOB INFO &lt;job-id&gt;</li>
4850    </ul>
4851    
4852    <p> </p>
4853    <p id="rfc.section.6.8.21.p.3">Where &lt;job-id&gt; should be replaced by the numerical ID of the job the front-end is interested in.</p>
4854    <p id="rfc.section.6.8.21.p.4">Possible Answers:</p>
4855    <p/>
4856    
4857    <ul class="empty">
4858      <li>LinuxSampler will answer by sending a &lt;CRLF&gt; separated list.  Each answer line begins with the settings category name followed by a colon and then a space character &lt;SP&gt; and finally the info character string to that setting category. At the moment the following categories are defined:</li>
4859      <li>
4860        <ul class="empty">
4861          <li>FILES_TOTAL - <ul class="empty"><li>The total number of files scheduled for scanning</li></ul><p> </p></li>
4862          <li>FILES_SCANNED - <ul class="empty"><li>The current number of scanned files</li></ul><p> </p></li>
4863          <li>SCANNING - <ul class="empty"><li>The absolute path name of the file which is currently being scanned</li></ul><p> </p></li>
4864          <li>STATUS - <ul class="empty"><li>An integer value between 0 and 100 indicating the scanning progress percentage of the file which is currently being scanned</li></ul><p> </p></li>
4865        </ul>
4866        <p> </p>
4867      </li>
4868    </ul>
4869    
4870    <p> </p>
4871    <p id="rfc.section.6.8.21.p.6">The mentioned fields above don't have to be in particular order.</p>
4872    <p id="rfc.section.6.8.21.p.7">Example:</p>
4873    <p/>
4874    
4875    <ul class="empty">
4876      <li>C: "GET DB_INSTRUMENTS_JOB INFO 2"</li>
4877      <li>S: "FILES_TOTAL: 12"</li>
4878      <li>"FILES_SCANNED: 7"</li>
4879      <li>"SCANNING: /home/me/gigs/Bosendorfer 290.gig"</li>
4880      <li>"STATUS: 42"</li>
4881      <li>"."</li>
4882    </ul>
4883    
4884    <p> </p>
4885    <h1 id="rfc.section.6.8.22"><a href="#rfc.section.6.8.22">6.8.22.</a> <a href="#FORMAT INSTRUMENTS_DB" id="FORMAT INSTRUMENTS_DB">Formatting the instruments database</a></h1>
4886    <p id="rfc.section.6.8.22.p.1">The front-end can remove all instruments and directories and re-create the instruments database structure (e.g., in case of a database corruption) by sending the following command:</p>
4887    <p/>
4888    
4889    <ul class="empty">
4890      <li>FORMAT INSTRUMENTS_DB</li>
4891    </ul>
4892    
4893    <p> </p>
4894    <p id="rfc.section.6.8.22.p.3">Possible Answers:</p>
4895    <p/>
4896    
4897    <ul class="empty">
4898      <li>"OK" - <ul class="empty"><li>on success</li></ul><p> </p></li>
4899      <li>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" - <ul class="empty"><li>If the formatting of the instruments database failed.</li></ul><p> </p></li>
4900    </ul>
4901    
4902    <p> </p>
4903    <h1 id="rfc.section.6.8.23"><a href="#rfc.section.6.8.23">6.8.23.</a> <a href="#FIND LOST DB_INSTRUMENT_FILES" id="FIND LOST DB_INSTRUMENT_FILES">Checking for lost instrument files</a></h1>
4904    <p id="rfc.section.6.8.23.p.1">The front-end can retrieve the list of all instrument files in the instruments database that don't exist in the filesystem by sending the following command:</p>
4905    <p/>
4906    
4907    <ul class="empty">
4908      <li>FIND LOST DB_INSTRUMENT_FILES</li>
4909    </ul>
4910    
4911    <p> </p>
4912    <p id="rfc.section.6.8.23.p.3">Possible Answers:</p>
4913    <p/>
4914    
4915    <ul class="empty">
4916      <li>A comma separated list with the absolute path names (encapsulated into apostrophes) of all lost instrument files.</li>
4917      <li>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" - <ul class="empty"><li>in case it failed, providing an appropriate error code and error message.</li></ul><p> </p></li>
4918    </ul>
4919    
4920    <p> </p>
4921    <p id="rfc.section.6.8.23.p.5">Example:</p>
4922    <p/>
4923    
4924    <ul class="empty">
4925      <li>C: "FIND LOST DB_INSTRUMENT_FILES"</li>
4926      <li>S: "'/gigs/Bosendorfer 290.gig','/gigs/Steinway D.gig','/gigs/Free Piano.gig'"</li>
4927    </ul>
4928    
4929    <p> </p>
4930    <h1 id="rfc.section.6.8.24"><a href="#rfc.section.6.8.24">6.8.24.</a> <a href="#SET DB_INSTRUMENT FILE_PATH" id="SET DB_INSTRUMENT FILE_PATH">Replacing an instrument file</a></h1>
4931    <p id="rfc.section.6.8.24.p.1">The front-end can substitute all occurrences of an instrument file in the instruments database with a new one by sending the following command:</p>
4932    <p/>
4933    
4934    <ul class="empty">
4935      <li>SET DB_INSTRUMENT FILE_PATH &lt;old_path&gt; &lt;new_path&gt;</li>
4936    </ul>
4937    
4938    <p> </p>
4939    <p id="rfc.section.6.8.24.p.3">Where &lt;old_path&gt; is the absolute path name of the instrument file to substitute with &lt;new_path&gt;.</p>
4940    <p id="rfc.section.6.8.24.p.4">Possible Answers:</p>
4941    <p/>
4942    
4943    <ul class="empty">
4944      <li>"OK" - <ul class="empty"><li>on success</li></ul><p> </p></li>
4945      <li>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" - <ul class="empty"><li>in case it failed, providing an appropriate error code and error message.</li></ul><p> </p></li>
4946    </ul>
4947    
4948    <p> </p>
4949    <p id="rfc.section.6.8.24.p.6">Example:</p>
4950    <p/>
4951    
4952    <ul class="empty">
4953      <li>C: "SET DB_INSTRUMENT FILE_PATH '/gigs/Bosendorfer 290.gig' '/gigs/pianos/Bosendorfer 290.gig'"</li>
4954      <li>S: "OK"</li>
4955    </ul>
4956    
4957    <p> </p>
4958    <h1 id="rfc.section.6.9"><a href="#rfc.section.6.9">6.9.</a> <a href="#editing_instruments" id="editing_instruments">Editing Instruments</a></h1>
4959    <p id="rfc.section.6.9.p.1">The sampler allows to edit instruments while playing with the sampler by spawning an external (3rd party) instrument editor application for a given instrument. The 3rd party instrument editor applications have to place a respective plugin DLL file into the sampler's plugins directory. The sampler will automatically try to load all plugin DLLs in that directory on startup and only on startup!</p>
4960    <p id="rfc.section.6.9.p.2">At the moment there is only one command for this feature set, but this will most probably change in future.</p>
4961    <h1 id="rfc.section.6.9.1"><a href="#rfc.section.6.9.1">6.9.1.</a> <a href="#EDIT INSTRUMENT" id="EDIT INSTRUMENT">Opening an appropriate instrument editor application</a></h1>
4962    <p id="rfc.section.6.9.1.p.1">The front-end can request to open an appropriate instrument editor application by sending the following command:</p>
4963    <p/>
4964    
4965    <ul class="empty">
4966      <li>EDIT CHANNEL INSTRUMENT &lt;sampler-channel&gt;</li>
4967    </ul>
4968    
4969    <p> </p>
4970    <p id="rfc.section.6.9.1.p.3">Where &lt;sampler-channel&gt; should be replaced by the number of the sampler channel as given by the <a href="#ADD CHANNEL">"ADD CHANNEL"</a> <cite title="NONE">[ADD CHANNEL]</cite> or <a href="#LIST CHANNELS">"LIST CHANNELS"</a> <cite title="NONE">[LIST CHANNELS]</cite> command.</p>
4971    <p id="rfc.section.6.9.1.p.4">The sampler will try to ask all registered instrument editors (or to be more specific: their sampler plugins) whether they are capable to handle the instrument on the given sampler channel. The sampler will simply use the first instrument editor application which replied with a positive answer and spawn that instrument editor application within the sampler's process and provide that application access to the instrument's data structures, so both applications can share and access the same instruments data at the same time, thus allowing to immediately hear changes with the sampler made by the instrument editor.</p>
4972    <p id="rfc.section.6.9.1.p.5">Note: consequently instrument editors are always spawned locally on the same machine where the sampler is running on!</p>
4973    <p id="rfc.section.6.9.1.p.6">Possible Answers:</p>
4974    <p/>
4975    
4976    <ul class="empty">
4977      <li>"OK" - <ul class="empty"><li>when an appropriate instrument editor was launched</li></ul><p> </p></li>
4978      <li>"WRN:&lt;warning-code&gt;:&lt;warning-message&gt;" - <ul class="empty"><li>when an appropriate instrument editor was launched, but there are noteworthy issues</li></ul><p> </p></li>
4979      <li>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" - <ul class="empty"><li>when an appropriate instrument editor could not be launched</li></ul><p> </p></li>
4980    </ul>
4981    
4982    <p> </p>
4983    <p id="rfc.section.6.9.1.p.8">Examples:</p>
4984    <p/>
4985    
4986    <ul class="empty">
4987      <li>C: "EDIT CHANNEL INSTRUMENT 0"</li>
4988      <li>S: "OK"</li>
4989    </ul>
4990    
4991    <p> </p>
4992    <h1 id="rfc.section.6.10"><a href="#rfc.section.6.10">6.10.</a> <a href="#file_management" id="file_management">Managing Files</a></h1>
4993    <p id="rfc.section.6.10.p.1">You can query detailed information about files located at the same system where the sampler instance is running on.  Using this command set allows to retrieve file information even remotely from another machine.</p>
4994    <h1 id="rfc.section.6.10.1"><a href="#rfc.section.6.10.1">6.10.1.</a> <a href="#GET FILE INSTRUMENTS" id="GET FILE INSTRUMENTS">Retrieving amount of instruments of a file</a></h1>
4995    <p id="rfc.section.6.10.1.p.1">The front-end can retrieve the amount of instruments within a given instrument file by sending the following command:</p>
4996    <p/>
4997    
4998    <ul class="empty">
4999      <li>GET FILE INSTRUMENTS &lt;filename&gt;</li>
5000    </ul>
5001    
5002    <p> </p>
5003    <p id="rfc.section.6.10.1.p.3">Where &lt;filename&gt; is the name of the instrument file (encapsulated into apostrophes, supporting escape sequences as described in chapter "<a href="#character_set">Character Set and Escape Sequences</a> <cite title="NONE">[character_set]</cite>").</p>
5004    <p id="rfc.section.6.10.1.p.4">The sampler will try to ask all sampler engines, whether they support the given file and ask the first engine with a positive answer for the amount of instruments.</p>
5005    <p id="rfc.section.6.10.1.p.5">Possible Answers:</p>
5006    <p/>
5007    
5008    <ul class="empty">
5009      <li>On success, the sampler will answer by returning the amount of instruments.  </li>
5010      <li>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" - <ul class="empty"><li>if the file could not be handled</li></ul><p> </p></li>
5011    </ul>
5012    
5013    <p> </p>
5014    <p id="rfc.section.6.10.1.p.7">Examples:</p>
5015    <p/>
5016    
5017    <ul class="empty">
5018      <li>C: "GET FILE INSTRUMENTS 'D:/Sounds/Foo.gig'"</li>
5019      <li>S: "10"</li>
5020    </ul>
5021    
5022    <p> </p>
5023    <h1 id="rfc.section.6.10.2"><a href="#rfc.section.6.10.2">6.10.2.</a> <a href="#LIST FILE INSTRUMENTS" id="LIST FILE INSTRUMENTS">Retrieving all instruments of a file</a></h1>
5024    <p id="rfc.section.6.10.2.p.1">The front-end can retrieve a list of all instruments within a given instrument file by sending the following command:</p>
5025    <p/>
5026    
5027    <ul class="empty">
5028      <li>LIST FILE INSTRUMENTS &lt;filename&gt;</li>
5029    </ul>
5030    
5031    <p> </p>
5032    <p id="rfc.section.6.10.2.p.3">Where &lt;filename&gt; is the name of the instrument file (encapsulated into apostrophes, supporting escape sequences as described in chapter "<a href="#character_set">Character Set and Escape Sequences</a> <cite title="NONE">[character_set]</cite>").</p>
5033    <p id="rfc.section.6.10.2.p.4">The sampler will try to ask all sampler engines, whether they support the given file and ask the first engine with a positive answer for a list of IDs for the instruments in the given file.</p>
5034    <p id="rfc.section.6.10.2.p.5">Possible Answers:</p>
5035    <p/>
5036    
5037    <ul class="empty">
5038      <li>On success, the sampler will answer by returning a comma separated list of instrument IDs.  </li>
5039      <li>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" - <ul class="empty"><li>if the file could not be handled</li></ul><p> </p></li>
5040    </ul>
5041    
5042    <p> </p>
5043    <p id="rfc.section.6.10.2.p.7">Examples:</p>
5044    <p/>
5045    
5046    <ul class="empty">
5047      <li>C: "LIST FILE INSTRUMENTS 'D:/Sounds/Foo.gig'"</li>
5048      <li>S: "0,1,2,3,4,5,6,7,8,9"</li>
5049    </ul>
5050    
5051    <p> </p>
5052    <h1 id="rfc.section.6.10.3"><a href="#rfc.section.6.10.3">6.10.3.</a> <a href="#GET FILE INSTRUMENT INFO" id="GET FILE INSTRUMENT INFO">Retrieving information about one instrument in a file</a></h1>
5053    <p id="rfc.section.6.10.3.p.1">The front-end can retrieve detailed information about a specific instrument within a given instrument file by sending the following command:</p>
5054    <p/>
5055    
5056    <ul class="empty">
5057      <li>GET FILE INSTRUMENT INFO &lt;filename&gt; &lt;instr-id&gt;</li>
5058    </ul>
5059    
5060    <p> </p>
5061    <p id="rfc.section.6.10.3.p.3">Where &lt;filename&gt; is the name of the instrument file (encapsulated into apostrophes, supporting escape sequences as described in chapter "<a href="#character_set">Character Set and Escape Sequences</a> <cite title="NONE">[character_set]</cite>") and &lt;instr-id&gt; is the numeric instrument ID as returned by the <a href="#LIST FILE INSTRUMENTS">"LIST FILE INSTRUMENTS"</a> <cite title="NONE">[LIST FILE INSTRUMENTS]</cite> command.</p>
5062    <p id="rfc.section.6.10.3.p.4">The sampler will try to ask all sampler engines, whether they support the given file and ask the first engine with a positive answer for information about the specific instrument in the given file.</p>
5063    <p id="rfc.section.6.10.3.p.5">Possible Answers:</p>
5064    <p/>
5065    
5066    <ul class="empty">
5067      <li>LinuxSampler will answer by sending a &lt;CRLF&gt; separated list.  Each answer line begins with the settings category name followed by a colon and then a space character &lt;SP&gt; and finally the info character string to that setting category. At the moment the following categories are defined:</li>
5068      <li>
5069        <ul class="empty">
5070          <li>NAME - <ul class="empty"><li>name of the instrument as stored in the instrument file</li></ul><p> </p></li>
5071          <li>FORMAT_FAMILY - <ul class="empty"><li>name of the sampler format of the given instrument</li></ul><p> </p></li>
5072          <li>FORMAT_VERSION - <ul class="empty"><li>version of the sampler format the instrumen is stored as</li></ul><p> </p></li>
5073          <li>PRODUCT - <ul class="empty"><li>official product name of the instrument as stored in the file </li></ul><p> </p></li>
5074          <li>ARTISTS - <ul class="empty"><li>artists / sample library vendor of the instrument</li></ul><p> </p></li>
5075          <li>KEY_BINDINGS - <ul class="empty"><li>comma separated list of integer values representing the instrument's key mapping in the range between 0 .. 127, reflecting the analog meaning of the MIDI specification.</li></ul><p> </p></li>
5076          <li>KEYSWITCH_BINDINGS - <ul class="empty"><li>comma separated list of integer values representing the instrument's keyswitch mapping in the range between 0 .. 127, reflecting the analog meaning of the MIDI specification.</li></ul><p> </p></li>
5077        </ul>
5078        <p> </p>
5079      </li>
5080    </ul>
5081    
5082    <p> </p>
5083    <p id="rfc.section.6.10.3.p.7">The mentioned fields above don't have to be in particular order.</p>
5084    <p id="rfc.section.6.10.3.p.8">Example:</p>
5085    <p/>
5086    
5087    <ul class="empty">
5088      <li>C: "GET FILE INSTRUMENT INFO 'D:/Sounds/Foo.gig' 0"</li>
5089      <li>S: "NAME: Lunatic Loops"</li>
5090      <li>"FORMAT_FAMILY: GIG"</li>
5091      <li>"FORMAT_VERSION: 3"</li>
5092      <li>"PRODUCT: The Backbone Bongo Beats"</li>
5093      <li>"ARTISTS: Jimmy the Fish"</li>
5094      <li>"."</li>
5095    </ul>
5096    
5097    <p> </p>
5098    <h1 id="rfc.section.6.11"><a href="#rfc.section.6.11">6.11.</a> <a href="#effects" id="effects">Managing Effects</a></h1>
5099    <p id="rfc.section.6.11.p.1">There are two possible approaches to apply audio effects (e.g. reverb, delay, compression).  You can either a) load and apply internal effects or you can b) route effect sends directly to dedicated output channels of your audio device and apply effects externally (e.g. by routing those dedicated output channels to another application).</p>
5100    <p id="rfc.section.6.11.p.2">This chapter describes how to load and manage internal effects.  If your intention is rather to apply effects externally, then you can omit this chapter. For applying effects externally, you just need to <a href="#CREATE FX_SEND">create FX sends</a> <cite title="NONE">[CREATE FX_SEND]</cite> on the respective sampler channel(s) and <a href="#SET FX_SEND AUDIO_OUTPUT_CHANNEL">adjust their destination audio channels</a> <cite title="NONE">[SET FX_SEND AUDIO_OUTPUT_CHANNEL]</cite> appropriately, because by default FX sends are automatically routed directly to the audio output device.</p>
5101    <p id="rfc.section.6.11.p.3">The sampler usually provides a set of internal audio effects.  The exact set of effects depends on the availability of third party effect plugins installed on the system where the sampler runs on (e.g. LADSPA plugins).</p>
5102    <p id="rfc.section.6.11.p.4">At the moment only "send effects" are supported. Support for "insert effects" and "master effects" is planned to be added at a later point.</p>
5103    <p id="rfc.section.6.11.p.5">The following commands allow to retrieve the set of internal effects available to the sampler, detailed information about those effects and to create and destroy instances of such effects. After an instance of an effect is created, the effect instance can be inserted into the audio signal path of the sampler, e.g. as send effect.</p>
5104    <p id="rfc.section.6.11.p.6">The sampler allows to create an arbitrary amount of so called send effect chains. Each effect chain can host an arbitrary amount of effect instances. The output of the first effect instance in an effect chain is fed to the input of the second effect instance of the chain and so on. So effects in one chain are processed sequentially. Send effect chains however are processed in parallel to other send effect chains. Audio signals of sampler channels are fed to send effects by creating FX sends to the respective sampler channel and assigning a destination send effect to that FX by using the <a href="#SET FX_SEND EFFECT">"SET FX_SEND EFFECT"</a> <cite title="NONE">[SET FX_SEND EFFECT]</cite> command. The latter allows to route the FX send to the beginning of a send effect chain, as well as directly to any other position of the send effect chain.</p>
5105    <h1 id="rfc.section.6.11.1"><a href="#rfc.section.6.11.1">6.11.1.</a> <a href="#GET AVAILABLE_EFFECTS" id="GET AVAILABLE_EFFECTS">Retrieve amount of available effects</a></h1>
5106    <p id="rfc.section.6.11.1.p.1">The front-end can retrieve the amount of internal effects, available to the sampler by sending the following command:</p>
5107    <p/>
5108    
5109    <ul class="empty">
5110      <li>GET AVAILABLE_EFFECTS</li>
5111    </ul>
5112    
5113    <p> </p>
5114    <p id="rfc.section.6.11.1.p.3">Possible Answers:</p>
5115    <p/>
5116    
5117    <ul class="empty">
5118      <li>The sampler will answer by returning the current number of effects available to the sampler.</li>
5119    </ul>
5120    
5121    <p> </p>
5122    <p id="rfc.section.6.11.1.p.5">Examples:</p>
5123    <p/>
5124    
5125    <ul class="empty">
5126      <li>C: "GET AVAILABLE_EFFECTS"</li>
5127      <li>S: "129"</li>
5128    </ul>
5129    
5130    <p> </p>
5131    <h1 id="rfc.section.6.11.2"><a href="#rfc.section.6.11.2">6.11.2.</a> <a href="#LIST AVAILABLE_EFFECTS" id="LIST AVAILABLE_EFFECTS">Get list of available effects</a></h1>
5132    <p id="rfc.section.6.11.2.p.1">The set of available internal effects can change at runtime. The front-end can retrieve the list of internal effects, available to the sampler by sending the following command:</p>
5133    <p/>
5134    
5135    <ul class="empty">
5136      <li>LIST AVAILABLE_EFFECTS</li>
5137    </ul>
5138    
5139    <p> </p>
5140    <p id="rfc.section.6.11.2.p.3">Possible Answers:</p>
5141    <p/>
5142    
5143    <ul class="empty">
5144      <li>The sampler will answer by returning a comma separated list with numerical IDs of effects. Note: the numercial ID of an effect is generated by the sampler for the current moment. The numerical ID of the same effect can change at runtime, e.g. when the user requests a rescan of available effect plugins.  </li>
5145    </ul>
5146    
5147    <p> </p>
5148    <p id="rfc.section.6.11.2.p.5">Example:</p>
5149    <p/>
5150    
5151    <ul class="empty">
5152      <li>C: "LIST AVAILABLE_EFFECTS"</li>
5153      <li>S: "5,6,7,120,121,122,123,124"</li>
5154    </ul>
5155    
5156    <p> </p>
5157    <h1 id="rfc.section.6.11.3"><a href="#rfc.section.6.11.3">6.11.3.</a> <a href="#GET EFFECT INFO" id="GET EFFECT INFO">Retrieving general information about an effect</a></h1>
5158    <p id="rfc.section.6.11.3.p.1">The front-end can ask for general information about an effect by sending the following command:</p>
5159    <p/>
5160    
5161    <ul class="empty">
5162      <li>GET EFFECT INFO &lt;effect-index&gt;</li>
5163    </ul>
5164    
5165    <p> </p>
5166    <p id="rfc.section.6.11.3.p.3">Where &lt;effect-index&gt; is the numerical ID of an effect as returned by the <a href="#LIST AVAILABLE_EFFECTS">"LIST AVAILABLE_EFFECTS"</a> <cite title="NONE">[LIST AVAILABLE_EFFECTS]</cite> command.</p>
5167    <p id="rfc.section.6.11.3.p.4">Possible Answers:</p>
5168    <p/>
5169    
5170    <ul class="empty">
5171      <li>LinuxSampler will answer by sending a &lt;CRLF&gt; separated list.  Each answer line begins with the effect information category name, followed by a colon and then a space character &lt;SP&gt; and finally the info character string to that effect information category. At the moment the following categories are defined:</li>
5172      <li>
5173        <ul class="empty">
5174          <li>SYSTEM - <ul class="empty"><li>name of the effect plugin system the effect is based on (e.g. "LADSPA")</li></ul><p> </p></li>
5175          <li>MODULE - <ul class="empty"><li>module of the effect plugin system that contains this effect, the module is usually the dynamic-linked library (DLL) filename of the effect plugin, including full path (note that this filename may contain <a href="#character_set">escape sequences</a> <cite title="NONE">[character_set]</cite>)</li></ul><p> </p></li>
5176          <li>NAME - <ul class="empty"><li>character string defining the unique name of the effect within its module (note that the character string may contain <a href="#character_set">escape sequences</a> <cite title="NONE">[character_set]</cite>)</li></ul><p> </p></li>
5177          <li>DESCRIPTION - <ul class="empty"><li>human readable name of the effect, intended to be displayed in user interfaces (note that the character string may contain <a href="#character_set">escape sequences</a> <cite title="NONE">[character_set]</cite>)</li></ul><p> </p></li>
5178        </ul>
5179        <p> </p>
5180      </li>
5181    </ul>
5182    
5183    <p> </p>
5184    <p id="rfc.section.6.11.3.p.6">The mentioned fields above don't have to be in particular order.</p>
5185    <p id="rfc.section.6.11.3.p.7">Example:</p>
5186    <p/>
5187    
5188    <ul class="empty">
5189      <li>C: "GET EFFECT INFO 121"</li>
5190      <li>S: "SYSTEM: LADSPA"</li>
5191      <li>"MODULE: /usr/lib/ladspa/lowpass_iir_1891.so"</li>
5192      <li>"NAME: lowpass_iir"</li>
5193      <li>"DESCRIPTION: Glame Lowpass Filter"</li>
5194      <li>"."</li>
5195    </ul>
5196    
5197    <p> </p>
5198    <h1 id="rfc.section.6.11.4"><a href="#rfc.section.6.11.4">6.11.4.</a> <a href="#CREATE EFFECT_INSTANCE" id="CREATE EFFECT_INSTANCE">Creating an instance of an effect by its portable ID</a></h1>
5199    <p id="rfc.section.6.11.4.p.1">The front-end can spawn an instance of the desired effect by sending the following command:</p>
5200    <p/>
5201    
5202    <ul class="empty">
5203      <li>CREATE EFFECT_INSTANCE &lt;effect-system&gt; &lt;module&gt; &lt;effect-name&gt;</li>
5204    </ul>
5205    
5206    <p> </p>
5207    <p id="rfc.section.6.11.4.p.3">Where &lt;effect-system&gt; is the "SYSTEM" field, &lt;module&gt; the "MODULE" field and &lt;effect-name&gt; the "NAME" field as returned by the <a href="#GET EFFECT INFO">"GET EFFECT INFO"</a> <cite title="NONE">[GET EFFECT INFO]</cite> command. The filename of argument &lt;module&gt; and the character string of argument &lt;effect-name&gt; may contain <a href="#character_set">escape sequences</a> <cite title="NONE">[character_set]</cite>.</p>
5208    <p id="rfc.section.6.11.4.p.4">The sampler will try to load the requested effect and to create an instance of it. To allow loading the same effect on a different machine, probably even running a completely different operating system (e.g. Linux vs. Windows), the sampler tries to match &lt;module&gt; "softly". That means it first tries to find an effect that exactly matches the given &lt;module&gt; argument. If there is no exact match, the sampler will try to lower the restrictions on matching the &lt;module&gt; argument more and more, e.g. by ignoring upper / lower case differences and by ignoring the path of the DLL filename and file extension. If there is still no match at the end, the sampler will try to ignore the &lt;module&gt; argument completely and as a last resort search for an effect that only matches the given &lt;effect-system&gt; and &lt;effect-name&gt; arguments.</p>
5209    <p id="rfc.section.6.11.4.p.5">Possible Answers:</p>
5210    <p/>
5211    
5212    <ul class="empty">
5213      <li>"OK[&lt;effect-instance&gt;]" - <ul class="empty"><li>in case the effect instance was successfully created, where &lt;effect-instance&gt; is the numerical ID of the new effect instance</li></ul><p> </p></li>
5214      <li>"WRN:&lt;warning-code&gt;:&lt;warning-message&gt;" - <ul class="empty"><li>in case the effect instance was spawned successfully, but there are noteworthy issue(s) related, providing an appropriate warning code and warning message</li></ul><p> </p></li>
5215      <li>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" - <ul class="empty"><li>if the effect could not be instantiated</li></ul><p> </p></li>
5216    </ul>
5217    
5218    <p> </p>
5219    <p id="rfc.section.6.11.4.p.7">Examples:</p>
5220    <p/>
5221    
5222    <ul class="empty">
5223      <li>C: "CREATE EFFECT_INSTANCE LADSPA '/usr/lib/ladspa/mod_delay_1419.so' 'modDelay'"</li>
5224      <li>S: "OK[0]"</li>
5225    </ul>
5226    
5227    <p> </p>
5228    <h1 id="rfc.section.6.11.5"><a href="#rfc.section.6.11.5">6.11.5.</a> <a href="#CREATE EFFECT_INSTANCE (non-portable)" id="CREATE EFFECT_INSTANCE (non-portable)">Creating an instance of an effect by its numerical ID</a></h1>
5229    <p id="rfc.section.6.11.5.p.1">The front-end can spawn an instance of the desired effect by sending the following command:</p>
5230    <p/>
5231    
5232    <ul class="empty">
5233      <li>CREATE EFFECT_INSTANCE &lt;effect-index&gt;</li>
5234    </ul>
5235    
5236    <p> </p>
5237    <p id="rfc.section.6.11.5.p.3">Where &lt;effect-index&gt; is the numerical ID of the effect as returned by the <a href="#LIST AVAILABLE_EFFECTS">"LIST AVAILABLE_EFFECTS"</a> <cite title="NONE">[LIST AVAILABLE_EFFECTS]</cite> command.</p>
5238    <p id="rfc.section.6.11.5.p.4">The sampler will try to load the requested effect and to create an instance of it.</p>
5239    <p id="rfc.section.6.11.5.p.5">Note: Since the numerical ID of a certain effect can change at any time, you should not use this command in LSCP files to restore a certain effect at a later time! To store a sampler session including all its effects, use the <a href="#CREATE EFFECT_INSTANCE">portable text-based version of "CREATE EFFECT_INSTANCE"</a> <cite title="NONE">[CREATE EFFECT_INSTANCE]</cite> instead! This allows to restore a sampler session with all its effects also on other machines, possibly even running a completely different operating system (e.g. Linux vs. Windows), with different plugin directories or plugin DLL names.</p>
5240    <p id="rfc.section.6.11.5.p.6">Possible Answers:</p>
5241    <p/>
5242    
5243    <ul class="empty">
5244      <li>"OK[&lt;effect-instance&gt;]" - <ul class="empty"><li>in case the effect instance was successfully created, where &lt;effect-instance&gt; is the numerical ID of the new effect instance</li></ul><p> </p></li>
5245      <li>"WRN:&lt;warning-code&gt;:&lt;warning-message&gt;" - <ul class="empty"><li>in case the effect instance was spawned successfully, but there are noteworthy issue(s) related, providing an appropriate warning code and warning message</li></ul><p> </p></li>
5246      <li>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" - <ul class="empty"><li>if the effect could not be instantiated</li></ul><p> </p></li>
5247    </ul>
5248    
5249    <p> </p>
5250    <p id="rfc.section.6.11.5.p.8">Examples:</p>
5251    <p/>
5252    
5253    <ul class="empty">
5254      <li>C: "CREATE EFFECT_INSTANCE 72"</li>
5255      <li>S: "OK[5]"</li>
5256    </ul>
5257    
5258    <p> </p>
5259    <h1 id="rfc.section.6.11.6"><a href="#rfc.section.6.11.6">6.11.6.</a> <a href="#DESTROY EFFECT_INSTANCE" id="DESTROY EFFECT_INSTANCE">Destroy an effect instance</a></h1>
5260    <p id="rfc.section.6.11.6.p.1">The front-end can destroy an unusued effect instance and thus freeing it from memory by sending the following command:</p>
5261    <p/>
5262    
5263    <ul class="empty">
5264      <li>DESTROY EFFECT_INSTANCE &lt;effect-instance&gt;</li>
5265    </ul>
5266    
5267    <p> </p>
5268    <p id="rfc.section.6.11.6.p.3">Where &lt;effect-instance&gt; is the numerical ID of the effect instance as returned by the <a href="#CREATE EFFECT_INSTANCE">"CREATE EFFECT_INSTANCE"</a> <cite title="NONE">[CREATE EFFECT_INSTANCE]</cite> or <a href="#LIST EFFECT_INSTANCES">"LIST EFFECT_INSTANCES"</a> <cite title="NONE">[LIST EFFECT_INSTANCES]</cite> command.</p>
5269    <p id="rfc.section.6.11.6.p.4">The effect instance can only be destroyed if it's not used in any part of the sampler's audio signal path anymore.  If the effect instance is still in use somewhere, trying to destroy the effect instance will result in an error message.</p>
5270    <p id="rfc.section.6.11.6.p.5">Possible Answers:</p>
5271    <p/>
5272    
5273    <ul class="empty">
5274      <li>"OK" - <ul class="empty"><li>in case the effect instance was successfully destroyed</li></ul><p> </p></li>
5275      <li>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" - <ul class="empty"><li>in case it failed, providing an appropriate error code and error message</li></ul><p> </p></li>
5276    </ul>
5277    
5278    <p> </p>
5279    <p id="rfc.section.6.11.6.p.7">Examples:</p>
5280    <p/>
5281    
5282    <ul class="empty">
5283      <li>C: "DESTROY EFFECT_INSTANCE 5"</li>
5284      <li>S: "OK"</li>
5285    </ul>
5286    
5287    <p> </p>
5288    <h1 id="rfc.section.6.11.7"><a href="#rfc.section.6.11.7">6.11.7.</a> <a href="#GET EFFECT_INSTANCES" id="GET EFFECT_INSTANCES">Retrieve amount of effect instances</a></h1>
5289    <p id="rfc.section.6.11.7.p.1">The front-end can retrieve the current amount of effect instances by sending the following command:</p>
5290    <p/>
5291    
5292    <ul class="empty">
5293      <li>GET EFFECT_INSTANCES</li>
5294    </ul>
5295    
5296    <p> </p>
5297    <p id="rfc.section.6.11.7.p.3">Possible Answers:</p>
5298    <p/>
5299    
5300    <ul class="empty">
5301      <li>The sampler will answer by returning the current number of effect instances created and not yet destroyed in the current sampler session.</li>
5302    </ul>
5303    
5304    <p> </p>
5305    <p id="rfc.section.6.11.7.p.5">Examples:</p>
5306    <p/>
5307    
5308    <ul class="empty">
5309      <li>C: "GET EFFECT_INSTANCES"</li>
5310      <li>S: "14"</li>
5311    </ul>
5312    
5313    <p> </p>
5314    <h1 id="rfc.section.6.11.8"><a href="#rfc.section.6.11.8">6.11.8.</a> <a href="#LIST EFFECT_INSTANCES" id="LIST EFFECT_INSTANCES">Get list of effect instances</a></h1>
5315    <p id="rfc.section.6.11.8.p.1">The front-end can retrieve the current list of effect instances by sending the following command:</p>
5316    <p/>
5317    
5318    <ul class="empty">
5319      <li>LIST EFFECT_INSTANCES</li>
5320    </ul>
5321    
5322    <p> </p>
5323    <p id="rfc.section.6.11.8.p.3">Possible Answers:</p>
5324    <p/>
5325    
5326    <ul class="empty">
5327      <li>The sampler will answer by returning a comma separated list with numerical IDs of effects instances.  </li>
5328    </ul>
5329    
5330    <p> </p>
5331    <p id="rfc.section.6.11.8.p.5">Example:</p>
5332    <p/>
5333    
5334    <ul class="empty">
5335      <li>C: "LIST EFFECT_INSTANCES"</li>
5336      <li>S: "9,11,14,15,16,17,25"</li>
5337    </ul>
5338    
5339    <p> </p>
5340    <h1 id="rfc.section.6.11.9"><a href="#rfc.section.6.11.9">6.11.9.</a> <a href="#GET EFFECT_INSTANCE INFO" id="GET EFFECT_INSTANCE INFO">Retrieving current information about an effect instance</a></h1>
5341    <p id="rfc.section.6.11.9.p.1">The front-end can ask for the current information about a particular effect instance by sending the following command:</p>
5342    <p/>
5343    
5344    <ul class="empty">
5345      <li>GET EFFECT_INSTANCE INFO &lt;effect-instance&gt;</li>
5346    </ul>
5347    
5348    <p> </p>
5349    <p id="rfc.section.6.11.9.p.3">Where &lt;effect-instance&gt; is the numerical ID of an effect instance as returned by the <a href="#CREATE EFFECT_INSTANCE">"CREATE EFFECT_INSTANCE"</a> <cite title="NONE">[CREATE EFFECT_INSTANCE]</cite> or <a href="#LIST EFFECT_INSTANCES">"LIST EFFECT_INSTANCES"</a> <cite title="NONE">[LIST EFFECT_INSTANCES]</cite> command.</p>
5350    <p id="rfc.section.6.11.9.p.4">Possible Answers:</p>
5351    <p/>
5352    
5353    <ul class="empty">
5354      <li>LinuxSampler will answer by sending a &lt;CRLF&gt; separated list.  Each answer line begins with the information category name, followed by a colon and then a space character &lt;SP&gt; and finally the info character string to that information category. At the moment the following categories are defined:</li>
5355      <li>
5356        <ul class="empty">
5357          <li>SYSTEM - <ul class="empty"><li>name of the effect plugin system the effect is based on (e.g. "LADSPA")</li></ul><p> </p></li>
5358          <li>MODULE - <ul class="empty"><li>module of the effect plugin system that contains this effect, the module is usually the dynamic-linked library (DLL) filename of the effect plugin, including full path (note that this filename may contain <a href="#character_set">escape sequences</a> <cite title="NONE">[character_set]</cite>)</li></ul><p> </p></li>
5359          <li>NAME - <ul class="empty"><li>character string defining the unique name of the effect within its module (note that the character string may contain <a href="#character_set">escape sequences</a> <cite title="NONE">[character_set]</cite>)</li></ul><p> </p></li>
5360          <li>DESCRIPTION - <ul class="empty"><li>human readable name of the effect, intended to be displayed in user interfaces (note that the character string may contain <a href="#character_set">escape sequences</a> <cite title="NONE">[character_set]</cite>)</li></ul><p> </p></li>
5361          <li>INPUT_CONTROLS - <ul class="empty"><li>amount of input controls the effect instance provides, to allow controlling the effect parameters in realtime</li></ul><p> </p></li>
5362        </ul>
5363        <p> </p>
5364      </li>
5365    </ul>
5366    
5367    <p> </p>
5368    <p id="rfc.section.6.11.9.p.6">The mentioned fields above don't have to be in particular order.</p>
5369    <p id="rfc.section.6.11.9.p.7">Example:</p>
5370    <p/>
5371    
5372    <ul class="empty">
5373      <li>C: "GET EFFECT_INSTANCE INFO 3"</li>
5374      <li>S: "SYSTEM: LADSPA"</li>
5375      <li>"MODULE: /usr/lib/ladspa/mod_delay_1419.so"</li>
5376      <li>"NAME: modDelay"</li>
5377      <li>"DESCRIPTION: Modulatable delay"</li>
5378      <li>"INPUT_CONTROLS: 1"</li>
5379      <li>"."</li>
5380    </ul>
5381    
5382    <p> </p>
5383    <h1 id="rfc.section.6.11.10"><a href="#rfc.section.6.11.10">6.11.10.</a> <a href="#GET EFFECT_INSTANCE_INPUT_CONTROL INFO" id="GET EFFECT_INSTANCE_INPUT_CONTROL INFO">Retrieving information about an effect parameter</a></h1>
5384    <p id="rfc.section.6.11.10.p.1">Effects typically provide a certain set of effect parameters which can be altered by the user in realtime (e.g. depth of a reverb effect, duration of a delay effect, dry / wet signal ratio). Those controllable effect parameters are called "input controls". The front-end can ask for the current information of an effect instance's input control by sending the following command:</p>
5385    <p/>
5386    
5387    <ul class="empty">
5388      <li>GET EFFECT_INSTANCE_INPUT_CONTROL INFO &lt;effect-instance&gt; &lt;input-control&gt;</li>
5389    </ul>
5390    
5391    <p> </p>
5392    <p id="rfc.section.6.11.10.p.3">Where &lt;effect-instance&gt; is the numerical ID of an effect instance as returned by the <a href="#CREATE EFFECT_INSTANCE">"CREATE EFFECT_INSTANCE"</a> <cite title="NONE">[CREATE EFFECT_INSTANCE]</cite> or <a href="#LIST EFFECT_INSTANCES">"LIST EFFECT_INSTANCES"</a> <cite title="NONE">[LIST EFFECT_INSTANCES]</cite> command and &lt;input-control&gt; is the index of the input control within the numerical bounds as returned by the "INPUT_CONTROLS" field of the <a href="#GET EFFECT_INSTANCE INFO">"GET EFFECT_INSTANCE INFO"</a> <cite title="NONE">[GET EFFECT_INSTANCE INFO]</cite> command.</p>
5393    <p id="rfc.section.6.11.10.p.4">Possible Answers:</p>
5394    <p/>
5395    
5396    <ul class="empty">
5397      <li>LinuxSampler will answer by sending a &lt;CRLF&gt; separated list.  Each answer line begins with the information category name, followed by a colon and then a space character &lt;SP&gt; and finally the info character string to that information category. There are information categories which are always returned, independent of the respective effect parameter and there are optional information categories which are only shown for certain effect parameters.  At the moment the following categories are defined:</li>
5398      <li>
5399        <ul class="empty">
5400          <li>DESCRIPTION - <ul class="empty"><li>(always returned) human readable name of the effect parameter, intended to be displayed in user interfaces (note that the character string may contain <a href="#character_set">escape sequences</a> <cite title="NONE">[character_set]</cite>)</li></ul><p> </p></li>
5401          <li>VALUE - <ul class="empty"><li>(always returned) current (optional dotted) floating point value of this effect parameter</li></ul><p> </p></li>
5402          <li>RANGE_MIN - <ul class="empty"><li>(optionally returned) minimum allowed value for this effect parameter</li></ul><p> </p></li>
5403          <li>RANGE_MAX - <ul class="empty"><li>(optionally returned) maximum allowed value for this effect parameter</li></ul><p> </p></li>
5404          <li>POSSIBILITIES - <ul class="empty"><li>(optionally returned) comma separated list of (optional dotted) floating point numbers, reflecting the exact set of possible values for this effect parameter</li></ul><p> </p></li>
5405          <li>DEFAULT - <ul class="empty"><li>(optionally returned) default value of this effect parameter</li></ul><p> </p></li>
5406        </ul>
5407        <p> </p>
5408      </li>
5409    </ul>
5410    
5411    <p> </p>
5412    <p id="rfc.section.6.11.10.p.6">The mentioned fields above don't have to be in particular order.</p>
5413    <p id="rfc.section.6.11.10.p.7">Example:</p>
5414    <p/>
5415    
5416    <ul class="empty">
5417      <li>C: "GET EFFECT_INSTANCE_INPUT_CONTROL INFO 1 0"</li>
5418      <li>S: "DESCRIPTION: Base delay (s)"</li>
5419      <li>"VALUE: 0.500"</li>
5420      <li>"RANGE_MIN: 0.000"</li>
5421      <li>"."</li>
5422    </ul>
5423    
5424    <p> </p>
5425    <h1 id="rfc.section.6.11.11"><a href="#rfc.section.6.11.11">6.11.11.</a> <a href="#SET EFFECT_INSTANCE_INPUT_CONTROL VALUE" id="SET EFFECT_INSTANCE_INPUT_CONTROL VALUE">Altering an effect parameter</a></h1>
5426    <p id="rfc.section.6.11.11.p.1">The front-end can alter the current value of an effect parameter by sending the following command:</p>
5427    <p/>
5428    
5429    <ul class="empty">
5430      <li>SET EFFECT_INSTANCE_INPUT_CONTROL VALUE &lt;effect-instance&gt; &lt;input-control&gt; &lt;value&gt;</li>
5431    </ul>
5432    
5433    <p> </p>
5434    <p id="rfc.section.6.11.11.p.3">Where &lt;effect-instance&gt; is the numerical ID of the effect instance as returned by the <a href="#CREATE EFFECT_INSTANCE">"CREATE EFFECT_INSTANCE"</a> <cite title="NONE">[CREATE EFFECT_INSTANCE]</cite> or <a href="#LIST EFFECT_INSTANCES">"LIST EFFECT_INSTANCES"</a> <cite title="NONE">[LIST EFFECT_INSTANCES]</cite> command, &lt;input-control&gt; is the index of the input control within the numerical bounds as returned by the "INPUT_CONTROLS" field of the <a href="#GET EFFECT_INSTANCE INFO">"GET EFFECT_INSTANCE INFO"</a> <cite title="NONE">[GET EFFECT_INSTANCE INFO]</cite> command and &lt;value&gt; is the new (optional dotted) floating point value for this effect parameter.</p>
5435    <p id="rfc.section.6.11.11.p.4">Possible Answers:</p>
5436    <p/>
5437    
5438    <ul class="empty">
5439      <li>"OK" - <ul class="empty"><li>in case the effect was altered successfully</li></ul><p> </p></li>
5440      <li>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" - <ul class="empty"><li>in case it failed, providing an appropriate error code and error message</li></ul><p> </p></li>
5441    </ul>
5442    
5443    <p> </p>
5444    <p id="rfc.section.6.11.11.p.6">Examples:</p>
5445    <p/>
5446    
5447    <ul class="empty">
5448      <li>C: "SET EFFECT_INSTANCE_INPUT_CONTROL VALUE 0 1 0.5"</li>
5449      <li>S: "OK"</li>
5450    </ul>
5451    
5452    <p> </p>
5453    <h1 id="rfc.section.6.11.12"><a href="#rfc.section.6.11.12">6.11.12.</a> <a href="#GET SEND_EFFECT_CHAINS" id="GET SEND_EFFECT_CHAINS">Retrieve amount of send effect chains</a></h1>
5454    <p id="rfc.section.6.11.12.p.1">The front-end can retrieve the current amount of send effect chains of an audio output device by sending the following command:</p>
5455    <p/>
5456    
5457    <ul class="empty">
5458      <li>GET SEND_EFFECT_CHAINS &lt;audio-device&gt;</li>
5459    </ul>
5460    
5461    <p> </p>
5462    <p id="rfc.section.6.11.12.p.3">Where &lt;audio-device&gt; should be replaced by the numerical ID of the audio output device as given by the <a href="#CREATE AUDIO_OUTPUT_DEVICE">"CREATE AUDIO_OUTPUT_DEVICE"</a> <cite title="NONE">[CREATE AUDIO_OUTPUT_DEVICE]</cite> or <a href="#LIST AUDIO_OUTPUT_DEVICES">"LIST AUDIO_OUTPUT_DEVICES"</a> <cite title="NONE">[LIST AUDIO_OUTPUT_DEVICES]</cite> command.</p>
5463    <p id="rfc.section.6.11.12.p.4">Possible Answers:</p>
5464    <p/>
5465    
5466    <ul class="empty">
5467      <li>The sampler will answer by returning the current number of send effect chains of the supplied audio output device.</li>
5468    </ul>
5469    
5470    <p> </p>
5471    <p id="rfc.section.6.11.12.p.6">Examples:</p>
5472    <p/>
5473    
5474    <ul class="empty">
5475      <li>C: "GET SEND_EFFECT_CHAINS 0"</li>
5476      <li>S: "4"</li>
5477    </ul>
5478    
5479    <p> </p>
5480    <h1 id="rfc.section.6.11.13"><a href="#rfc.section.6.11.13">6.11.13.</a> <a href="#LIST SEND_EFFECT_CHAINS" id="LIST SEND_EFFECT_CHAINS">Retrieve list of send effect chains</a></h1>
5481    <p id="rfc.section.6.11.13.p.1">The front-end can retrieve the current list of send effect chains of an audio output device by sending the following command:</p>
5482    <p/>
5483    
5484    <ul class="empty">
5485      <li>LIST SEND_EFFECT_CHAINS &lt;audio-device&gt;</li>
5486    </ul>
5487    
5488    <p> </p>
5489    <p id="rfc.section.6.11.13.p.3">Where &lt;audio-device&gt; should be replaced by the numerical ID of the audio output device as given by the <a href="#CREATE AUDIO_OUTPUT_DEVICE">"CREATE AUDIO_OUTPUT_DEVICE"</a> <cite title="NONE">[CREATE AUDIO_OUTPUT_DEVICE]</cite> or <a href="#LIST AUDIO_OUTPUT_DEVICES">"LIST AUDIO_OUTPUT_DEVICES"</a> <cite title="NONE">[LIST AUDIO_OUTPUT_DEVICES]</cite> command.</p>
5490    <p id="rfc.section.6.11.13.p.4">Possible Answers:</p>
5491    <p/>
5492    
5493    <ul class="empty">
5494      <li>The sampler will answer by returning a comma separated list with numerical IDs of send effect chains of the supplied audio output device.  </li>
5495    </ul>
5496    
5497    <p> </p>
5498    <p id="rfc.section.6.11.13.p.6">Examples:</p>
5499    <p/>
5500    
5501    <ul class="empty">
5502      <li>C: "LIST SEND_EFFECT_CHAINS 0"</li>
5503      <li>S: "3,4,7"</li>
5504    </ul>
5505    
5506    <p> </p>
5507    <h1 id="rfc.section.6.11.14"><a href="#rfc.section.6.11.14">6.11.14.</a> <a href="#ADD SEND_EFFECT_CHAIN" id="ADD SEND_EFFECT_CHAIN">Add send effect chain</a></h1>
5508    <p id="rfc.section.6.11.14.p.1">The front-end can add a send effect chain by sending the following command:</p>
5509    <p/>
5510    
5511    <ul class="empty">
5512      <li>ADD SEND_EFFECT_CHAIN &lt;audio-device&gt;</li>
5513    </ul>
5514    
5515    <p> </p>
5516    <p id="rfc.section.6.11.14.p.3">Where &lt;audio-device&gt; should be replaced by the numerical ID of the audio output device as given by the <a href="#CREATE AUDIO_OUTPUT_DEVICE">"CREATE AUDIO_OUTPUT_DEVICE"</a> <cite title="NONE">[CREATE AUDIO_OUTPUT_DEVICE]</cite> or <a href="#LIST AUDIO_OUTPUT_DEVICES">"LIST AUDIO_OUTPUT_DEVICES"</a> <cite title="NONE">[LIST AUDIO_OUTPUT_DEVICES]</cite> command.</p>
5517    <p id="rfc.section.6.11.14.p.4">Possible Answers:</p>
5518    <p/>
5519    
5520    <ul class="empty">
5521      <li>"OK[&lt;effect-chain&gt;]" - <ul class="empty"><li>in case the send effect chain was added successfully, where &lt;effect-chain&gt; is the numerical ID of the new send effect chain</li></ul><p> </p></li>
5522      <li>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" - <ul class="empty"><li>if the send effect chain could not be added</li></ul><p> </p></li>
5523    </ul>
5524    
5525    <p> </p>
5526    <p id="rfc.section.6.11.14.p.6">Examples:</p>
5527    <p/>
5528    
5529    <ul class="empty">
5530      <li>C: "ADD SEND_EFFECT_CHAIN 0"</li>
5531      <li>S: "OK[2]"</li>
5532    </ul>
5533    
5534    <p> </p>
5535    <h1 id="rfc.section.6.11.15"><a href="#rfc.section.6.11.15">6.11.15.</a> <a href="#REMOVE SEND_EFFECT_CHAIN" id="REMOVE SEND_EFFECT_CHAIN">Remove send effect chain</a></h1>
5536    <p id="rfc.section.6.11.15.p.1">The front-end can remove a send effect chain by sending the following command:</p>
5537    <p/>
5538    
5539    <ul class="empty">
5540      <li>REMOVE SEND_EFFECT_CHAIN &lt;audio-device&gt; &lt;effect-chain&gt;</li>
5541    </ul>
5542    
5543    <p> </p>
5544    <p id="rfc.section.6.11.15.p.3">Where &lt;audio-device&gt; should be replaced by the numerical ID of the audio output device as given by the <a href="#CREATE AUDIO_OUTPUT_DEVICE">"CREATE AUDIO_OUTPUT_DEVICE"</a> <cite title="NONE">[CREATE AUDIO_OUTPUT_DEVICE]</cite> or <a href="#LIST AUDIO_OUTPUT_DEVICES">"LIST AUDIO_OUTPUT_DEVICES"</a> <cite title="NONE">[LIST AUDIO_OUTPUT_DEVICES]</cite> command and &lt;effect-chain&gt; by the numerical ID as returned by the <a href="#ADD SEND_EFFECT_CHAIN">"ADD SEND_EFFECT_CHAIN"</a> <cite title="NONE">[ADD SEND_EFFECT_CHAIN]</cite> or <a href="#LIST SEND_EFFECT_CHAINS">"LIST SEND_EFFECT_CHAINS"</a> <cite title="NONE">[LIST SEND_EFFECT_CHAINS]</cite> command.</p>
5545    <p id="rfc.section.6.11.15.p.4">Possible Answers:</p>
5546    <p/>
5547    
5548    <ul class="empty">
5549      <li>"OK" - <ul class="empty"><li>in case the send effect chain was removed successfully</li></ul><p> </p></li>
5550      <li>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" - <ul class="empty"><li>if the send effect chain could not be removed</li></ul><p> </p></li>
5551    </ul>
5552    
5553    <p> </p>
5554    <p id="rfc.section.6.11.15.p.6">Examples:</p>
5555    <p/>
5556    
5557    <ul class="empty">
5558      <li>C: "REMOVE SEND_EFFECT_CHAIN 0 2"</li>
5559      <li>S: "OK"</li>
5560    </ul>
5561    
5562    <p> </p>
5563    <h1 id="rfc.section.6.11.16"><a href="#rfc.section.6.11.16">6.11.16.</a> <a href="#GET SEND_EFFECT_CHAIN INFO" id="GET SEND_EFFECT_CHAIN INFO">Retrieving information about a send effect chain</a></h1>
5564    <p id="rfc.section.6.11.16.p.1">The front-end can ask for information of a send effect chain by sending the following command:</p>
5565    <p/>
5566    
5567    <ul class="empty">
5568      <li>GET SEND_EFFECT_CHAIN INFO &lt;audio-device&gt; &lt;effect-chain&gt;</li>
5569    </ul>
5570    
5571    <p> </p>
5572    <p id="rfc.section.6.11.16.p.3">Where &lt;audio-device&gt; should be replaced by the numerical ID of the audio output device as given by the <a href="#CREATE AUDIO_OUTPUT_DEVICE">"CREATE AUDIO_OUTPUT_DEVICE"</a> <cite title="NONE">[CREATE AUDIO_OUTPUT_DEVICE]</cite> or <a href="#LIST AUDIO_OUTPUT_DEVICES">"LIST AUDIO_OUTPUT_DEVICES"</a> <cite title="NONE">[LIST AUDIO_OUTPUT_DEVICES]</cite> command and &lt;effect-chain&gt; by the numerical ID as returned by the <a href="#ADD SEND_EFFECT_CHAIN">"ADD SEND_EFFECT_CHAIN"</a> <cite title="NONE">[ADD SEND_EFFECT_CHAIN]</cite> or <a href="#LIST SEND_EFFECT_CHAINS">"LIST SEND_EFFECT_CHAINS"</a> <cite title="NONE">[LIST SEND_EFFECT_CHAINS]</cite> command.</p>
5573    <p id="rfc.section.6.11.16.p.4">Possible Answers:</p>
5574    <p/>
5575    
5576    <ul class="empty">
5577      <li>LinuxSampler will answer by sending a &lt;CRLF&gt; separated list.  Each answer line begins with the information category name, followed by a colon and then a space character &lt;SP&gt; and finally the info character string to that information category.  At the moment the following categories are defined:</li>
5578      <li>
5579        <ul class="empty">
5580          <li>EFFECT_COUNT - <ul class="empty"><li>amount of effects in this send effect chain</li></ul><p> </p></li>
5581          <li>EFFECT_SEQUENCE - <ul class="empty"><li>comma separated list of the numerical IDs of the effect instances in this send effect chain, in the order as they are procssed in the effect chain</li></ul><p> </p></li>
5582        </ul>
5583        <p> </p>
5584      </li>
5585    </ul>
5586    
5587    <p> </p>
5588    <p id="rfc.section.6.11.16.p.6">The mentioned fields above don't have to be in particular order.</p>
5589    <p id="rfc.section.6.11.16.p.7">Example:</p>
5590    <p/>
5591    
5592    <ul class="empty">
5593      <li>C: "GET SEND_EFFECT_CHAIN INFO 0 2"</li>
5594      <li>S: "EFFECT_COUNT: 3"</li>
5595      <li>"EFFECT_SEQUENCE: 31,4,7"</li>
5596      <li>"."</li>
5597    </ul>
5598    
5599    <p> </p>
5600    <h1 id="rfc.section.6.11.17"><a href="#rfc.section.6.11.17">6.11.17.</a> <a href="#APPEND SEND_EFFECT_CHAIN EFFECT" id="APPEND SEND_EFFECT_CHAIN EFFECT">Append effect instance to a send effect chain</a></h1>
5601    <p id="rfc.section.6.11.17.p.1">The front-end can add an unused effect instance to the end of a send effect chain by sending the following command:</p>
5602    <p/>
5603    
5604    <ul class="empty">
5605      <li>APPEND SEND_EFFECT_CHAIN EFFECT &lt;audio-device&gt; &lt;effect-chain&gt; &lt;effect-instance&gt;</li>
5606    </ul>
5607    
5608    <p> </p>
5609    <p id="rfc.section.6.11.17.p.3">Where &lt;audio-device&gt; should be replaced by the numerical ID of the audio output device as given by the <a href="#CREATE AUDIO_OUTPUT_DEVICE">"CREATE AUDIO_OUTPUT_DEVICE"</a> <cite title="NONE">[CREATE AUDIO_OUTPUT_DEVICE]</cite> or <a href="#LIST AUDIO_OUTPUT_DEVICES">"LIST AUDIO_OUTPUT_DEVICES"</a> <cite title="NONE">[LIST AUDIO_OUTPUT_DEVICES]</cite> command and &lt;effect-chain&gt; by the numerical ID as returned by the <a href="#ADD SEND_EFFECT_CHAIN">"ADD SEND_EFFECT_CHAIN"</a> <cite title="NONE">[ADD SEND_EFFECT_CHAIN]</cite> or <a href="#LIST SEND_EFFECT_CHAINS">"LIST SEND_EFFECT_CHAINS"</a> <cite title="NONE">[LIST SEND_EFFECT_CHAINS]</cite> command and &lt;effect-instance&gt; as returned by the <a href="#CREATE EFFECT_INSTANCE">"CREATE EFFECT_INSTANCE"</a> <cite title="NONE">[CREATE EFFECT_INSTANCE]</cite> or <a href="#LIST EFFECT_INSTANCES">"LIST EFFECT_INSTANCES"</a> <cite title="NONE">[LIST EFFECT_INSTANCES]</cite> command.</p>
5610    <p id="rfc.section.6.11.17.p.4">Only unused effect instances can be added to the effect chain. Trying to add an effect instance which is already in use somewhere in the audio signal path of the sampler will result in an error.</p>
5611    <p id="rfc.section.6.11.17.p.5">Possible Answers:</p>
5612    <p/>
5613    
5614    <ul class="empty">
5615      <li>"OK" - <ul class="empty"><li>in case the effect instance was added successfully to the chain</li></ul><p> </p></li>
5616      <li>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" - <ul class="empty"><li>if the effect instance could not be added</li></ul><p> </p></li>
5617    </ul>
5618    
5619    <p> </p>
5620    <p id="rfc.section.6.11.17.p.7">Examples:</p>
5621    <p/>
5622    
5623    <ul class="empty">
5624      <li>C: "APPEND SEND_EFFECT_CHAIN EFFECT 0 2 38"</li>
5625      <li>S: "OK"</li>
5626    </ul>
5627    
5628    <p> </p>
5629    <h1 id="rfc.section.6.11.18"><a href="#rfc.section.6.11.18">6.11.18.</a> <a href="#INSERT SEND_EFFECT_CHAIN EFFECT" id="INSERT SEND_EFFECT_CHAIN EFFECT">Insert effect instance to a send effect chain</a></h1>
5630    <p id="rfc.section.6.11.18.p.1">The front-end can add an unused effect instance to a certain position of a send effect chain by sending the following command:</p>
5631    <p/>
5632    
5633    <ul class="empty">
5634      <li>INSERT SEND_EFFECT_CHAIN EFFECT &lt;audio-device&gt; &lt;effect-chain&gt; &lt;chain-pos&gt; &lt;effect-instance&gt;</li>
5635    </ul>
5636    
5637    <p> </p>
5638    <p id="rfc.section.6.11.18.p.3">Where &lt;audio-device&gt; should be replaced by the numerical ID of the audio output device as given by the <a href="#CREATE AUDIO_OUTPUT_DEVICE">"CREATE AUDIO_OUTPUT_DEVICE"</a> <cite title="NONE">[CREATE AUDIO_OUTPUT_DEVICE]</cite> or <a href="#LIST AUDIO_OUTPUT_DEVICES">"LIST AUDIO_OUTPUT_DEVICES"</a> <cite title="NONE">[LIST AUDIO_OUTPUT_DEVICES]</cite> command, &lt;effect-chain&gt; by the numerical ID as returned by the <a href="#ADD SEND_EFFECT_CHAIN">"ADD SEND_EFFECT_CHAIN"</a> <cite title="NONE">[ADD SEND_EFFECT_CHAIN]</cite> or <a href="#LIST SEND_EFFECT_CHAINS">"LIST SEND_EFFECT_CHAINS"</a> <cite title="NONE">[LIST SEND_EFFECT_CHAINS]</cite> command, &lt;effect-instance&gt; as returned by the <a href="#CREATE EFFECT_INSTANCE">"CREATE EFFECT_INSTANCE"</a> <cite title="NONE">[CREATE EFFECT_INSTANCE]</cite> or <a href="#LIST EFFECT_INSTANCES">"LIST EFFECT_INSTANCES"</a> <cite title="NONE">[LIST EFFECT_INSTANCES]</cite> command and &lt;chain-pos&gt; the exact position of the effect chain where the supplied effect shall be inserted to.</p>
5639    <p id="rfc.section.6.11.18.p.4">Only unused effect instances can be added to the effect chain. Trying to add an effect instance which is already in use somewhere in the audio signal path of the sampler will result in an error.</p>
5640    <p id="rfc.section.6.11.18.p.5">Possible Answers:</p>
5641    <p/>
5642    
5643    <ul class="empty">
5644      <li>"OK" - <ul class="empty"><li>in case the effect instance was added successfully to the chain</li></ul><p> </p></li>
5645      <li>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" - <ul class="empty"><li>if the effect instance could not be added</li></ul><p> </p></li>
5646    </ul>
5647    
5648    <p> </p>
5649    <p id="rfc.section.6.11.18.p.7">Examples:</p>
5650    <p/>
5651    
5652    <ul class="empty">
5653      <li>C: "INSERT SEND_EFFECT_CHAIN EFFECT 0 2 4 38"</li>
5654      <li>S: "OK"</li>
5655    </ul>
5656    
5657    <p> </p>
5658    <h1 id="rfc.section.6.11.19"><a href="#rfc.section.6.11.19">6.11.19.</a> <a href="#REMOVE SEND_EFFECT_CHAIN EFFECT" id="REMOVE SEND_EFFECT_CHAIN EFFECT">Remove effect instance from send effect chain</a></h1>
5659    <p id="rfc.section.6.11.19.p.1">The front-end can remove an effect instance from a certain position of a send effect chain by sending the following command:</p>
5660    <p/>
5661    
5662    <ul class="empty">
5663      <li>REMOVE SEND_EFFECT_CHAIN EFFECT &lt;audio-device&gt; &lt;effect-chain&gt; &lt;chain-pos&gt;</li>
5664    </ul>
5665    
5666    <p> </p>
5667    <p id="rfc.section.6.11.19.p.3">Where &lt;audio-device&gt; should be replaced by the numerical ID of the audio output device as given by the <a href="#CREATE AUDIO_OUTPUT_DEVICE">"CREATE AUDIO_OUTPUT_DEVICE"</a> <cite title="NONE">[CREATE AUDIO_OUTPUT_DEVICE]</cite> or <a href="#LIST AUDIO_OUTPUT_DEVICES">"LIST AUDIO_OUTPUT_DEVICES"</a> <cite title="NONE">[LIST AUDIO_OUTPUT_DEVICES]</cite> command, &lt;effect-chain&gt; by the numerical ID as returned by the <a href="#ADD SEND_EFFECT_CHAIN">"ADD SEND_EFFECT_CHAIN"</a> <cite title="NONE">[ADD SEND_EFFECT_CHAIN]</cite> or <a href="#LIST SEND_EFFECT_CHAINS">"LIST SEND_EFFECT_CHAINS"</a> <cite title="NONE">[LIST SEND_EFFECT_CHAINS]</cite> command and &lt;chain-pos&gt; the exact position of the effect instance to be removed from the effect chain.</p>
5668    <p id="rfc.section.6.11.19.p.4">Possible Answers:</p>
5669    <p/>
5670    
5671    <ul class="empty">
5672      <li>"OK" - <ul class="empty"><li>in case the effect instance was removed successfully</li></ul><p> </p></li>
5673      <li>"ERR:&lt;error-code&gt;:&lt;error-message&gt;" - <ul class="empty"><li>if the effect instance could not be removed</li></ul><p> </p></li>
5674    </ul>
5675    
5676    <p> </p>
5677    <p id="rfc.section.6.11.19.p.6">Examples:</p>
5678    <p/>
5679    
5680    <ul class="empty">
5681      <li>C: "REMOVE SEND_EFFECT_CHAIN EFFECT 0 2 4"</li>
5682      <li>S: "OK"</li>
5683    </ul>
5684    
5685    <p> </p>
5686    <h1 id="rfc.section.7"><a href="#rfc.section.7">7.</a> <a href="#command_syntax" id="command_syntax">Command Syntax</a></h1>
5687    <p id="rfc.section.7.p.1">The grammar of the control protocol as descibed in <a href="#control_commands">Section 6</a> is defined below using Backus-Naur Form (BNF as described in <a href="#RFC2234">[RFC2234]</a>) where applicable.  </p>
5688    <p id="rfc.section.7.p.2">input = </p>
5689    
5690    <ul class="empty">
5691      <li>line </li>
5692      <li>/ error </li>
5693    </ul>
5694    
5695    <p> </p>
5696    <p id="rfc.section.7.p.3">line = </p>
5697    
5698    <ul class="empty">
5699      <li>statement LF </li>
5700      <li>/ statement CR LF </li>
5701    </ul>
5702    
5703    <p> </p>
5704    <p id="rfc.section.7.p.4">statement = </p>
5705    
5706    <ul class="empty">
5707      <li>/* epsilon (empty statement/line ignored) */ </li>
5708      <li>/ comment </li>
5709      <li>/ command </li>
5710    </ul>
5711    
5712    <p> </p>
5713    <p id="rfc.section.7.p.5">comment = </p>
5714    
5715    <ul class="empty">
5716      <li>'#' </li>
5717      <li>/ comment '#' </li>
5718      <li>/ comment SP </li>
5719      <li>/ comment number </li>
5720      <li>/ comment string </li>
5721    </ul>
5722    
5723    <p> </p>
5724    <p id="rfc.section.7.p.6">command = </p>
5725    
5726    <ul class="empty">
5727      <li>ADD SP add_instruction </li>
5728      <li>/ MAP SP map_instruction </li>
5729      <li>/ UNMAP SP unmap_instruction </li>
5730      <li>/ GET SP get_instruction </li>
5731      <li>/ CREATE SP create_instruction </li>
5732      <li>/ DESTROY SP destroy_instruction </li>
5733      <li>/ LIST SP list_instruction </li>
5734      <li>/ LOAD SP load_instruction </li>
5735      <li>/ REMOVE SP remove_instruction </li>
5736      <li>/ SET SP set_instruction </li>
5737      <li>/ SUBSCRIBE SP subscribe_event </li>
5738      <li>/ UNSUBSCRIBE SP unsubscribe_event </li>
5739      <li>/ RESET SP reset_instruction </li>
5740      <li>/ CLEAR SP clear_instruction </li>
5741      <li>/ FIND SP find_instruction </li>
5742      <li>/ MOVE SP move_instruction </li>
5743      <li>/ COPY SP copy_instruction </li>
5744      <li>/ EDIT SP edit_instruction </li>
5745      <li>/ FORMAT SP format_instruction </li>
5746      <li>/ SEND SP send_instruction </li>
5747      <li>/ APPEND SP append_instruction </li>
5748      <li>/ INSERT SP insert_instruction </li>
5749      <li>/ RESET </li>
5750      <li>/ QUIT </li>
5751    </ul>
5752    
5753    <p> </p>
5754    <p id="rfc.section.7.p.7">add_instruction = </p>
5755    
5756    <ul class="empty">
5757      <li>CHANNEL </li>
5758      <li>/ CHANNEL SP MIDI_INPUT SP sampler_channel SP device_index </li>
5759      <li>/ CHANNEL SP MIDI_INPUT SP sampler_channel SP device_index SP midi_input_port_index </li>
5760      <li>/ DB_INSTRUMENT_DIRECTORY SP db_path </li>
5761      <li>/ DB_INSTRUMENTS SP NON_MODAL SP scan_mode SP db_path SP filename </li>
5762      <li>/ DB_INSTRUMENTS SP NON_MODAL SP scan_mode SP FILE_AS_DIR SP db_path SP filename </li>
5763      <li>/ DB_INSTRUMENTS SP scan_mode SP db_path SP filename </li>
5764      <li>/ DB_INSTRUMENTS SP scan_mode SP FILE_AS_DIR SP db_path SP filename </li>
5765      <li>/ DB_INSTRUMENTS SP NON_MODAL SP db_path SP filename </li>
5766      <li>/ DB_INSTRUMENTS SP NON_MODAL SP db_path SP filename SP instrument_index </li>
5767      <li>/ DB_INSTRUMENTS SP db_path SP filename </li>
5768      <li>/ DB_INSTRUMENTS SP db_path SP filename SP instrument_index </li>
5769      <li>/ MIDI_INSTRUMENT_MAP </li>
5770      <li>/ MIDI_INSTRUMENT_MAP SP map_name </li>
5771      <li>/ SEND_EFFECT_CHAIN SP device_index </li>
5772    </ul>
5773    
5774    <p> </p>
5775    <p id="rfc.section.7.p.8">subscribe_event = </p>
5776    
5777    <ul class="empty">
5778      <li>AUDIO_OUTPUT_DEVICE_COUNT </li>
5779      <li>/ AUDIO_OUTPUT_DEVICE_INFO </li>
5780      <li>/ MIDI_INPUT_DEVICE_COUNT </li>
5781      <li>/ MIDI_INPUT_DEVICE_INFO </li>
5782      <li>/ CHANNEL_COUNT </li>
5783      <li>/ CHANNEL_MIDI </li>
5784      <li>/ DEVICE_MIDI </li>
5785      <li>/ VOICE_COUNT </li>
5786      <li>/ STREAM_COUNT </li>
5787      <li>/ BUFFER_FILL </li>
5788      <li>/ CHANNEL_INFO </li>
5789      <li>/ FX_SEND_COUNT </li>
5790      <li>/ FX_SEND_INFO </li>
5791      <li>/ MIDI_INSTRUMENT_MAP_COUNT </li>
5792      <li>/ MIDI_INSTRUMENT_MAP_INFO </li>
5793      <li>/ MIDI_INSTRUMENT_COUNT </li>
5794      <li>/ MIDI_INSTRUMENT_INFO </li>
5795      <li>/ DB_INSTRUMENT_DIRECTORY_COUNT </li>
5796      <li>/ DB_INSTRUMENT_DIRECTORY_INFO </li>
5797      <li>/ DB_INSTRUMENT_COUNT </li>
5798      <li>/ DB_INSTRUMENT_INFO </li>
5799      <li>/ DB_INSTRUMENTS_JOB_INFO </li>
5800      <li>/ MISCELLANEOUS </li>
5801      <li>/ TOTAL_STREAM_COUNT </li>
5802      <li>/ TOTAL_VOICE_COUNT </li>
5803      <li>/ GLOBAL_INFO </li>
5804      <li>/ EFFECT_INSTANCE_COUNT </li>
5805      <li>/ EFFECT_INSTANCE_INFO </li>
5806      <li>/ SEND_EFFECT_CHAIN_COUNT </li>
5807      <li>/ SEND_EFFECT_CHAIN_INFO </li>
5808    </ul>
5809    
5810    <p> </p>
5811    <p id="rfc.section.7.p.9">unsubscribe_event = </p>
5812    
5813    <ul class="empty">
5814      <li>AUDIO_OUTPUT_DEVICE_COUNT </li>
5815      <li>/ AUDIO_OUTPUT_DEVICE_INFO </li>
5816      <li>/ MIDI_INPUT_DEVICE_COUNT </li>
5817      <li>/ MIDI_INPUT_DEVICE_INFO </li>
5818      <li>/ CHANNEL_COUNT </li>
5819      <li>/ CHANNEL_MIDI </li>
5820      <li>/ DEVICE_MIDI </li>
5821      <li>/ VOICE_COUNT </li>
5822      <li>/ STREAM_COUNT </li>
5823      <li>/ BUFFER_FILL </li>
5824      <li>/ CHANNEL_INFO </li>
5825      <li>/ FX_SEND_COUNT </li>
5826      <li>/ FX_SEND_INFO </li>
5827      <li>/ MIDI_INSTRUMENT_MAP_COUNT </li>
5828      <li>/ MIDI_INSTRUMENT_MAP_INFO </li>
5829      <li>/ MIDI_INSTRUMENT_COUNT </li>
5830      <li>/ MIDI_INSTRUMENT_INFO </li>
5831      <li>/ DB_INSTRUMENT_DIRECTORY_COUNT </li>
5832      <li>/ DB_INSTRUMENT_DIRECTORY_INFO </li>
5833      <li>/ DB_INSTRUMENT_COUNT </li>
5834      <li>/ DB_INSTRUMENT_INFO </li>
5835      <li>/ DB_INSTRUMENTS_JOB_INFO </li>
5836      <li>/ MISCELLANEOUS </li>
5837      <li>/ TOTAL_STREAM_COUNT </li>
5838      <li>/ TOTAL_VOICE_COUNT </li>
5839      <li>/ GLOBAL_INFO </li>
5840      <li>/ EFFECT_INSTANCE_COUNT </li>
5841      <li>/ EFFECT_INSTANCE_INFO </li>
5842      <li>/ SEND_EFFECT_CHAIN_COUNT </li>
5843      <li>/ SEND_EFFECT_CHAIN_INFO </li>
5844    </ul>
5845    
5846    <p> </p>
5847    <p id="rfc.section.7.p.10">map_instruction = </p>
5848    
5849    <ul class="empty">
5850      <li>MIDI_INSTRUMENT SP modal_arg midi_map SP midi_bank SP midi_prog SP engine_name SP filename SP instrument_index SP volume_value </li>
5851      <li>/ MIDI_INSTRUMENT SP modal_arg midi_map SP midi_bank SP midi_prog SP engine_name SP filename SP instrument_index SP volume_value SP instr_load_mode </li>
5852      <li>/ MIDI_INSTRUMENT SP modal_arg midi_map SP midi_bank SP midi_prog SP engine_name SP filename SP instrument_index SP volume_value SP entry_name </li>
5853      <li>/ MIDI_INSTRUMENT SP modal_arg midi_map SP midi_bank SP midi_prog SP engine_name SP filename SP instrument_index SP volume_value SP instr_load_mode SP entry_name </li>
5854    </ul>
5855    
5856    <p> </p>
5857    <p id="rfc.section.7.p.11">unmap_instruction = </p>
5858    
5859    <ul class="empty">
5860      <li>MIDI_INSTRUMENT SP midi_map SP midi_bank SP midi_prog </li>
5861    </ul>
5862    
5863    <p> </p>
5864    <p id="rfc.section.7.p.12">remove_instruction = </p>
5865    
5866    <ul class="empty">
5867      <li>CHANNEL SP sampler_channel </li>
5868      <li>/ CHANNEL SP MIDI_INPUT SP sampler_channel </li>
5869      <li>/ CHANNEL SP MIDI_INPUT SP sampler_channel SP device_index </li>
5870      <li>/ CHANNEL SP MIDI_INPUT SP sampler_channel SP device_index SP midi_input_port_index </li>
5871      <li>/ MIDI_INSTRUMENT_MAP SP midi_map </li>
5872      <li>/ MIDI_INSTRUMENT_MAP SP ALL </li>
5873      <li>/ SEND_EFFECT_CHAIN SP device_index SP effect_chain </li>
5874      <li>/ SEND_EFFECT_CHAIN SP EFFECT SP device_index SP effect_chain SP chain_pos </li>
5875      <li>/ FX_SEND SP EFFECT SP sampler_channel SP fx_send_id </li>
5876      <li>/ DB_INSTRUMENT_DIRECTORY SP FORCE SP db_path </li>
5877      <li>/ DB_INSTRUMENT_DIRECTORY SP db_path </li>
5878      <li>/ DB_INSTRUMENT SP db_path </li>
5879    </ul>
5880    
5881    <p> </p>
5882    <p id="rfc.section.7.p.13">get_instruction = </p>
5883    
5884    <ul class="empty">
5885      <li>AVAILABLE_ENGINES </li>
5886      <li>/ AVAILABLE_EFFECTS </li>
5887      <li>/ EFFECT_INSTANCES </li>
5888      <li>/ EFFECT SP INFO SP effect_index </li>
5889      <li>/ EFFECT_INSTANCE SP INFO SP effect_instance </li>
5890      <li>/ EFFECT_INSTANCE_INPUT_CONTROL SP INFO SP effect_instance SP input_control </li>
5891      <li>/ SEND_EFFECT_CHAINS SP device_index </li>
5892      <li>/ SEND_EFFECT_CHAIN SP INFO SP device_index SP effect_chain </li>
5893      <li>/ AVAILABLE_MIDI_INPUT_DRIVERS </li>
5894      <li>/ MIDI_INPUT_DRIVER SP INFO SP string </li>
5895      <li>/ MIDI_INPUT_DRIVER_PARAMETER SP INFO SP string SP string </li>
5896      <li>/ MIDI_INPUT_DRIVER_PARAMETER SP INFO SP string SP string SP key_val_list </li>
5897      <li>/ AVAILABLE_AUDIO_OUTPUT_DRIVERS </li>
5898      <li>/ AUDIO_OUTPUT_DRIVER SP INFO SP string </li>
5899      <li>/ AUDIO_OUTPUT_DRIVER_PARAMETER SP INFO SP string SP string </li>
5900      <li>/ AUDIO_OUTPUT_DRIVER_PARAMETER SP INFO SP string SP string SP key_val_list </li>
5901      <li>/ AUDIO_OUTPUT_DEVICES </li>
5902      <li>/ MIDI_INPUT_DEVICES </li>
5903      <li>/ AUDIO_OUTPUT_DEVICE SP INFO SP number </li>
5904      <li>/ MIDI_INPUT_DEVICE SP INFO SP number </li>
5905      <li>/ MIDI_INPUT_PORT SP INFO SP number SP number </li>
5906      <li>/ MIDI_INPUT_PORT_PARAMETER SP INFO SP number SP number SP string </li>
5907      <li>/ AUDIO_OUTPUT_CHANNEL SP INFO SP number SP number </li>
5908      <li>/ AUDIO_OUTPUT_CHANNEL_PARAMETER SP INFO SP number SP number SP string </li>
5909      <li>/ CHANNELS </li>
5910      <li>/ CHANNEL SP INFO SP sampler_channel </li>
5911      <li>/ CHANNEL SP BUFFER_FILL SP buffer_size_type SP sampler_channel </li>
5912      <li>/ CHANNEL SP STREAM_COUNT SP sampler_channel </li>
5913      <li>/ CHANNEL SP VOICE_COUNT SP sampler_channel </li>
5914      <li>/ ENGINE SP INFO SP engine_name </li>
5915      <li>/ SERVER SP INFO </li>
5916      <li>/ TOTAL_STREAM_COUNT </li>
5917      <li>/ TOTAL_VOICE_COUNT </li>
5918      <li>/ TOTAL_VOICE_COUNT_MAX </li>
5919      <li>/ MIDI_INSTRUMENTS SP midi_map </li>
5920      <li>/ MIDI_INSTRUMENTS SP ALL </li>
5921      <li>/ MIDI_INSTRUMENT SP INFO SP midi_map SP midi_bank SP midi_prog </li>
5922      <li>/ MIDI_INSTRUMENT_MAPS </li>
5923      <li>/ MIDI_INSTRUMENT_MAP SP INFO SP midi_map </li>
5924      <li>/ FX_SENDS SP sampler_channel </li>
5925      <li>/ FX_SEND SP INFO SP sampler_channel SP fx_send_id </li>
5926      <li>/ DB_INSTRUMENT_DIRECTORIES SP RECURSIVE SP db_path </li>
5927      <li>/ DB_INSTRUMENT_DIRECTORIES SP db_path </li>
5928      <li>/ DB_INSTRUMENT_DIRECTORY SP INFO SP db_path </li>
5929      <li>/ DB_INSTRUMENTS SP RECURSIVE SP db_path </li>
5930      <li>/ DB_INSTRUMENTS SP db_path </li>
5931      <li>/ DB_INSTRUMENT SP INFO SP db_path </li>
5932      <li>/ DB_INSTRUMENTS_JOB SP INFO SP number </li>
5933      <li>/ VOLUME </li>
5934      <li>/ VOICES </li>
5935      <li>/ STREAMS </li>
5936      <li>/ FILE SP INSTRUMENTS SP filename </li>
5937      <li>/ FILE SP INSTRUMENT SP INFO SP filename SP instrument_index </li>
5938    </ul>
5939    
5940    <p> </p>
5941    <p id="rfc.section.7.p.14">set_instruction = </p>
5942    
5943    <ul class="empty">
5944      <li>AUDIO_OUTPUT_DEVICE_PARAMETER SP number SP string '=' param_val_list </li>
5945      <li>/ AUDIO_OUTPUT_CHANNEL_PARAMETER SP number SP number SP string '=' param_val_list </li>
5946      <li>/ MIDI_INPUT_DEVICE_PARAMETER SP number SP string '=' param_val_list </li>
5947      <li>/ MIDI_INPUT_PORT_PARAMETER SP number SP number SP string '=' NONE </li>
5948      <li>/ MIDI_INPUT_PORT_PARAMETER SP number SP number SP string '=' param_val_list </li>
5949      <li>/ EFFECT_INSTANCE_INPUT_CONTROL SP VALUE SP effect_instance SP input_control SP control_value </li>
5950      <li>/ CHANNEL SP set_chan_instruction </li>
5951      <li>/ MIDI_INSTRUMENT_MAP SP NAME SP midi_map SP map_name </li>
5952      <li>/ FX_SEND SP NAME SP sampler_channel SP fx_send_id SP fx_send_name </li>
5953      <li>/ FX_SEND SP AUDIO_OUTPUT_CHANNEL SP sampler_channel SP fx_send_id SP audio_channel_index SP audio_channel_index </li>
5954      <li>/ FX_SEND SP MIDI_CONTROLLER SP sampler_channel SP fx_send_id SP midi_ctrl </li>
5955      <li>/ FX_SEND SP LEVEL SP sampler_channel SP fx_send_id SP volume_value </li>
5956      <li>/ FX_SEND SP EFFECT SP sampler_channel SP fx_send_id SP effect_chain SP chain_pos </li>
5957      <li>/ DB_INSTRUMENT_DIRECTORY SP NAME SP db_path SP stringval_escaped </li>
5958      <li>/ DB_INSTRUMENT_DIRECTORY SP DESCRIPTION SP db_path SP stringval_escaped </li>
5959      <li>/ DB_INSTRUMENT SP NAME SP db_path SP stringval_escaped </li>
5960      <li>/ DB_INSTRUMENT SP DESCRIPTION SP db_path SP stringval_escaped </li>
5961      <li>/ DB_INSTRUMENT SP FILE_PATH SP filename SP filename </li>
5962      <li>/ ECHO SP boolean </li>
5963      <li>/ SHELL SP INTERACT SP boolean </li>
5964      <li>/ SHELL SP AUTO_CORRECT SP boolean </li>
5965      <li>/ SHELL SP DOC SP boolean </li>
5966      <li>/ VOLUME SP volume_value </li>
5967      <li>/ VOICES SP number </li>
5968      <li>/ STREAMS SP number </li>
5969    </ul>
5970    
5971    <p> </p>
5972    <p id="rfc.section.7.p.15">create_instruction = </p>
5973    
5974    <ul class="empty">
5975      <li>AUDIO_OUTPUT_DEVICE SP string SP key_val_list </li>
5976      <li>/ AUDIO_OUTPUT_DEVICE SP string </li>
5977      <li>/ MIDI_INPUT_DEVICE SP string SP key_val_list </li>
5978      <li>/ MIDI_INPUT_DEVICE SP string </li>
5979      <li>/ FX_SEND SP sampler_channel SP midi_ctrl </li>
5980      <li>/ FX_SEND SP sampler_channel SP midi_ctrl SP fx_send_name </li>
5981      <li>/ EFFECT_INSTANCE SP effect_index </li>
5982      <li>/ EFFECT_INSTANCE SP effect_system SP module SP effect_name </li>
5983    </ul>
5984    
5985    <p> </p>
5986    <p id="rfc.section.7.p.16">reset_instruction = </p>
5987    
5988    <ul class="empty">
5989      <li>CHANNEL SP sampler_channel </li>
5990    </ul>
5991    
5992    <p> </p>
5993    <p id="rfc.section.7.p.17">clear_instruction = </p>
5994    
5995    <ul class="empty">
5996      <li>MIDI_INSTRUMENTS SP midi_map </li>
5997      <li>/ MIDI_INSTRUMENTS SP ALL </li>
5998    </ul>
5999    
6000    <p> </p>
6001    <p id="rfc.section.7.p.18">find_instruction = </p>
6002    
6003    <ul class="empty">
6004      <li>DB_INSTRUMENTS SP NON_RECURSIVE SP db_path SP query_val_list </li>
6005      <li>/ DB_INSTRUMENTS SP db_path SP query_val_list </li>
6006      <li>/ DB_INSTRUMENT_DIRECTORIES SP NON_RECURSIVE SP db_path SP query_val_list </li>
6007      <li>/ DB_INSTRUMENT_DIRECTORIES SP db_path SP query_val_list </li>
6008      <li>/ LOST SP DB_INSTRUMENT_FILES </li>
6009    </ul>
6010    
6011    <p> </p>
6012    <p id="rfc.section.7.p.19">move_instruction = </p>
6013    
6014    <ul class="empty">
6015      <li>DB_INSTRUMENT_DIRECTORY SP db_path SP db_path </li>
6016      <li>/ DB_INSTRUMENT SP db_path SP db_path </li>
6017    </ul>
6018    
6019    <p> </p>
6020    <p id="rfc.section.7.p.20">copy_instruction = </p>
6021    
6022    <ul class="empty">
6023      <li>DB_INSTRUMENT_DIRECTORY SP db_path SP db_path </li>
6024      <li>/ DB_INSTRUMENT SP db_path SP db_path </li>
6025    </ul>
6026    
6027    <p> </p>
6028    <p id="rfc.section.7.p.21">destroy_instruction = </p>
6029    
6030    <ul class="empty">
6031      <li>AUDIO_OUTPUT_DEVICE SP number </li>
6032      <li>/ MIDI_INPUT_DEVICE SP number </li>
6033      <li>/ FX_SEND SP sampler_channel SP fx_send_id </li>
6034      <li>/ EFFECT_INSTANCE SP number </li>
6035    </ul>
6036    
6037    <p> </p>
6038    <p id="rfc.section.7.p.22">load_instruction = </p>
6039    
6040    <ul class="empty">
6041      <li>INSTRUMENT SP load_instr_args </li>
6042      <li>/ ENGINE SP load_engine_args </li>
6043    </ul>
6044    
6045    <p> </p>
6046    <p id="rfc.section.7.p.23">append_instruction = </p>
6047    
6048    <ul class="empty">
6049      <li>SEND_EFFECT_CHAIN SP EFFECT SP device_index SP effect_chain SP effect_instance </li>
6050    </ul>
6051    
6052    <p> </p>
6053    <p id="rfc.section.7.p.24">insert_instruction = </p>
6054    
6055    <ul class="empty">
6056      <li>SEND_EFFECT_CHAIN SP EFFECT SP device_index SP effect_chain SP chain_pos SP effect_instance </li>
6057    </ul>
6058    
6059    <p> </p>
6060    <p id="rfc.section.7.p.25">set_chan_instruction = </p>
6061    
6062    <ul class="empty">
6063      <li>AUDIO_OUTPUT_DEVICE SP sampler_channel SP device_index </li>
6064      <li>/ AUDIO_OUTPUT_CHANNEL SP sampler_channel SP audio_channel_index SP audio_channel_index </li>
6065      <li>/ AUDIO_OUTPUT_TYPE SP sampler_channel SP audio_output_type_name </li>
6066      <li>/ MIDI_INPUT SP sampler_channel SP device_index SP midi_input_port_index SP midi_input_channel_index </li>
6067      <li>/ MIDI_INPUT_DEVICE SP sampler_channel SP device_index </li>
6068      <li>/ MIDI_INPUT_PORT SP sampler_channel SP midi_input_port_index </li>
6069      <li>/ MIDI_INPUT_CHANNEL SP sampler_channel SP midi_input_channel_index </li>
6070      <li>/ MIDI_INPUT_TYPE SP sampler_channel SP midi_input_type_name </li>
6071      <li>/ VOLUME SP sampler_channel SP volume_value </li>
6072      <li>/ MUTE SP sampler_channel SP boolean </li>
6073      <li>/ SOLO SP sampler_channel SP boolean </li>
6074      <li>/ MIDI_INSTRUMENT_MAP SP sampler_channel SP midi_map </li>
6075      <li>/ MIDI_INSTRUMENT_MAP SP sampler_channel SP NONE </li>
6076      <li>/ MIDI_INSTRUMENT_MAP SP sampler_channel SP DEFAULT </li>
6077    </ul>
6078    
6079    <p> </p>
6080    <p id="rfc.section.7.p.26">edit_instruction = </p>
6081    
6082    <ul class="empty">
6083      <li>CHANNEL SP INSTRUMENT SP sampler_channel </li>
6084    </ul>
6085    
6086    <p> </p>
6087    <p id="rfc.section.7.p.27">format_instruction = </p>
6088    
6089    <ul class="empty">
6090      <li>INSTRUMENTS_DB </li>
6091    </ul>
6092    
6093    <p> </p>
6094    <p id="rfc.section.7.p.28">modal_arg = </p>
6095    
6096    <ul class="empty">
6097      <li>/* epsilon (empty argument) */ </li>
6098      <li>/ NON_MODAL SP </li>
6099    </ul>
6100    
6101    <p> </p>
6102    <p id="rfc.section.7.p.29">key_val_list = </p>
6103    
6104    <ul class="empty">
6105      <li>string '=' param_val_list </li>
6106      <li>/ key_val_list SP string '=' param_val_list </li>
6107    </ul>
6108    
6109    <p> </p>
6110    <p id="rfc.section.7.p.30">buffer_size_type = </p>
6111    
6112    <ul class="empty">
6113      <li>BYTES </li>
6114      <li>/ PERCENTAGE </li>
6115    </ul>
6116    
6117    <p> </p>
6118    <p id="rfc.section.7.p.31">list_instruction = </p>
6119    
6120    <ul class="empty">
6121      <li>AUDIO_OUTPUT_DEVICES </li>
6122      <li>/ MIDI_INPUT_DEVICES </li>
6123      <li>/ CHANNELS </li>
6124      <li>/ CHANNEL SP MIDI_INPUTS SP sampler_channel </li>
6125      <li>/ AVAILABLE_ENGINES </li>
6126      <li>/ AVAILABLE_EFFECTS </li>
6127      <li>/ EFFECT_INSTANCES </li>
6128      <li>/ SEND_EFFECT_CHAINS SP number </li>
6129      <li>/ AVAILABLE_MIDI_INPUT_DRIVERS </li>
6130      <li>/ AVAILABLE_AUDIO_OUTPUT_DRIVERS </li>
6131      <li>/ MIDI_INSTRUMENTS SP midi_map </li>
6132      <li>/ MIDI_INSTRUMENTS SP ALL </li>
6133      <li>/ MIDI_INSTRUMENT_MAPS </li>
6134      <li>/ FX_SENDS SP sampler_channel </li>
6135      <li>/ DB_INSTRUMENT_DIRECTORIES SP RECURSIVE SP db_path </li>
6136      <li>/ DB_INSTRUMENT_DIRECTORIES SP db_path </li>
6137      <li>/ DB_INSTRUMENTS SP RECURSIVE SP db_path </li>
6138      <li>/ DB_INSTRUMENTS SP db_path </li>
6139      <li>/ FILE SP INSTRUMENTS SP filename </li>
6140    </ul>
6141    
6142    <p> </p>
6143    <p id="rfc.section.7.p.32">send_instruction = </p>
6144    
6145    <ul class="empty">
6146      <li>CHANNEL SP MIDI_DATA SP string SP sampler_channel SP number SP number </li>
6147    </ul>
6148    
6149    <p> </p>
6150    <p id="rfc.section.7.p.33">load_instr_args = </p>
6151    
6152    <ul class="empty">
6153      <li>filename SP instrument_index SP sampler_channel </li>
6154      <li>/ NON_MODAL SP filename SP instrument_index SP sampler_channel </li>
6155    </ul>
6156    
6157    <p> </p>
6158    <p id="rfc.section.7.p.34">load_engine_args = </p>
6159    
6160    <ul class="empty">
6161      <li>engine_name SP sampler_channel </li>
6162    </ul>
6163    
6164    <p> </p>
6165    <p id="rfc.section.7.p.35">instr_load_mode = </p>
6166    
6167    <ul class="empty">
6168      <li>ON_DEMAND </li>
6169      <li>/ ON_DEMAND_HOLD </li>
6170      <li>/ PERSISTENT </li>
6171    </ul>
6172    
6173    <p> </p>
6174    <p id="rfc.section.7.p.36">effect_instance = </p>
6175    
6176    <ul class="empty">
6177      <li>number </li>
6178    </ul>
6179    
6180    <p> </p>
6181    <p id="rfc.section.7.p.37">device_index = </p>
6182    
6183    <ul class="empty">
6184      <li>number </li>
6185    </ul>
6186    
6187    <p> </p>
6188    <p id="rfc.section.7.p.38">audio_channel_index = </p>
6189    
6190    <ul class="empty">
6191      <li>number </li>
6192    </ul>
6193    
6194    <p> </p>
6195    <p id="rfc.section.7.p.39">audio_output_type_name = </p>
6196    
6197    <ul class="empty">
6198      <li>string </li>
6199    </ul>
6200    
6201    <p> </p>
6202    <p id="rfc.section.7.p.40">midi_input_port_index = </p>
6203    
6204    <ul class="empty">
6205      <li>number </li>
6206    </ul>
6207    
6208    <p> </p>
6209    <p id="rfc.section.7.p.41">midi_input_channel_index = </p>
6210    
6211    <ul class="empty">
6212      <li>number </li>
6213      <li>/ ALL </li>
6214    </ul>
6215    
6216    <p> </p>
6217    <p id="rfc.section.7.p.42">midi_input_type_name = </p>
6218    
6219    <ul class="empty">
6220      <li>string </li>
6221    </ul>
6222    
6223    <p> </p>
6224    <p id="rfc.section.7.p.43">midi_map = </p>
6225    
6226    <ul class="empty">
6227      <li>number </li>
6228    </ul>
6229    
6230    <p> </p>
6231    <p id="rfc.section.7.p.44">midi_bank = </p>
6232    
6233    <ul class="empty">
6234      <li>number </li>
6235    </ul>
6236    
6237    <p> </p>
6238    <p id="rfc.section.7.p.45">midi_prog = </p>
6239    
6240    <ul class="empty">
6241      <li>number </li>
6242    </ul>
6243    
6244    <p> </p>
6245    <p id="rfc.section.7.p.46">midi_ctrl = </p>
6246    
6247    <ul class="empty">
6248      <li>number </li>
6249    </ul>
6250    
6251    <p> </p>
6252    <p id="rfc.section.7.p.47">volume_value = </p>
6253    
6254    <ul class="empty">
6255      <li>dotnum </li>
6256      <li>/ number </li>
6257    </ul>
6258    
6259    <p> </p>
6260    <p id="rfc.section.7.p.48">control_value = </p>
6261    
6262    <ul class="empty">
6263      <li>real </li>
6264    </ul>
6265    
6266    <p> </p>
6267    <p id="rfc.section.7.p.49">sampler_channel = </p>
6268    
6269    <ul class="empty">
6270      <li>number </li>
6271    </ul>
6272    
6273    <p> </p>
6274    <p id="rfc.section.7.p.50">instrument_index = </p>
6275    
6276    <ul class="empty">
6277      <li>number </li>
6278    </ul>
6279    
6280    <p> </p>
6281    <p id="rfc.section.7.p.51">fx_send_id = </p>
6282    
6283    <ul class="empty">
6284      <li>number </li>
6285    </ul>
6286    
6287    <p> </p>
6288    <p id="rfc.section.7.p.52">engine_name = </p>
6289    
6290    <ul class="empty">
6291      <li>string </li>
6292    </ul>
6293    
6294    <p> </p>
6295    <p id="rfc.section.7.p.53">filename = </p>
6296    
6297    <ul class="empty">
6298      <li>path </li>
6299    </ul>
6300    
6301    <p> </p>
6302    <p id="rfc.section.7.p.54">db_path = </p>
6303    
6304    <ul class="empty">
6305      <li>path </li>
6306    </ul>
6307    
6308    <p> </p>
6309    <p id="rfc.section.7.p.55">map_name = </p>
6310    
6311    <ul class="empty">
6312      <li>stringval_escaped </li>
6313    </ul>
6314    
6315    <p> </p>
6316    <p id="rfc.section.7.p.56">entry_name = </p>
6317    
6318    <ul class="empty">
6319      <li>stringval_escaped </li>
6320    </ul>
6321    
6322    <p> </p>
6323    <p id="rfc.section.7.p.57">fx_send_name = </p>
6324    
6325    <ul class="empty">
6326      <li>stringval_escaped </li>
6327    </ul>
6328    
6329    <p> </p>
6330    <p id="rfc.section.7.p.58">effect_name = </p>
6331    
6332    <ul class="empty">
6333      <li>stringval_escaped </li>
6334    </ul>
6335    
6336    <p> </p>
6337    <p id="rfc.section.7.p.59">effect_index = </p>
6338    
6339    <ul class="empty">
6340      <li>number </li>
6341    </ul>
6342    
6343    <p> </p>
6344    <p id="rfc.section.7.p.60">effect_chain = </p>
6345    
6346    <ul class="empty">
6347      <li>number </li>
6348    </ul>
6349    
6350    <p> </p>
6351    <p id="rfc.section.7.p.61">chain_pos = </p>
6352    
6353    <ul class="empty">
6354      <li>number </li>
6355    </ul>
6356    
6357    <p> </p>
6358    <p id="rfc.section.7.p.62">input_control = </p>
6359    
6360    <ul class="empty">
6361      <li>number </li>
6362    </ul>
6363    
6364    <p> </p>
6365    <p id="rfc.section.7.p.63">param_val_list = </p>
6366    
6367    <ul class="empty">
6368      <li>param_val </li>
6369      <li>/ param_val_list','param_val </li>
6370    </ul>
6371    
6372    <p> </p>
6373    <p id="rfc.section.7.p.64">param_val = </p>
6374    
6375    <ul class="empty">
6376      <li>string </li>
6377      <li>/ stringval </li>
6378      <li>/ number </li>
6379      <li>/ dotnum </li>
6380    </ul>
6381    
6382    <p> </p>
6383    <p id="rfc.section.7.p.65">query_val_list = </p>
6384    
6385    <ul class="empty">
6386      <li>string '=' query_val </li>
6387      <li>/ query_val_list SP string '=' query_val </li>
6388    </ul>
6389    
6390    <p> </p>
6391    <p id="rfc.section.7.p.66">query_val = </p>
6392    
6393    <ul class="empty">
6394      <li>text_escaped </li>
6395      <li>/ stringval_escaped </li>
6396    </ul>
6397    
6398    <p> </p>
6399    <p id="rfc.section.7.p.67">scan_mode = </p>
6400    
6401    <ul class="empty">
6402      <li>RECURSIVE </li>
6403      <li>/ NON_RECURSIVE </li>
6404      <li>/ FLAT </li>
6405    </ul>
6406    
6407    <p> </p>
6408    <p id="rfc.section.7.p.68">effect_system = </p>
6409    
6410    <ul class="empty">
6411      <li>string </li>
6412    </ul>
6413    
6414    <p> </p>
6415    <p id="rfc.section.7.p.69">module = </p>
6416    
6417    <ul class="empty">
6418      <li>filename </li>
6419    </ul>
6420    
6421    <p> </p>
6422    <h1 id="rfc.section.7.1"><a href="#rfc.section.7.1">7.1.</a> <a href="#character_set" id="character_set">Character Set and Escape Sequences</a></h1>
6423    <p id="rfc.section.7.1.p.1">Older versions of this protocol up to and including v1.1 only supported the standard ASCII character set (ASCII code 0 - 127) <a href="#RFC20">[RFC20]</a>, all younger versions of this protocol however support the Extended ASCII character set (ASCII code 0 - 255). The same group of younger protocols also support escape sequences, but only for certain, explicitly declared parts of the protocol. The supported escape sequences are defined as follows:</p>
6424    <table cellpadding="3" cellspacing="0" class="tt full center">
6425      <thead>
6426        <tr>
6427          <th class="left">ASCII Character Sequence</th>
6428          <th class="left">Translated into (Name)</th>
6429        </tr>
6430      </thead>
6431      <tbody>
6432        <tr>
6433          <td class="left">\n</td>
6434          <td class="left">new line</td>
6435        </tr>
6436        <tr>
6437          <td class="left">\r</td>
6438          <td class="left">carriage return</td>
6439        </tr>
6440        <tr>
6441          <td class="left">\f</td>
6442          <td class="left">form feed</td>
6443        </tr>
6444        <tr>
6445          <td class="left">\t</td>
6446          <td class="left">horizontal tab</td>
6447        </tr>
6448        <tr>
6449          <td class="left">\v</td>
6450          <td class="left">vertical tab</td>
6451        </tr>
6452        <tr>
6453          <td class="left">\'</td>
6454          <td class="left">apostrophe</td>
6455        </tr>
6456        <tr>
6457          <td class="left">\"</td>
6458          <td class="left">quotation mark</td>
6459        </tr>
6460        <tr>
6461          <td class="left">\\</td>
6462          <td class="left">backslash</td>
6463        </tr>
6464        <tr>
6465          <td class="left">\OOO</td>
6466          <td class="left">three digit octal ASCII code of the character</td>
6467        </tr>
6468        <tr>
6469          <td class="left">\xHH</td>
6470          <td class="left">two digit hex ASCII code of the character</td>
6471        </tr>
6472      </tbody>
6473  </table>  </table>
6474    <p id="rfc.section.7.1.p.2">Notice: due to the transition of certain parts of the protocol which now support escape sequences, a slight backward incompatibility to protocols version v1.1 and younger has been introduced. The only difference is that in parts of the protocol where escape characters are now supported, a backslash characters MUST be escaped as well (that is as double backslash), whereas in the old versions a single backslash was sufficient.</p>
6475    <p id="rfc.section.7.1.p.3">The following LSCP commands support escape sequences as part of their filename / path based arguments and / or may contain a filename / path with escape sequences in their response: </p>
6476    
6477  <a name="rfc.authors"></a><br /><hr />  <ul class="empty">
6478  <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>    <li><a href="#LOAD INSTRUMENT">"LOAD INSTRUMENT"</a> <cite title="NONE">[LOAD INSTRUMENT]</cite></li>
6479  <h3>Author's Address</h3>    <li><a href="#GET CHANNEL INFO">"GET CHANNEL INFO"</a> <cite title="NONE">[GET CHANNEL INFO]</cite></li>
6480  <table width="99%" border="0" cellpadding="0" cellspacing="0">    <li><a href="#MAP MIDI_INSTRUMENT">"MAP MIDI_INSTRUMENT"</a> <cite title="NONE">[MAP MIDI_INSTRUMENT]</cite></li>
6481  <tr><td class="author-text">&nbsp;</td>    <li><a href="#GET MIDI_INSTRUMENT INFO">"GET MIDI_INSTRUMENT INFO"</a> <cite title="NONE">[GET MIDI_INSTRUMENT INFO]</cite></li>
6482  <td class="author-text">C.    <li><a href="#ADD DB_INSTRUMENT_DIRECTORY">"ADD DB_INSTRUMENT_DIRECTORY"</a> <cite title="NONE">[ADD DB_INSTRUMENT_DIRECTORY]</cite></li>
6483  Schoenebeck</td></tr>    <li><a href="#ADD DB_INSTRUMENTS">"ADD DB_INSTRUMENTS"</a> <cite title="NONE">[ADD DB_INSTRUMENTS]</cite></li>
6484  <tr><td class="author-text">&nbsp;</td>    <li><a href="#REMOVE DB_INSTRUMENT_DIRECTORY">"REMOVE DB_INSTRUMENT_DIRECTORY"</a> <cite title="NONE">[REMOVE DB_INSTRUMENT_DIRECTORY]</cite></li>
6485  <td class="author-text">LinuxSampler.org</td></tr>    <li><a href="#REMOVE DB_INSTRUMENT">"REMOVE DB_INSTRUMENT"</a> <cite title="NONE">[REMOVE DB_INSTRUMENT]</cite></li>
6486  <tr><td class="author-text">&nbsp;</td>    <li><a href="#GET DB_INSTRUMENT_DIRECTORIES">"GET DB_INSTRUMENT_DIRECTORIES"</a> <cite title="NONE">[GET DB_INSTRUMENT_DIRECTORIES]</cite></li>
6487  <td class="author-text">Crudebyte Engineering</td></tr>    <li><a href="#LIST DB_INSTRUMENT_DIRECTORIES">"LIST DB_INSTRUMENT_DIRECTORIES"</a> <cite title="NONE">[LIST DB_INSTRUMENT_DIRECTORIES]</cite></li>
6488  <tr><td class="author-text">&nbsp;</td>    <li><a href="#GET DB_INSTRUMENT_DIRECTORY INFO">"GET DB_INSTRUMENT_DIRECTORY INFO"</a> <cite title="NONE">[GET DB_INSTRUMENT_DIRECTORY INFO]</cite></li>
6489  <td class="author-text">Hofgartenstr. 3</td></tr>    <li><a href="#GET DB_INSTRUMENTS">"GET DB_INSTRUMENTS"</a> <cite title="NONE">[GET DB_INSTRUMENTS]</cite></li>
6490  <tr><td class="author-text">&nbsp;</td>    <li><a href="#LIST DB_INSTRUMENTS">"LIST DB_INSTRUMENTS"</a> <cite title="NONE">[LIST DB_INSTRUMENTS]</cite></li>
6491  <td class="author-text">74189 Weinsberg</td></tr>    <li><a href="#GET DB_INSTRUMENT INFO">"GET DB_INSTRUMENT INFO"</a> <cite title="NONE">[GET DB_INSTRUMENT INFO]</cite></li>
6492  <tr><td class="author-text">&nbsp;</td>    <li><a href="#SET DB_INSTRUMENT_DIRECTORY NAME">"SET DB_INSTRUMENT_DIRECTORY NAME"</a> <cite title="NONE">[SET DB_INSTRUMENT_DIRECTORY NAME]</cite></li>
6493  <td class="author-text">Germany</td></tr>    <li><a href="#SET DB_INSTRUMENT_DIRECTORY DESCRIPTION">"SET DB_INSTRUMENT_DIRECTORY DESCRIPTION"</a> <cite title="NONE">[SET DB_INSTRUMENT_DIRECTORY DESCRIPTION]</cite></li>
6494  <tr><td class="author" align="right">Phone:&nbsp;</td>    <li><a href="#SET DB_INSTRUMENT NAME">"SET DB_INSTRUMENT NAME"</a> <cite title="NONE">[SET DB_INSTRUMENT NAME]</cite></li>
6495  <td class="author-text">+49 7134 911614</td></tr>    <li><a href="#SET DB_INSTRUMENT DESCRIPTION">"SET DB_INSTRUMENT DESCRIPTION"</a> <cite title="NONE">[SET DB_INSTRUMENT DESCRIPTION]</cite></li>
6496  <tr><td class="author" align="right">Email:&nbsp;</td>    <li><a href="#FIND DB_INSTRUMENTS">"FIND DB_INSTRUMENTS"</a> <cite title="NONE">[FIND DB_INSTRUMENTS]</cite></li>
6497  <td class="author-text"><a href="mailto:cuse@users.sf.net">cuse@users.sf.net</a></td></tr>    <li><a href="#FIND DB_INSTRUMENT_DIRECTORIES">"FIND DB_INSTRUMENT_DIRECTORIES"</a> <cite title="NONE">[FIND DB_INSTRUMENT_DIRECTORIES]</cite></li>
6498      <li><a href="#MOVE DB_INSTRUMENT">"MOVE DB_INSTRUMENT"</a> <cite title="NONE">[MOVE DB_INSTRUMENT]</cite></li>
6499      <li><a href="#MOVE DB_INSTRUMENT_DIRECTORY">"MOVE DB_INSTRUMENT_DIRECTORY"</a> <cite title="NONE">[MOVE DB_INSTRUMENT_DIRECTORY]</cite></li>
6500      <li><a href="#COPY DB_INSTRUMENT">"COPY DB_INSTRUMENT"</a> <cite title="NONE">[COPY DB_INSTRUMENT]</cite></li>
6501      <li><a href="#COPY DB_INSTRUMENT_DIRECTORY">"COPY DB_INSTRUMENT_DIRECTORY"</a> <cite title="NONE">[COPY DB_INSTRUMENT_DIRECTORY]</cite></li>
6502      <li><a href="#FIND LOST DB_INSTRUMENT_FILES">"FIND LOST DB_INSTRUMENT_FILES"</a> <cite title="NONE">[FIND LOST DB_INSTRUMENT_FILES]</cite></li>
6503      <li><a href="#SET DB_INSTRUMENT FILE_PATH">"SET DB_INSTRUMENT FILE_PATH"</a> <cite title="NONE">[SET DB_INSTRUMENT FILE_PATH]</cite></li>
6504      <li><a href="#GET FILE INSTRUMENTS">"GET FILE INSTRUMENTS"</a> <cite title="NONE">[GET FILE INSTRUMENTS]</cite></li>
6505      <li><a href="#LIST FILE INSTRUMENTS">"LIST FILE INSTRUMENTS"</a> <cite title="NONE">[LIST FILE INSTRUMENTS]</cite></li>
6506      <li><a href="#GET FILE INSTRUMENT INFO">"GET FILE INSTRUMENT INFO"</a> <cite title="NONE">[GET FILE INSTRUMENT INFO]</cite></li>
6507      <li><a href="#GET EFFECT INFO">"GET EFFECT INFO"</a> <cite title="NONE">[GET EFFECT INFO]</cite></li>
6508      <li><a href="#GET EFFECT_INSTANCE INFO">"GET EFFECT_INSTANCE INFO"</a> <cite title="NONE">[GET EFFECT_INSTANCE INFO]</cite></li>
6509      <li><a href="#CREATE EFFECT_INSTANCE">"CREATE EFFECT_INSTANCE"</a> <cite title="NONE">[CREATE EFFECT_INSTANCE]</cite></li>
6510    </ul>
6511    
6512    <p> Note that the forward slash character ('/') has a special meaning in filename / path based arguments: it acts as separator of the nodes in the path, thus if a directory- or filename includes a forward slash (not intended as path node separator), you MUST escape that slash either with the respective hex escape sequence ("\x2f") or with the respective octal escape sequence ("\057").  </p>
6513    <p id="rfc.section.7.1.p.4">Note for Windows: file path arguments in LSCP are expected to use forward slashes as directory node separator similar to Unix based operating systems. In contrast to Unix however a Windows typical drive character is expected to be prefixed to the path. That is an original Windows file path like "D:\Sounds\My.gig" would become in LSCP: "D:/Sounds/My.gig".  </p>
6514    <p id="rfc.section.7.1.p.5">The following LSCP commands even support escape sequences as part of at least one of their text-based arguments (i.e. entity name, description) and / or may contain escape sequences in at least one of their text-based fields in their response: </p>
6515    
6516    <ul class="empty">
6517      <li><a href="#GET SERVER INFO">"GET SERVER INFO"</a> <cite title="NONE">[GET SERVER INFO]</cite></li>
6518      <li><a href="#GET ENGINE INFO">"GET ENGINE INFO"</a> <cite title="NONE">[GET ENGINE INFO]</cite></li>
6519      <li><a href="#GET CHANNEL INFO">"GET CHANNEL INFO"</a> <cite title="NONE">[GET CHANNEL INFO]</cite></li>
6520      <li><a href="#CREATE FX_SEND">"CREATE FX_SEND"</a> <cite title="NONE">[CREATE FX_SEND]</cite></li>
6521      <li><a href="#GET FX_SEND INFO">"GET FX_SEND INFO"</a> <cite title="NONE">[GET FX_SEND INFO]</cite></li>
6522      <li><a href="#SET FX_SEND NAME">"SET FX_SEND NAME"</a> <cite title="NONE">[SET FX_SEND NAME]</cite></li>
6523      <li><a href="#GET MIDI_INSTRUMENT INFO">"GET MIDI_INSTRUMENT INFO"</a> <cite title="NONE">[GET MIDI_INSTRUMENT INFO]</cite></li>
6524      <li><a href="#GET MIDI_INSTRUMENT_MAP INFO">"GET MIDI_INSTRUMENT_MAP INFO"</a> <cite title="NONE">[GET MIDI_INSTRUMENT_MAP INFO]</cite></li>
6525      <li><a href="#ADD MIDI_INSTRUMENT_MAP">"ADD MIDI_INSTRUMENT_MAP"</a> <cite title="NONE">[ADD MIDI_INSTRUMENT_MAP]</cite></li>
6526      <li><a href="#MAP MIDI_INSTRUMENT">"MAP MIDI_INSTRUMENT"</a> <cite title="NONE">[MAP MIDI_INSTRUMENT]</cite></li>
6527      <li><a href="#SET MIDI_INSTRUMENT_MAP NAME">"SET MIDI_INSTRUMENT_MAP NAME"</a> <cite title="NONE">[SET MIDI_INSTRUMENT_MAP NAME]</cite></li>
6528      <li><a href="#GET DB_INSTRUMENT_DIRECTORY INFO">"GET DB_INSTRUMENT_DIRECTORY INFO"</a> <cite title="NONE">[GET DB_INSTRUMENT_DIRECTORY INFO]</cite></li>
6529      <li><a href="#SET DB_INSTRUMENT_DIRECTORY NAME">"SET DB_INSTRUMENT_DIRECTORY NAME"</a> <cite title="NONE">[SET DB_INSTRUMENT_DIRECTORY NAME]</cite></li>
6530      <li><a href="#SET DB_INSTRUMENT_DIRECTORY DESCRIPTION">"SET DB_INSTRUMENT_DIRECTORY DESCRIPTION"</a> <cite title="NONE">[SET DB_INSTRUMENT_DIRECTORY DESCRIPTION]</cite></li>
6531      <li><a href="#FIND DB_INSTRUMENT_DIRECTORIES">"FIND DB_INSTRUMENT_DIRECTORIES"</a> <cite title="NONE">[FIND DB_INSTRUMENT_DIRECTORIES]</cite></li>
6532      <li><a href="#GET DB_INSTRUMENT INFO">"GET DB_INSTRUMENT INFO"</a> <cite title="NONE">[GET DB_INSTRUMENT INFO]</cite></li>
6533      <li><a href="#SET DB_INSTRUMENT NAME">"SET DB_INSTRUMENT NAME"</a> <cite title="NONE">[SET DB_INSTRUMENT NAME]</cite></li>
6534      <li><a href="#SET DB_INSTRUMENT DESCRIPTION">"SET DB_INSTRUMENT DESCRIPTION"</a> <cite title="NONE">[SET DB_INSTRUMENT DESCRIPTION]</cite></li>
6535      <li><a href="#FIND DB_INSTRUMENTS">"FIND DB_INSTRUMENTS"</a> <cite title="NONE">[FIND DB_INSTRUMENTS]</cite></li>
6536      <li><a href="#GET EFFECT INFO">"GET EFFECT INFO"</a> <cite title="NONE">[GET EFFECT INFO]</cite></li>
6537      <li><a href="#GET EFFECT_INSTANCE INFO">"GET EFFECT_INSTANCE INFO"</a> <cite title="NONE">[GET EFFECT_INSTANCE INFO]</cite></li>
6538      <li><a href="#CREATE EFFECT_INSTANCE">"CREATE EFFECT_INSTANCE"</a> <cite title="NONE">[CREATE EFFECT_INSTANCE]</cite></li>
6539    </ul>
6540    
6541    <p> Please note that these lists are manually maintained. If you find a command that also supports escape sequences we forgot to mention here, please report it! </p>
6542    <h1 id="rfc.section.8"><a href="#rfc.section.8">8.</a> <a href="#events" id="events">Events</a></h1>
6543    <p id="rfc.section.8.p.1">This chapter will describe all currently defined events supported by LinuxSampler.</p>
6544    <h1 id="rfc.section.8.1"><a href="#rfc.section.8.1">8.1.</a> <a href="#SUBSCRIBE AUDIO_OUTPUT_DEVICE_COUNT" id="SUBSCRIBE AUDIO_OUTPUT_DEVICE_COUNT">Number of audio output devices changed</a></h1>
6545    <p id="rfc.section.8.1.p.1">Client may want to be notified when the total number of audio output devices on the back-end changes by issuing the following command:</p>
6546    <p/>
6547    
6548    <ul class="empty">
6549      <li>SUBSCRIBE AUDIO_OUTPUT_DEVICE_COUNT</li>
6550    </ul>
6551    
6552    <p> </p>
6553    <p id="rfc.section.8.1.p.3">Server will start sending the following notification messages:</p>
6554    <p/>
6555    
6556    <ul class="empty">
6557      <li>"NOTIFY:AUDIO_OUTPUT_DEVICE_COUNT:&lt;devices&gt;"</li>
6558    </ul>
6559    
6560    <p> </p>
6561    <p id="rfc.section.8.1.p.5">where &lt;devices&gt; will be replaced by the new number of audio output devices.</p>
6562    <h1 id="rfc.section.8.2"><a href="#rfc.section.8.2">8.2.</a> <a href="#SUBSCRIBE AUDIO_OUTPUT_DEVICE_INFO" id="SUBSCRIBE AUDIO_OUTPUT_DEVICE_INFO">Audio output device's settings changed</a></h1>
6563    <p id="rfc.section.8.2.p.1">Client may want to be notified when changes were made to audio output devices on the back-end by issuing the following command:</p>
6564    <p/>
6565    
6566    <ul class="empty">
6567      <li>SUBSCRIBE AUDIO_OUTPUT_DEVICE_INFO</li>
6568    </ul>
6569    
6570    <p> </p>
6571    <p id="rfc.section.8.2.p.3">Server will start sending the following notification messages:</p>
6572    <p/>
6573    
6574    <ul class="empty">
6575      <li>"NOTIFY:AUDIO_OUTPUT_DEVICE_INFO:&lt;device-id&gt;"</li>
6576    </ul>
6577    
6578    <p> </p>
6579    <p id="rfc.section.8.2.p.5">where &lt;device-id&gt; will be replaced by the numerical ID of the audio output device, which settings has been changed. The front-end will have to send the respective command to actually get the audio output device info. Because these messages will be triggered by LSCP commands issued by other clients rather than real time events happening on the server, it is believed that an empty notification message is sufficient here.</p>
6580    <h1 id="rfc.section.8.3"><a href="#rfc.section.8.3">8.3.</a> <a href="#SUBSCRIBE MIDI_INPUT_DEVICE_COUNT" id="SUBSCRIBE MIDI_INPUT_DEVICE_COUNT">Number of MIDI input devices changed</a></h1>
6581    <p id="rfc.section.8.3.p.1">Client may want to be notified when the total number of MIDI input devices on the back-end changes by issuing the following command:</p>
6582    <p/>
6583    
6584    <ul class="empty">
6585      <li>SUBSCRIBE MIDI_INPUT_DEVICE_COUNT</li>
6586    </ul>
6587    
6588    <p> </p>
6589    <p id="rfc.section.8.3.p.3">Server will start sending the following notification messages:</p>
6590    <p/>
6591    
6592    <ul class="empty">
6593      <li>"NOTIFY:MIDI_INPUT_DEVICE_COUNT:&lt;devices&gt;"</li>
6594    </ul>
6595    
6596    <p> </p>
6597    <p id="rfc.section.8.3.p.5">where &lt;devices&gt; will be replaced by the new number of MIDI input devices.</p>
6598    <h1 id="rfc.section.8.4"><a href="#rfc.section.8.4">8.4.</a> <a href="#SUBSCRIBE MIDI_INPUT_DEVICE_INFO" id="SUBSCRIBE MIDI_INPUT_DEVICE_INFO">MIDI input device's settings changed</a></h1>
6599    <p id="rfc.section.8.4.p.1">Client may want to be notified when changes were made to MIDI input devices on the back-end by issuing the following command:</p>
6600    <p/>
6601    
6602    <ul class="empty">
6603      <li>SUBSCRIBE MIDI_INPUT_DEVICE_INFO</li>
6604    </ul>
6605    
6606    <p> </p>
6607    <p id="rfc.section.8.4.p.3">Server will start sending the following notification messages:</p>
6608    <p/>
6609    
6610    <ul class="empty">
6611      <li>"NOTIFY:MIDI_INPUT_DEVICE_INFO:&lt;device-id&gt;"</li>
6612    </ul>
6613    
6614    <p> </p>
6615    <p id="rfc.section.8.4.p.5">where &lt;device-id&gt; will be replaced by the numerical ID of the MIDI input device, which settings has been changed. The front-end will have to send the respective command to actually get the MIDI input device info. Because these messages will be triggered by LSCP commands issued by other clients rather than real time events happening on the server, it is believed that an empty notification message is sufficient here.</p>
6616    <h1 id="rfc.section.8.5"><a href="#rfc.section.8.5">8.5.</a> <a href="#SUBSCRIBE CHANNEL_COUNT" id="SUBSCRIBE CHANNEL_COUNT">Number of sampler channels changed</a></h1>
6617    <p id="rfc.section.8.5.p.1">Client may want to be notified when the total number of channels on the back-end changes by issuing the following command:</p>
6618    <p/>
6619    
6620    <ul class="empty">
6621      <li>SUBSCRIBE CHANNEL_COUNT</li>
6622    </ul>
6623    
6624    <p> </p>
6625    <p id="rfc.section.8.5.p.3">Server will start sending the following notification messages:</p>
6626    <p/>
6627    
6628    <ul class="empty">
6629      <li>"NOTIFY:CHANNEL_COUNT:&lt;channels&gt;"</li>
6630    </ul>
6631    
6632    <p> </p>
6633    <p id="rfc.section.8.5.p.5">where &lt;channels&gt; will be replaced by the new number of sampler channels.</p>
6634    <h1 id="rfc.section.8.6"><a href="#rfc.section.8.6">8.6.</a> <a href="#SUBSCRIBE CHANNEL_MIDI" id="SUBSCRIBE CHANNEL_MIDI">MIDI data on a sampler channel arrived</a></h1>
6635    <p id="rfc.section.8.6.p.1">Client may want to be notified when MIDI data arrive on sampler channels on back-end side, by issuing the following command:</p>
6636    <p/>
6637    
6638    <ul class="empty">
6639      <li>SUBSCRIBE CHANNEL_MIDI</li>
6640    </ul>
6641    
6642    <p> </p>
6643    <p id="rfc.section.8.6.p.3">Server will start sending one of the the following notification messages:</p>
6644    <p/>
6645    
6646    <ul class="empty">
6647      <li>"NOTIFY:CHANNEL_MIDI:&lt;channel-id&gt; NOTE_ON  &lt;note&gt; &lt;velocity&gt;"</li>
6648      <li>"NOTIFY:CHANNEL_MIDI:&lt;channel-id&gt; NOTE_OFF &lt;note&gt; &lt;velocity&gt;"</li>
6649    </ul>
6650    
6651    <p> </p>
6652    <p id="rfc.section.8.6.p.5">where &lt;channel-id&gt; will be replaced by the ID of the sampler channel where the MIDI data arrived. &lt;note&gt; and &lt;velocity&gt; are integer values in the range between 0 .. 127, reflecting the analog meaning of the MIDI specification.  </p>
6653    <p id="rfc.section.8.6.p.6">CAUTION: no guarantee whatsoever will be made that MIDI events are actually all delivered by this mechanism! With other words: events could be lost at any time! This restriction was made to keep the RT-safeness of the backend's MIDI and audio thread unaffected by this feature.</p>
6654    <h1 id="rfc.section.8.7"><a href="#rfc.section.8.7">8.7.</a> <a href="#SUBSCRIBE DEVICE_MIDI" id="SUBSCRIBE DEVICE_MIDI">MIDI data on a MIDI input device arrived</a></h1>
6655    <p id="rfc.section.8.7.p.1">Client may want to be notified when MIDI data arrive on MIDI input devices by issuing the following command:</p>
6656    <p/>
6657    
6658    <ul class="empty">
6659      <li>SUBSCRIBE DEVICE_MIDI</li>
6660    </ul>
6661    
6662    <p> </p>
6663    <p id="rfc.section.8.7.p.3">Server will start sending one of the the following notification messages:</p>
6664    <p/>
6665    
6666    <ul class="empty">
6667      <li>"NOTIFY:DEVICE_MIDI:&lt;device-id&gt; &lt;port-id&gt; NOTE_ON &lt;note&gt; &lt;velocity&gt;"</li>
6668      <li>"NOTIFY:DEVICE_MIDI:&lt;device-id&gt; &lt;port-id&gt; NOTE_OFF &lt;note&gt; &lt;velocity&gt;"</li>
6669    </ul>
6670    
6671    <p> </p>
6672    <p id="rfc.section.8.7.p.5">where &lt;device-id&gt; &lt;port-id&gt; will be replaced by the IDs of the respective MIDI input device and the device's MIDI port where the MIDI data arrived. &lt;note&gt; and &lt;velocity&gt; are integer values in the range between 0 .. 127, reflecting the analog meaning of the MIDI specification.  </p>
6673    <p id="rfc.section.8.7.p.6">CAUTION: no guarantee whatsoever will be made that MIDI events are actually all delivered by this mechanism! With other words: events could be lost at any time! This restriction was made to keep the RT-safeness of the backend's MIDI and audio thread unaffected by this feature.</p>
6674    <h1 id="rfc.section.8.8"><a href="#rfc.section.8.8">8.8.</a> <a href="#SUBSCRIBE VOICE_COUNT" id="SUBSCRIBE VOICE_COUNT">Number of active voices changed</a></h1>
6675    <p id="rfc.section.8.8.p.1">Client may want to be notified when the number of voices on the back-end changes by issuing the following command:</p>
6676    <p/>
6677    
6678    <ul class="empty">
6679      <li>SUBSCRIBE VOICE_COUNT</li>
6680    </ul>
6681    
6682    <p> </p>
6683    <p id="rfc.section.8.8.p.3">Server will start sending the following notification messages:</p>
6684    <p/>
6685    
6686    <ul class="empty">
6687      <li>"NOTIFY:VOICE_COUNT:&lt;sampler-channel&gt; &lt;voices&gt;"</li>
6688    </ul>
6689    
6690    <p> </p>
6691    <p id="rfc.section.8.8.p.5">where &lt;sampler-channel&gt; will be replaced by the sampler channel the voice count change occurred and &lt;voices&gt; by the new number of active voices on that channel.</p>
6692    <h1 id="rfc.section.8.9"><a href="#rfc.section.8.9">8.9.</a> <a href="#SUBSCRIBE STREAM_COUNT" id="SUBSCRIBE STREAM_COUNT">Number of active disk streams changed</a></h1>
6693    <p id="rfc.section.8.9.p.1">Client may want to be notified when the number of streams on the back-end changes by issuing the following command: SUBSCRIBE STREAM_COUNT</p>
6694    <p/>
6695    
6696    <ul class="empty">
6697      <li>SUBSCRIBE STREAM_COUNT</li>
6698    </ul>
6699    
6700    <p> </p>
6701    <p id="rfc.section.8.9.p.3">Server will start sending the following notification messages:</p>
6702    <p/>
6703    
6704    <ul class="empty">
6705      <li>"NOTIFY:STREAM_COUNT:&lt;sampler-channel&gt; &lt;streams&gt;"</li>
6706    </ul>
6707    
6708    <p> </p>
6709    <p id="rfc.section.8.9.p.5">where &lt;sampler-channel&gt; will be replaced by the sampler channel the stream count change occurred and &lt;streams&gt; by the new number of active disk streams on that channel.</p>
6710    <h1 id="rfc.section.8.10"><a href="#rfc.section.8.10">8.10.</a> <a href="#SUBSCRIBE BUFFER_FILL" id="SUBSCRIBE BUFFER_FILL">Disk stream buffer fill state changed</a></h1>
6711    <p id="rfc.section.8.10.p.1">Client may want to be notified when the buffer fill state of a disk stream on the back-end changes by issuing the following command:</p>
6712    <p/>
6713    
6714    <ul class="empty">
6715      <li>SUBSCRIBE BUFFER_FILL</li>
6716    </ul>
6717    
6718    <p> </p>
6719    <p id="rfc.section.8.10.p.3">Server will start sending the following notification messages:</p>
6720    <p/>
6721    
6722    <ul class="empty">
6723      <li>"NOTIFY:BUFFER_FILL:&lt;sampler-channel&gt; &lt;fill-data&gt;"</li>
6724    </ul>
6725    
6726    <p> </p>
6727    <p id="rfc.section.8.10.p.5">where &lt;sampler-channel&gt; will be replaced by the sampler channel the buffer fill state change occurred on and &lt;fill-data&gt; will be replaced by the buffer fill data for this channel as described in <a href="#GET CHANNEL BUFFER_FILL">Section 6.4.13</a> as if the <a href="#GET CHANNEL BUFFER_FILL">"GET CHANNEL BUFFER_FILL PERCENTAGE"</a> <cite title="NONE">[GET CHANNEL BUFFER_FILL]</cite> command was issued on this channel.</p>
6728    <h1 id="rfc.section.8.11"><a href="#rfc.section.8.11">8.11.</a> <a href="#SUBSCRIBE CHANNEL_INFO" id="SUBSCRIBE CHANNEL_INFO">Channel information changed</a></h1>
6729    <p id="rfc.section.8.11.p.1">Client may want to be notified when changes were made to sampler channels on the back-end by issuing the following command:</p>
6730    <p/>
6731    
6732    <ul class="empty">
6733      <li>SUBSCRIBE CHANNEL_INFO</li>
6734    </ul>
6735    
6736    <p> </p>
6737    <p id="rfc.section.8.11.p.3">Server will start sending the following notification messages:</p>
6738    <p/>
6739    
6740    <ul class="empty">
6741      <li>"NOTIFY:CHANNEL_INFO:&lt;sampler-channel&gt;"</li>
6742    </ul>
6743    
6744    <p> </p>
6745    <p id="rfc.section.8.11.p.5">where &lt;sampler-channel&gt; will be replaced by the sampler channel the channel info change occurred. The front-end will have to send the respective command to actually get the channel info. Because these messages will be triggered by LSCP commands issued by other clients rather than real time events happening on the server, it is believed that an empty notification message is sufficient here.</p>
6746    <h1 id="rfc.section.8.12"><a href="#rfc.section.8.12">8.12.</a> <a href="#SUBSCRIBE FX_SEND_COUNT" id="SUBSCRIBE FX_SEND_COUNT">Number of effect sends changed</a></h1>
6747    <p id="rfc.section.8.12.p.1">Client may want to be notified when the number of effect sends on a particular sampler channel is changed by issuing the following command:</p>
6748    <p/>
6749    
6750    <ul class="empty">
6751      <li>SUBSCRIBE FX_SEND_COUNT</li>
6752    </ul>
6753    
6754    <p> </p>
6755    <p id="rfc.section.8.12.p.3">Server will start sending the following notification messages:</p>
6756    <p/>
6757    
6758    <ul class="empty">
6759      <li>"NOTIFY:FX_SEND_COUNT:&lt;channel-id&gt; &lt;fx-sends&gt;"</li>
6760    </ul>
6761    
6762    <p> </p>
6763    <p id="rfc.section.8.12.p.5">where &lt;channel-id&gt; will be replaced by the numerical ID of the sampler channel, on which the effect sends number is changed and &lt;fx-sends&gt; will be replaced by the new number of effect sends on that channel.</p>
6764    <h1 id="rfc.section.8.13"><a href="#rfc.section.8.13">8.13.</a> <a href="#SUBSCRIBE FX_SEND_INFO" id="SUBSCRIBE FX_SEND_INFO">Effect send information changed</a></h1>
6765    <p id="rfc.section.8.13.p.1">Client may want to be notified when changes were made to effect sends on a a particular sampler channel by issuing the following command:</p>
6766    <p/>
6767    
6768    <ul class="empty">
6769      <li>SUBSCRIBE FX_SEND_INFO</li>
6770    </ul>
6771    
6772    <p> </p>
6773    <p id="rfc.section.8.13.p.3">Server will start sending the following notification messages:</p>
6774    <p/>
6775    
6776    <ul class="empty">
6777      <li>"NOTIFY:FX_SEND_INFO:&lt;channel-id&gt; &lt;fx-send-id&gt;"</li>
6778    </ul>
6779    
6780    <p> </p>
6781    <p id="rfc.section.8.13.p.5">where &lt;channel-id&gt; will be replaced by the numerical ID of the sampler channel, on which an effect send entity is changed and &lt;fx-send-id&gt; will be replaced by the numerical ID of the changed effect send.</p>
6782    <h1 id="rfc.section.8.14"><a href="#rfc.section.8.14">8.14.</a> <a href="#SUBSCRIBE TOTAL_VOICE_COUNT" id="SUBSCRIBE TOTAL_VOICE_COUNT">Total number of active voices changed</a></h1>
6783    <p id="rfc.section.8.14.p.1">Client may want to be notified when the total number of voices on the back-end changes by issuing the following command:</p>
6784    <p/>
6785    
6786    <ul class="empty">
6787      <li>SUBSCRIBE TOTAL_VOICE_COUNT</li>
6788    </ul>
6789    
6790    <p> </p>
6791    <p id="rfc.section.8.14.p.3">Server will start sending the following notification messages:</p>
6792    <p/>
6793    
6794    <ul class="empty">
6795      <li>"NOTIFY:TOTAL_VOICE_COUNT:&lt;voices&gt;"</li>
6796    </ul>
6797    
6798    <p> </p>
6799    <p id="rfc.section.8.14.p.5">where &lt;voices&gt; will be replaced by the new number of all currently active voices.</p>
6800    <h1 id="rfc.section.8.15"><a href="#rfc.section.8.15">8.15.</a> <a href="#SUBSCRIBE TOTAL_STREAM_COUNT" id="SUBSCRIBE TOTAL_STREAM_COUNT">Total number of active disk streams changed</a></h1>
6801    <p id="rfc.section.8.15.p.1">Client may want to be notified when the total number of disk streams on the back-end changes by issuing the following command:</p>
6802    <p/>
6803    
6804    <ul class="empty">
6805      <li>SUBSCRIBE TOTAL_STREAM_COUNT</li>
6806    </ul>
6807    
6808    <p> </p>
6809    <p id="rfc.section.8.15.p.3">Server will start sending the following notification messages:</p>
6810    <p/>
6811    
6812    <ul class="empty">
6813      <li>"NOTIFY:TOTAL_STREAM_COUNT:&lt;streams&gt;"</li>
6814    </ul>
6815    
6816    <p> </p>
6817    <p id="rfc.section.8.15.p.5">where &lt;streams&gt; will be replaced by the new number of all currently active disk streams.</p>
6818    <h1 id="rfc.section.8.16"><a href="#rfc.section.8.16">8.16.</a> <a href="#SUBSCRIBE MIDI_INSTRUMENT_MAP_COUNT" id="SUBSCRIBE MIDI_INSTRUMENT_MAP_COUNT">Number of MIDI instrument maps changed</a></h1>
6819    <p id="rfc.section.8.16.p.1">Client may want to be notified when the number of MIDI instrument maps on the back-end changes by issuing the following command:</p>
6820    <p/>
6821    
6822    <ul class="empty">
6823      <li>SUBSCRIBE MIDI_INSTRUMENT_MAP_COUNT</li>
6824    </ul>
6825    
6826    <p> </p>
6827    <p id="rfc.section.8.16.p.3">Server will start sending the following notification messages:</p>
6828    <p/>
6829    
6830    <ul class="empty">
6831      <li>"NOTIFY:MIDI_INSTRUMENT_MAP_COUNT:&lt;maps&gt;"</li>
6832    </ul>
6833    
6834    <p> </p>
6835    <p id="rfc.section.8.16.p.5">where &lt;maps&gt; will be replaced by the new number of MIDI instrument maps.</p>
6836    <h1 id="rfc.section.8.17"><a href="#rfc.section.8.17">8.17.</a> <a href="#SUBSCRIBE MIDI_INSTRUMENT_MAP_INFO" id="SUBSCRIBE MIDI_INSTRUMENT_MAP_INFO">MIDI instrument map information changed</a></h1>
6837    <p id="rfc.section.8.17.p.1">Client may want to be notified when changes were made to MIDI instrument maps on the back-end by issuing the following command:</p>
6838    <p/>
6839    
6840    <ul class="empty">
6841      <li>SUBSCRIBE MIDI_INSTRUMENT_MAP_INFO</li>
6842    </ul>
6843    
6844    <p> </p>
6845    <p id="rfc.section.8.17.p.3">Server will start sending the following notification messages:</p>
6846    <p/>
6847    
6848    <ul class="empty">
6849      <li>"NOTIFY:MIDI_INSTRUMENT_MAP_INFO:&lt;map-id&gt;"</li>
6850    </ul>
6851    
6852    <p> </p>
6853    <p id="rfc.section.8.17.p.5">where &lt;map-id&gt; will be replaced by the numerical ID of the MIDI instrument map, for which information changes occurred. The front-end will have to send the respective command to actually get the MIDI instrument map info. Because these messages will be triggered by LSCP commands issued by other clients rather than real time events happening on the server, it is believed that an empty notification message is sufficient here.</p>
6854    <h1 id="rfc.section.8.18"><a href="#rfc.section.8.18">8.18.</a> <a href="#SUBSCRIBE MIDI_INSTRUMENT_COUNT" id="SUBSCRIBE MIDI_INSTRUMENT_COUNT">Number of MIDI instruments changed</a></h1>
6855    <p id="rfc.section.8.18.p.1">Client may want to be notified when the number of MIDI instrument maps on the back-end changes by issuing the following command:</p>
6856    <p/>
6857    
6858    <ul class="empty">
6859      <li>SUBSCRIBE MIDI_INSTRUMENT_COUNT</li>
6860    </ul>
6861    
6862    <p> </p>
6863    <p id="rfc.section.8.18.p.3">Server will start sending the following notification messages:</p>
6864    <p/>
6865    
6866    <ul class="empty">
6867      <li>"NOTIFY:MIDI_INSTRUMENT_COUNT:&lt;map-id&gt; &lt;instruments&gt;"</li>
6868    </ul>
6869    
6870    <p> </p>
6871    <p id="rfc.section.8.18.p.5">where &lt;map-id&gt; is the numerical ID of the MIDI instrument map, in which the nuber of instruments has changed and &lt;instruments&gt; will be replaced by the new number of MIDI instruments in the specified map.</p>
6872    <h1 id="rfc.section.8.19"><a href="#rfc.section.8.19">8.19.</a> <a href="#SUBSCRIBE MIDI_INSTRUMENT_INFO" id="SUBSCRIBE MIDI_INSTRUMENT_INFO">MIDI instrument information changed</a></h1>
6873    <p id="rfc.section.8.19.p.1">Client may want to be notified when changes were made to MIDI instruments on the back-end by issuing the following command:</p>
6874    <p/>
6875    
6876    <ul class="empty">
6877      <li>SUBSCRIBE MIDI_INSTRUMENT_INFO</li>
6878    </ul>
6879    
6880    <p> </p>
6881    <p id="rfc.section.8.19.p.3">Server will start sending the following notification messages:</p>
6882    <p/>
6883    
6884    <ul class="empty">
6885      <li>"NOTIFY:MIDI_INSTRUMENT_INFO:&lt;map-id&gt; &lt;bank&gt; &lt;program&gt;"</li>
6886    </ul>
6887    
6888    <p> </p>
6889    <p id="rfc.section.8.19.p.5">where &lt;map-id&gt; will be replaced by the numerical ID of the MIDI instrument map, in which a MIDI instrument is changed. &lt;bank&gt; and &lt;program&gt; specifies the location of the changed MIDI instrument in the map. The front-end will have to send the respective command to actually get the MIDI instrument info. Because these messages will be triggered by LSCP commands issued by other clients rather than real time events happening on the server, it is believed that an empty notification message is sufficient here.</p>
6890    <h1 id="rfc.section.8.20"><a href="#rfc.section.8.20">8.20.</a> <a href="#SUBSCRIBE GLOBAL_INFO" id="SUBSCRIBE GLOBAL_INFO">Global settings changed</a></h1>
6891    <p id="rfc.section.8.20.p.1">Client may want to be notified when changes to the global settings of the sampler were made by issuing the following command:</p>
6892    <p/>
6893    
6894    <ul class="empty">
6895      <li>SUBSCRIBE GLOBAL_INFO</li>
6896    </ul>
6897    
6898    <p> </p>
6899    <p id="rfc.section.8.20.p.3">Server will start sending the following types of notification messages:</p>
6900    <p/>
6901    
6902    <ul class="empty">
6903      <li>"NOTIFY:GLOBAL_INFO:VOLUME &lt;volume&gt;" - Notifies that the golbal volume of the sampler is changed, where &lt;volume&gt; will be replaced by the optional dotted floating point value, reflecting the new global volume parameter.</li>
6904    </ul>
6905    
6906    <p> </p>
6907    
6908    <ul class="empty">
6909      <li>"NOTIFY:GLOBAL_INFO:VOICES &lt;max-voices&gt;" - Notifies that the golbal limit of the sampler for maximum voices is changed, where &lt;max-voices&gt; will be an integer value, reflecting the new global voice limit parameter.</li>
6910    </ul>
6911    
6912    <p> </p>
6913    
6914    <ul class="empty">
6915      <li>"NOTIFY:GLOBAL_INFO:STREAMS &lt;max-streams&gt;" - Notifies that the golbal limit of the sampler for maximum disk streams is changed, where &lt;max-streams&gt; will be an integer value, reflecting the new global disk streams limit parameter.</li>
6916    </ul>
6917    
6918    <p> </p>
6919    <h1 id="rfc.section.8.21"><a href="#rfc.section.8.21">8.21.</a> <a href="#SUBSCRIBE DB_INSTRUMENT_DIRECTORY_COUNT" id="SUBSCRIBE DB_INSTRUMENT_DIRECTORY_COUNT">Number of database instrument directories changed</a></h1>
6920    <p id="rfc.section.8.21.p.1">Client may want to be notified when the number of instrument directories in a particular directory in the instruments database is changed by issuing the following command:</p>
6921    <p/>
6922    
6923    <ul class="empty">
6924      <li>SUBSCRIBE DB_INSTRUMENT_DIRECTORY_COUNT</li>
6925    </ul>
6926    
6927    <p> </p>
6928    <p id="rfc.section.8.21.p.3">Server will start sending the following notification messages:</p>
6929    <p/>
6930    
6931    <ul class="empty">
6932      <li>"NOTIFY:DB_INSTRUMENT_DIRECTORY_COUNT:&lt;dir-path&gt;"</li>
6933    </ul>
6934    
6935    <p> </p>
6936    <p id="rfc.section.8.21.p.5">where &lt;dir-path&gt; will be replaced by the absolute path name of the directory in the instruments database, in which the number of directories is changed.</p>
6937    <p id="rfc.section.8.21.p.6">Note that when a non-empty directory is removed, this event is not sent for the subdirectories in that directory.</p>
6938    <h1 id="rfc.section.8.22"><a href="#rfc.section.8.22">8.22.</a> <a href="#SUBSCRIBE DB_INSTRUMENT_DIRECTORY_INFO" id="SUBSCRIBE DB_INSTRUMENT_DIRECTORY_INFO">Database instrument directory information changed</a></h1>
6939    <p id="rfc.section.8.22.p.1">Client may want to be notified when changes were made to directories in the instruments database by issuing the following command:</p>
6940    <p/>
6941    
6942    <ul class="empty">
6943      <li>SUBSCRIBE DB_INSTRUMENT_DIRECTORY_INFO</li>
6944    </ul>
6945    
6946    <p> </p>
6947    <p id="rfc.section.8.22.p.3">Server will start sending the following notification messages:</p>
6948    <p/>
6949    
6950    <ul class="empty">
6951      <li>"NOTIFY:DB_INSTRUMENT_DIRECTORY_INFO:&lt;dir-path&gt;"</li>
6952    </ul>
6953    
6954    <p> </p>
6955    <p id="rfc.section.8.22.p.5">where &lt;dir-path&gt; will be replaced by the absolute path name of the directory, for which information changes occurred. The front-end will have to send the respective command to actually get the updated directory info. Because these messages will be triggered by LSCP commands issued by other clients rather than real time events happening on the server, it is believed that an empty notification message is sufficient here.</p>
6956    <p/>
6957    
6958    <ul class="empty">
6959      <li>"NOTIFY:DB_INSTRUMENT_DIRECTORY_INFO:NAME &lt;old-dir-path&gt; &lt;new-name&gt;"</li>
6960    </ul>
6961    
6962    <p> </p>
6963    <p id="rfc.section.8.22.p.7">where &lt;old-dir-path&gt; is the old absolute path name of the directory (encapsulated into apostrophes), which name is changes and &lt;new-name&gt; is the new name of the directory, encapsulated into apostrophes.</p>
6964    <h1 id="rfc.section.8.23"><a href="#rfc.section.8.23">8.23.</a> <a href="#SUBSCRIBE DB_INSTRUMENT_COUNT" id="SUBSCRIBE DB_INSTRUMENT_COUNT">Number of database instruments changed</a></h1>
6965    <p id="rfc.section.8.23.p.1">Client may want to be notified when the number of instruments in a particular directory in the instruments database is changed by issuing the following command:</p>
6966    <p/>
6967    
6968    <ul class="empty">
6969      <li>SUBSCRIBE DB_INSTRUMENT_COUNT</li>
6970    </ul>
6971    
6972    <p> </p>
6973    <p id="rfc.section.8.23.p.3">Server will start sending the following notification messages:</p>
6974    <p/>
6975    
6976    <ul class="empty">
6977      <li>"NOTIFY:DB_INSTRUMENT_COUNT:&lt;dir-path&gt;"</li>
6978    </ul>
6979    
6980    <p> </p>
6981    <p id="rfc.section.8.23.p.5">where &lt;dir-path&gt; will be replaced by the absolute path name of the directory in the instruments database, in which the number of instruments is changed.</p>
6982    <p id="rfc.section.8.23.p.6">Note that when a non-empty directory is removed, this event is not sent for the instruments in that directory.</p>
6983    <h1 id="rfc.section.8.24"><a href="#rfc.section.8.24">8.24.</a> <a href="#SUBSCRIBE DB_INSTRUMENT_INFO" id="SUBSCRIBE DB_INSTRUMENT_INFO">Database instrument information changed</a></h1>
6984    <p id="rfc.section.8.24.p.1">Client may want to be notified when changes were made to instruments in the instruments database by issuing the following command:</p>
6985    <p/>
6986    
6987    <ul class="empty">
6988      <li>SUBSCRIBE DB_INSTRUMENT_INFO</li>
6989    </ul>
6990    
6991    <p> </p>
6992    <p id="rfc.section.8.24.p.3">Server will start sending the following notification messages:</p>
6993    <p/>
6994    
6995    <ul class="empty">
6996      <li>"NOTIFY:DB_INSTRUMENT_INFO:&lt;instr-path&gt;"</li>
6997    </ul>
6998    
6999    <p> </p>
7000    <p id="rfc.section.8.24.p.5">where &lt;instr-path&gt; will be replaced by the absolute path name of the instrument, which settings are changed. The front-end will have to send the respective command to actually get the updated directory info. Because these messages will be triggered by LSCP commands issued by other clients rather than real time events happening on the server, it is believed that an empty notification message is sufficient here.</p>
7001    <p/>
7002    
7003    <ul class="empty">
7004      <li>"NOTIFY:DB_INSTRUMENT_INFO:NAME &lt;old-instr-path&gt; &lt;new-name&gt;"</li>
7005    </ul>
7006    
7007    <p> </p>
7008    <p id="rfc.section.8.24.p.7">where &lt;old-instr-path&gt; is the old absolute path name of the instrument (encapsulated into apostrophes), which name is changes and &lt;new-name&gt; is the new name of the instrument, encapsulated into apostrophes.</p>
7009    <h1 id="rfc.section.8.25"><a href="#rfc.section.8.25">8.25.</a> <a href="#SUBSCRIBE DB_INSTRUMENTS_JOB_INFO" id="SUBSCRIBE DB_INSTRUMENTS_JOB_INFO">Database job status information changed</a></h1>
7010    <p id="rfc.section.8.25.p.1">Client may want to be notified when the status of particular database instruments job is changed by issuing the following command:</p>
7011    <p/>
7012    
7013    <ul class="empty">
7014      <li>SUBSCRIBE DB_INSTRUMENTS_JOB_INFO</li>
7015    </ul>
7016    
7017    <p> </p>
7018    <p id="rfc.section.8.25.p.3">Server will start sending the following notification messages:</p>
7019    <p/>
7020    
7021    <ul class="empty">
7022      <li>"NOTIFY:DB_INSTRUMENTS_JOB_INFO:&lt;job-id&gt;"</li>
7023    </ul>
7024    
7025    <p> </p>
7026    <p id="rfc.section.8.25.p.5">where &lt;job-id&gt; will be replaced by the numerical ID of the job, which status is changed. The front-end will have to send the respective command to actually get the status info. Because these messages will be triggered by LSCP commands issued by other clients rather than real time events happening on the server, it is believed that an empty notification message is sufficient here.</p>
7027    <h1 id="rfc.section.8.26"><a href="#rfc.section.8.26">8.26.</a> <a href="#SUBSCRIBE EFFECT_INSTANCE_COUNT" id="SUBSCRIBE EFFECT_INSTANCE_COUNT">Number of effect instances changed</a></h1>
7028    <p id="rfc.section.8.26.p.1">Client may want to be notified when the number of effect instances is changed by issuing the following command:</p>
7029    <p/>
7030    
7031    <ul class="empty">
7032      <li>SUBSCRIBE EFFECT_INSTANCE_COUNT</li>
7033    </ul>
7034    
7035    <p> </p>
7036    <p id="rfc.section.8.26.p.3">Server will start sending the following notification messages:</p>
7037    <p/>
7038    
7039    <ul class="empty">
7040      <li>"EFFECT_INSTANCE_COUNT:&lt;instances&gt;"</li>
7041    </ul>
7042    
7043    <p> </p>
7044    <p id="rfc.section.8.26.p.5">where &lt;instances&gt; will be replaced by the new number of effect instances.</p>
7045    <h1 id="rfc.section.8.27"><a href="#rfc.section.8.27">8.27.</a> <a href="#SUBSCRIBE EFFECT_INSTANCE_INFO" id="SUBSCRIBE EFFECT_INSTANCE_INFO">Effect instance information changed</a></h1>
7046    <p id="rfc.section.8.27.p.1">Client may want to be notified when changes were made to effect instances on the back-end by issuing the following command:</p>
7047    <p/>
7048    
7049    <ul class="empty">
7050      <li>SUBSCRIBE EFFECT_INSTANCE_INFO</li>
7051    </ul>
7052    
7053    <p> </p>
7054    <p id="rfc.section.8.27.p.3">Server will start sending the following notification messages:</p>
7055    <p/>
7056    
7057    <ul class="empty">
7058      <li>"EFFECT_INSTANCE_INFO:&lt;instance-id&gt;"</li>
7059    </ul>
7060    
7061    <p> </p>
7062    <p id="rfc.section.8.27.p.5">where &lt;instance-id&gt; will be replaced by the numerical ID of the effect instance.</p>
7063    <h1 id="rfc.section.8.28"><a href="#rfc.section.8.28">8.28.</a> <a href="#SUBSCRIBE SEND_EFFECT_CHAIN_COUNT" id="SUBSCRIBE SEND_EFFECT_CHAIN_COUNT">Number of send effect chains changed</a></h1>
7064    <p id="rfc.section.8.28.p.1">Client may want to be notified when the number of send effect chains is changed by issuing the following command:</p>
7065    <p/>
7066    
7067    <ul class="empty">
7068      <li>SUBSCRIBE SEND_EFFECT_CHAIN_COUNT</li>
7069    </ul>
7070    
7071    <p> </p>
7072    <p id="rfc.section.8.28.p.3">Server will start sending the following notification messages:</p>
7073    <p/>
7074    
7075    <ul class="empty">
7076      <li>"NOTIFY:SEND_EFFECT_CHAIN_COUNT:&lt;device-id&gt; &lt;chains&gt;"</li>
7077    </ul>
7078    
7079    <p> </p>
7080    <p id="rfc.section.8.28.p.5">where &lt;device-id&gt; will be replaced by the numerical ID of the audio output device, in which the number of send effect chains is changed and &lt;chains&gt; will be replaced by the new number of send effect chains.</p>
7081    <h1 id="rfc.section.8.29"><a href="#rfc.section.8.29">8.29.</a> <a href="#SUBSCRIBE SEND_EFFECT_CHAIN_INFO" id="SUBSCRIBE SEND_EFFECT_CHAIN_INFO">Send effect chain information changed</a></h1>
7082    <p id="rfc.section.8.29.p.1">Client may want to be notified when changes were made to send effect chains on the back-end by issuing the following command:</p>
7083    <p/>
7084    
7085    <ul class="empty">
7086      <li>SUBSCRIBE SEND_EFFECT_CHAIN_INFO</li>
7087    </ul>
7088    
7089    <p> </p>
7090    <p id="rfc.section.8.29.p.3">Server will start sending the following notification messages:</p>
7091    <p/>
7092    
7093    <ul class="empty">
7094      <li>"SEND_EFFECT_CHAIN_INFO:&lt;device-id&gt; &lt;chain-id&gt; &lt;instances&gt;" - Notifies that the number of effect instances in a particular send effect chain is changed, where &lt;device-id&gt; will be replaced by the numerical ID of the audio output device the send effect chain belongs to, &lt;chain-id&gt; will be replaced by the numerical ID of the send effect chain in which the number of effect instances has changed and &lt;instances&gt; will be replaced by the new number of effect instances in the specified send effect chain.</li>
7095    </ul>
7096    
7097    <p> </p>
7098    <h1 id="rfc.section.8.30"><a href="#rfc.section.8.30">8.30.</a> <a href="#SUBSCRIBE MISCELLANEOUS" id="SUBSCRIBE MISCELLANEOUS">Miscellaneous and debugging events</a></h1>
7099    <p id="rfc.section.8.30.p.1">Client may want to be notified of miscellaneous and debugging events occurring at the server by issuing the following command:</p>
7100    <p/>
7101    
7102    <ul class="empty">
7103      <li>SUBSCRIBE MISCELLANEOUS</li>
7104    </ul>
7105    
7106    <p> </p>
7107    <p id="rfc.section.8.30.p.3">Server will start sending the following notification messages:</p>
7108    <p/>
7109    
7110    <ul class="empty">
7111      <li>"NOTIFY:MISCELLANEOUS:&lt;string&gt;"</li>
7112    </ul>
7113    
7114    <p> </p>
7115    <p id="rfc.section.8.30.p.5">where &lt;string&gt; will be replaced by whatever data server wants to send to the client. Client MAY display this data to the user AS IS to facilitate debugging.</p>
7116    <h1 id="rfc.section.9"><a href="#rfc.section.9">9.</a> Security Considerations</h1>
7117    <p id="rfc.section.9.p.1">As there is so far no method of authentication and authorization defined and so not required for a client applications to succeed to connect, running LinuxSampler might be a security risk for the host system the LinuxSampler instance is running on.</p>
7118    <h1 id="rfc.section.10"><a href="#rfc.section.10">10.</a> Acknowledgments</h1>
7119    <p id="rfc.section.10.p.1">This document has benefited greatly from the comments of the following people, discussed on the LinuxSampler developer's mailing list:</p>
7120    <p/>
7121    
7122    <ul class="empty">
7123      <li>Rui Nuno Capela</li>
7124      <li>Vladimir Senkov</li>
7125      <li>Mark Knecht</li>
7126      <li>Grigor Iliev</li>
7127    </ul>
7128    
7129    <p> </p>
7130    <h1 id="rfc.references"><a href="#rfc.references">11.</a> References</h1>
7131    <table>
7132      <tbody>
7133        <tr>
7134          <td class="reference">
7135            <b id="RFC20">[RFC20]</b>
7136          </td>
7137          <td class="top"><a>UCLA</a>, "<a href="http://tools.ietf.org/html/rfc20">ASCII format for Network Interchange</a>", RFC 20, 1969.</td>
7138        </tr>
7139        <tr>
7140          <td class="reference">
7141            <b id="RFC2119">[RFC2119]</b>
7142          </td>
7143          <td class="top"><a title="Harvard University">Bradner, S.</a>, "<a href="http://tools.ietf.org/html/rfc2119">Key words for use in RFCs to Indicate Requirement Levels</a>", RFC 2119, 1997.</td>
7144        </tr>
7145        <tr>
7146          <td class="reference">
7147            <b id="RFC2234">[RFC2234]</b>
7148          </td>
7149          <td class="top"><a title="Internet Mail Consortium">Crocker, D.</a> and <a title="Demon Internet Ltd">P. Overell</a>, "<a href="http://tools.ietf.org/html/rfc2234">Augmented BNF for Syntax Specifications</a>", RFC 2234, 1997.</td>
7150        </tr>
7151        <tr>
7152          <td class="reference">
7153            <b id="RFC793">[RFC793]</b>
7154          </td>
7155          <td class="top"><a>Defense Advanced Research Projects Agency</a>, "<a href="http://tools.ietf.org/html/rfc793">TRANSMISSION CONTROL PROTOCOL</a>", RFC 793, 1981.</td>
7156        </tr>
7157      </tbody>
7158  </table>  </table>
7159  <a name="rfc.copyright"></a><br /><hr />  <h1 id="rfc.authors">
7160  <table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc">&nbsp;TOC&nbsp;</a></td></tr></table>    <a href="#rfc.authors">Author's Address</a>
7161  <h3>Full Copyright Statement</h3>  </h1>
7162  <p class='copyright'>  <div class="avoidbreak">
7163  Copyright &copy; The IETF Trust (2015).</p>    <address class="vcard">
7164  <p class='copyright'>          <span class="vcardline">
7165  This document is subject to the rights,            <span class="fn">C. Schoenebeck</span> (editor)
7166  licenses and restrictions contained in BCP&nbsp;78,            <span class="n hidden">
7167  and except as set forth therein,                  <span class="family-name">Schoenebeck</span>
7168  the authors retain all their rights.</p>            </span>
7169  <p class='copyright'>          </span>
7170  This document and the information contained herein are provided          <span class="org vcardline">LinuxSampler.org </span>
7171  on an &ldquo;AS IS&rdquo; basis and THE CONTRIBUTOR,          <span class="adr">
7172  THE ORGANIZATION HE/SHE REPRESENTS            <span class="vcardline">Crudebyte Engineering</span>
7173  OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY, THE IETF TRUST  <span class="vcardline">Hofgartenstr. 3</span>
7174  AND THE INTERNET ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES,  
7175  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT            <span class="vcardline">
7176  THE USE OF THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY                  <span class="locality">74189 Weinsberg</span>,  
7177  IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR                  <span class="region"></span>
7178  PURPOSE.</p>                  <span class="code"></span>
7179  <h3>Intellectual Property</h3>            </span>
7180  <p class='copyright'>            <span class="country-name vcardline">Germany</span>
7181  The IETF takes no position regarding the validity or scope of any          </span>
7182  Intellectual Property Rights or other rights that might be claimed          <span class="vcardline">Phone: +49 7134 911614</span>
7183  to pertain to the implementation or use of the technology  
7184  described in this document or the extent to which any license  <span class="vcardline">EMail: <a href="mailto:cuse@users.sf.net">cuse@users.sf.net</a></span>
7185  under such rights might or might not be available; nor does it  
7186  represent that it has made any independent effort to identify any    </address>
7187  such rights.  </div>
7188  Information on the procedures with respect to  
7189  rights in RFC documents can be found in BCP&nbsp;78 and BCP&nbsp;79.</p>  </body>
7190  <p class='copyright'>  </html>
 Copies of IPR disclosures made to the IETF Secretariat and any  
 assurances of licenses to be made available,  
 or the result of an attempt made to obtain a general license or  
 permission for the use of such proprietary rights by implementers or  
 users of this specification can be obtained from the IETF on-line IPR  
 repository at <a href='http://www.ietf.org/ipr'>http://www.ietf.org/ipr</a>.</p>  
 <p class='copyright'>  
 The IETF invites any interested party to bring to its attention  
 any copyrights,  
 patents or patent applications,  
 or other  
 proprietary rights that may cover technology that may be required  
 to implement this standard.  
 Please address the information to the IETF at <a href='mailto:ietf-ipr@ietf.org'>ietf-ipr@ietf.org</a>.</p>  
 </body></html>  

Legend:
Removed from v.3502  
changed lines
  Added in v.3503

  ViewVC Help
Powered by ViewVC