/[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>