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

Contents of /web/trunk/www.linuxsampler.org/api/draft-linuxsampler-protocol.txt

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2023 - (show annotations) (download)
Sun Nov 1 12:59:16 2009 UTC (14 years, 5 months ago) by schoenebeck
File MIME type: text/plain
File size: 241872 byte(s)
* updated LSCP specs for sending MIDI CC

1
2
3
4 LinuxSampler Developers C. Schoenebeck
5 Internet-Draft Interessengemeinschaft Software
6 Intended status: Standards Track Engineering e. V.
7 Expires: May 5, 2010 November 1, 2009
8
9
10 LinuxSampler Control Protocol
11 LSCP 1.5
12
13 Abstract
14
15 The LinuxSampler Control Protocol (LSCP) is an application-level
16 protocol primarily intended for local and remote controlling the
17 LinuxSampler backend application, which is a sophisticated server-
18 like console application essentially playing back audio samples and
19 manipulating the samples in real time to certain extent.
20
21 Status of this Memo
22
23 By submitting this Internet-Draft, each author represents that any
24 applicable patent or other IPR claims of which he or she is aware
25 have been or will be disclosed, and any of which he or she becomes
26 aware will be disclosed, in accordance with Section 6 of BCP 79.
27
28 Internet-Drafts are working documents of the Internet Engineering
29 Task Force (IETF), its areas, and its working groups. Note that
30 other groups may also distribute working documents as Internet-
31 Drafts.
32
33 Internet-Drafts are draft documents valid for a maximum of six months
34 and may be updated, replaced, or obsoleted by other documents at any
35 time. It is inappropriate to use Internet-Drafts as reference
36 material or to cite them other than as "work in progress."
37
38 The list of current Internet-Drafts can be accessed at
39 http://www.ietf.org/ietf/1id-abstracts.txt.
40
41 The list of Internet-Draft Shadow Directories can be accessed at
42 http://www.ietf.org/shadow.html.
43
44 This Internet-Draft will expire on May 5, 2010.
45
46
47
48
49
50
51
52
53
54
55 Schoenebeck Expires May 5, 2010 [Page 1]
56
57 Internet-Draft LinuxSampler Control Protocol November 2009
58
59
60 Table of Contents
61
62 1. Requirements notation . . . . . . . . . . . . . . . . . . . . 6
63 2. Versioning of this specification . . . . . . . . . . . . . . 7
64 3. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 8
65 4. Focus of this protocol . . . . . . . . . . . . . . . . . . . 9
66 5. Communication Overview . . . . . . . . . . . . . . . . . . . 10
67 5.1. Request/response communication method . . . . . . . . . . 10
68 5.1.1. Result format . . . . . . . . . . . . . . . . . . . . 11
69 5.2. Subscribe/notify communication method . . . . . . . . . . 13
70 6. Description for control commands . . . . . . . . . . . . . . 15
71 6.1. Ignored lines and comments . . . . . . . . . . . . . . . 15
72 6.2. Configuring audio drivers . . . . . . . . . . . . . . . . 15
73 6.2.1. Getting amount of available audio output drivers . . 16
74 6.2.2. Getting all available audio output drivers . . . . . 16
75 6.2.3. Getting information about a specific audio output
76 driver . . . . . . . . . . . . . . . . . . . . . . . 16
77 6.2.4. Getting information about specific audio output
78 driver parameter . . . . . . . . . . . . . . . . . . 17
79 6.2.5. Creating an audio output device . . . . . . . . . . . 21
80 6.2.6. Destroying an audio output device . . . . . . . . . . 22
81 6.2.7. Getting all created audio output device count . . . . 23
82 6.2.8. Getting all created audio output device list . . . . 23
83 6.2.9. Getting current settings of an audio output device . 23
84 6.2.10. Changing settings of audio output devices . . . . . . 25
85 6.2.11. Getting information about an audio channel . . . . . 26
86 6.2.12. Getting information about specific audio channel
87 parameter . . . . . . . . . . . . . . . . . . . . . . 27
88 6.2.13. Changing settings of audio output channels . . . . . 29
89 6.3. Configuring MIDI input drivers . . . . . . . . . . . . . 30
90 6.3.1. Getting amount of available MIDI input drivers . . . 31
91 6.3.2. Getting all available MIDI input drivers . . . . . . 31
92 6.3.3. Getting information about a specific MIDI input
93 driver . . . . . . . . . . . . . . . . . . . . . . . 32
94 6.3.4. Getting information about specific MIDI input
95 driver parameter . . . . . . . . . . . . . . . . . . 33
96 6.3.5. Creating a MIDI input device . . . . . . . . . . . . 35
97 6.3.6. Destroying a MIDI input device . . . . . . . . . . . 36
98 6.3.7. Getting all created MIDI input device count . . . . . 37
99 6.3.8. Getting all created MIDI input device list . . . . . 37
100 6.3.9. Getting current settings of a MIDI input device . . . 38
101 6.3.10. Changing settings of MIDI input devices . . . . . . . 39
102 6.3.11. Getting information about a MIDI port . . . . . . . . 39
103 6.3.12. Getting information about specific MIDI port
104 parameter . . . . . . . . . . . . . . . . . . . . . . 40
105 6.3.13. Changing settings of MIDI input ports . . . . . . . . 42
106 6.4. Configuring sampler channels . . . . . . . . . . . . . . 43
107 6.4.1. Loading an instrument . . . . . . . . . . . . . . . . 43
108
109
110
111 Schoenebeck Expires May 5, 2010 [Page 2]
112
113 Internet-Draft LinuxSampler Control Protocol November 2009
114
115
116 6.4.2. Loading a sampler engine . . . . . . . . . . . . . . 44
117 6.4.3. Getting all created sampler channel count . . . . . . 45
118 6.4.4. Getting all created sampler channel list . . . . . . 46
119 6.4.5. Adding a new sampler channel . . . . . . . . . . . . 46
120 6.4.6. Removing a sampler channel . . . . . . . . . . . . . 47
121 6.4.7. Getting amount of available engines . . . . . . . . . 48
122 6.4.8. Getting all available engines . . . . . . . . . . . . 48
123 6.4.9. Getting information about an engine . . . . . . . . . 48
124 6.4.10. Getting sampler channel information . . . . . . . . . 49
125 6.4.11. Current number of active voices . . . . . . . . . . . 52
126 6.4.12. Current number of active disk streams . . . . . . . . 53
127 6.4.13. Current fill state of disk stream buffers . . . . . . 53
128 6.4.14. Setting audio output device . . . . . . . . . . . . . 54
129 6.4.15. Setting audio output type . . . . . . . . . . . . . . 55
130 6.4.16. Setting audio output channel . . . . . . . . . . . . 56
131 6.4.17. Setting MIDI input device . . . . . . . . . . . . . . 57
132 6.4.18. Setting MIDI input type . . . . . . . . . . . . . . . 57
133 6.4.19. Setting MIDI input port . . . . . . . . . . . . . . . 58
134 6.4.20. Setting MIDI input channel . . . . . . . . . . . . . 59
135 6.4.21. Setting channel volume . . . . . . . . . . . . . . . 59
136 6.4.22. Muting a sampler channel . . . . . . . . . . . . . . 60
137 6.4.23. Soloing a sampler channel . . . . . . . . . . . . . . 61
138 6.4.24. Assigning a MIDI instrument map to a sampler
139 channel . . . . . . . . . . . . . . . . . . . . . . . 61
140 6.4.25. Adding an effect send to a sampler channel . . . . . 62
141 6.4.26. Removing an effect send from a sampler channel . . . 64
142 6.4.27. Getting amount of effect sends on a sampler channel . 64
143 6.4.28. Listing all effect sends on a sampler channel . . . . 65
144 6.4.29. Getting effect send information . . . . . . . . . . . 65
145 6.4.30. Changing effect send's name . . . . . . . . . . . . . 67
146 6.4.31. Altering effect send's audio routing . . . . . . . . 67
147 6.4.32. Altering effect send's MIDI controller . . . . . . . 68
148 6.4.33. Altering effect send's send level . . . . . . . . . . 69
149 6.4.34. Sending MIDI messages to sampler channel . . . . . . 70
150 6.4.35. Resetting a sampler channel . . . . . . . . . . . . . 71
151 6.5. Controlling connection . . . . . . . . . . . . . . . . . 72
152 6.5.1. Register front-end for receiving event messages . . . 72
153 6.5.2. Unregister front-end for not receiving event
154 messages . . . . . . . . . . . . . . . . . . . . . . 73
155 6.5.3. Enable or disable echo of commands . . . . . . . . . 73
156 6.5.4. Close client connection . . . . . . . . . . . . . . . 74
157 6.6. Global commands . . . . . . . . . . . . . . . . . . . . . 74
158 6.6.1. Current number of active voices . . . . . . . . . . . 74
159 6.6.2. Maximum amount of active voices . . . . . . . . . . . 74
160 6.6.3. Current number of active disk streams . . . . . . . . 75
161 6.6.4. Reset sampler . . . . . . . . . . . . . . . . . . . . 75
162 6.6.5. General sampler informations . . . . . . . . . . . . 75
163 6.6.6. Getting global volume attenuation . . . . . . . . . . 76
164
165
166
167 Schoenebeck Expires May 5, 2010 [Page 3]
168
169 Internet-Draft LinuxSampler Control Protocol November 2009
170
171
172 6.6.7. Setting global volume attenuation . . . . . . . . . . 76
173 6.6.8. Getting global voice limit . . . . . . . . . . . . . 77
174 6.6.9. Setting global voice limit . . . . . . . . . . . . . 77
175 6.6.10. Getting global disk stream limit . . . . . . . . . . 78
176 6.6.11. Setting global disk stream limit . . . . . . . . . . 79
177 6.7. MIDI Instrument Mapping . . . . . . . . . . . . . . . . . 79
178 6.7.1. Create a new MIDI instrument map . . . . . . . . . . 80
179 6.7.2. Delete one particular or all MIDI instrument maps . . 81
180 6.7.3. Get amount of existing MIDI instrument maps . . . . . 82
181 6.7.4. Getting all created MIDI instrument maps . . . . . . 82
182 6.7.5. Getting MIDI instrument map information . . . . . . . 82
183 6.7.6. Renaming a MIDI instrument map . . . . . . . . . . . 83
184 6.7.7. Create or replace a MIDI instrument map entry . . . . 84
185 6.7.8. Getting ammount of MIDI instrument map entries . . . 87
186 6.7.9. Getting indeces of all entries of a MIDI
187 instrument map . . . . . . . . . . . . . . . . . . . 87
188 6.7.10. Remove an entry from the MIDI instrument map . . . . 88
189 6.7.11. Get current settings of MIDI instrument map entry . . 89
190 6.7.12. Clear MIDI instrument map . . . . . . . . . . . . . . 90
191 6.8. Managing Instruments Database . . . . . . . . . . . . . . 91
192 6.8.1. Creating a new instrument directory . . . . . . . . . 91
193 6.8.2. Deleting an instrument directory . . . . . . . . . . 92
194 6.8.3. Getting amount of instrument directories . . . . . . 93
195 6.8.4. Listing all directories in specific directory . . . . 93
196 6.8.5. Getting instrument directory information . . . . . . 94
197 6.8.6. Renaming an instrument directory . . . . . . . . . . 95
198 6.8.7. Moving an instrument directory . . . . . . . . . . . 95
199 6.8.8. Copying instrument directories . . . . . . . . . . . 96
200 6.8.9. Changing the description of directory . . . . . . . . 97
201 6.8.10. Finding directories . . . . . . . . . . . . . . . . . 97
202 6.8.11. Adding instruments to the instruments database . . . 99
203 6.8.12. Removing an instrument . . . . . . . . . . . . . . . 100
204 6.8.13. Getting amount of instruments . . . . . . . . . . . . 101
205 6.8.14. Listing all instruments in specific directory . . . . 102
206 6.8.15. Getting instrument information . . . . . . . . . . . 102
207 6.8.16. Renaming an instrument . . . . . . . . . . . . . . . 105
208 6.8.17. Moving an instrument . . . . . . . . . . . . . . . . 105
209 6.8.18. Copying instruments . . . . . . . . . . . . . . . . . 106
210 6.8.19. Changing the description of instrument . . . . . . . 106
211 6.8.20. Finding instruments . . . . . . . . . . . . . . . . . 107
212 6.8.21. Getting job status information . . . . . . . . . . . 109
213 6.8.22. Formatting the instruments database . . . . . . . . . 111
214 6.8.23. Checking for lost instrument files . . . . . . . . . 111
215 6.8.24. Replacing an instrument file . . . . . . . . . . . . 112
216 6.9. Editing Instruments . . . . . . . . . . . . . . . . . . . 112
217 6.9.1. Opening an appropriate instrument editor
218 application . . . . . . . . . . . . . . . . . . . . . 112
219 6.10. Managing Files . . . . . . . . . . . . . . . . . . . . . 113
220
221
222
223 Schoenebeck Expires May 5, 2010 [Page 4]
224
225 Internet-Draft LinuxSampler Control Protocol November 2009
226
227
228 6.10.1. Retrieving amount of instruments of a file . . . . . 114
229 6.10.2. Retrieving all instruments of a file . . . . . . . . 114
230 6.10.3. Retrieving informations about one instrument in a
231 file . . . . . . . . . . . . . . . . . . . . . . . . 115
232 7. Command Syntax . . . . . . . . . . . . . . . . . . . . . . . 117
233 7.1. Character Set and Escape Sequences . . . . . . . . . . . 131
234 8. Events . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
235 8.1. Number of audio output devices changed . . . . . . . . . 136
236 8.2. Audio output device's settings changed . . . . . . . . . 136
237 8.3. Number of MIDI input devices changed . . . . . . . . . . 136
238 8.4. MIDI input device's settings changed . . . . . . . . . . 137
239 8.5. Number of sampler channels changed . . . . . . . . . . . 137
240 8.6. MIDI data on a sampler channel arrived . . . . . . . . . 137
241 8.7. MIDI data on a MIDI input device arrived . . . . . . . . 138
242 8.8. Number of active voices changed . . . . . . . . . . . . . 138
243 8.9. Number of active disk streams changed . . . . . . . . . . 139
244 8.10. Disk stream buffer fill state changed . . . . . . . . . . 139
245 8.11. Channel information changed . . . . . . . . . . . . . . . 139
246 8.12. Number of effect sends changed . . . . . . . . . . . . . 140
247 8.13. Effect send information changed . . . . . . . . . . . . . 140
248 8.14. Total number of active voices changed . . . . . . . . . . 141
249 8.15. Total number of active disk streams changed . . . . . . . 141
250 8.16. Number of MIDI instrument maps changed . . . . . . . . . 141
251 8.17. MIDI instrument map information changed . . . . . . . . . 141
252 8.18. Number of MIDI instruments changed . . . . . . . . . . . 142
253 8.19. MIDI instrument information changed . . . . . . . . . . . 142
254 8.20. Global settings changed . . . . . . . . . . . . . . . . . 143
255 8.21. Number of database instrument directories changed . . . . 143
256 8.22. Database instrument directory information changed . . . . 143
257 8.23. Number of database instruments changed . . . . . . . . . 144
258 8.24. Database instrument information changed . . . . . . . . . 144
259 8.25. Database job status information changed . . . . . . . . . 145
260 8.26. Miscellaneous and debugging events . . . . . . . . . . . 145
261 9. Security Considerations . . . . . . . . . . . . . . . . . . . 147
262 10. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 148
263 11. References . . . . . . . . . . . . . . . . . . . . . . . . . 149
264 Author's Address . . . . . . . . . . . . . . . . . . . . . . . . 150
265 Intellectual Property and Copyright Statements . . . . . . . . . 151
266
267
268
269
270
271
272
273
274
275
276
277
278
279 Schoenebeck Expires May 5, 2010 [Page 5]
280
281 Internet-Draft LinuxSampler Control Protocol November 2009
282
283
284 1. Requirements notation
285
286 The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
287 "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
288 document are to be interpreted as described in [RFC2119].
289
290 This protocol is always case-sensitive if not explicitly claimed the
291 opposite.
292
293 In examples, "C:" and "S:" indicate lines sent by the client (front-
294 end) and server (LinuxSampler) respectively. Lines in examples must
295 be interpreted as every line being CRLF terminated (carriage return
296 character followed by line feed character as defined in the ASCII
297 standard [RFC20]), thus the following example:
298
299 C: "some line"
300
301 "another line"
302
303 must actually be interpreted as client sending the following message:
304
305 "some line<CR><LF>another line<CR><LF>"
306
307 where <CR> symbolizes the carriage return character and <LF> the line
308 feed character as defined in the ASCII standard.
309
310 Due to technical reasons, messages can arbitrary be fragmented, means
311 the following example:
312
313 S: "abcd"
314
315 could also happen to be sent in three messages like in the following
316 sequence scenario:
317
318 o server sending message "a"
319
320 o followed by a delay (pause) with arbitrary duration
321
322 o followed by server sending message "bcd<CR>"
323
324 o again followed by a delay (pause) with arbitrary duration
325
326 o followed by server sending the message "<LF>"
327
328 where again <CR> and <LF> symbolize the carriage return and line feed
329 characters respectively.
330
331
332
333
334
335 Schoenebeck Expires May 5, 2010 [Page 6]
336
337 Internet-Draft LinuxSampler Control Protocol November 2009
338
339
340 2. Versioning of this specification
341
342 LSCP will certainly be extended and enhanced by-and-by. Each
343 official release of the LSCP specification will be tagged with a
344 unique version tuple. The version tuple consists at least of a major
345 and minor version number like:
346
347 "1.2"
348
349 In this example the major version number would be "1" and the minor
350 version number would be "2". Note that the version tuple might also
351 have more than two elements. The major version number defines a
352 group of backward compatible versions. That means a frontend is
353 compatible to the connected sampler if and only if the LSCP versions
354 to which each of the two parties complies to, match both of the
355 following rules:
356
357 Compatibility:
358
359 1. The frontend's LSCP major version and the sampler's LSCP major
360 version are exactly equal.
361
362 2. The frontend's LSCP minor version is less or equal than the
363 sampler's LSCP minor version.
364
365 Compatibility can only be claimed if both rules are true. The
366 frontend can use the "GET SERVER INFO" (Section 6.6.5) command to get
367 the version of the LSCP specification the sampler complies with.
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391 Schoenebeck Expires May 5, 2010 [Page 7]
392
393 Internet-Draft LinuxSampler Control Protocol November 2009
394
395
396 3. Introduction
397
398 LinuxSampler is a so called software sampler application capable to
399 playback audio samples from a computer's Random Access Memory (RAM)
400 as well as directly streaming it from disk. LinuxSampler is designed
401 to be modular. It provides several so called "sampler engines" where
402 each engine is specialized for a certain purpose. LinuxSampler has
403 virtual channels which will be referred in this document as "sampler
404 channels". The channels are in such way virtual as they can be
405 connected to an arbitrary MIDI input method and arbitrary MIDI
406 channel (e.g. sampler channel 17 could be connected to an ALSA
407 sequencer device 64:0 and listening to MIDI channel 1 there). Each
408 sampler channel will be associated with an instance of one of the
409 available sampler engines (e.g. GigEngine, DLSEngine). The audio
410 output of each sampler channel can be routed to an arbitrary audio
411 output method (ALSA / JACK) and an arbitrary audio output channel
412 there.
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447 Schoenebeck Expires May 5, 2010 [Page 8]
448
449 Internet-Draft LinuxSampler Control Protocol November 2009
450
451
452 4. Focus of this protocol
453
454 Main focus of this protocol is to provide a way to configure a
455 running LinuxSampler instance and to retrieve information about it.
456 The focus of this protocol is not to provide a way to control
457 synthesis parameters or even to trigger or release notes. Or in
458 other words; the focus are those functionalities which are not
459 covered by MIDI or which may at most be handled via MIDI System
460 Exclusive Messages.
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503 Schoenebeck Expires May 5, 2010 [Page 9]
504
505 Internet-Draft LinuxSampler Control Protocol November 2009
506
507
508 5. Communication Overview
509
510 There are two distinct methods of communication between a running
511 instance of LinuxSampler and one or more control applications, so
512 called "front-ends": a simple request/response communication method
513 used by the clients to give commands to the server as well as to
514 inquire about server's status and a subscribe/notify communication
515 method used by the client to subscribe to and receive notifications
516 of certain events as they happen on the server. The latter needs
517 more effort to be implemented in the front-end application. The two
518 communication methods will be described next.
519
520 5.1. Request/response communication method
521
522 This simple communication method is based on TCP [RFC793]. The
523 front-end application establishes a TCP connection to the
524 LinuxSampler instance on a certain host system. Then the front-end
525 application will send certain ASCII based commands as defined in this
526 document (every command line must be CRLF terminated - see
527 "Conventions used in this document" at the beginning of this
528 document) and the LinuxSampler application will response after a
529 certain process time with an appropriate ASCII based answer, also as
530 defined in this document. So this TCP communication is simply based
531 on query and answer paradigm. That way LinuxSampler is only able to
532 answer on queries from front-ends, but not able to automatically send
533 messages to the client if it's not asked to. The fronted should not
534 reconnect to LinuxSampler for every single command, instead it should
535 keep the connection established and simply resend message(s) for
536 subsequent commands. To keep information in the front-end up-to-date
537 the front-end has to periodically send new requests to get the
538 current information from the LinuxSampler instance. This is often
539 referred to as "polling". While polling is simple to implement and
540 may be OK to use in some cases, there may be disadvantages to polling
541 such as network traffic overhead and information being out of date.
542 It is possible for a client or several clients to open more than one
543 connection to the server at the same time. It is also possible to
544 send more than one request to the server at the same time but if
545 those requests are sent over the same connection server MUST execute
546 them sequentially. Upon executing a request server will produce a
547 result set and send it to the client. Each and every request made by
548 the client MUST result in a result set being sent back to the client.
549 No other data other than a result set may be sent by a server to a
550 client. No result set may be sent to a client without the client
551 sending request to the server first. On any particular connection,
552 result sets MUST be sent in their entirety without being interrupted
553 by other result sets. If several requests got queued up at the
554 server they MUST be processed in the order they were received and
555 result sets MUST be sent back in the same order.
556
557
558
559 Schoenebeck Expires May 5, 2010 [Page 10]
560
561 Internet-Draft LinuxSampler Control Protocol November 2009
562
563
564 5.1.1. Result format
565
566 Result set could be one of the following types:
567
568 1. Normal
569
570 2. Warning
571
572 3. Error
573
574 Warning and Error result sets MUST be single line and have the
575 following format:
576
577 o "WRN:<warning-code>:<warning-message>"
578
579 o "ERR:<error-code>:<error-message>"
580
581 Where <warning-code> and <error-code> are numeric unique identifiers
582 of the warning or error and <warning-message> and <error-message> are
583 human readable descriptions of the warning or error respectively.
584
585 Examples:
586
587 C: "LOAD INSTRUMENT '/home/me/Boesendorfer24bit.gig" 0 0
588
589 S: "WRN:32:This is a 24 bit patch which is not supported natively
590 yet."
591
592 C: "GET AUDIO_OUTPUT_DRIVER_PARAMETER INFO ALSA EAR"
593
594 S: "ERR:3456:Audio output driver 'ALSA' does not have a parameter
595 'EAR'."
596
597 C: "GET AUDIO_OUTPUT_DEVICE INFO 123456"
598
599 S: "ERR:9:There is no audio output device with index 123456."
600
601 Normal result sets could be:
602
603 1. Empty
604
605 2. Single line
606
607 3. Multi-line
608
609 Empty result set is issued when the server only needed to acknowledge
610 the fact that the request was received and it was processed
611 successfully and no additional information is available. This result
612
613
614
615 Schoenebeck Expires May 5, 2010 [Page 11]
616
617 Internet-Draft LinuxSampler Control Protocol November 2009
618
619
620 set has the following format:
621
622 "OK"
623
624 Example:
625
626 C: "SET AUDIO_OUTPUT_DEVICE_PARAMETER 0 CHANNELS=4"
627
628 S: "OK"
629
630 Single line result sets are command specific. One example of a
631 single line result set is an empty line. Multi-line result sets are
632 command specific and may include one or more lines of information.
633 They MUST always end with the following line:
634
635 "."
636
637 Example:
638
639 C: "GET AUDIO_OUTPUT_DEVICE INFO 0"
640
641 S: "DRIVER: ALSA"
642
643 "CHANNELS: 2"
644
645 "SAMPLERATE: 44100"
646
647 "ACTIVE: true"
648
649 "FRAGMENTS: 2"
650
651 "FRAGMENTSIZE: 128"
652
653 "CARD: '0,0'"
654
655 "."
656
657 In addition to above mentioned formats, warnings and empty result
658 sets MAY be indexed. In this case, they have the following formats
659 respectively:
660
661 o "WRN[<index>]:<warning-code>:<warning-message>"
662
663 o "OK[<index>]"
664
665 where <index> is command specific and is used to indicate channel
666 number that the result set was related to or other integer value.
667
668
669
670
671 Schoenebeck Expires May 5, 2010 [Page 12]
672
673 Internet-Draft LinuxSampler Control Protocol November 2009
674
675
676 Each line of the result set MUST end with <CRLF>.
677
678 Examples:
679
680 C: "ADD CHANNEL"
681
682 S: "OK[12]"
683
684 C: "CREATE AUDIO_OUTPUT_DEVICE ALSA SAMPLERATE=96000"
685
686 S: "WRN[0]:32:Sample rate not supported, using 44100 instead."
687
688 5.2. Subscribe/notify communication method
689
690 This more sophisticated communication method is actually only an
691 extension of the simple request/response communication method. The
692 front-end still uses a TCP connection and sends the same commands on
693 the TCP connection. Two extra commands are SUBSCRIBE and UNSUBSCRIBE
694 commands that allow a client to tell the server that it is interested
695 in receiving notifications about certain events as they happen on the
696 server. The SUBSCRIBE command has the following syntax:
697
698 SUBSCRIBE <event-id>
699
700 where <event-id> will be replaced by the respective event that client
701 wants to subscribe to. Upon receiving such request, server SHOULD
702 respond with OK and start sending EVENT notifications when a given
703 even has occurred to the front-end when an event has occurred. It
704 MAY be possible certain events may be sent before OK response during
705 real time nature of their generation. Event messages have the
706 following format:
707
708 NOTIFY:<event-id>:<custom-event-data>
709
710 where <event-id> uniquely identifies the event that has occurred and
711 <custom-event-data> is event specific.
712
713 Several rules must be followed by the server when generating events:
714
715 1. Events MUST NOT be sent to any client who has not issued an
716 appropriate SUBSCRIBE command.
717
718 2. Events MUST only be sent using the same connection that was used
719 to subscribe to them.
720
721 3. When response is being sent to the client, event MUST be inserted
722 in the stream before or after the response, but NOT in the
723 middle. Same is true about the response. It should never be
724
725
726
727 Schoenebeck Expires May 5, 2010 [Page 13]
728
729 Internet-Draft LinuxSampler Control Protocol November 2009
730
731
732 inserted in the middle of the event message as well as any other
733 response.
734
735 If the client is not interested in a particular event anymore it MAY
736 issue UNSUBSCRIBE command using the following syntax:
737
738 UNSUBSCRIBE <event-id>
739
740 where <event-id> will be replace by the respective event that client
741 is no longer interested in receiving. For a list of supported events
742 see Section 8.
743
744 Example: the fill states of disk stream buffers have changed on
745 sampler channel 4 and the LinuxSampler instance will react by sending
746 the following message to all clients who subscribed to this event:
747
748 NOTIFY:CHANNEL_BUFFER_FILL:4 [35]62%,[33]80%,[37]98%
749
750 Which means there are currently three active streams on sampler
751 channel 4, where the stream with ID "35" is filled by 62%, stream
752 with ID 33 is filled by 80% and stream with ID 37 is filled by 98%.
753
754 Clients may choose to open more than one connection to the server and
755 use some connections to receive notifications while using other
756 connections to issue commands to the back-end. This is entirely
757 legal and up to the implementation. This does not change the
758 protocol in any way and no special restrictions exist on the server
759 to allow or disallow this or to track what connections belong to what
760 front-ends. Server will listen on a single port, accept multiple
761 connections and support protocol described in this specification in
762 it's entirety on this single port on each connection that it
763 accepted.
764
765 Due to the fact that TCP is used for this communication, dead peers
766 will be detected automatically by the OS TCP stack. While it may
767 take a while to detect dead peers if no traffic is being sent from
768 server to client (TCP keep-alive timer is set to 2 hours on many
769 OSes) it will not be an issue here as when notifications are sent by
770 the server, dead client will be detected quickly.
771
772 When connection is closed for any reason server MUST forget all
773 subscriptions that were made on this connection. If client
774 reconnects it MUST resubscribe to all events that it wants to
775 receive.
776
777
778
779
780
781
782
783 Schoenebeck Expires May 5, 2010 [Page 14]
784
785 Internet-Draft LinuxSampler Control Protocol November 2009
786
787
788 6. Description for control commands
789
790 This chapter will describe the available control commands that can be
791 sent on the TCP connection in detail. Some certain commands (e.g.
792 "GET CHANNEL INFO" (Section 6.4.10) or "GET ENGINE INFO"
793 (Section 6.4.9)) lead to multiple-line responses. In this case
794 LinuxSampler signals the end of the response by a "." (single dot)
795 line.
796
797 6.1. Ignored lines and comments
798
799 White lines, that is lines which only contain space and tabulator
800 characters, and lines that start with a "#" character are ignored,
801 thus it's possible for example to group commands and to place
802 comments in a LSCP script file.
803
804 6.2. Configuring audio drivers
805
806 Instances of drivers in LinuxSampler are called devices. You can use
807 multiple audio devices simultaneously, e.g. to output the sound of
808 one sampler channel using the ALSA audio output driver, and on
809 another sampler channel you might want to use the JACK audio output
810 driver. For particular audio output systems it's also possible to
811 create several devices of the same audio output driver, e.g. two
812 separate ALSA audio output devices for using two different sound
813 cards at the same time. This chapter describes all commands to
814 configure LinuxSampler's audio output devices and their parameters.
815
816 Instead of defining commands and parameters for each driver
817 individually, all possible parameters, their meanings and possible
818 values have to be obtained at runtime. This makes the protocol a bit
819 abstract, but has the advantage, that front-ends can be written
820 independently of what drivers are currently implemented and what
821 parameters these drivers are actually offering. This means front-
822 ends can even handle drivers which are implemented somewhere in
823 future without modifying the front-end at all.
824
825 Note: examples in this chapter showing particular parameters of
826 drivers are not meant as specification of the drivers' parameters.
827 Driver implementations in LinuxSampler might have complete different
828 parameter names and meanings than shown in these examples or might
829 change in future, so these examples are only meant for showing how to
830 retrieve what parameters drivers are offering, how to retrieve their
831 possible values, etc.
832
833
834
835
836
837
838
839 Schoenebeck Expires May 5, 2010 [Page 15]
840
841 Internet-Draft LinuxSampler Control Protocol November 2009
842
843
844 6.2.1. Getting amount of available audio output drivers
845
846 Use the following command to get the number of audio output drivers
847 currently available for the LinuxSampler instance:
848
849 GET AVAILABLE_AUDIO_OUTPUT_DRIVERS
850
851 Possible Answers:
852
853 LinuxSampler will answer by sending the number of audio output
854 drivers.
855
856 Example:
857
858 C: "GET AVAILABLE_AUDIO_OUTPUT_DRIVERS"
859
860 S: "2"
861
862 6.2.2. Getting all available audio output drivers
863
864 Use the following command to list all audio output drivers currently
865 available for the LinuxSampler instance:
866
867 LIST AVAILABLE_AUDIO_OUTPUT_DRIVERS
868
869 Possible Answers:
870
871 LinuxSampler will answer by sending comma separated character
872 strings, each symbolizing an audio output driver.
873
874 Example:
875
876 C: "LIST AVAILABLE_AUDIO_OUTPUT_DRIVERS"
877
878 S: "ALSA,JACK"
879
880 6.2.3. Getting information about a specific audio output driver
881
882 Use the following command to get detailed information about a
883 specific audio output driver:
884
885 GET AUDIO_OUTPUT_DRIVER INFO <audio-output-driver>
886
887 Where <audio-output-driver> is the name of the audio output driver,
888 returned by the "LIST AVAILABLE_AUDIO_OUTPUT_DRIVERS" (Section 6.2.2)
889 command.
890
891 Possible Answers:
892
893
894
895 Schoenebeck Expires May 5, 2010 [Page 16]
896
897 Internet-Draft LinuxSampler Control Protocol November 2009
898
899
900 LinuxSampler will answer by sending a <CRLF> separated list. Each
901 answer line begins with the information category name followed by
902 a colon and then a space character <SP> and finally the info
903 character string to that info category. At the moment the
904 following information categories are defined:
905
906
907
908 DESCRIPTION -
909
910 character string describing the audio output driver
911
912 VERSION -
913
914 character string reflecting the driver's version
915
916 PARAMETERS -
917
918 comma separated list of all parameters available for the
919 given audio output driver, at least parameters 'channels',
920 'samplerate' and 'active' are offered by all audio output
921 drivers
922
923 The mentioned fields above don't have to be in particular order.
924
925 Example:
926
927 C: "GET AUDIO_OUTPUT_DRIVER INFO ALSA"
928
929 S: "DESCRIPTION: Advanced Linux Sound Architecture"
930
931 "VERSION: 1.0"
932
933 "PARAMETERS: DRIVER,CHANNELS,SAMPLERATE,ACTIVE,FRAGMENTS,
934 FRAGMENTSIZE,CARD"
935
936 "."
937
938 6.2.4. Getting information about specific audio output driver parameter
939
940 Use the following command to get detailed information about a
941 specific audio output driver parameter:
942
943 GET AUDIO_OUTPUT_DRIVER_PARAMETER INFO <audio> <prm> [<deplist>]
944
945 Where <audio> is the name of the audio output driver as returned by
946 the "LIST AVAILABLE_AUDIO_OUTPUT_DRIVERS" (Section 6.2.2) command,
947 <prm> a specific parameter name for which information should be
948
949
950
951 Schoenebeck Expires May 5, 2010 [Page 17]
952
953 Internet-Draft LinuxSampler Control Protocol November 2009
954
955
956 obtained (as returned by the "GET AUDIO_OUTPUT_DRIVER INFO"
957 (Section 6.2.3) command) and <deplist> is an optional list of
958 parameters on which the sought parameter <prm> depends on, <deplist>
959 is a list of key-value pairs in form of "key1=val1 key2=val2 ...",
960 where character string values are encapsulated into apostrophes (').
961 Arguments given with <deplist> which are not dependency parameters of
962 <prm> will be ignored, means the front-end application can simply put
963 all parameters into <deplist> with the values already selected by the
964 user.
965
966 Possible Answers:
967
968 LinuxSampler will answer by sending a <CRLF> separated list. Each
969 answer line begins with the information category name followed by
970 a colon and then a space character <SP> and finally the info
971 character string to that info category. There are information
972 which is always returned, independently of the given driver
973 parameter and there are optional information which is only shown
974 dependently to given driver parameter. At the moment the
975 following information categories are defined:
976
977 TYPE -
978
979 either "BOOL" for boolean value(s) or "INT" for integer
980 value(s) or "FLOAT" for dotted number(s) or "STRING" for
981 character string(s) (always returned, no matter which driver
982 parameter)
983
984 DESCRIPTION -
985
986 arbitrary text describing the purpose of the parameter (always
987 returned, no matter which driver parameter)
988
989 MANDATORY -
990
991 either true or false, defines if this parameter must be given
992 when the device is to be created with the 'CREATE
993 AUDIO_OUTPUT_DEVICE' (Section 6.2.5) command (always returned,
994 no matter which driver parameter)
995
996 FIX -
997
998 either true or false, if false then this parameter can be
999 changed at any time, once the device is created by the 'CREATE
1000 AUDIO_OUTPUT_DEVICE' (Section 6.2.5) command (always returned,
1001 no matter which driver parameter)
1002
1003
1004
1005
1006
1007 Schoenebeck Expires May 5, 2010 [Page 18]
1008
1009 Internet-Draft LinuxSampler Control Protocol November 2009
1010
1011
1012 MULTIPLICITY -
1013
1014 either true or false, defines if this parameter allows only one
1015 value or a list of values, where true means multiple values and
1016 false only a single value allowed (always returned, no matter
1017 which driver parameter)
1018
1019 DEPENDS -
1020
1021 comma separated list of parameters this parameter depends on,
1022 means the values for fields 'DEFAULT', 'RANGE_MIN', 'RANGE_MAX'
1023 and 'POSSIBILITIES' might depend on these listed parameters,
1024 for example assuming that an audio driver (like the ALSA
1025 driver) offers parameters 'card' and 'samplerate' then
1026 parameter 'samplerate' would depend on 'card' because the
1027 possible values for 'samplerate' depends on the sound card
1028 which can be chosen by the 'card' parameter (optionally
1029 returned, dependent to driver parameter)
1030
1031 DEFAULT -
1032
1033 reflects the default value for this parameter which is used
1034 when the device is created and not explicitly given with the
1035 'CREATE AUDIO_OUTPUT_DEVICE' (Section 6.2.5) command, in case
1036 of MULTIPLCITY=true, this is a comma separated list, that's why
1037 character strings are encapsulated into apostrophes (')
1038 (optionally returned, dependent to driver parameter)
1039
1040 RANGE_MIN -
1041
1042 defines lower limit of the allowed value range for this
1043 parameter, can be an integer value as well as a dotted number,
1044 this parameter is often used in conjunction with RANGE_MAX, but
1045 may also appear without (optionally returned, dependent to
1046 driver parameter)
1047
1048 RANGE_MAX -
1049
1050 defines upper limit of the allowed value range for this
1051 parameter, can be an integer value as well as a dotted number,
1052 this parameter is often used in conjunction with RANGE_MIN, but
1053 may also appear without (optionally returned, dependent to
1054 driver parameter)
1055
1056 POSSIBILITIES -
1057
1058 comma separated list of possible values for this parameter,
1059 character strings are encapsulated into apostrophes (optionally
1060
1061
1062
1063 Schoenebeck Expires May 5, 2010 [Page 19]
1064
1065 Internet-Draft LinuxSampler Control Protocol November 2009
1066
1067
1068 returned, dependent to driver parameter)
1069
1070 The mentioned fields above don't have to be in particular order.
1071
1072 Examples:
1073
1074 C: "GET AUDIO_OUTPUT_DRIVER_PARAMETER INFO ALSA CARD"
1075
1076 S: "DESCRIPTION: sound card to be used"
1077
1078 "TYPE: STRING"
1079
1080 "MANDATORY: false"
1081
1082 "FIX: true"
1083
1084 "MULTIPLICITY: false"
1085
1086 "DEFAULT: '0,0'"
1087
1088 "POSSIBILITIES: '0,0','1,0','2,0'"
1089
1090 "."
1091
1092 C: "GET AUDIO_OUTPUT_DRIVER_PARAMETER INFO ALSA SAMPLERATE"
1093
1094 S: "DESCRIPTION: output sample rate in Hz"
1095
1096 "TYPE: INT"
1097
1098 "MANDATORY: false"
1099
1100 "FIX: false"
1101
1102 "MULTIPLICITY: false"
1103
1104 "DEPENDS: card"
1105
1106 "DEFAULT: 44100"
1107
1108 "."
1109
1110 C: "GET AUDIO_OUTPUT_DRIVER_PARAMETER INFO ALSA SAMPLERATE
1111 CARD='0,0'"
1112
1113 S: "DESCRIPTION: output sample rate in Hz"
1114
1115
1116
1117
1118
1119 Schoenebeck Expires May 5, 2010 [Page 20]
1120
1121 Internet-Draft LinuxSampler Control Protocol November 2009
1122
1123
1124 "TYPE: INT"
1125
1126 "MANDATORY: false"
1127
1128 "FIX: false"
1129
1130 "MULTIPLICITY: false"
1131
1132 "DEPENDS: card"
1133
1134 "DEFAULT: 44100"
1135
1136 "RANGE_MIN: 22050"
1137
1138 "RANGE_MAX: 96000"
1139
1140 "."
1141
1142 6.2.5. Creating an audio output device
1143
1144 Use the following command to create a new audio output device for the
1145 desired audio output system:
1146
1147 CREATE AUDIO_OUTPUT_DEVICE <audio-output-driver> [<param-list>]
1148
1149 Where <audio-output-driver> should be replaced by the desired audio
1150 output system as returned by the "LIST
1151 AVAILABLE_AUDIO_OUTPUT_DRIVERS" (Section 6.2.2) command and <param-
1152 list> by an optional list of driver specific parameters in form of
1153 "key1=val1 key2=val2 ...", where character string values should be
1154 encapsulated into apostrophes ('). Note that there might be drivers
1155 which require parameter(s) to be given with this command. Use the
1156 previously described commands in this chapter to get this
1157 information.
1158
1159 Possible Answers:
1160
1161 "OK[<device-id>]" -
1162
1163 in case the device was successfully created, where <device-id>
1164 is the numerical ID of the new device
1165
1166 "WRN[<device-id>]:<warning-code>:<warning-message>" -
1167
1168 in case the device was created successfully, where <device-id>
1169 is the numerical ID of the new device, but there are noteworthy
1170 issue(s) related (e.g. sound card doesn't support given
1171 hardware parameters and the driver is using fall-back values),
1172
1173
1174
1175 Schoenebeck Expires May 5, 2010 [Page 21]
1176
1177 Internet-Draft LinuxSampler Control Protocol November 2009
1178
1179
1180 providing an appropriate warning code and warning message
1181
1182 "ERR:<error-code>:<error-message>" -
1183
1184 in case it failed, providing an appropriate error code and
1185 error message
1186
1187 Examples:
1188
1189 C: "CREATE AUDIO_OUTPUT_DEVICE ALSA"
1190
1191 S: "OK[0]"
1192
1193 C: "CREATE AUDIO_OUTPUT_DEVICE ALSA CARD='2,0' SAMPLERATE=96000"
1194
1195 S: "OK[1]"
1196
1197 6.2.6. Destroying an audio output device
1198
1199 Use the following command to destroy a created output device:
1200
1201 DESTROY AUDIO_OUTPUT_DEVICE <device-id>
1202
1203 Where <device-id> should be replaced by the numerical ID of the audio
1204 output device as given by the "CREATE AUDIO_OUTPUT_DEVICE"
1205 (Section 6.2.5) or "LIST AUDIO_OUTPUT_DEVICES" (Section 6.2.8)
1206 command.
1207
1208 Possible Answers:
1209
1210 "OK" -
1211
1212 in case the device was successfully destroyed
1213
1214 "WRN:<warning-code>:<warning-message>" -
1215
1216 in case the device was destroyed successfully, but there are
1217 noteworthy issue(s) related (e.g. an audio over ethernet driver
1218 was unloaded but the other host might not be informed about
1219 this situation), providing an appropriate warning code and
1220 warning message
1221
1222 "ERR:<error-code>:<error-message>" -
1223
1224 in case it failed, providing an appropriate error code and
1225 error message
1226
1227 Example:
1228
1229
1230
1231 Schoenebeck Expires May 5, 2010 [Page 22]
1232
1233 Internet-Draft LinuxSampler Control Protocol November 2009
1234
1235
1236 C: "DESTROY AUDIO_OUTPUT_DEVICE 0"
1237
1238 S: "OK"
1239
1240 6.2.7. Getting all created audio output device count
1241
1242 Use the following command to count all created audio output devices:
1243
1244 GET AUDIO_OUTPUT_DEVICES
1245
1246 Possible Answers:
1247
1248 LinuxSampler will answer by sending the current number of all
1249 audio output devices.
1250
1251 Example:
1252
1253 C: "GET AUDIO_OUTPUT_DEVICES"
1254
1255 S: "4"
1256
1257 6.2.8. Getting all created audio output device list
1258
1259 Use the following command to list all created audio output devices:
1260
1261 LIST AUDIO_OUTPUT_DEVICES
1262
1263 Possible Answers:
1264
1265 LinuxSampler will answer by sending a comma separated list with
1266 the numerical IDs of all audio output devices.
1267
1268 Example:
1269
1270 C: "LIST AUDIO_OUTPUT_DEVICES"
1271
1272 S: "0,1,4,5"
1273
1274 6.2.9. Getting current settings of an audio output device
1275
1276 Use the following command to get current settings of a specific,
1277 created audio output device:
1278
1279 GET AUDIO_OUTPUT_DEVICE INFO <device-id>
1280
1281 Where <device-id> should be replaced by numerical ID of the audio
1282 output device as e.g. returned by the "LIST AUDIO_OUTPUT_DEVICES"
1283 (Section 6.2.8) command.
1284
1285
1286
1287 Schoenebeck Expires May 5, 2010 [Page 23]
1288
1289 Internet-Draft LinuxSampler Control Protocol November 2009
1290
1291
1292 Possible Answers:
1293
1294 LinuxSampler will answer by sending a <CRLF> separated list. Each
1295 answer line begins with the information category name followed by a
1296 colon and then a space character <SP> and finally the info character
1297 string to that info category. As some parameters might allow
1298 multiple values, character strings are encapsulated into apostrophes
1299 ('). At the moment the following information categories are defined
1300 (independently of device):
1301
1302 DRIVER -
1303
1304 identifier of the used audio output driver, as also returned by
1305 the "LIST AVAILABLE_AUDIO_OUTPUT_DRIVERS" (Section 6.2.2)
1306 command
1307
1308 CHANNELS -
1309
1310 amount of audio output channels this device currently offers
1311
1312 SAMPLERATE -
1313
1314 playback sample rate the device uses
1315
1316 ACTIVE -
1317
1318 either true or false, if false then the audio device is
1319 inactive and doesn't output any sound, nor do the sampler
1320 channels connected to this audio device render any audio
1321
1322 The mentioned fields above don't have to be in particular order. The
1323 fields above are only those fields which are returned by all audio
1324 output devices. Every audio output driver might have its own,
1325 additional driver specific parameters (see Section 6.2.3) which are
1326 also returned by this command.
1327
1328 Example:
1329
1330 C: "GET AUDIO_OUTPUT_DEVICE INFO 0"
1331
1332 S: "DRIVER: ALSA"
1333
1334 "CHANNELS: 2"
1335
1336 "SAMPLERATE: 44100"
1337
1338 "ACTIVE: true"
1339
1340
1341
1342
1343 Schoenebeck Expires May 5, 2010 [Page 24]
1344
1345 Internet-Draft LinuxSampler Control Protocol November 2009
1346
1347
1348 "FRAGMENTS: 2"
1349
1350 "FRAGMENTSIZE: 128"
1351
1352 "CARD: '0,0'"
1353
1354 "."
1355
1356 6.2.10. Changing settings of audio output devices
1357
1358 Use the following command to alter a specific setting of a created
1359 audio output device:
1360
1361 SET AUDIO_OUTPUT_DEVICE_PARAMETER <device-id> <key>=<value>
1362
1363 Where <device-id> should be replaced by the numerical ID of the audio
1364 output device as given by the "CREATE AUDIO_OUTPUT_DEVICE"
1365 (Section 6.2.5) or "LIST AUDIO_OUTPUT_DEVICES" (Section 6.2.8)
1366 command, <key> by the name of the parameter to change and <value> by
1367 the new value for this parameter.
1368
1369 Possible Answers:
1370
1371 "OK" -
1372
1373 in case setting was successfully changed
1374
1375 "WRN:<warning-code>:<warning-message>" -
1376
1377 in case setting was changed successfully, but there are
1378 noteworthy issue(s) related, providing an appropriate warning
1379 code and warning message
1380
1381 "ERR:<error-code>:<error-message>" -
1382
1383 in case it failed, providing an appropriate error code and
1384 error message
1385
1386 Example:
1387
1388 C: "SET AUDIO_OUTPUT_DEVICE_PARAMETER 0 FRAGMENTSIZE=128"
1389
1390 S: "OK"
1391
1392
1393
1394
1395
1396
1397
1398
1399 Schoenebeck Expires May 5, 2010 [Page 25]
1400
1401 Internet-Draft LinuxSampler Control Protocol November 2009
1402
1403
1404 6.2.11. Getting information about an audio channel
1405
1406 Use the following command to get information about an audio channel:
1407
1408 GET AUDIO_OUTPUT_CHANNEL INFO <device-id> <audio-chan>
1409
1410 Where <device-id> is the numerical ID of the audio output device as
1411 given by the "CREATE AUDIO_OUTPUT_DEVICE" (Section 6.2.5) or "LIST
1412 AUDIO_OUTPUT_DEVICES" (Section 6.2.8) command and <audio-chan> the
1413 audio channel number.
1414
1415 Possible Answers:
1416
1417 LinuxSampler will answer by sending a <CRLF> separated list. Each
1418 answer line begins with the information category name followed by
1419 a colon and then a space character <SP> and finally the info
1420 character string to that info category. At the moment the
1421 following information categories are defined:
1422
1423
1424
1425 NAME -
1426
1427 arbitrary character string naming the channel, which doesn't
1428 have to be unique (always returned by all audio channels)
1429
1430 IS_MIX_CHANNEL -
1431
1432 either true or false, a mix-channel is not a real,
1433 independent audio channel, but a virtual channel which is
1434 mixed to another real channel, this mechanism is needed for
1435 sampler engines which need more audio channels than the used
1436 audio system might be able to offer (always returned by all
1437 audio channels)
1438
1439 MIX_CHANNEL_DESTINATION -
1440
1441 numerical ID (positive integer including 0) which reflects
1442 the real audio channel (of the same audio output device)
1443 this mix channel refers to, means where the audio signal
1444 actually will be routed / added to (only returned in case
1445 the audio channel is mix channel)
1446
1447 The mentioned fields above don't have to be in particular order. The
1448 fields above are only those fields which are generally returned for
1449 the described cases by all audio channels regardless of the audio
1450 driver. Every audio channel might have its own, additional driver
1451 and channel specific parameters.
1452
1453
1454
1455 Schoenebeck Expires May 5, 2010 [Page 26]
1456
1457 Internet-Draft LinuxSampler Control Protocol November 2009
1458
1459
1460 Examples:
1461
1462 C: "GET AUDIO_OUTPUT_CHANNEL INFO 0 0"
1463
1464 S: "NAME: studio monitor left"
1465
1466 "IS_MIX_CHANNEL: false"
1467
1468 "."
1469
1470 C: "GET AUDIO_OUTPUT_CHANNEL INFO 0 1"
1471
1472 S: "NAME: studio monitor right"
1473
1474 "IS_MIX_CHANNEL: false"
1475
1476 "."
1477
1478 C: "GET AUDIO_OUTPUT_CHANNEL INFO 0 2"
1479
1480 S: "NAME: studio monitor left"
1481
1482 "IS_MIX_CHANNEL: true"
1483
1484 "MIX_CHANNEL_DESTINATION: 1"
1485
1486 "."
1487
1488 C: "GET AUDIO_OUTPUT_CHANNEL INFO 1 0"
1489
1490 S: "NAME: 'ardour (left)'"
1491
1492 "IS_MIX_CHANNEL: false"
1493
1494 "JACK_BINDINGS: 'ardour:0'"
1495
1496 "."
1497
1498 6.2.12. Getting information about specific audio channel parameter
1499
1500 Use the following command to get detailed information about specific
1501 audio channel parameter:
1502
1503 GET AUDIO_OUTPUT_CHANNEL_PARAMETER INFO <dev-id> <chan> <param>
1504
1505 Where <dev-id> is the numerical ID of the audio output device as
1506 returned by the "CREATE AUDIO_OUTPUT_DEVICE" (Section 6.2.5) or "LIST
1507 AUDIO_OUTPUT_DEVICES" (Section 6.2.8) command, <chan> the audio
1508
1509
1510
1511 Schoenebeck Expires May 5, 2010 [Page 27]
1512
1513 Internet-Draft LinuxSampler Control Protocol November 2009
1514
1515
1516 channel number and <param> a specific channel parameter name for
1517 which information should be obtained (as returned by the "GET
1518 AUDIO_OUTPUT_CHANNEL INFO" (Section 6.2.11) command).
1519
1520 Possible Answers:
1521
1522 LinuxSampler will answer by sending a <CRLF> separated list. Each
1523 answer line begins with the information category name followed by
1524 a colon and then a space character <SP> and finally the info
1525 character string to that info category. There are information
1526 which is always returned, independently of the given channel
1527 parameter and there is optional information which is only shown
1528 dependently to the given audio channel. At the moment the
1529 following information categories are defined:
1530
1531
1532
1533 TYPE -
1534
1535 either "BOOL" for boolean value(s) or "INT" for integer
1536 value(s) or "FLOAT" for dotted number(s) or "STRING" for
1537 character string(s) (always returned)
1538
1539 DESCRIPTION -
1540
1541 arbitrary text describing the purpose of the parameter
1542 (always returned)
1543
1544 FIX -
1545
1546 either true or false, if true then this parameter is read
1547 only, thus cannot be altered (always returned)
1548
1549 MULTIPLICITY -
1550
1551 either true or false, defines if this parameter allows only
1552 one value or a list of values, where true means multiple
1553 values and false only a single value allowed (always
1554 returned)
1555
1556 RANGE_MIN -
1557
1558 defines lower limit of the allowed value range for this
1559 parameter, can be an integer value as well as a dotted
1560 number, usually used in conjunction with 'RANGE_MAX', but
1561 may also appear without (optionally returned, dependent to
1562 driver and channel parameter)
1563
1564
1565
1566
1567 Schoenebeck Expires May 5, 2010 [Page 28]
1568
1569 Internet-Draft LinuxSampler Control Protocol November 2009
1570
1571
1572 RANGE_MAX -
1573
1574 defines upper limit of the allowed value range for this
1575 parameter, can be an integer value as well as a dotted
1576 number, usually used in conjunction with 'RANGE_MIN', but
1577 may also appear without (optionally returned, dependent to
1578 driver and channel parameter)
1579
1580 POSSIBILITIES -
1581
1582 comma separated list of possible values for this parameter,
1583 character strings are encapsulated into apostrophes
1584 (optionally returned, dependent to driver and channel
1585 parameter)
1586
1587 The mentioned fields above don't have to be in particular order.
1588
1589 Example:
1590
1591 C: "GET AUDIO_OUTPUT_CHANNEL_PARAMETER INFO 1 0 JACK_BINDINGS"
1592
1593 S: "DESCRIPTION: bindings to other JACK clients"
1594
1595 "TYPE: STRING"
1596
1597 "FIX: false"
1598
1599 "MULTIPLICITY: true"
1600
1601 "POSSIBILITIES: 'PCM:0','PCM:1','ardour:0','ardour:1'"
1602
1603 "."
1604
1605 6.2.13. Changing settings of audio output channels
1606
1607 Use the following command to alter a specific setting of an audio
1608 output channel:
1609
1610 SET AUDIO_OUTPUT_CHANNEL_PARAMETER <dev-id> <chn> <key>=<value>
1611
1612 Where <dev-id> should be replaced by the numerical ID of the audio
1613 output device as returned by the "CREATE AUDIO_OUTPUT_DEVICE"
1614 (Section 6.2.5) or "LIST AUDIO_OUTPUT_DEVICES" (Section 6.2.8)
1615 command, <chn> by the audio channel number, <key> by the name of the
1616 parameter to change and <value> by the new value for this parameter.
1617
1618 Possible Answers:
1619
1620
1621
1622
1623 Schoenebeck Expires May 5, 2010 [Page 29]
1624
1625 Internet-Draft LinuxSampler Control Protocol November 2009
1626
1627
1628 "OK" -
1629
1630 in case setting was successfully changed
1631
1632 "WRN:<warning-code>:<warning-message>" -
1633
1634 in case setting was changed successfully, but there are
1635 noteworthy issue(s) related, providing an appropriate warning
1636 code and warning message
1637
1638 "ERR:<error-code>:<error-message>" -
1639
1640 in case it failed, providing an appropriate error code and
1641 error message
1642
1643 Example:
1644
1645 C: "SET AUDIO_OUTPUT_CHANNEL PARAMETER 0 0 JACK_BINDINGS='PCM:0'"
1646
1647 S: "OK"
1648
1649 C: "SET AUDIO_OUTPUT_CHANNEL PARAMETER 0 0 NAME='monitor left'"
1650
1651 S: "OK"
1652
1653 6.3. Configuring MIDI input drivers
1654
1655 Instances of drivers in LinuxSampler are called devices. You can use
1656 multiple MIDI devices simultaneously, e.g. to use MIDI over ethernet
1657 as MIDI input on one sampler channel and ALSA as MIDI input on
1658 another sampler channel. For particular MIDI input systems it's also
1659 possible to create several devices of the same MIDI input type. This
1660 chapter describes all commands to configure LinuxSampler's MIDI input
1661 devices and their parameters.
1662
1663 Instead of defining commands and parameters for each driver
1664 individually, all possible parameters, their meanings and possible
1665 values have to be obtained at runtime. This makes the protocol a bit
1666 abstract, but has the advantage, that front-ends can be written
1667 independently of what drivers are currently implemented and what
1668 parameters these drivers are actually offering. This means front-
1669 ends can even handle drivers which are implemented somewhere in
1670 future without modifying the front-end at all.
1671
1672 Commands for configuring MIDI input devices are pretty much the same
1673 as the commands for configuring audio output drivers, already
1674 described in the last chapter.
1675
1676
1677
1678
1679 Schoenebeck Expires May 5, 2010 [Page 30]
1680
1681 Internet-Draft LinuxSampler Control Protocol November 2009
1682
1683
1684 Note: examples in this chapter showing particular parameters of
1685 drivers are not meant as specification of the drivers' parameters.
1686 Driver implementations in LinuxSampler might have complete different
1687 parameter names and meanings than shown in these examples or might
1688 change in future, so these examples are only meant for showing how to
1689 retrieve what parameters drivers are offering, how to retrieve their
1690 possible values, etc.
1691
1692 6.3.1. Getting amount of available MIDI input drivers
1693
1694 Use the following command to get the number of MIDI input drivers
1695 currently available for the LinuxSampler instance:
1696
1697 GET AVAILABLE_MIDI_INPUT_DRIVERS
1698
1699 Possible Answers:
1700
1701 LinuxSampler will answer by sending the number of available MIDI
1702 input drivers.
1703
1704 Example:
1705
1706 C: "GET AVAILABLE_MIDI_INPUT_DRIVERS"
1707
1708 S: "2"
1709
1710 6.3.2. Getting all available MIDI input drivers
1711
1712 Use the following command to list all MIDI input drivers currently
1713 available for the LinuxSampler instance:
1714
1715 LIST AVAILABLE_MIDI_INPUT_DRIVERS
1716
1717 Possible Answers:
1718
1719 LinuxSampler will answer by sending comma separated character
1720 strings, each symbolizing a MIDI input driver.
1721
1722 Example:
1723
1724 C: "LIST AVAILABLE_MIDI_INPUT_DRIVERS"
1725
1726 S: "ALSA,JACK"
1727
1728
1729
1730
1731
1732
1733
1734
1735 Schoenebeck Expires May 5, 2010 [Page 31]
1736
1737 Internet-Draft LinuxSampler Control Protocol November 2009
1738
1739
1740 6.3.3. Getting information about a specific MIDI input driver
1741
1742 Use the following command to get detailed information about a
1743 specific MIDI input driver:
1744
1745 GET MIDI_INPUT_DRIVER INFO <midi-input-driver>
1746
1747 Where <midi-input-driver> is the name of the MIDI input driver as
1748 returned by the "LIST AVAILABLE_MIDI_INPUT_DRIVERS" (Section 6.3.2)
1749 command.
1750
1751 Possible Answers:
1752
1753 LinuxSampler will answer by sending a <CRLF> separated list. Each
1754 answer line begins with the information category name followed by
1755 a colon and then a space character <SP> and finally the info
1756 character string to that info category. At the moment the
1757 following information categories are defined:
1758
1759
1760
1761 DESCRIPTION -
1762
1763 arbitrary description text about the MIDI input driver
1764
1765 VERSION -
1766
1767 arbitrary character string regarding the driver's version
1768
1769 PARAMETERS -
1770
1771 comma separated list of all parameters available for the
1772 given MIDI input driver
1773
1774 The mentioned fields above don't have to be in particular order.
1775
1776 Example:
1777
1778 C: "GET MIDI_INPUT_DRIVER INFO ALSA"
1779
1780 S: "DESCRIPTION: Advanced Linux Sound Architecture"
1781
1782 "VERSION: 1.0"
1783
1784 "PARAMETERS: DRIVER,ACTIVE"
1785
1786 "."
1787
1788
1789
1790
1791 Schoenebeck Expires May 5, 2010 [Page 32]
1792
1793 Internet-Draft LinuxSampler Control Protocol November 2009
1794
1795
1796 6.3.4. Getting information about specific MIDI input driver parameter
1797
1798 Use the following command to get detailed information about a
1799 specific parameter of a specific MIDI input driver:
1800
1801 GET MIDI_INPUT_DRIVER_PARAMETER INFO <midit> <param> [<deplist>]
1802
1803 Where <midit> is the name of the MIDI input driver as returned by the
1804 "LIST AVAILABLE_MIDI_INPUT_DRIVERS" (Section 6.3.2) command, <param>
1805 a specific parameter name for which information should be obtained
1806 (as returned by the "GET MIDI_INPUT_DRIVER INFO" (Section 6.3.3)
1807 command) and <deplist> is an optional list of parameters on which the
1808 sought parameter <param> depends on, <deplist> is a key-value pair
1809 list in form of "key1=val1 key2=val2 ...", where character string
1810 values are encapsulated into apostrophes ('). Arguments given with
1811 <deplist> which are not dependency parameters of <param> will be
1812 ignored, means the front-end application can simply put all
1813 parameters in <deplist> with the values selected by the user.
1814
1815 Possible Answers:
1816
1817 LinuxSampler will answer by sending a <CRLF> separated list. Each
1818 answer line begins with the information category name followed by a
1819 colon and then a space character <SP> and finally the info character
1820 string to that info category. There is information which is always
1821 returned, independent of the given driver parameter and there is
1822 optional information which is only shown dependent to given driver
1823 parameter. At the moment the following information categories are
1824 defined:
1825
1826 TYPE -
1827
1828 either "BOOL" for boolean value(s) or "INT" for integer
1829 value(s) or "FLOAT" for dotted number(s) or "STRING" for
1830 character string(s) (always returned, no matter which driver
1831 parameter)
1832
1833 DESCRIPTION -
1834
1835 arbitrary text describing the purpose of the parameter (always
1836 returned, no matter which driver parameter)
1837
1838 MANDATORY -
1839
1840 either true or false, defines if this parameter must be given
1841 when the device is to be created with the 'CREATE
1842 MIDI_INPUT_DEVICE' (Section 6.3.5) command (always returned, no
1843 matter which driver parameter)
1844
1845
1846
1847 Schoenebeck Expires May 5, 2010 [Page 33]
1848
1849 Internet-Draft LinuxSampler Control Protocol November 2009
1850
1851
1852 FIX -
1853
1854 either true or false, if false then this parameter can be
1855 changed at any time, once the device is created by the 'CREATE
1856 MIDI_INPUT_DEVICE' (Section 6.3.5) command (always returned, no
1857 matter which driver parameter)
1858
1859 MULTIPLICITY -
1860
1861 either true or false, defines if this parameter allows only one
1862 value or a list of values, where true means multiple values and
1863 false only a single value allowed (always returned, no matter
1864 which driver parameter)
1865
1866 DEPENDS -
1867
1868 comma separated list of parameters this parameter depends on,
1869 means the values for fields 'DEFAULT', 'RANGE_MIN', 'RANGE_MAX'
1870 and 'POSSIBILITIES' might depend on these listed parameters,
1871 for example assuming that an audio driver (like the ALSA
1872 driver) offers parameters 'card' and 'samplerate' then
1873 parameter 'samplerate' would depend on 'card' because the
1874 possible values for 'samplerate' depends on the sound card
1875 which can be chosen by the 'card' parameter (optionally
1876 returned, dependent to driver parameter)
1877
1878 DEFAULT -
1879
1880 reflects the default value for this parameter which is used
1881 when the device is created and not explicitly given with the
1882 'CREATE MIDI_INPUT_DEVICE' (Section 6.3.5) command, in case of
1883 MULTIPLCITY=true, this is a comma separated list, that's why
1884 character strings are encapsulated into apostrophes (')
1885 (optionally returned, dependent to driver parameter)
1886
1887 RANGE_MIN -
1888
1889 defines lower limit of the allowed value range for this
1890 parameter, can be an integer value as well as a dotted number,
1891 this parameter is often used in conjunction with RANGE_MAX, but
1892 may also appear without (optionally returned, dependent to
1893 driver parameter)
1894
1895 RANGE_MAX -
1896
1897 defines upper limit of the allowed value range for this
1898 parameter, can be an integer value as well as a dotted number,
1899 this parameter is often used in conjunction with RANGE_MIN, but
1900
1901
1902
1903 Schoenebeck Expires May 5, 2010 [Page 34]
1904
1905 Internet-Draft LinuxSampler Control Protocol November 2009
1906
1907
1908 may also appear without (optionally returned, dependent to
1909 driver parameter)
1910
1911 POSSIBILITIES -
1912
1913 comma separated list of possible values for this parameter,
1914 character strings are encapsulated into apostrophes (optionally
1915 returned, dependent to driver parameter)
1916
1917 The mentioned fields above don't have to be in particular order.
1918
1919 Example:
1920
1921 C: "GET MIDI_INPUT_DRIVER_PARAMETER INFO ALSA ACTIVE"
1922
1923 S: "DESCRIPTION: Whether device is enabled"
1924
1925 "TYPE: BOOL"
1926
1927 "MANDATORY: false"
1928
1929 "FIX: false"
1930
1931 "MULTIPLICITY: false"
1932
1933 "DEFAULT: true"
1934
1935 "."
1936
1937 6.3.5. Creating a MIDI input device
1938
1939 Use the following command to create a new MIDI input device for the
1940 desired MIDI input system:
1941
1942 CREATE MIDI_INPUT_DEVICE <midi-input-driver> [<param-list>]
1943
1944 Where <midi-input-driver> should be replaced by the desired MIDI
1945 input system as returned by the "LIST AVAILABLE_MIDI_INPUT_DRIVERS"
1946 (Section 6.3.2) command and <param-list> by an optional list of
1947 driver specific parameters in form of "key1=val1 key2=val2 ...",
1948 where character string values should be encapsulated into apostrophes
1949 ('). Note that there might be drivers which require parameter(s) to
1950 be given with this command. Use the previously described commands in
1951 this chapter to get that information.
1952
1953 Possible Answers:
1954
1955
1956
1957
1958
1959 Schoenebeck Expires May 5, 2010 [Page 35]
1960
1961 Internet-Draft LinuxSampler Control Protocol November 2009
1962
1963
1964 "OK[<device-id>]" -
1965
1966 in case the device was successfully created, where <device-id>
1967 is the numerical ID of the new device
1968
1969 "WRN[<device-id>]:<warning-code>:<warning-message>" -
1970
1971 in case the driver was loaded successfully, where <device-id>
1972 is the numerical ID of the new device, but there are noteworthy
1973 issue(s) related, providing an appropriate warning code and
1974 warning message
1975
1976 "ERR:<error-code>:<error-message>" -
1977
1978 in case it failed, providing an appropriate error code and
1979 error message
1980
1981 Example:
1982
1983 C: "CREATE MIDI_INPUT_DEVICE ALSA"
1984
1985 S: "OK[0]"
1986
1987 6.3.6. Destroying a MIDI input device
1988
1989 Use the following command to destroy a created MIDI input device:
1990
1991 DESTROY MIDI_INPUT_DEVICE <device-id>
1992
1993 Where <device-id> should be replaced by the device's numerical ID as
1994 returned by the "CREATE MIDI_INPUT_DEVICE" (Section 6.3.5) or "LIST
1995 MIDI_INPUT_DEVICES" (Section 6.3.8) command.
1996
1997 Possible Answers:
1998
1999 "OK" -
2000
2001 in case the device was successfully destroyed
2002
2003 "WRN:<warning-code>:<warning-message>" -
2004
2005 in case the device was destroyed, but there are noteworthy
2006 issue(s) related, providing an appropriate warning code and
2007 warning message
2008
2009 "ERR:<error-code>:<error-message>" -
2010
2011
2012
2013
2014
2015 Schoenebeck Expires May 5, 2010 [Page 36]
2016
2017 Internet-Draft LinuxSampler Control Protocol November 2009
2018
2019
2020 in case it failed, providing an appropriate error code and
2021 error message
2022
2023 Example:
2024
2025 C: "DESTROY MIDI_INPUT_DEVICE 0"
2026
2027 S: "OK"
2028
2029 6.3.7. Getting all created MIDI input device count
2030
2031 Use the following command to count all created MIDI input devices:
2032
2033 GET MIDI_INPUT_DEVICES
2034
2035 Possible Answers:
2036
2037 LinuxSampler will answer by sending the current number of all MIDI
2038 input devices.
2039
2040 Example:
2041
2042 C: "GET MIDI_INPUT_DEVICES"
2043
2044 S: "3"
2045
2046 6.3.8. Getting all created MIDI input device list
2047
2048 Use the following command to list all created MIDI input devices:
2049
2050 LIST MIDI_INPUT_DEVICES
2051
2052 Possible Answers:
2053
2054 LinuxSampler will answer by sending a comma separated list with
2055 the numerical Ids of all created MIDI input devices.
2056
2057 Examples:
2058
2059 C: "LIST MIDI_INPUT_DEVICES"
2060
2061 S: "0,1,2"
2062
2063 C: "LIST MIDI_INPUT_DEVICES"
2064
2065 S: "1,3"
2066
2067
2068
2069
2070
2071 Schoenebeck Expires May 5, 2010 [Page 37]
2072
2073 Internet-Draft LinuxSampler Control Protocol November 2009
2074
2075
2076 6.3.9. Getting current settings of a MIDI input device
2077
2078 Use the following command to get current settings of a specific,
2079 created MIDI input device:
2080
2081 GET MIDI_INPUT_DEVICE INFO <device-id>
2082
2083 Where <device-id> is the numerical ID of the MIDI input device as
2084 returned by the "CREATE MIDI_INPUT_DEVICE" (Section 6.3.5) or "LIST
2085 MIDI_INPUT_DEVICES" (Section 6.3.8) command.
2086
2087 Possible Answers:
2088
2089 LinuxSampler will answer by sending a <CRLF> separated list. Each
2090 answer line begins with the information category name followed by
2091 a colon and then a space character <SP> and finally the info
2092 character string to that info category. As some parameters might
2093 allow multiple values, character strings are encapsulated into
2094 apostrophes ('). At the moment the following information
2095 categories are defined (independent of driver):
2096
2097
2098
2099 DRIVER -
2100
2101 identifier of the used MIDI input driver, as e.g. returned
2102 by the "LIST AVAILABLE_MIDI_INPUT_DRIVERS" (Section 6.3.2)
2103 command
2104
2105 ACTIVE -
2106
2107 either true or false, if false then the MIDI device is
2108 inactive and doesn't listen to any incoming MIDI events and
2109 thus doesn't forward them to connected sampler channels
2110
2111 The mentioned fields above don't have to be in particular order. The
2112 fields above are only those fields which are returned by all MIDI
2113 input devices. Every MIDI input driver might have its own,
2114 additional driver specific parameters (see "GET MIDI_INPUT_DRIVER
2115 INFO" (Section 6.3.3) command) which are also returned by this
2116 command.
2117
2118 Example:
2119
2120 C: "GET MIDI_INPUT_DEVICE INFO 0"
2121
2122 S: "DRIVER: ALSA"
2123
2124
2125
2126
2127 Schoenebeck Expires May 5, 2010 [Page 38]
2128
2129 Internet-Draft LinuxSampler Control Protocol November 2009
2130
2131
2132 "ACTIVE: true"
2133
2134 "."
2135
2136 6.3.10. Changing settings of MIDI input devices
2137
2138 Use the following command to alter a specific setting of a created
2139 MIDI input device:
2140
2141 SET MIDI_INPUT_DEVICE_PARAMETER <device-id> <key>=<value>
2142
2143 Where <device-id> should be replaced by the numerical ID of the MIDI
2144 input device as returned by the "CREATE MIDI_INPUT_DEVICE"
2145 (Section 6.3.5) or "LIST MIDI_INPUT_DEVICES" (Section 6.3.8) command,
2146 <key> by the name of the parameter to change and <value> by the new
2147 value for this parameter.
2148
2149 Possible Answers:
2150
2151 "OK" -
2152
2153 in case setting was successfully changed
2154
2155 "WRN:<warning-code>:<warning-message>" -
2156
2157 in case setting was changed successfully, but there are
2158 noteworthy issue(s) related, providing an appropriate warning
2159 code and warning message
2160
2161 "ERR:<error-code>:<error-message>" -
2162
2163 in case it failed, providing an appropriate error code and
2164 error message
2165
2166 Example:
2167
2168 C: "SET MIDI_INPUT_DEVICE_PARAMETER 0 ACTIVE=false"
2169
2170 S: "OK"
2171
2172 6.3.11. Getting information about a MIDI port
2173
2174 Use the following command to get information about a MIDI port:
2175
2176 GET MIDI_INPUT_PORT INFO <device-id> <midi-port>
2177
2178 Where <device-id> is the numerical ID of the MIDI input device as
2179 returned by the "CREATE MIDI_INPUT_DEVICE" (Section 6.3.5) or "LIST
2180
2181
2182
2183 Schoenebeck Expires May 5, 2010 [Page 39]
2184
2185 Internet-Draft LinuxSampler Control Protocol November 2009
2186
2187
2188 MIDI_INPUT_DEVICES" (Section 6.3.8) command and <midi-port> the MIDI
2189 input port number.
2190
2191 Possible Answers:
2192
2193 LinuxSampler will answer by sending a <CRLF> separated list. Each
2194 answer line begins with the information category name followed by
2195 a colon and then a space character <SP> and finally the info
2196 character string to that info category. At the moment the
2197 following information categories are defined:
2198
2199 NAME -
2200
2201 arbitrary character string naming the port
2202
2203 The field above is only the one which is returned by all MIDI ports
2204 regardless of the MIDI driver and port. Every MIDI port might have
2205 its own, additional driver and port specific parameters.
2206
2207 Example:
2208
2209 C: "GET MIDI_INPUT_PORT INFO 0 0"
2210
2211 S: "NAME: 'Masterkeyboard'"
2212
2213 "ALSA_SEQ_BINDINGS: '64:0'"
2214
2215 "."
2216
2217 6.3.12. Getting information about specific MIDI port parameter
2218
2219 Use the following command to get detailed information about specific
2220 MIDI port parameter:
2221
2222 GET MIDI_INPUT_PORT_PARAMETER INFO <dev-id> <port> <param>
2223
2224 Where <dev-id> is the numerical ID of the MIDI input device as
2225 returned by the "CREATE MIDI_INPUT_DEVICE" (Section 6.3.5) or "LIST
2226 MIDI_INPUT_DEVICES" (Section 6.3.8) command, <port> the MIDI port
2227 number and <param> a specific port parameter name for which
2228 information should be obtained (as returned by the "GET
2229 MIDI_INPUT_PORT INFO" (Section 6.3.11) command).
2230
2231 Possible Answers:
2232
2233 LinuxSampler will answer by sending a <CRLF> separated list. Each
2234 answer line begins with the information category name followed by
2235 a colon and then a space character <SP> and finally the info
2236
2237
2238
2239 Schoenebeck Expires May 5, 2010 [Page 40]
2240
2241 Internet-Draft LinuxSampler Control Protocol November 2009
2242
2243
2244 character string to that info category. There is information
2245 which is always returned, independently of the given channel
2246 parameter and there is optional information which are only shown
2247 dependently to the given MIDI port. At the moment the following
2248 information categories are defined:
2249
2250 TYPE -
2251
2252 either "BOOL" for boolean value(s) or "INT" for integer
2253 value(s) or "FLOAT" for dotted number(s) or "STRING" for
2254 character string(s) (always returned)
2255
2256 DESCRIPTION -
2257
2258 arbitrary text describing the purpose of the parameter (always
2259 returned)
2260
2261 FIX -
2262
2263 either true or false, if true then this parameter is read only,
2264 thus cannot be altered (always returned)
2265
2266 MULTIPLICITY -
2267
2268 either true or false, defines if this parameter allows only one
2269 value or a list of values, where true means multiple values and
2270 false only a single value allowed (always returned)
2271
2272 RANGE_MIN -
2273
2274 defines lower limit of the allowed value range for this
2275 parameter, can be an integer value as well as a dotted number,
2276 this parameter is usually used in conjunction with 'RANGE_MAX'
2277 but may also appear without (optionally returned, dependent to
2278 driver and port parameter)
2279
2280 RANGE_MAX -
2281
2282 defines upper limit of the allowed value range for this
2283 parameter, can be an integer value as well as a dotted number,
2284 this parameter is usually used in conjunction with 'RANGE_MIN'
2285 but may also appear without (optionally returned, dependent to
2286 driver and port parameter)
2287
2288 POSSIBILITIES -
2289
2290 comma separated list of possible values for this parameter,
2291 character strings are encapsulated into apostrophes (optionally
2292
2293
2294
2295 Schoenebeck Expires May 5, 2010 [Page 41]
2296
2297 Internet-Draft LinuxSampler Control Protocol November 2009
2298
2299
2300 returned, dependent to device and port parameter)
2301
2302 The mentioned fields above don't have to be in particular order.
2303
2304 Example:
2305
2306 C: "GET MIDI_INPUT_PORT_PARAMETER INFO 0 0 ALSA_SEQ_BINDINGS"
2307
2308 S: "DESCRIPTION: bindings to other ALSA sequencer clients"
2309
2310 "TYPE: STRING"
2311
2312 "FIX: false"
2313
2314 "MULTIPLICITY: true"
2315
2316 "POSSIBILITIES: '64:0','68:0','68:1'"
2317
2318 "."
2319
2320 6.3.13. Changing settings of MIDI input ports
2321
2322 Use the following command to alter a specific setting of a MIDI input
2323 port:
2324
2325 SET MIDI_INPUT_PORT_PARAMETER <device-id> <port> <key>=<value>
2326
2327 Where <device-id> should be replaced by the numerical ID of the MIDI
2328 device as returned by the "CREATE MIDI_INPUT_DEVICE" (Section 6.3.5)
2329 or "LIST MIDI_INPUT_DEVICES" (Section 6.3.8) command, <port> by the
2330 MIDI port number, <key> by the name of the parameter to change and
2331 <value> by the new value for this parameter (encapsulated into
2332 apostrophes) or NONE (not encapsulated into apostrophes) for
2333 specifying no value for parameters allowing a list of values.
2334
2335 Possible Answers:
2336
2337 "OK" -
2338
2339 in case setting was successfully changed
2340
2341 "WRN:<warning-code>:<warning-message>" -
2342
2343 in case setting was changed successfully, but there are
2344 noteworthy issue(s) related, providing an appropriate warning
2345 code and warning message
2346
2347
2348
2349
2350
2351 Schoenebeck Expires May 5, 2010 [Page 42]
2352
2353 Internet-Draft LinuxSampler Control Protocol November 2009
2354
2355
2356 "ERR:<error-code>:<error-message>" -
2357
2358 in case it failed, providing an appropriate error code and
2359 error message
2360
2361 Example:
2362
2363 C: "SET MIDI_INPUT_PORT_PARAMETER 0 0 ALSA_SEQ_BINDINGS='20:0'"
2364
2365 S: "OK"
2366
2367 C: "SET MIDI_INPUT_PORT_PARAMETER 0 0 ALSA_SEQ_BINDINGS=NONE"
2368
2369 S: "OK"
2370
2371 6.4. Configuring sampler channels
2372
2373 The following commands describe how to add and remove sampler
2374 channels, associate a sampler channel with a sampler engine, load
2375 instruments and connect sampler channels to MIDI and audio devices.
2376
2377 6.4.1. Loading an instrument
2378
2379 An instrument file can be loaded and assigned to a sampler channel by
2380 one of the following commands:
2381
2382 LOAD INSTRUMENT [NON_MODAL] '<filename>' <instr-index> <sampler-
2383 channel>
2384
2385 Where <filename> is the name of the instrument file on the
2386 LinuxSampler instance's host system, <instr-index> the index of the
2387 instrument in the instrument file and <sampler-channel> is the number
2388 of the sampler channel the instrument should be assigned to. Each
2389 sampler channel can only have one instrument.
2390
2391 Notice: since LSCP 1.2 the <filename> argument supports escape
2392 characters for special characters (see chapter "Character Set and
2393 Escape Sequences (Section 7.1)" for details) and accordingly
2394 backslash characters in the filename MUST now be escaped as well!
2395
2396 The difference between regular and NON_MODAL versions of the command
2397 is that the regular command returns OK only after the instrument has
2398 been fully loaded and the channel is ready to be used while NON_MODAL
2399 version returns immediately and a background process is launched to
2400 load the instrument on the channel. The GET CHANNEL INFO
2401 (Section 6.4.10) command can be used to obtain loading progress from
2402 INSTRUMENT_STATUS field. LOAD command will perform sanity checks
2403 such as making sure that the file could be read and it is of a proper
2404
2405
2406
2407 Schoenebeck Expires May 5, 2010 [Page 43]
2408
2409 Internet-Draft LinuxSampler Control Protocol November 2009
2410
2411
2412 format and SHOULD return ERR and SHOULD not launch the background
2413 process should any errors be detected at that point.
2414
2415 Possible Answers:
2416
2417 "OK" -
2418
2419 in case the instrument was successfully loaded
2420
2421 "WRN:<warning-code>:<warning-message>" -
2422
2423 in case the instrument was loaded successfully, but there are
2424 noteworthy issue(s) related (e.g. Engine doesn't support one
2425 or more patch parameters provided by the loaded instrument
2426 file), providing an appropriate warning code and warning
2427 message
2428
2429 "ERR:<error-code>:<error-message>" -
2430
2431 in case it failed, providing an appropriate error code and
2432 error message
2433
2434 Example (Unix):
2435
2436 C: LOAD INSTRUMENT '/home/joe/gigs/cello.gig' 0 0
2437
2438 S: OK
2439
2440 Example (Windows):
2441
2442 C: LOAD INSTRUMENT 'D:/MySounds/cello.gig' 0 0
2443
2444 S: OK
2445
2446 6.4.2. Loading a sampler engine
2447
2448 A sampler engine type can be associated to a specific sampler channel
2449 by the following command:
2450
2451 LOAD ENGINE <engine-name> <sampler-channel>
2452
2453 Where <engine-name> is an engine name as obtained by the "LIST
2454 AVAILABLE_ENGINES" (Section 6.4.8) command and <sampler-channel> the
2455 sampler channel as returned by the "ADD CHANNEL" (Section 6.4.5) or
2456 "LIST CHANNELS" (Section 6.4.4) command where the engine type should
2457 be assigned to. This command should be issued after adding a new
2458 sampler channel and before any other control commands on the new
2459 sampler channel. It can also be used to change the engine type of a
2460
2461
2462
2463 Schoenebeck Expires May 5, 2010 [Page 44]
2464
2465 Internet-Draft LinuxSampler Control Protocol November 2009
2466
2467
2468 sampler channel. This command has (currently) no way to define or
2469 force if a new engine instance should be created and assigned to the
2470 given sampler channel or if an already existing instance of that
2471 engine type, shared with other sampler channels, should be used.
2472
2473 Possible Answers:
2474
2475 "OK" -
2476
2477 in case the engine was successfully deployed
2478
2479 "WRN:<warning-code>:<warning-message>" -
2480
2481 in case the engine was deployed successfully, but there are
2482 noteworthy issue(s) related, providing an appropriate warning
2483 code and warning message
2484
2485 "ERR:<error-code>:<error-message>" -
2486
2487 in case it failed, providing an appropriate error code and
2488 error message
2489
2490 Example:
2491
2492
2493
2494 6.4.3. Getting all created sampler channel count
2495
2496 The number of sampler channels can change on runtime. To get the
2497 current amount of sampler channels, the front-end can send the
2498 following command:
2499
2500 GET CHANNELS
2501
2502 Possible Answers:
2503
2504 LinuxSampler will answer by returning the current number of
2505 sampler channels.
2506
2507 Example:
2508
2509 C: "GET CHANNELS"
2510
2511 S: "12"
2512
2513
2514
2515
2516
2517
2518
2519 Schoenebeck Expires May 5, 2010 [Page 45]
2520
2521 Internet-Draft LinuxSampler Control Protocol November 2009
2522
2523
2524 6.4.4. Getting all created sampler channel list
2525
2526 The number of sampler channels can change on runtime. To get the
2527 current list of sampler channels, the front-end can send the
2528 following command:
2529
2530 LIST CHANNELS
2531
2532 Possible Answers:
2533
2534 LinuxSampler will answer by returning a comma separated list with
2535 all sampler channels numerical IDs.
2536
2537 Example:
2538
2539 C: "LIST CHANNELS"
2540
2541 S: "0,1,2,3,4,5,6,9,10,11,15,20"
2542
2543 6.4.5. Adding a new sampler channel
2544
2545 A new sampler channel can be added to the end of the sampler channel
2546 list by sending the following command:
2547
2548 ADD CHANNEL
2549
2550 This will increment the sampler channel count by one and the new
2551 sampler channel will be appended to the end of the sampler channel
2552 list. The front-end should send the respective, related commands
2553 right after to e.g. load an engine, load an instrument and setting
2554 input, output method and eventually other commands to initialize the
2555 new channel. The front-end should use the sampler channel returned
2556 by the answer of this command to perform the previously recommended
2557 commands, to avoid race conditions e.g. with other front-ends that
2558 might also have sent an "ADD CHANNEL" command.
2559
2560 Possible Answers:
2561
2562 "OK[<sampler-channel>]" -
2563
2564 in case a new sampler channel could be added, where <sampler-
2565 channel> reflects the channel number of the new created sampler
2566 channel which should be used to set up the sampler channel by
2567 sending subsequent initialization commands
2568
2569 "WRN:<warning-code>:<warning-message>" -
2570
2571
2572
2573
2574
2575 Schoenebeck Expires May 5, 2010 [Page 46]
2576
2577 Internet-Draft LinuxSampler Control Protocol November 2009
2578
2579
2580 in case a new channel was added successfully, but there are
2581 noteworthy issue(s) related, providing an appropriate warning
2582 code and warning message
2583
2584 "ERR:<error-code>:<error-message>" -
2585
2586 in case it failed, providing an appropriate error code and
2587 error message
2588
2589 Example:
2590
2591
2592
2593 6.4.6. Removing a sampler channel
2594
2595 A sampler channel can be removed by sending the following command:
2596
2597 REMOVE CHANNEL <sampler-channel>
2598
2599 Where <sampler-channel> should be replaced by the number of the
2600 sampler channel as given by the "ADD CHANNEL" (Section 6.4.5) or
2601 "LIST CHANNELS" (Section 6.4.4) command. The channel numbers of all
2602 subsequent sampler channels remain the same.
2603
2604 Possible Answers:
2605
2606 "OK" -
2607
2608 in case the given sampler channel could be removed
2609
2610 "WRN:<warning-code>:<warning-message>" -
2611
2612 in case the given channel was removed, but there are noteworthy
2613 issue(s) related, providing an appropriate warning code and
2614 warning message
2615
2616 "ERR:<error-code>:<error-message>" -
2617
2618 in case it failed, providing an appropriate error code and
2619 error message
2620
2621 Example:
2622
2623
2624
2625
2626
2627
2628
2629
2630
2631 Schoenebeck Expires May 5, 2010 [Page 47]
2632
2633 Internet-Draft LinuxSampler Control Protocol November 2009
2634
2635
2636 6.4.7. Getting amount of available engines
2637
2638 The front-end can ask for the number of available engines by sending
2639 the following command:
2640
2641 GET AVAILABLE_ENGINES
2642
2643 Possible Answers:
2644
2645 LinuxSampler will answer by sending the number of available
2646 engines.
2647
2648 Example:
2649
2650 C: "GET AVAILABLE_ENGINES"
2651
2652 S: "4"
2653
2654 6.4.8. Getting all available engines
2655
2656 The front-end can ask for a list of all available engines by sending
2657 the following command:
2658
2659 LIST AVAILABLE_ENGINES
2660
2661 Possible Answers:
2662
2663 LinuxSampler will answer by sending a comma separated list of the
2664 engines' names encapsulated into apostrophes ('). Engine names
2665 can consist of lower and upper cases, digits and underlines ("_"
2666 character).
2667
2668 Example:
2669
2670 C: "LIST AVAILABLE_ENGINES"
2671
2672 S: "'GigEngine','AkaiEngine','DLSEngine','JoesCustomEngine'"
2673
2674 6.4.9. Getting information about an engine
2675
2676 The front-end can ask for information about a specific engine by
2677 sending the following command:
2678
2679 GET ENGINE INFO <engine-name>
2680
2681 Where <engine-name> is an engine name as obtained by the "LIST
2682 AVAILABLE_ENGINES" (Section 6.4.8) command.
2683
2684
2685
2686
2687 Schoenebeck Expires May 5, 2010 [Page 48]
2688
2689 Internet-Draft LinuxSampler Control Protocol November 2009
2690
2691
2692 Possible Answers:
2693
2694 LinuxSampler will answer by sending a <CRLF> separated list. Each
2695 answer line begins with the information category name followed by
2696 a colon and then a space character <SP> and finally the info
2697 character string to that info category. At the moment the
2698 following categories are defined:
2699
2700
2701
2702 DESCRIPTION -
2703
2704 arbitrary description text about the engine (note that the
2705 character string may contain escape sequences (Section 7.1))
2706
2707 VERSION -
2708
2709 arbitrary character string regarding the engine's version
2710
2711 The mentioned fields above don't have to be in particular order.
2712
2713 Example:
2714
2715 C: "GET ENGINE INFO JoesCustomEngine"
2716
2717 S: "DESCRIPTION: this is Joe's custom sampler engine"
2718
2719 "VERSION: testing-1.0"
2720
2721 "."
2722
2723 6.4.10. Getting sampler channel information
2724
2725 The front-end can ask for the current settings of a sampler channel
2726 by sending the following command:
2727
2728 GET CHANNEL INFO <sampler-channel>
2729
2730 Where <sampler-channel> is the sampler channel number the front-end
2731 is interested in as returned by the "ADD CHANNEL" (Section 6.4.5) or
2732 "LIST CHANNELS" (Section 6.4.4) command.
2733
2734 Possible Answers:
2735
2736 LinuxSampler will answer by sending a <CRLF> separated list. Each
2737 answer line begins with the settings category name followed by a
2738 colon and then a space character <SP> and finally the info
2739 character string to that setting category. At the moment the
2740
2741
2742
2743 Schoenebeck Expires May 5, 2010 [Page 49]
2744
2745 Internet-Draft LinuxSampler Control Protocol November 2009
2746
2747
2748 following categories are defined:
2749
2750
2751
2752 ENGINE_NAME -
2753
2754 name of the engine that is associated with the sampler
2755 channel, "NONE" if there's no engine associated yet for this
2756 sampler channel
2757
2758 AUDIO_OUTPUT_DEVICE -
2759
2760 numerical ID of the audio output device which is currently
2761 connected to this sampler channel to output the audio
2762 signal, "-1" if there's no device connected to this sampler
2763 channel
2764
2765 AUDIO_OUTPUT_CHANNELS -
2766
2767 number of output channels the sampler channel offers
2768 (dependent to used sampler engine and loaded instrument)
2769
2770 AUDIO_OUTPUT_ROUTING -
2771
2772 comma separated list which reflects to which audio channel
2773 of the selected audio output device each sampler output
2774 channel is routed to, e.g. "0,3" would mean the engine's
2775 output channel 0 is routed to channel 0 of the audio output
2776 device and the engine's output channel 1 is routed to the
2777 channel 3 of the audio output device
2778
2779 INSTRUMENT_FILE -
2780
2781 the file name of the loaded instrument, "NONE" if there's no
2782 instrument yet loaded for this sampler channel (note: since
2783 LSCP 1.2 this path may contain escape sequences
2784 (Section 7.1))
2785
2786 INSTRUMENT_NR -
2787
2788 the instrument index number of the loaded instrument, "-1"
2789 if there's no instrument loaded for this sampler channel
2790
2791 INSTRUMENT_NAME -
2792
2793 the instrument name of the loaded instrument (note: since
2794 LSCP 1.2 this character string may contain escape sequences
2795 (Section 7.1))
2796
2797
2798
2799 Schoenebeck Expires May 5, 2010 [Page 50]
2800
2801 Internet-Draft LinuxSampler Control Protocol November 2009
2802
2803
2804 INSTRUMENT_STATUS -
2805
2806 Integer values 0 to 100 indicating loading progress
2807 percentage for the instrument. Negative value indicates a
2808 loading exception (also returns "-1" in case no instrument
2809 was yet to be loaded on the sampler channel). Value of 100
2810 indicates that the instrument is fully loaded.
2811
2812 MIDI_INPUT_DEVICE -
2813
2814 numerical ID of the MIDI input device which is currently
2815 connected to this sampler channel to deliver MIDI input
2816 commands, "-1" if there's no device connected to this
2817 sampler channel
2818
2819 MIDI_INPUT_PORT -
2820
2821 port number of the MIDI input device (in case a MIDI device
2822 was already assigned to the sampler channel)
2823
2824 MIDI_INPUT_CHANNEL -
2825
2826 the MIDI input channel number this sampler channel should
2827 listen to or "ALL" to listen on all MIDI channels
2828
2829 VOLUME -
2830
2831 optionally dotted number for the channel volume factor
2832 (where a value < 1.0 means attenuation and a value > 1.0
2833 means amplification)
2834
2835 MUTE -
2836
2837 Determines whether the channel is muted, "true" if the
2838 channel is muted, "false" if the channel is not muted, and
2839 "MUTED_BY_SOLO" if the channel is muted because of the
2840 presence of a solo channel and will be unmuted when there
2841 are no solo channels left
2842
2843 SOLO -
2844
2845 Determines whether this is a solo channel, "true" if the
2846 channel is a solo channel; "false" otherwise
2847
2848 MIDI_INSTRUMENT_MAP -
2849
2850 Determines to which MIDI instrument map this sampler channel
2851 is assigned to. Read chapter "SET CHANNEL
2852
2853
2854
2855 Schoenebeck Expires May 5, 2010 [Page 51]
2856
2857 Internet-Draft LinuxSampler Control Protocol November 2009
2858
2859
2860 MIDI_INSTRUMENT_MAP" (Section 6.4.24) for a list of possible
2861 values.
2862
2863 The mentioned fields above don't have to be in particular order.
2864
2865 Example:
2866
2867 C: "GET CHANNEL INFO 34"
2868
2869 S: "ENGINE_NAME: GigEngine"
2870
2871 "VOLUME: 1.0"
2872
2873 "AUDIO_OUTPUT_DEVICE: 0"
2874
2875 "AUDIO_OUTPUT_CHANNELS: 2"
2876
2877 "AUDIO_OUTPUT_ROUTING: 0,1"
2878
2879 "INSTRUMENT_FILE: /home/joe/FazioliPiano.gig"
2880
2881 "INSTRUMENT_NR: 0"
2882
2883 "INSTRUMENT_NAME: Fazioli Piano"
2884
2885 "INSTRUMENT_STATUS: 100"
2886
2887 "MIDI_INPUT_DEVICE: 0"
2888
2889 "MIDI_INPUT_PORT: 0"
2890
2891 "MIDI_INPUT_CHANNEL: 5"
2892
2893 "VOLUME: 1.0"
2894
2895 "MUTE: false"
2896
2897 "SOLO: false"
2898
2899 "MIDI_INSTRUMENT_MAP: NONE"
2900
2901 "."
2902
2903 6.4.11. Current number of active voices
2904
2905 The front-end can ask for the current number of active voices on a
2906 sampler channel by sending the following command:
2907
2908
2909
2910
2911 Schoenebeck Expires May 5, 2010 [Page 52]
2912
2913 Internet-Draft LinuxSampler Control Protocol November 2009
2914
2915
2916 GET CHANNEL VOICE_COUNT <sampler-channel>
2917
2918 Where <sampler-channel> is the sampler channel number the front-end
2919 is interested in as returned by the "ADD CHANNEL" (Section 6.4.5) or
2920 "LIST CHANNELS" (Section 6.4.4) command.
2921
2922 Possible Answers:
2923
2924 LinuxSampler will answer by returning the number of active voices
2925 on that channel.
2926
2927 Example:
2928
2929
2930
2931 6.4.12. Current number of active disk streams
2932
2933 The front-end can ask for the current number of active disk streams
2934 on a sampler channel by sending the following command:
2935
2936 GET CHANNEL STREAM_COUNT <sampler-channel>
2937
2938 Where <sampler-channel> is the sampler channel number the front-end
2939 is interested in as returned by the "ADD CHANNEL" (Section 6.4.5) or
2940 "LIST CHANNELS" (Section 6.4.4) command.
2941
2942 Possible Answers:
2943
2944 LinuxSampler will answer by returning the number of active disk
2945 streams on that channel in case the engine supports disk
2946 streaming, if the engine doesn't support disk streaming it will
2947 return "NA" for not available.
2948
2949 Example:
2950
2951
2952
2953 6.4.13. Current fill state of disk stream buffers
2954
2955 The front-end can ask for the current fill state of all disk streams
2956 on a sampler channel by sending the following command:
2957
2958 GET CHANNEL BUFFER_FILL BYTES <sampler-channel>
2959
2960 to get the fill state in bytes or
2961
2962
2963
2964
2965
2966
2967 Schoenebeck Expires May 5, 2010 [Page 53]
2968
2969 Internet-Draft LinuxSampler Control Protocol November 2009
2970
2971
2972 GET CHANNEL BUFFER_FILL PERCENTAGE <sampler-channel>
2973
2974 to get the fill state in percent, where <sampler-channel> is the
2975 sampler channel number the front-end is interested in as returned by
2976 the "ADD CHANNEL" (Section 6.4.5) or "LIST CHANNELS" (Section 6.4.4)
2977 command.
2978
2979 Possible Answers:
2980
2981 LinuxSampler will either answer by returning a comma separated
2982 string with the fill state of all disk stream buffers on that
2983 channel or an empty line if there are no active disk streams or
2984 "NA" for *not available* in case the engine which is deployed
2985 doesn't support disk streaming. Each entry in the answer list
2986 will begin with the stream's ID in brackets followed by the
2987 numerical representation of the fill size (either in bytes or
2988 percentage). Note: due to efficiency reasons the fill states in
2989 the response are not in particular order, thus the front-end has
2990 to sort them by itself if necessary.
2991
2992 Examples:
2993
2994 C: "GET CHANNEL BUFFER_FILL BYTES 4"
2995
2996 S: "[115]420500,[116]510300,[75]110000,[120]230700"
2997
2998 C: "GET CHANNEL BUFFER_FILL PERCENTAGE 4"
2999
3000 S: "[115]90%,[116]98%,[75]40%,[120]62%"
3001
3002 C: "GET CHANNEL BUFFER_FILL PERCENTAGE 4"
3003
3004 S: ""
3005
3006 6.4.14. Setting audio output device
3007
3008 The front-end can set the audio output device on a specific sampler
3009 channel by sending the following command:
3010
3011 SET CHANNEL AUDIO_OUTPUT_DEVICE <sampler-channel>
3012 <audio-device-id>
3013
3014 Where <sampler-channel> is the respective sampler channel number as
3015 returned by the "ADD CHANNEL" (Section 6.4.5) or "LIST CHANNELS"
3016 (Section 6.4.4) command and <audio-device-id> is the numerical ID of
3017 the audio output device as given by the "CREATE AUDIO_OUTPUT_DEVICE"
3018 (Section 6.2.5) or "LIST AUDIO_OUTPUT_DEVICES" (Section 6.2.8)
3019 command.
3020
3021
3022
3023 Schoenebeck Expires May 5, 2010 [Page 54]
3024
3025 Internet-Draft LinuxSampler Control Protocol November 2009
3026
3027
3028 Possible Answers:
3029
3030 "OK" -
3031
3032 on success
3033
3034 "WRN:<warning-code>:<warning-message>" -
3035
3036 if audio output device was set, but there are noteworthy
3037 issue(s) related, providing an appropriate warning code and
3038 warning message
3039
3040 "ERR:<error-code>:<error-message>" -
3041
3042 in case it failed, providing an appropriate error code and
3043 error message
3044
3045 Examples:
3046
3047
3048
3049 6.4.15. Setting audio output type
3050
3051 DEPRECATED: THIS COMMAND WILL DISAPPEAR SOON!
3052
3053 The front-end can alter the audio output type on a specific sampler
3054 channel by sending the following command:
3055
3056 SET CHANNEL AUDIO_OUTPUT_TYPE <sampler-channel> <audio-output-
3057 type>
3058
3059 Where <audio-output-type> is currently either "ALSA" or "JACK" and
3060 <sampler-channel> is the respective sampler channel number.
3061
3062 Possible Answers:
3063
3064 "OK" -
3065
3066 on success
3067
3068 "WRN:<warning-code>:<warning-message>" -
3069
3070 if audio output type was set, but there are noteworthy issue(s)
3071 related, providing an appropriate warning code and warning
3072 message
3073
3074
3075
3076
3077
3078
3079 Schoenebeck Expires May 5, 2010 [Page 55]
3080
3081 Internet-Draft LinuxSampler Control Protocol November 2009
3082
3083
3084 "ERR:<error-code>:<error-message>" -
3085
3086 in case it failed, providing an appropriate error code and
3087 error message
3088
3089 Examples:
3090
3091
3092
3093 6.4.16. Setting audio output channel
3094
3095 The front-end can alter the audio output channel on a specific
3096 sampler channel by sending the following command:
3097
3098 SET CHANNEL AUDIO_OUTPUT_CHANNEL <sampler-chan> <audio-out>
3099 <audio-in>
3100
3101 Where <sampler-chan> is the sampler channel number as returned by the
3102 "ADD CHANNEL" (Section 6.4.5) or "LIST CHANNELS" (Section 6.4.4)
3103 command, <audio-out> is the numerical ID of the sampler channel's
3104 audio output channel which should be rerouted and <audio-in> is the
3105 numerical ID of the audio channel of the selected audio output device
3106 where <audio-out> should be routed to.
3107
3108 Possible Answers:
3109
3110 "OK" -
3111
3112 on success
3113
3114 "WRN:<warning-code>:<warning-message>" -
3115
3116 if audio output channel was set, but there are noteworthy
3117 issue(s) related, providing an appropriate warning code and
3118 warning message
3119
3120 "ERR:<error-code>:<error-message>" -
3121
3122 in case it failed, providing an appropriate error code and
3123 error message
3124
3125 Examples:
3126
3127
3128
3129
3130
3131
3132
3133
3134
3135 Schoenebeck Expires May 5, 2010 [Page 56]
3136
3137 Internet-Draft LinuxSampler Control Protocol November 2009
3138
3139
3140 6.4.17. Setting MIDI input device
3141
3142 The front-end can set the MIDI input device on a specific sampler
3143 channel by sending the following command:
3144
3145 SET CHANNEL MIDI_INPUT_DEVICE <sampler-channel> <midi-device-id>
3146
3147 Where <sampler-channel> is the sampler channel number as returned by
3148 the "ADD CHANNEL" (Section 6.4.5) or "LIST CHANNELS" (Section 6.4.4)
3149 command and <midi-device-id> is the numerical ID of the MIDI input
3150 device as returned by the "CREATE MIDI_INPUT_DEVICE" (Section 6.3.5)
3151 or "LIST MIDI_INPUT_DEVICES" (Section 6.3.8) command.
3152
3153 Possible Answers:
3154
3155 "OK" -
3156
3157 on success
3158
3159 "WRN:<warning-code>:<warning-message>" -
3160
3161 if MIDI input device was set, but there are noteworthy issue(s)
3162 related, providing an appropriate warning code and warning
3163 message
3164
3165 "ERR:<error-code>:<error-message>" -
3166
3167 in case it failed, providing an appropriate error code and
3168 error message
3169
3170 Examples:
3171
3172
3173
3174 6.4.18. Setting MIDI input type
3175
3176 DEPRECATED: THIS COMMAND WILL DISAPPEAR SOON!
3177
3178 The front-end can alter the MIDI input type on a specific sampler
3179 channel by sending the following command:
3180
3181 SET CHANNEL MIDI_INPUT_TYPE <sampler-channel> <midi-input-type>
3182
3183 Where <midi-input-type> is currently only "ALSA" and <sampler-
3184 channel> is the respective sampler channel number.
3185
3186 Possible Answers:
3187
3188
3189
3190
3191 Schoenebeck Expires May 5, 2010 [Page 57]
3192
3193 Internet-Draft LinuxSampler Control Protocol November 2009
3194
3195
3196 "OK" -
3197
3198 on success
3199
3200 "WRN:<warning-code>:<warning-message>" -
3201
3202 if MIDI input type was set, but there are noteworthy issue(s)
3203 related, providing an appropriate warning code and warning
3204 message
3205
3206 "ERR:<error-code>:<error-message>" -
3207
3208 in case it failed, providing an appropriate error code and
3209 error message
3210
3211 Examples:
3212
3213
3214
3215 6.4.19. Setting MIDI input port
3216
3217 The front-end can alter the MIDI input port on a specific sampler
3218 channel by sending the following command:
3219
3220 SET CHANNEL MIDI_INPUT_PORT <sampler-channel> <midi-input-port>
3221
3222 Where <midi-input-port> is a MIDI input port number of the MIDI input
3223 device connected to the sampler channel given by <sampler-channel>.
3224
3225 Possible Answers:
3226
3227 "OK" -
3228
3229 on success
3230
3231 "WRN:<warning-code>:<warning-message>" -
3232
3233 if MIDI input port was set, but there are noteworthy issue(s)
3234 related, providing an appropriate warning code and warning
3235 message
3236
3237 "ERR:<error-code>:<error-message>" -
3238
3239 in case it failed, providing an appropriate error code and
3240 error message
3241
3242 Examples:
3243
3244
3245
3246
3247 Schoenebeck Expires May 5, 2010 [Page 58]
3248
3249 Internet-Draft LinuxSampler Control Protocol November 2009
3250
3251
3252
3253
3254 6.4.20. Setting MIDI input channel
3255
3256 The front-end can alter the MIDI channel a sampler channel should
3257 listen to by sending the following command:
3258
3259 SET CHANNEL MIDI_INPUT_CHANNEL <sampler-channel> <midi-input-chan>
3260
3261 Where <midi-input-chan> is the number of the new MIDI input channel
3262 where <sampler-channel> should listen to or "ALL" to listen on all 16
3263 MIDI channels.
3264
3265 Possible Answers:
3266
3267 "OK" -
3268
3269 on success
3270
3271 "WRN:<warning-code>:<warning-message>" -
3272
3273 if MIDI input channel was set, but there are noteworthy
3274 issue(s) related, providing an appropriate warning code and
3275 warning message
3276
3277 "ERR:<error-code>:<error-message>" -
3278
3279 in case it failed, providing an appropriate error code and
3280 error message
3281
3282 Examples:
3283
3284
3285
3286 6.4.21. Setting channel volume
3287
3288 The front-end can alter the volume of a sampler channel by sending
3289 the following command:
3290
3291 SET CHANNEL VOLUME <sampler-channel> <volume>
3292
3293 Where <volume> is an optionally dotted positive number (a value
3294 smaller than 1.0 means attenuation, whereas a value greater than 1.0
3295 means amplification) and <sampler-channel> defines the sampler
3296 channel where this volume factor should be set.
3297
3298 Possible Answers:
3299
3300
3301
3302
3303 Schoenebeck Expires May 5, 2010 [Page 59]
3304
3305 Internet-Draft LinuxSampler Control Protocol November 2009
3306
3307
3308 "OK" -
3309
3310 on success
3311
3312 "WRN:<warning-code>:<warning-message>" -
3313
3314 if channel volume was set, but there are noteworthy issue(s)
3315 related, providing an appropriate warning code and warning
3316 message
3317
3318 "ERR:<error-code>:<error-message>" -
3319
3320 in case it failed, providing an appropriate error code and
3321 error message
3322
3323 Examples:
3324
3325
3326
3327 6.4.22. Muting a sampler channel
3328
3329 The front-end can mute/unmute a specific sampler channel by sending
3330 the following command:
3331
3332 SET CHANNEL MUTE <sampler-channel> <mute>
3333
3334 Where <sampler-channel> is the respective sampler channel number as
3335 returned by the "ADD CHANNEL" (Section 6.4.5) or "LIST CHANNELS"
3336 (Section 6.4.4) command and <mute> should be replaced either by "1"
3337 to mute the channel or "0" to unmute the channel.
3338
3339 Possible Answers:
3340
3341 "OK" -
3342
3343 on success
3344
3345 "WRN:<warning-code>:<warning-message>" -
3346
3347 if the channel was muted/unmuted, but there are noteworthy
3348 issue(s) related, providing an appropriate warning code and
3349 warning message
3350
3351 "ERR:<error-code>:<error-message>" -
3352
3353 in case it failed, providing an appropriate error code and
3354 error message
3355
3356
3357
3358
3359 Schoenebeck Expires May 5, 2010 [Page 60]
3360
3361 Internet-Draft LinuxSampler Control Protocol November 2009
3362
3363
3364 Examples:
3365
3366
3367
3368 6.4.23. Soloing a sampler channel
3369
3370 The front-end can solo/unsolo a specific sampler channel by sending
3371 the following command:
3372
3373 SET CHANNEL SOLO <sampler-channel> <solo>
3374
3375 Where <sampler-channel> is the respective sampler channel number as
3376 returned by the "ADD CHANNEL" (Section 6.4.5) or "LIST CHANNELS"
3377 (Section 6.4.4) command and <solo> should be replaced either by "1"
3378 to solo the channel or "0" to unsolo the channel.
3379
3380 Possible Answers:
3381
3382 "OK" -
3383
3384 on success
3385
3386 "WRN:<warning-code>:<warning-message>" -
3387
3388 if the channel was soloed/unsoloed, but there are noteworthy
3389 issue(s) related, providing an appropriate warning code and
3390 warning message
3391
3392 "ERR:<error-code>:<error-message>" -
3393
3394 in case it failed, providing an appropriate error code and
3395 error message
3396
3397 Examples:
3398
3399
3400
3401 6.4.24. Assigning a MIDI instrument map to a sampler channel
3402
3403 The front-end can assign a MIDI instrument map to a specific sampler
3404 channel by sending the following command:
3405
3406 SET CHANNEL MIDI_INSTRUMENT_MAP <sampler-channel> <map>
3407
3408 Where <sampler-channel> is the respective sampler channel number as
3409 returned by the "ADD CHANNEL" (Section 6.4.5) or "LIST CHANNELS"
3410 (Section 6.4.4) command and <map> can have the following
3411 possibilites:
3412
3413
3414
3415 Schoenebeck Expires May 5, 2010 [Page 61]
3416
3417 Internet-Draft LinuxSampler Control Protocol November 2009
3418
3419
3420 "NONE" -
3421
3422 This is the default setting. In this case the sampler channel
3423 is not assigned any MIDI instrument map and thus will ignore
3424 all MIDI program change messages.
3425
3426 "DEFAULT" -
3427
3428 The sampler channel will always use the default MIDI instrument
3429 map to handle MIDI program change messages.
3430
3431 numeric ID -
3432
3433 You can assign a specific MIDI instrument map by replacing
3434 <map> with the respective numeric ID of the MIDI instrument map
3435 as returned by the "LIST MIDI_INSTRUMENT_MAPS" (Section 6.7.4)
3436 command. Once that map will be deleted, the sampler channel
3437 would fall back to "NONE".
3438
3439 Read chapter "MIDI Instrument Mapping" (Section 6.7) for details
3440 regarding MIDI instrument mapping.
3441
3442 Possible Answers:
3443
3444 "OK" -
3445
3446 on success
3447
3448 "ERR:<error-code>:<error-message>" -
3449
3450 in case it failed, providing an appropriate error code and
3451 error message
3452
3453 Examples:
3454
3455
3456
3457 6.4.25. Adding an effect send to a sampler channel
3458
3459 The front-end can create an additional effect send on a specific
3460 sampler channel by sending the following command:
3461
3462 CREATE FX_SEND <sampler-channel> <midi-ctrl> [<name>]
3463
3464 Where <sampler-channel> is the respective sampler channel number as
3465 returned by the "ADD CHANNEL" (Section 6.4.5) or "LIST CHANNELS"
3466 (Section 6.4.4) command, that is the sampler channel on which the
3467 effect send should be created on, <midi-ctrl> is a number between
3468
3469
3470
3471 Schoenebeck Expires May 5, 2010 [Page 62]
3472
3473 Internet-Draft LinuxSampler Control Protocol November 2009
3474
3475
3476 0..127 defining the MIDI controller which can alter the effect send
3477 level and <name> is an optional argument defining a name for the
3478 effect send entity. The name does not have to be unique, but MUST be
3479 encapsulated into apostrophes and supports escape sequences as
3480 described in chapter "Character Set and Escape Sequences
3481 (Section 7.1)".
3482
3483 By default, that is as initial routing, the effect send's audio
3484 channels are automatically routed to the last audio channels of the
3485 sampler channel's audio output device, that way you can i.e. first
3486 increase the amount of audio channels on the audio output device for
3487 having dedicated effect send output channels and when "CREATE
3488 FX_SEND" is called, those channels will automatically be picked. You
3489 can alter the destination channels however with "SET FX_SEND
3490 AUDIO_OUTPUT_CHANNEL" (Section 6.4.31).
3491
3492 Note: Create effect sends on a sampler channel only when needed,
3493 because having effect sends on a sampler channel will decrease
3494 runtime performance, because for implementing channel effect sends,
3495 separate (sampler channel local) audio buffers are needed to render
3496 and mix the voices and route the audio signal afterwards to the
3497 master outputs and effect send outputs (along with their respective
3498 effect send levels). A sampler channel without effect sends however
3499 can mix its voices directly into the audio output devices's audio
3500 buffers and is thus faster.
3501
3502 Possible Answers:
3503
3504 "OK[<fx-send-id>]" -
3505
3506 in case a new effect send could be added to the sampler
3507 channel, where <fx-send-id> reflects the unique ID of the newly
3508 created effect send entity
3509
3510 "ERR:<error-code>:<error-message>" -
3511
3512 when a new effect send could not be added, i.e. due to invalid
3513 parameters
3514
3515 Examples:
3516
3517 C: "CREATE FX_SEND 0 91 'Reverb Send'"
3518
3519 S: "OK[0]"
3520
3521 C: "CREATE FX_SEND 0 93"
3522
3523
3524
3525
3526
3527 Schoenebeck Expires May 5, 2010 [Page 63]
3528
3529 Internet-Draft LinuxSampler Control Protocol November 2009
3530
3531
3532 S: "OK[1]"
3533
3534 6.4.26. Removing an effect send from a sampler channel
3535
3536 The front-end can remove an existing effect send on a specific
3537 sampler channel by sending the following command:
3538
3539 DESTROY FX_SEND <sampler-channel> <fx-send-id>
3540
3541 Where <sampler-channel> is the respective sampler channel number as
3542 returned by the "ADD CHANNEL" (Section 6.4.5) or "LIST CHANNELS"
3543 (Section 6.4.4) command, that is the sampler channel from which the
3544 effect send should be removed from and <fx-send-id> is the respective
3545 effect send number as returned by the "CREATE FX_SEND"
3546 (Section 6.4.25) or "LIST FX_SENDS" (Section 6.4.28) command.
3547
3548 Possible Answers:
3549
3550 "OK" -
3551
3552 on success
3553
3554 "ERR:<error-code>:<error-message>" -
3555
3556 in case it failed, providing an appropriate error code and
3557 error message
3558
3559 Example:
3560
3561 C: "DESTROY FX_SEND 0 0"
3562
3563 S: "OK"
3564
3565 6.4.27. Getting amount of effect sends on a sampler channel
3566
3567 The front-end can ask for the amount of effect sends on a specific
3568 sampler channel by sending the following command:
3569
3570 GET FX_SENDS <sampler-channel>
3571
3572 Where <sampler-channel> is the respective sampler channel number as
3573 returned by the "ADD CHANNEL" (Section 6.4.5) or "LIST CHANNELS"
3574 (Section 6.4.4) command.
3575
3576 Possible Answers:
3577
3578
3579
3580
3581
3582
3583 Schoenebeck Expires May 5, 2010 [Page 64]
3584
3585 Internet-Draft LinuxSampler Control Protocol November 2009
3586
3587
3588 The sampler will answer by returning the number of effect sends on
3589 the given sampler channel.
3590
3591 Example:
3592
3593 C: "GET FX_SENDS 0"
3594
3595 S: "2"
3596
3597 6.4.28. Listing all effect sends on a sampler channel
3598
3599 The front-end can ask for a list of effect sends on a specific
3600 sampler channel by sending the following command:
3601
3602 LIST FX_SENDS <sampler-channel>
3603
3604 Where <sampler-channel> is the respective sampler channel number as
3605 returned by the "ADD CHANNEL" (Section 6.4.5) or "LIST CHANNELS"
3606 (Section 6.4.4) command.
3607
3608 Possible Answers:
3609
3610 The sampler will answer by returning a comma separated list with
3611 all effect sends' numerical IDs on the given sampler channel.
3612
3613 Examples:
3614
3615 C: "LIST FX_SENDS 0"
3616
3617 S: "0,1"
3618
3619 C: "LIST FX_SENDS 1"
3620
3621 S: ""
3622
3623 6.4.29. Getting effect send information
3624
3625 The front-end can ask for the current settings of an effect send
3626 entity by sending the following command:
3627
3628 GET FX_SEND INFO <sampler-channel> <fx-send-id>
3629
3630 Where <sampler-channel> is the sampler channel number as returned by
3631 the "ADD CHANNEL" (Section 6.4.5) or "LIST CHANNELS" (Section 6.4.4)
3632 command and <fx-send-id> reflects the numerical ID of the effect send
3633 entity as returned by the "CREATE FX_SEND" (Section 6.4.25) or "LIST
3634 FX_SENDS" (Section 6.4.28) command.
3635
3636
3637
3638
3639 Schoenebeck Expires May 5, 2010 [Page 65]
3640
3641 Internet-Draft LinuxSampler Control Protocol November 2009
3642
3643
3644 Possible Answers:
3645
3646 The sampler will answer by sending a <CRLF> separated list. Each
3647 answer line begins with the settings category name followed by a
3648 colon and then a space character <SP> and finally the info
3649 character string to that setting category. At the moment the
3650 following categories are defined:
3651
3652
3653
3654 NAME -
3655
3656 name of the effect send entity (note that this character
3657 string may contain escape sequences (Section 7.1))
3658
3659 MIDI_CONTROLLER -
3660
3661 a value between 0 and 127 reflecting the MIDI controller
3662 which is able to modify the effect send's send level
3663
3664 LEVEL -
3665
3666 optionally dotted number reflecting the effect send's
3667 current send level (where a value < 1.0 means attenuation
3668 and a value > 1.0 means amplification)
3669
3670 AUDIO_OUTPUT_ROUTING -
3671
3672 comma separated list which reflects to which audio channel
3673 of the selected audio output device each effect send output
3674 channel is routed to, e.g. "0,3" would mean the effect
3675 send's output channel 0 is routed to channel 0 of the audio
3676 output device and the effect send's output channel 1 is
3677 routed to the channel 3 of the audio output device (see "SET
3678 FX_SEND AUDIO_OUTPUT_CHANNEL" (Section 6.4.31) for details)
3679
3680 The mentioned fields above don't have to be in particular order.
3681
3682 Example:
3683
3684 C: "GET FX_SEND INFO 0 0"
3685
3686 S: "NAME: Reverb Send"
3687
3688 "MIDI_CONTROLLER: 91"
3689
3690 "LEVEL: 0.3"
3691
3692
3693
3694
3695 Schoenebeck Expires May 5, 2010 [Page 66]
3696
3697 Internet-Draft LinuxSampler Control Protocol November 2009
3698
3699
3700 "AUDIO_OUTPUT_ROUTING: 2,3"
3701
3702 "."
3703
3704 6.4.30. Changing effect send's name
3705
3706 The front-end can alter the current name of an effect send entity by
3707 sending the following command:
3708
3709 SET FX_SEND NAME <sampler-chan> <fx-send-id> <name>
3710
3711 Where <sampler-chan> is the sampler channel number as returned by the
3712 "ADD CHANNEL" (Section 6.4.5) or "LIST CHANNELS" (Section 6.4.4)
3713 command, <fx-send-id> reflects the numerical ID of the effect send
3714 entity as returned by the "CREATE FX_SEND" (Section 6.4.25) or "LIST
3715 FX_SENDS" (Section 6.4.28) command and <name> is the new name of the
3716 effect send entity, which does not have to be unique (name MUST be
3717 encapsulated into apostrophes and supports escape sequences as
3718 described in chapter "Character Set and Escape Sequences
3719 (Section 7.1)").
3720
3721 Possible Answers:
3722
3723 "OK" -
3724
3725 on success
3726
3727 "ERR:<error-code>:<error-message>" -
3728
3729 in case it failed, providing an appropriate error code and
3730 error message
3731
3732 Example:
3733
3734 C: "SET FX_SEND NAME 0 0 'Fx Send 1'"
3735
3736 S: "OK"
3737
3738 6.4.31. Altering effect send's audio routing
3739
3740 The front-end can alter the destination of an effect send's audio
3741 channel on a specific sampler channel by sending the following
3742 command:
3743
3744 SET FX_SEND AUDIO_OUTPUT_CHANNEL <sampler-chan> <fx-send-id>
3745 <audio-src> <audio-dst>
3746
3747 Where <sampler-chan> is the sampler channel number as returned by the
3748
3749
3750
3751 Schoenebeck Expires May 5, 2010 [Page 67]
3752
3753 Internet-Draft LinuxSampler Control Protocol November 2009
3754
3755
3756 "ADD CHANNEL" (Section 6.4.5) or "LIST CHANNELS" (Section 6.4.4)
3757 command, <fx-send-id> reflects the numerical ID of the effect send
3758 entity as returned by the "CREATE FX_SEND" (Section 6.4.25) or "LIST
3759 FX_SENDS" (Section 6.4.28) command, <audio-src> is the numerical ID
3760 of the effect send's audio channel which should be rerouted and
3761 <audio-dst> is the numerical ID of the audio channel of the selected
3762 audio output device where <audio-src> should be routed to.
3763
3764 Note that effect sends can only route audio to the same audio output
3765 device as assigned to the effect send's sampler channel. Also note
3766 that an effect send entity does always have exactly as much audio
3767 channels as its sampler channel. So if the sampler channel is
3768 stereo, the effect send does have two audio channels as well. Also
3769 keep in mind that the amount of audio channels on a sampler channel
3770 might be dependant not only to the deployed sampler engine on the
3771 sampler channel, but also dependant to the instrument currently
3772 loaded. However you can (effectively) turn an i.e. stereo effect
3773 send into a mono one by simply altering its audio routing
3774 appropriately.
3775
3776 Possible Answers:
3777
3778 "OK" -
3779
3780 on success
3781
3782 "WRN:<warning-code>:<warning-message>" -
3783
3784 if audio output channel was set, but there are noteworthy
3785 issue(s) related, providing an appropriate warning code and
3786 warning message
3787
3788 "ERR:<error-code>:<error-message>" -
3789
3790 in case it failed, providing an appropriate error code and
3791 error message
3792
3793 Example:
3794
3795 C: "SET FX_SEND AUDIO_OUTPUT_CHANNEL 0 0 0 2"
3796
3797 S: "OK"
3798
3799 6.4.32. Altering effect send's MIDI controller
3800
3801 The front-end can alter the MIDI controller of an effect send entity
3802 by sending the following command:
3803
3804
3805
3806
3807 Schoenebeck Expires May 5, 2010 [Page 68]
3808
3809 Internet-Draft LinuxSampler Control Protocol November 2009
3810
3811
3812 SET FX_SEND MIDI_CONTROLLER <sampler-chan> <fx-send-id> <midi-
3813 ctrl>
3814
3815 Where <sampler-chan> is the sampler channel number as returned by the
3816 "ADD CHANNEL" (Section 6.4.5) or "LIST CHANNELS" (Section 6.4.4)
3817 command, <fx-send-id> reflects the numerical ID of the effect send
3818 entity as returned by the "CREATE FX_SEND" (Section 6.4.25) or "LIST
3819 FX_SENDS" (Section 6.4.28) command and <midi-ctrl> reflects the MIDI
3820 controller which shall be able to modify the effect send's send
3821 level.
3822
3823 Possible Answers:
3824
3825 "OK" -
3826
3827 on success
3828
3829 "WRN:<warning-code>:<warning-message>" -
3830
3831 if MIDI controller was set, but there are noteworthy issue(s)
3832 related, providing an appropriate warning code and warning
3833 message
3834
3835 "ERR:<error-code>:<error-message>" -
3836
3837 in case it failed, providing an appropriate error code and
3838 error message
3839
3840 Example:
3841
3842 C: "SET FX_SEND MIDI_CONTROLLER 0 0 91"
3843
3844 S: "OK"
3845
3846 6.4.33. Altering effect send's send level
3847
3848 The front-end can alter the current send level of an effect send
3849 entity by sending the following command:
3850
3851 SET FX_SEND LEVEL <sampler-chan> <fx-send-id> <volume>
3852
3853 Where <sampler-chan> is the sampler channel number as returned by the
3854 "ADD CHANNEL" (Section 6.4.5) or "LIST CHANNELS" (Section 6.4.4)
3855 command, <fx-send-id> reflects the numerical ID of the effect send
3856 entity as returned by the "CREATE FX_SEND" (Section 6.4.25) or "LIST
3857 FX_SENDS" (Section 6.4.28) command and <volume> is an optionally
3858 dotted positive number (a value smaller than 1.0 means attenuation,
3859 whereas a value greater than 1.0 means amplification) reflecting the
3860
3861
3862
3863 Schoenebeck Expires May 5, 2010 [Page 69]
3864
3865 Internet-Draft LinuxSampler Control Protocol November 2009
3866
3867
3868 new send level.
3869
3870 Possible Answers:
3871
3872 "OK" -
3873
3874 on success
3875
3876 "WRN:<warning-code>:<warning-message>" -
3877
3878 if new send level was set, but there are noteworthy issue(s)
3879 related, providing an appropriate warning code and warning
3880 message
3881
3882 "ERR:<error-code>:<error-message>" -
3883
3884 in case it failed, providing an appropriate error code and
3885 error message
3886
3887 Example:
3888
3889 C: "SET FX_SEND LEVEL 0 0 0.15"
3890
3891 S: "OK"
3892
3893 6.4.34. Sending MIDI messages to sampler channel
3894
3895 The front-end can send MIDI events to a specific sampler channel by
3896 sending the following command:
3897
3898 SEND CHANNEL MIDI_DATA <midi-msg> <sampler-chan> <arg1> <arg2>
3899
3900 Where <sampler-chan> is the sampler channel number as returned by the
3901 "ADD CHANNEL" (Section 6.4.5) or "LIST CHANNELS" (Section 6.4.4)
3902 command, <arg1> and <arg2> arguments depend on the <midi-msg>
3903 argument, which specifies the MIDI message type. Currently, the
3904 following MIDI messages are supported:
3905
3906 "NOTE_ON" -
3907
3908 For turning on MIDI notes, where <arg1> specifies the key
3909 number and <arg2> the velocity as described in the MIDI
3910 specification.
3911
3912 "NOTE_OFF" -
3913
3914 For turning a currently playing MIDI note off, where <arg1>
3915 specifies the key number and <arg2> the velocity as described
3916
3917
3918
3919 Schoenebeck Expires May 5, 2010 [Page 70]
3920
3921 Internet-Draft LinuxSampler Control Protocol November 2009
3922
3923
3924 in the MIDI specification.
3925
3926 "CC" -
3927
3928 For changing a MIDI controller, where <arg1> specifies the
3929 controller number and <arg2> the new value of the controller as
3930 described in the Control Change section of the MIDI
3931 specification.
3932
3933 CAUTION: This command is provided for implementations of virtual MIDI
3934 keyboards and no realtime guarantee whatsoever will be made!
3935
3936 Possible Answers:
3937
3938 "OK" -
3939
3940 on success
3941
3942 "ERR:<error-code>:<error-message>" -
3943
3944 in case it failed, providing an appropriate error code and
3945 error message
3946
3947 Example:
3948
3949 C: "SEND CHANNEL MIDI_DATA NOTE_ON 0 56 112"
3950
3951 S: "OK"
3952
3953 6.4.35. Resetting a sampler channel
3954
3955 The front-end can reset a particular sampler channel by sending the
3956 following command:
3957
3958 RESET CHANNEL <sampler-channel>
3959
3960 Where <sampler-channel> defines the sampler channel to be reset.
3961 This will cause the engine on that sampler channel, its voices and
3962 eventually disk streams and all control and status variables to be
3963 reset.
3964
3965 Possible Answers:
3966
3967 "OK" -
3968
3969 on success
3970
3971
3972
3973
3974
3975 Schoenebeck Expires May 5, 2010 [Page 71]
3976
3977 Internet-Draft LinuxSampler Control Protocol November 2009
3978
3979
3980 "WRN:<warning-code>:<warning-message>" -
3981
3982 if channel was reset, but there are noteworthy issue(s)
3983 related, providing an appropriate warning code and warning
3984 message
3985
3986 "ERR:<error-code>:<error-message>" -
3987
3988 in case it failed, providing an appropriate error code and
3989 error message
3990
3991 Examples:
3992
3993
3994
3995 6.5. Controlling connection
3996
3997 The following commands are used to control the connection to
3998 LinuxSampler.
3999
4000 6.5.1. Register front-end for receiving event messages
4001
4002 The front-end can register itself to the LinuxSampler application to
4003 be informed about noteworthy events by sending this command:
4004
4005 SUBSCRIBE <event-id>
4006
4007 where <event-id> will be replaced by the respective event that client
4008 wants to subscribe to.
4009
4010 Possible Answers:
4011
4012 "OK" -
4013
4014 on success
4015
4016 "WRN:<warning-code>:<warning-message>" -
4017
4018 if registration succeeded, but there are noteworthy issue(s)
4019 related, providing an appropriate warning code and warning
4020 message
4021
4022 "ERR:<error-code>:<error-message>" -
4023
4024 in case it failed, providing an appropriate error code and
4025 error message
4026
4027 Examples:
4028
4029
4030
4031 Schoenebeck Expires May 5, 2010 [Page 72]
4032
4033 Internet-Draft LinuxSampler Control Protocol November 2009
4034
4035
4036
4037
4038 6.5.2. Unregister front-end for not receiving event messages
4039
4040 The front-end can unregister itself if it doesn't want to receive
4041 event messages anymore by sending the following command:
4042
4043 UNSUBSCRIBE <event-id>
4044
4045 Where <event-id> will be replaced by the respective event that client
4046 doesn't want to receive anymore.
4047
4048 Possible Answers:
4049
4050 "OK" -
4051
4052 on success
4053
4054 "WRN:<warning-code>:<warning-message>" -
4055
4056 if unregistration succeeded, but there are noteworthy issue(s)
4057 related, providing an appropriate warning code and warning
4058 message
4059
4060 "ERR:<error-code>:<error-message>" -
4061
4062 in case it failed, providing an appropriate error code and
4063 error message
4064
4065 Examples:
4066
4067
4068
4069 6.5.3. Enable or disable echo of commands
4070
4071 To enable or disable back sending of commands to the client the
4072 following command can be used:
4073
4074 SET ECHO <value>
4075
4076 Where <value> should be replaced either by "1" to enable echo mode or
4077 "0" to disable echo mode. When echo mode is enabled, all commands
4078 send to LinuxSampler will be immediately send back and after this
4079 echo the actual response to the command will be returned. Echo mode
4080 will only be altered for the client connection that issued the "SET
4081 ECHO" command, not globally for all client connections.
4082
4083 Possible Answers:
4084
4085
4086
4087 Schoenebeck Expires May 5, 2010 [Page 73]
4088
4089 Internet-Draft LinuxSampler Control Protocol November 2009
4090
4091
4092 "OK" -
4093
4094 usually
4095
4096 "ERR:<error-code>:<error-message>" -
4097
4098 on syntax error, e.g. non boolean value
4099
4100 Examples:
4101
4102
4103
4104 6.5.4. Close client connection
4105
4106 The client can close its network connection to LinuxSampler by
4107 sending the following command:
4108
4109 QUIT
4110
4111 This is probably more interesting for manual telnet connections to
4112 LinuxSampler than really useful for a front-end implementation.
4113
4114 6.6. Global commands
4115
4116 The following commands have global impact on the sampler.
4117
4118 6.6.1. Current number of active voices
4119
4120 The front-end can ask for the current number of active voices on the
4121 sampler by sending the following command:
4122
4123 GET TOTAL_VOICE_COUNT
4124
4125 Possible Answers:
4126
4127 LinuxSampler will answer by returning the number of all active
4128 voices on the sampler.
4129
4130 6.6.2. Maximum amount of active voices
4131
4132 The front-end can ask for the maximum number of active voices by
4133 sending the following command:
4134
4135 GET TOTAL_VOICE_COUNT_MAX
4136
4137 Possible Answers:
4138
4139
4140
4141
4142
4143 Schoenebeck Expires May 5, 2010 [Page 74]
4144
4145 Internet-Draft LinuxSampler Control Protocol November 2009
4146
4147
4148 LinuxSampler will answer by returning the maximum number of active
4149 voices.
4150
4151 6.6.3. Current number of active disk streams
4152
4153 The front-end can ask for the current number of active disk streams
4154 on the sampler by sending the following command:
4155
4156 GET TOTAL_STREAM_COUNT
4157
4158 Possible Answers:
4159
4160 LinuxSampler will answer by returning the number of all active
4161 disk streams on the sampler.
4162
4163 6.6.4. Reset sampler
4164
4165 The front-end can reset the whole sampler by sending the following
4166 command:
4167
4168 RESET
4169
4170 Possible Answers:
4171
4172 "OK" -
4173
4174 always
4175
4176 Examples:
4177
4178
4179
4180 6.6.5. General sampler informations
4181
4182 The client can ask for general informations about the LinuxSampler
4183 instance by sending the following command:
4184
4185 GET SERVER INFO
4186
4187 Possible Answers:
4188
4189 LinuxSampler will answer by sending a <CRLF> separated list. Each
4190 answer line begins with the information category name followed by
4191 a colon and then a space character <SP> and finally the info
4192 character string to that information category. At the moment the
4193 following categories are defined:
4194
4195
4196
4197
4198
4199 Schoenebeck Expires May 5, 2010 [Page 75]
4200
4201 Internet-Draft LinuxSampler Control Protocol November 2009
4202
4203
4204
4205
4206 DESCRIPTION -
4207
4208 arbitrary textual description about the sampler (note that
4209 the character string may contain escape sequences
4210 (Section 7.1))
4211
4212 VERSION -
4213
4214 version of the sampler
4215
4216 PROTOCOL_VERSION -
4217
4218 version of the LSCP specification the sampler complies with
4219 (see Section 2 for details)
4220
4221 INSTRUMENTS_DB_SUPPORT -
4222
4223 either yes or no, specifies whether the sampler is build
4224 with instruments database support.
4225
4226 The mentioned fields above don't have to be in particular order.
4227 Other fields might be added in future.
4228
4229 6.6.6. Getting global volume attenuation
4230
4231 The client can ask for the current global sampler-wide volume
4232 attenuation by sending the following command:
4233
4234 GET VOLUME
4235
4236 Possible Answers:
4237
4238 The sampler will always answer by returning the optional dotted
4239 floating point coefficient, reflecting the current global volume
4240 attenuation.
4241
4242 Note: it is up to the respective sampler engine whether to obey that
4243 global volume parameter or not, but in general all engines SHOULD use
4244 this parameter.
4245
4246 6.6.7. Setting global volume attenuation
4247
4248 The client can alter the current global sampler-wide volume
4249 attenuation by sending the following command:
4250
4251
4252
4253
4254
4255 Schoenebeck Expires May 5, 2010 [Page 76]
4256
4257 Internet-Draft LinuxSampler Control Protocol November 2009
4258
4259
4260 SET VOLUME <volume>
4261
4262 Where <volume> should be replaced by the optional dotted floating
4263 point value, reflecting the new global volume parameter. This value
4264 might usually be in the range between 0.0 and 1.0, that is for
4265 attenuating the overall volume.
4266
4267 Possible Answers:
4268
4269 "OK" -
4270
4271 on success
4272
4273 "WRN:<warning-code>:<warning-message>" -
4274
4275 if the global volume was set, but there are noteworthy issue(s)
4276 related, providing an appropriate warning code and warning
4277 message
4278
4279 "ERR:<error-code>:<error-message>" -
4280
4281 in case it failed, providing an appropriate error code and
4282 error message
4283
4284 6.6.8. Getting global voice limit
4285
4286 The client can ask for the current global sampler-wide limit for
4287 maximum voices by sending the following command:
4288
4289 GET VOICES
4290
4291 Possible Answers:
4292
4293 LinuxSampler will answer by returning the number for the current
4294 limit of maximum voices.
4295
4296 The voice limit setting defines how many voices should maximum be
4297 processed by the sampler at the same time. If the user triggers new
4298 notes which would exceed that voice limit, the sampler engine will
4299 react by stealing old voices for those newly triggered notes. Note
4300 that the amount of voices triggered by a new note can be larger than
4301 one and is dependent to the respective instrument and probably
4302 further criterias.
4303
4304 6.6.9. Setting global voice limit
4305
4306 The client can alter the current global sampler-wide limit for
4307 maximum voices by sending the following command:
4308
4309
4310
4311 Schoenebeck Expires May 5, 2010 [Page 77]
4312
4313 Internet-Draft LinuxSampler Control Protocol November 2009
4314
4315
4316 SET VOICES <max-voices>
4317
4318 Where <max-voices> should be replaced by the integer value,
4319 reflecting the new global amount limit of maximum voices. This value
4320 has to be larger than 0.
4321
4322 Possible Answers:
4323
4324 "OK" -
4325
4326 on success
4327
4328 "WRN:<warning-code>:<warning-message>" -
4329
4330 if the voice limit was set, but there are noteworthy issue(s)
4331 related, providing an appropriate warning code and warning
4332 message
4333
4334 "ERR:<error-code>:<error-message>" -
4335
4336 in case it failed, providing an appropriate error code and
4337 error message
4338
4339 Note: the given value will be passed to all sampler engine instances.
4340 The total amount of maximum voices on the running system might thus
4341 be as big as the given value multiplied by the current amount of
4342 engine instances.
4343
4344 Caution: when adjusting the voice limit, you SHOULD also adjust the
4345 disk stream limit respectively and vice versa.
4346
4347 6.6.10. Getting global disk stream limit
4348
4349 The client can ask for the current global sampler-wide limit for
4350 maximum disk streams by sending the following command:
4351
4352 GET STREAMS
4353
4354 Possible Answers:
4355
4356 LinuxSampler will answer by returning the number for the current
4357 limit of maximum disk streams.
4358
4359 The disk stream limit setting defines how many disk streams should
4360 maximum be processed by a sampler engine at the same time. The
4361 higher this value, the more memory (RAM) will be occupied, since
4362 every disk streams allocates a certain buffer size for being able to
4363 perform its streaming operations.
4364
4365
4366
4367 Schoenebeck Expires May 5, 2010 [Page 78]
4368
4369 Internet-Draft LinuxSampler Control Protocol November 2009
4370
4371
4372 6.6.11. Setting global disk stream limit
4373
4374 The client can alter the current global sampler-wide limit for
4375 maximum disk streams by sending the following command:
4376
4377 SET STREAMS <max-streams>
4378
4379 Where <max-streams> should be replaced by the integer value,
4380 reflecting the new global amount limit of maximum disk streams. This
4381 value has to be positive.
4382
4383 Possible Answers:
4384
4385 "OK" -
4386
4387 on success
4388
4389 "WRN:<warning-code>:<warning-message>" -
4390
4391 if the disk stream limit was set, but there are noteworthy
4392 issue(s) related, providing an appropriate warning code and
4393 warning message
4394
4395 "ERR:<error-code>:<error-message>" -
4396
4397 in case it failed, providing an appropriate error code and
4398 error message
4399
4400 Note: the given value will be passed to all sampler engine instances.
4401 The total amount of maximum disk streams on the running system might
4402 thus be as big as the given value multiplied by the current amount of
4403 engine instances.
4404
4405 Caution: when adjusting the disk stream limit, you SHOULD also adjust
4406 the voice limit respectively and vice versa.
4407
4408 6.7. MIDI Instrument Mapping
4409
4410 The MIDI protocol provides a way to switch between instruments by
4411 sending so called MIDI bank select and MIDI program change messages
4412 which are essentially just numbers. The following commands allow to
4413 actually map arbitrary MIDI bank select / program change numbers with
4414 real instruments.
4415
4416 The sampler allows to manage an arbitrary amount of MIDI instrument
4417 maps which define which instrument to load on which MIDI program
4418 change message.
4419
4420
4421
4422
4423 Schoenebeck Expires May 5, 2010 [Page 79]
4424
4425 Internet-Draft LinuxSampler Control Protocol November 2009
4426
4427
4428 By default, that is when the sampler is launched, there is no map,
4429 thus the sampler will simply ignore all program change messages. The
4430 front-end has to explicitly create at least one map, add entries to
4431 the map and tell the respective sampler channel(s) which MIDI
4432 instrument map to use, so the sampler knows how to react on a given
4433 program change message on the respective sampler channel, that is by
4434 switching to the respectively defined engine type and loading the
4435 respective instrument. See command "SET CHANNEL MIDI_INSTRUMENT_MAP"
4436 (Section 6.4.24) for how to assign a MIDI instrument map to a sampler
4437 channel.
4438
4439 Also note per MIDI specification a bank select message does not cause
4440 to switch to another instrument. Instead when receiving a bank
4441 select message the bank value will be stored and a subsequent program
4442 change message (which may occur at any time) will finally cause the
4443 sampler to switch to the respective instrument as reflected by the
4444 current MIDI instrument map.
4445
4446 6.7.1. Create a new MIDI instrument map
4447
4448 The front-end can add a new MIDI instrument map by sending the
4449 following command:
4450
4451 ADD MIDI_INSTRUMENT_MAP [<name>]
4452
4453 Where <name> is an optional argument allowing to assign a custom name
4454 to the new map. MIDI instrument Map names do not have to be unique,
4455 but MUST be encapsulated into apostrophes and support escape
4456 sequences as described in chapter "Character Set and Escape Sequences
4457 (Section 7.1)".
4458
4459 Possible Answers:
4460
4461 "OK[<map>]" -
4462
4463 in case a new MIDI instrument map could be added, where <map>
4464 reflects the unique ID of the newly created MIDI instrument map
4465
4466 "ERR:<error-code>:<error-message>" -
4467
4468 when a new map could not be created, which might never occur in
4469 practice
4470
4471 Examples:
4472
4473 C: "ADD MIDI_INSTRUMENT_MAP 'Standard Map'"
4474
4475
4476
4477
4478
4479 Schoenebeck Expires May 5, 2010 [Page 80]
4480
4481 Internet-Draft LinuxSampler Control Protocol November 2009
4482
4483
4484 S: "OK[0]"
4485
4486 C: "ADD MIDI_INSTRUMENT_MAP 'Standard Drumkit'"
4487
4488 S: "OK[1]"
4489
4490 C: "ADD MIDI_INSTRUMENT_MAP"
4491
4492 S: "OK[5]"
4493
4494 6.7.2. Delete one particular or all MIDI instrument maps
4495
4496 The front-end can delete a particular MIDI instrument map by sending
4497 the following command:
4498
4499 REMOVE MIDI_INSTRUMENT_MAP <map>
4500
4501 Where <map> reflects the unique ID of the map to delete as returned
4502 by the "LIST MIDI_INSTRUMENT_MAPS" (Section 6.7.4) command.
4503
4504 The front-end can delete all MIDI instrument maps by sending the
4505 following command:
4506
4507 REMOVE MIDI_INSTRUMENT_MAP ALL
4508
4509 Possible Answers:
4510
4511 "OK" -
4512
4513 in case the map(s) could be deleted
4514
4515 "ERR:<error-code>:<error-message>" -
4516
4517 when the given map does not exist
4518
4519 Examples:
4520
4521 C: "REMOVE MIDI_INSTRUMENT_MAP 0"
4522
4523 S: "OK"
4524
4525 C: "REMOVE MIDI_INSTRUMENT_MAP ALL"
4526
4527 S: "OK"
4528
4529
4530
4531
4532
4533
4534
4535 Schoenebeck Expires May 5, 2010 [Page 81]
4536
4537 Internet-Draft LinuxSampler Control Protocol November 2009
4538
4539
4540 6.7.3. Get amount of existing MIDI instrument maps
4541
4542 The front-end can retrieve the current amount of MIDI instrument maps
4543 by sending the following command:
4544
4545 GET MIDI_INSTRUMENT_MAPS
4546
4547 Possible Answers:
4548
4549 The sampler will answer by returning the current number of MIDI
4550 instrument maps.
4551
4552 Example:
4553
4554 C: "GET MIDI_INSTRUMENT_MAPS"
4555
4556 S: "2"
4557
4558 6.7.4. Getting all created MIDI instrument maps
4559
4560 The number of MIDI instrument maps can change on runtime. To get the
4561 current list of MIDI instrument maps, the front-end can send the
4562 following command:
4563
4564 LIST MIDI_INSTRUMENT_MAPS
4565
4566 Possible Answers:
4567
4568 The sampler will answer by returning a comma separated list with
4569 all MIDI instrument maps' numerical IDs.
4570
4571 Example:
4572
4573 C: "LIST MIDI_INSTRUMENT_MAPS"
4574
4575 S: "0,1,5,12"
4576
4577 6.7.5. Getting MIDI instrument map information
4578
4579 The front-end can ask for the current settings of a MIDI instrument
4580 map by sending the following command:
4581
4582 GET MIDI_INSTRUMENT_MAP INFO <map>
4583
4584 Where <map> is the numerical ID of the map the front-end is
4585 interested in as returned by the "LIST MIDI_INSTRUMENT_MAPS"
4586 (Section 6.7.4) command.
4587
4588
4589
4590
4591 Schoenebeck Expires May 5, 2010 [Page 82]
4592
4593 Internet-Draft LinuxSampler Control Protocol November 2009
4594
4595
4596 Possible Answers:
4597
4598 LinuxSampler will answer by sending a <CRLF> separated list. Each
4599 answer line begins with the settings category name followed by a
4600 colon and then a space character <SP> and finally the info
4601 character string to that setting category. At the moment the
4602 following categories are defined:
4603
4604
4605
4606 NAME -
4607
4608 custom name of the given map, which does not have to be
4609 unique (note that this character string may contain escape
4610 sequences (Section 7.1))
4611
4612 DEFAULT -
4613
4614 either true or false, defines whether this map is the
4615 default map
4616
4617 The mentioned fields above don't have to be in particular order.
4618
4619 Example:
4620
4621 C: "GET MIDI_INSTRUMENT_MAP INFO 0"
4622
4623 S: "NAME: Standard Map"
4624
4625 "DEFAULT: true"
4626
4627 "."
4628
4629 6.7.6. Renaming a MIDI instrument map
4630
4631 The front-end can alter the custom name of a MIDI instrument map by
4632 sending the following command:
4633
4634 SET MIDI_INSTRUMENT_MAP NAME <map> <name>
4635
4636 Where <map> is the numerical ID of the map and <name> the new custom
4637 name of the map, which does not have to be unique (name MUST be
4638 encapsulated into apostrophes and supports escape sequences as
4639 described in chapter "Character Set and Escape Sequences
4640 (Section 7.1)").
4641
4642 Possible Answers:
4643
4644
4645
4646
4647 Schoenebeck Expires May 5, 2010 [Page 83]
4648
4649 Internet-Draft LinuxSampler Control Protocol November 2009
4650
4651
4652 "OK" -
4653
4654 on success
4655
4656 "ERR:<error-code>:<error-message>" -
4657
4658 in case the given map does not exist
4659
4660 Example:
4661
4662 C: "SET MIDI_INSTRUMENT_MAP NAME 0 'Foo instruments'"
4663
4664 S: "OK"
4665
4666 6.7.7. Create or replace a MIDI instrument map entry
4667
4668 The front-end can create a new or replace an existing entry in a
4669 sampler's MIDI instrument map by sending the following command:
4670
4671 MAP MIDI_INSTRUMENT [NON_MODAL] <map> <midi_bank> <midi_prog>
4672 <engine_name> <filename> <instrument_index> <volume_value>
4673 [<instr_load_mode>] [<name>]
4674
4675 Where <map> is the numeric ID of the map to alter, <midi_bank> is an
4676 integer value between 0..16383 reflecting the MIDI bank select index,
4677 <midi_prog> an integer value between 0..127 reflecting the MIDI
4678 program change index, <engine_name> a sampler engine name as returned
4679 by the "LIST AVAILABLE_ENGINES" (Section 6.4.8) command (not
4680 encapsulated into apostrophes), <filename> the name of the
4681 instrument's file to be deployed (encapsulated into apostrophes,
4682 supporting escape sequences as described in chapter "Character Set
4683 and Escape Sequences (Section 7.1)"), <instrument_index> the index
4684 (integer value) of the instrument within the given file,
4685 <volume_value> reflects the master volume of the instrument as
4686 optionally dotted number (where a value < 1.0 means attenuation and a
4687 value > 1.0 means amplification). This parameter easily allows to
4688 adjust the volume of all intruments within a custom instrument map
4689 without having to adjust their instrument files. The OPTIONAL
4690 <instr_load_mode> argument defines the life time of the instrument,
4691 that is when the instrument should be loaded, when freed and has
4692 exactly the following possibilities:
4693
4694 "ON_DEMAND" -
4695
4696 The instrument will be loaded when needed, that is when
4697 demanded by at least one sampler channel. It will immediately
4698 be freed from memory when not needed by any sampler channel
4699 anymore.
4700
4701
4702
4703 Schoenebeck Expires May 5, 2010 [Page 84]
4704
4705 Internet-Draft LinuxSampler Control Protocol November 2009
4706
4707
4708 "ON_DEMAND_HOLD" -
4709
4710 The instrument will be loaded when needed, that is when
4711 demanded by at least one sampler channel. It will be kept in
4712 memory even when not needed by any sampler channel anymore.
4713 Instruments with this mode are only freed when the sampler is
4714 reset or all mapping entries with this mode (and respective
4715 instrument) are explicitly changed to "ON_DEMAND" and no
4716 sampler channel is using the instrument anymore.
4717
4718 "PERSISTENT" -
4719
4720 The instrument will immediately be loaded into memory when this
4721 mapping command is sent and the instrument is kept all the
4722 time. Instruments with this mode are only freed when the
4723 sampler is reset or all mapping entries with this mode (and
4724 respective instrument) are explicitly changed to "ON_DEMAND"
4725 and no sampler channel is using the instrument anymore.
4726
4727 not supplied -
4728
4729 In case there is no <instr_load_mode> argument given, it will
4730 be up to the InstrumentManager to decide which mode to use.
4731 Usually it will use "ON_DEMAND" if an entry for the given
4732 instrument does not exist in the InstrumentManager's list yet,
4733 otherwise if an entry already exists, it will simply stick with
4734 the mode currently reflected by the already existing entry,
4735 that is it will not change the mode.
4736
4737 The <instr_load_mode> argument thus allows to define an appropriate
4738 strategy (low memory consumption vs. fast instrument switching) for
4739 each instrument individually. Note, the following restrictions apply
4740 to this argument: "ON_DEMAND_HOLD" and "PERSISTENT" have to be
4741 supported by the respective sampler engine (which is technically the
4742 case when the engine provides an InstrumentManager for its format).
4743 If this is not the case the argument will automatically fall back to
4744 the default value "ON_DEMAND". Also the load mode of one instrument
4745 may automatically change the laod mode of other instrument(s), i.e.
4746 because the instruments are part of the same file and the engine does
4747 not allow a way to manage load modes for them individually. Due to
4748 this, in case the frontend shows the load modes of entries, the
4749 frontend should retrieve the actual mode by i.e. sending "GET
4750 MIDI_INSTRUMENT INFO" (Section 6.7.11) command(s). Finally the
4751 OPTIONAL <name> argument allows to set a custom name (encapsulated
4752 into apostrophes, supporting escape sequences as described in chapter
4753 "Character Set and Escape Sequences (Section 7.1)") for the mapping
4754 entry, useful for frontends for displaying an appropriate name for
4755 mapped instruments (using "GET MIDI_INSTRUMENT INFO"
4756
4757
4758
4759 Schoenebeck Expires May 5, 2010 [Page 85]
4760
4761 Internet-Draft LinuxSampler Control Protocol November 2009
4762
4763
4764 (Section 6.7.11)).
4765
4766 By default, "MAP MIDI_INSTRUMENT" commands block until the mapping is
4767 completely established in the sampler. The OPTIONAL "NON_MODAL"
4768 argument however causes the respective "MAP MIDI_INSTRUMENT" command
4769 to return immediately, that is to let the sampler establish the
4770 mapping in the background. So this argument might be especially
4771 useful for mappings with a "PERSISTENT" type, because these have to
4772 load the respective instruments immediately and might thus block for
4773 a very long time. It is recommended however to use the OPTIONAL
4774 "NON_MODAL" argument only if really necessary, because it has the
4775 following drawbacks: as "NON_MODAL" instructions return immediately,
4776 they may not necessarily return an error i.e. when the given
4777 instrument file turns out to be corrupt, beside that subsequent
4778 commands in a LSCP instruction sequence might fail, because mandatory
4779 mappings are not yet completed.
4780
4781 Possible Answers:
4782
4783 "OK" -
4784
4785 usually
4786
4787 "ERR:<error-code>:<error-message>" -
4788
4789 when the given map or engine does not exist or a value is out
4790 of range
4791
4792 Examples:
4793
4794 C: "MAP MIDI_INSTRUMENT 0 3 0 gig '/usr/share/Steinway D.gig' 0
4795 0.8 PERSISTENT"
4796
4797 S: "OK"
4798
4799 C: "MAP MIDI_INSTRUMENT 0 4 50 gig '/home/john/foostrings.gig' 7
4800 1.0"
4801
4802 S: "OK"
4803
4804 C: "MAP MIDI_INSTRUMENT 0 0 0 gig '/usr/share/piano.gig' 0 1.0
4805 'Normal Piano'"
4806
4807 S: "OK"
4808
4809 C: "MAP MIDI_INSTRUMENT 0 1 0 gig '/usr/share/piano.gig' 0 0.25
4810 'Silent Piano'"
4811
4812
4813
4814
4815 Schoenebeck Expires May 5, 2010 [Page 86]
4816
4817 Internet-Draft LinuxSampler Control Protocol November 2009
4818
4819
4820 S: "OK"
4821
4822 C: "MAP MIDI_INSTRUMENT NON_MODAL 1 8 120 gig '/home/joe/
4823 foodrums.gig' 0 1.0 PERSISTENT 'Foo Drumkit'"
4824
4825 S: "OK"
4826
4827 6.7.8. Getting ammount of MIDI instrument map entries
4828
4829 The front-end can query the amount of currently existing entries in a
4830 MIDI instrument map by sending the following command:
4831
4832 GET MIDI_INSTRUMENTS <map>
4833
4834 The front-end can query the amount of currently existing entries in
4835 all MIDI instrument maps by sending the following command:
4836
4837 GET MIDI_INSTRUMENTS ALL
4838
4839 Possible Answers:
4840
4841 The sampler will answer by sending the current number of entries
4842 in the MIDI instrument map(s).
4843
4844 Example:
4845
4846 C: "GET MIDI_INSTRUMENTS 0"
4847
4848 S: "234"
4849
4850 C: "GET MIDI_INSTRUMENTS ALL"
4851
4852 S: "954"
4853
4854 6.7.9. Getting indeces of all entries of a MIDI instrument map
4855
4856 The front-end can query a list of all currently existing entries in a
4857 certain MIDI instrument map by sending the following command:
4858
4859 LIST MIDI_INSTRUMENTS <map>
4860
4861 Where <map> is the numeric ID of the MIDI instrument map.
4862
4863 The front-end can query a list of all currently existing entries of
4864 all MIDI instrument maps by sending the following command:
4865
4866
4867
4868
4869
4870
4871 Schoenebeck Expires May 5, 2010 [Page 87]
4872
4873 Internet-Draft LinuxSampler Control Protocol November 2009
4874
4875
4876 LIST MIDI_INSTRUMENTS ALL
4877
4878 Possible Answers:
4879
4880 The sampler will answer by sending a comma separated list of map
4881 ID - MIDI bank - MIDI program triples, where each triple is
4882 encapsulated into curly braces. The list is returned in one
4883 single line. Each triple just reflects the key of the respective
4884 map entry, thus subsequent "GET MIDI_INSTRUMENT INFO"
4885 (Section 6.7.11) command(s) are necessary to retrieve detailed
4886 informations about each entry.
4887
4888 Example:
4889
4890 C: "LIST MIDI_INSTRUMENTS 0"
4891
4892 S: "{0,0,0},{0,0,1},{0,0,3},{0,1,4},{1,127,127}"
4893
4894 6.7.10. Remove an entry from the MIDI instrument map
4895
4896 The front-end can delete an entry from a MIDI instrument map by
4897 sending the following command:
4898
4899 UNMAP MIDI_INSTRUMENT <map> <midi_bank> <midi_prog>
4900
4901 Where <map> is the numeric ID of the MIDI instrument map, <midi_bank>
4902 is an integer value between 0..16383 reflecting the MIDI bank value
4903 and <midi_prog> an integer value between 0..127 reflecting the MIDI
4904 program value of the map's entrie's key index triple.
4905
4906 Possible Answers:
4907
4908 "OK" -
4909
4910 usually
4911
4912 "ERR:<error-code>:<error-message>" -
4913
4914 when index out of bounds
4915
4916 Example:
4917
4918 C: "UNMAP MIDI_INSTRUMENT 0 2 127"
4919
4920 S: "OK"
4921
4922
4923
4924
4925
4926
4927 Schoenebeck Expires May 5, 2010 [Page 88]
4928
4929 Internet-Draft LinuxSampler Control Protocol November 2009
4930
4931
4932 6.7.11. Get current settings of MIDI instrument map entry
4933
4934 The front-end can retrieve the current settings of a certain
4935 instrument map entry by sending the following command:
4936
4937 GET MIDI_INSTRUMENT INFO <map> <midi_bank> <midi_prog>
4938
4939 Where <map> is the numeric ID of the MIDI instrument map, <midi_bank>
4940 is an integer value between 0..16383 reflecting the MIDI bank value,
4941 <midi_bank> and <midi_prog> an integer value between 0..127
4942 reflecting the MIDI program value of the map's entrie's key index
4943 triple.
4944
4945 Possible Answers:
4946
4947 LinuxSampler will answer by sending a <CRLF> separated list. Each
4948 answer line begins with the information category name followed by
4949 a colon and then a space character <SP> and finally the info
4950 character string to that info category. At the moment the
4951 following categories are defined:
4952
4953 "NAME" -
4954
4955 Name for this MIDI instrument map entry (if defined). This
4956 name shall be used by frontends for displaying a name for this
4957 mapped instrument. It can be set and changed with the "MAP
4958 MIDI_INSTRUMENT" (Section 6.7.7) command and does not have to
4959 be unique. (note that this character string may contain escape
4960 sequences (Section 7.1))
4961
4962 "ENGINE_NAME" -
4963
4964 Name of the engine to be deployed for this instrument.
4965
4966 "INSTRUMENT_FILE" -
4967
4968 File name of the instrument (note that this path may contain
4969 escape sequences (Section 7.1)).
4970
4971 "INSTRUMENT_NR" -
4972
4973 Index of the instrument within the file.
4974
4975 "INSTRUMENT_NAME" -
4976
4977 Name of the loaded instrument as reflected by its file. In
4978 contrast to the "NAME" field, the "INSTRUMENT_NAME" field
4979 cannot be changed (note that this character string may contain
4980
4981
4982
4983 Schoenebeck Expires May 5, 2010 [Page 89]
4984
4985 Internet-Draft LinuxSampler Control Protocol November 2009
4986
4987
4988 escape sequences (Section 7.1)).
4989
4990 "LOAD_MODE" -
4991
4992 Life time of instrument (see "MAP MIDI_INSTRUMENT"
4993 (Section 6.7.7) for details about this setting).
4994
4995 "VOLUME" -
4996
4997 master volume of the instrument as optionally dotted number
4998 (where a value < 1.0 means attenuation and a value > 1.0 means
4999 amplification)
5000
5001 The mentioned fields above don't have to be in particular order.
5002
5003 Example:
5004
5005 C: "GET MIDI_INSTRUMENT INFO 1 45 120"
5006
5007 S: "NAME: Drums for Foo Song"
5008
5009 "ENGINE_NAME: GigEngine"
5010
5011 "INSTRUMENT_FILE: /usr/share/joesdrumkit.gig"
5012
5013 "INSTRUMENT_NR: 0"
5014
5015 "INSTRUMENT_NAME: Joe's Drumkit"
5016
5017 "LOAD_MODE: PERSISTENT"
5018
5019 "VOLUME: 1.0"
5020
5021 "."
5022
5023 6.7.12. Clear MIDI instrument map
5024
5025 The front-end can clear a whole MIDI instrument map, that is delete
5026 all its entries by sending the following command:
5027
5028 CLEAR MIDI_INSTRUMENTS <map>
5029
5030 Where <map> is the numeric ID of the map to clear.
5031
5032 The front-end can clear all MIDI instrument maps, that is delete all
5033 entries of all maps by sending the following command:
5034
5035
5036
5037
5038
5039 Schoenebeck Expires May 5, 2010 [Page 90]
5040
5041 Internet-Draft LinuxSampler Control Protocol November 2009
5042
5043
5044 CLEAR MIDI_INSTRUMENTS ALL
5045
5046 The command "CLEAR MIDI_INSTRUMENTS ALL" does not delete the maps,
5047 only their entries, thus the map's settings like custom name will be
5048 preservevd.
5049
5050 Possible Answers:
5051
5052 "OK" -
5053
5054 always
5055
5056 Examples:
5057
5058 C: "CLEAR MIDI_INSTRUMENTS 0"
5059
5060 S: "OK"
5061
5062 C: "CLEAR MIDI_INSTRUMENTS ALL"
5063
5064 S: "OK"
5065
5066 6.8. Managing Instruments Database
5067
5068 The following commands describe how to use and manage the instruments
5069 database.
5070
5071 Notice:
5072
5073 All command arguments representing a path or instrument/directory
5074 name support escape sequences as described in chapter "Character
5075 Set and Escape Sequences (Section 7.1)".
5076
5077 All occurrences of a forward slash in instrument and directory
5078 names are escaped with its hex (\x2f) or octal (\057) escape
5079 sequence.
5080
5081 6.8.1. Creating a new instrument directory
5082
5083 The front-end can add a new instrument directory to the instruments
5084 database by sending the following command:
5085
5086 ADD DB_INSTRUMENT_DIRECTORY <dir>
5087
5088 Where <dir> is the absolute path name of the directory to be created
5089 (encapsulated into apostrophes).
5090
5091 Possible Answers:
5092
5093
5094
5095 Schoenebeck Expires May 5, 2010 [Page 91]
5096
5097 Internet-Draft LinuxSampler Control Protocol November 2009
5098
5099
5100 "OK" -
5101
5102 on success
5103
5104 "ERR:<error-code>:<error-message>" -
5105
5106 when the directory could not be created, which can happen if
5107 the directory already exists or the name contains not allowed
5108 symbols
5109
5110 Examples:
5111
5112 C: "ADD DB_INSTRUMENT_DIRECTORY '/Piano Collection'"
5113
5114 S: "OK"
5115
5116 6.8.2. Deleting an instrument directory
5117
5118 The front-end can delete a particular instrument directory from the
5119 instruments database by sending the following command:
5120
5121 REMOVE DB_INSTRUMENT_DIRECTORY [FORCE] <dir>
5122
5123 Where <dir> is the absolute path name of the directory to delete.
5124 The optional FORCE argument can be used to force the deletion of a
5125 non-empty directory and all its content.
5126
5127 Possible Answers:
5128
5129 "OK" -
5130
5131 if the directory is deleted successfully
5132
5133 "ERR:<error-code>:<error-message>" -
5134
5135 if the given directory does not exist, or if trying to delete a
5136 non-empty directory, without using the FORCE argument.
5137
5138 Examples:
5139
5140 C: "REMOVE DB_INSTRUMENT_DIRECTORY FORCE '/Piano Collection'"
5141
5142 S: "OK"
5143
5144
5145
5146
5147
5148
5149
5150
5151 Schoenebeck Expires May 5, 2010 [Page 92]
5152
5153 Internet-Draft LinuxSampler Control Protocol November 2009
5154
5155
5156 6.8.3. Getting amount of instrument directories
5157
5158 The front-end can retrieve the current amount of directories in a
5159 specific directory by sending the following command:
5160
5161 GET DB_INSTRUMENT_DIRECTORIES [RECURSIVE] <dir>
5162
5163 Where <dir> should be replaced by the absolute path name of the
5164 directory. If RECURSIVE is specified, the number of all directories,
5165 including those located in subdirectories of the specified directory,
5166 will be returned.
5167
5168 Possible Answers:
5169
5170 The current number of instrument directories in the specified
5171 directory.
5172
5173 "ERR:<error-code>:<error-message>" -
5174
5175 if the given directory does not exist.
5176
5177 Example:
5178
5179 C: "GET DB_INSTRUMENT_DIRECTORIES '/'"
5180
5181 S: "2"
5182
5183 6.8.4. Listing all directories in specific directory
5184
5185 The front-end can retrieve the current list of directories in
5186 specific directory by sending the following command:
5187
5188 LIST DB_INSTRUMENT_DIRECTORIES [RECURSIVE] <dir>
5189
5190 Where <dir> should be replaced by the absolute path name of the
5191 directory. If RECURSIVE is specified, the absolute path names of all
5192 directories, including those located in subdirectories of the
5193 specified directory, will be returned.
5194
5195 Possible Answers:
5196
5197 A comma separated list of all instrument directories (encapsulated
5198 into apostrophes) in the specified directory.
5199
5200 "ERR:<error-code>:<error-message>" -
5201
5202 if the given directory does not exist.
5203
5204
5205
5206
5207 Schoenebeck Expires May 5, 2010 [Page 93]
5208
5209 Internet-Draft LinuxSampler Control Protocol November 2009
5210
5211
5212 Example:
5213
5214 C: "LIST DB_INSTRUMENT_DIRECTORIES '/'"
5215
5216 S: "'Piano Collection','Percussion Collection'"
5217
5218 C: "LIST DB_INSTRUMENT_DIRECTORIES RECURSIVE '/'"
5219
5220 S: "'/Piano Collection','/Piano Collection/Acoustic','/Piano
5221 Collection/Acoustic/New','/Percussion Collection'"
5222
5223 6.8.5. Getting instrument directory information
5224
5225 The front-end can ask for the current settings of an instrument
5226 directory by sending the following command:
5227
5228 GET DB_INSTRUMENT_DIRECTORY INFO <dir>
5229
5230 Where <dir> should be replaced by the absolute path name of the
5231 directory the front-end is interested in.
5232
5233 Possible Answers:
5234
5235 LinuxSampler will answer by sending a <CRLF> separated list. Each
5236 answer line begins with the settings category name followed by a
5237 colon and then a space character <SP> and finally the info
5238 character string to that setting category. At the moment the
5239 following categories are defined:
5240
5241
5242
5243 DESCRIPTION -
5244
5245 A brief description of the directory content. Note that the
5246 character string may contain escape sequences (Section 7.1).
5247
5248 CREATED -
5249
5250 The creation date and time of the directory, represented in
5251 "YYYY-MM-DD HH:MM:SS" format
5252
5253 MODIFIED -
5254
5255 The date and time of the last modification of the directory,
5256 represented in "YYYY-MM-DD HH:MM:SS" format
5257
5258 The mentioned fields above don't have to be in particular order.
5259
5260
5261
5262
5263 Schoenebeck Expires May 5, 2010 [Page 94]
5264
5265 Internet-Draft LinuxSampler Control Protocol November 2009
5266
5267
5268 Example:
5269
5270 C: "GET DB_INSTRUMENT_DIRECTORY INFO '/Piano Collection'"
5271
5272 S: "DESCRIPTION: Piano collection of instruments in GigaSampler
5273 format."
5274
5275 "CREATED: 2007-02-05 10:23:12"
5276
5277 "MODIFIED: 2007-04-07 12:50:21"
5278
5279 "."
5280
5281 6.8.6. Renaming an instrument directory
5282
5283 The front-end can alter the name of a specific instrument directory
5284 by sending the following command:
5285
5286 SET DB_INSTRUMENT_DIRECTORY NAME <dir> <name>
5287
5288 Where <dir> is the absolute path name of the directory and <name> is
5289 the new name for that directory.
5290
5291 Possible Answers:
5292
5293 "OK" -
5294
5295 on success
5296
5297 "ERR:<error-code>:<error-message>" -
5298
5299 in case the given directory does not exists, or if a directory
5300 with name equal to the new name already exists.
5301
5302 Example:
5303
5304 C: "SET DB_INSTRUMENT_DIRECTORY NAME '/Piano Collection/Acustic'
5305 'Acoustic'"
5306
5307 S: "OK"
5308
5309 6.8.7. Moving an instrument directory
5310
5311 The front-end can move a specific instrument directory by sending the
5312 following command:
5313
5314
5315
5316
5317
5318
5319 Schoenebeck Expires May 5, 2010 [Page 95]
5320
5321 Internet-Draft LinuxSampler Control Protocol November 2009
5322
5323
5324 MOVE DB_INSTRUMENT_DIRECTORY <dir> <dst>
5325
5326 Where <dir> is the absolute path name of the directory to move and
5327 <dst> is the location where the directory will be moved to.
5328
5329 Possible Answers:
5330
5331 "OK" -
5332
5333 on success
5334
5335 "ERR:<error-code>:<error-message>" -
5336
5337 in case a given directory does not exists, or if a directory
5338 with name equal to the name of the specified directory already
5339 exists in the destination directory. Error is also thrown when
5340 trying to move a directory to a subdirectory of itself.
5341
5342 Example:
5343
5344 C: "MOVE DB_INSTRUMENT_DIRECTORY '/Acoustic' '/Piano Collection/
5345 Acoustic'"
5346
5347 S: "OK"
5348
5349 6.8.8. Copying instrument directories
5350
5351 The front-end can copy a specific instrument directory by sending the
5352 following command:
5353
5354 COPY DB_INSTRUMENT_DIRECTORY <dir> <dst>
5355
5356 Where <dir> is the absolute path name of the directory to copy and
5357 <dst> is the location where the directory will be copied to.
5358
5359 Possible Answers:
5360
5361 "OK" -
5362
5363 on success
5364
5365 "ERR:<error-code>:<error-message>" -
5366
5367 in case a given directory does not exists, or if a directory
5368 with name equal to the name of the specified directory already
5369 exists in the destination directory. Error is also thrown when
5370 trying to copy a directory to a subdirectory of itself.
5371
5372
5373
5374
5375 Schoenebeck Expires May 5, 2010 [Page 96]
5376
5377 Internet-Draft LinuxSampler Control Protocol November 2009
5378
5379
5380 Example:
5381
5382 C: "COPY DB_INSTRUMENT_DIRECTORY '/Piano Collection/Acoustic'
5383 '/Acoustic/Pianos'"
5384
5385 S: "OK"
5386
5387 6.8.9. Changing the description of directory
5388
5389 The front-end can alter the description of a specific instrument
5390 directory by sending the following command:
5391
5392 SET DB_INSTRUMENT_DIRECTORY DESCRIPTION <dir> <desc>
5393
5394 Where <dir> is the absolute path name of the directory and <desc> is
5395 the new description for the directory (encapsulated into apostrophes,
5396 supporting escape sequences as described in chapter "Character Set
5397 and Escape Sequences (Section 7.1)").
5398
5399 Possible Answers:
5400
5401 "OK" -
5402
5403 on success
5404
5405 "ERR:<error-code>:<error-message>" -
5406
5407 in case the given directory does not exists.
5408
5409 Example:
5410
5411 C: "SET DB_INSTRUMENT_DIRECTORY DESCRIPTION '/Piano Collection' 'A
5412 collection of piano instruments in various format.'"
5413
5414 S: "OK"
5415
5416 6.8.10. Finding directories
5417
5418 The front-end can search for directories in specific directory by
5419 sending the following command:
5420
5421 FIND DB_INSTRUMENT_DIRECTORIES [NON_RECURSIVE] <dir> <criteria-
5422 list>
5423
5424 Where <dir> should be replaced by the absolute path name of the
5425 directory to search in. If NON_RECURSIVE is specified, the
5426 directories located in subdirectories of the specified directory will
5427 not be searched. <criteria-list> is a list of search criterias in
5428
5429
5430
5431 Schoenebeck Expires May 5, 2010 [Page 97]
5432
5433 Internet-Draft LinuxSampler Control Protocol November 2009
5434
5435
5436 form of "key1=val1 key2=val2 ...". The following criterias are
5437 allowed:
5438
5439 NAME='<search-string>'
5440
5441 Restricts the search to directories, which names satisfy the
5442 supplied search string (encapsulated into apostrophes, supporting
5443 escape sequences as described in chapter "Character Set and Escape
5444 Sequences (Section 7.1)").
5445
5446 CREATED='[<date-after>]..[<date-before>]'
5447
5448 Restricts the search to directories, which creation date satisfies
5449 the specified period, where <date-after> and <date-before> are in
5450 "YYYY-MM-DD HH:MM:SS" format. If <date-after> is omitted the
5451 search is restricted to directories created before <date-before>.
5452 If <date-before> is omitted, the search is restricted to
5453 directories created after <date-after>.
5454
5455 MODIFIED='[<date-after>]..[<date-before>]'
5456
5457 Restricts the search to directories, which date of last
5458 modification satisfies the specified period, where <date-after>
5459 and <date-before> are in "YYYY-MM-DD HH:MM:SS" format. If <date-
5460 after> is omitted the search is restricted to directories, which
5461 are last modified before <date-before>. If <date-before> is
5462 omitted, the search is restricted to directories, which are last
5463 modified after <date-after>.
5464
5465 DESCRIPTION='<search-string>'
5466
5467 Restricts the search to directories with description that
5468 satisfies the supplied search string (encapsulated into
5469 apostrophes, supporting escape sequences as described in chapter
5470 "Character Set and Escape Sequences (Section 7.1)").
5471
5472 Where <search-string> is either a regular expression, or a word list
5473 separated with spaces for OR search and with '+' for AND search.
5474
5475 Possible Answers:
5476
5477 A comma separated list with the absolute path names (encapsulated
5478 into apostrophes) of all directories in the specified directory
5479 that satisfy the supplied search criterias.
5480
5481 "ERR:<error-code>:<error-message>" -
5482
5483
5484
5485
5486
5487 Schoenebeck Expires May 5, 2010 [Page 98]
5488
5489 Internet-Draft LinuxSampler Control Protocol November 2009
5490
5491
5492 if the given directory does not exist.
5493
5494 Example:
5495
5496 C: "FIND DB_INSTRUMENT_DIRECTORIES '/' NAME='Piano'"
5497
5498 S: "'/Piano Collection'"
5499
5500 C: "FIND DB_INSTRUMENT_DIRECTORIES '/' CREATED='..2007-04-01 09:
5501 30:13'"
5502
5503 S: "'/Piano Collection','/Percussions'"
5504
5505 6.8.11. Adding instruments to the instruments database
5506
5507 The front-end can add one or more instruments to the instruments
5508 database by sending the following command:
5509
5510 ADD DB_INSTRUMENTS [NON_MODAL] [<mode>[ FILE_AS_DIR]] <db_dir>
5511 <file_path> [<instr_index>]
5512
5513 Where <db_dir> is the absolute path name of a directory (encapsulated
5514 into apostrophes) in the instruments database in which only the new
5515 instruments (that are not already in the database) will be added,
5516 <file_path> is the absolute path name of a file or directory in the
5517 file system (encapsulated into apostrophes). In case an instrument
5518 file is supplied, only the instruments in the specified file will be
5519 added to the instruments database. If the optional <instr_index>
5520 (the index of the instrument within the given file) is supplied too,
5521 then only the specified instrument will be added. In case a
5522 directory is supplied, the instruments in that directory will be
5523 added. The OPTIONAL <mode> argument is only applied when a directory
5524 is provided as <file_path> and specifies how the scanning will be
5525 done and has exactly the following possibilities:
5526
5527 "RECURSIVE" -
5528
5529 All instruments will be processed, including those in the
5530 subdirectories, and the respective subdirectory tree structure
5531 will be recreated in the instruments database
5532
5533 "NON_RECURSIVE" -
5534
5535 Only the instruments in the specified directory will be added,
5536 the instruments in the subdirectories will not be processed.
5537
5538
5539
5540
5541
5542
5543 Schoenebeck Expires May 5, 2010 [Page 99]
5544
5545 Internet-Draft LinuxSampler Control Protocol November 2009
5546
5547
5548 "FLAT" -
5549
5550 All instruments will be processed, including those in the
5551 subdirectories, but the respective subdirectory structure will
5552 not be recreated in the instruments database. All instruments
5553 will be added directly in the specified database directory.
5554
5555 If FILE_AS_DIR argument is supplied, all instruments in an instrument
5556 file will be added to a separate directory in the instruments
5557 database, which name will be the name of the instrument file with the
5558 file extension stripped off.
5559
5560 The difference between regular and NON_MODAL versions of the command
5561 is that the regular command returns when the scanning is finished
5562 while NON_MODAL version returns immediately and a background process
5563 is launched. The GET DB_INSTRUMENTS_JOB INFO (Section 6.8.21)
5564 command can be used to monitor the scanning progress.
5565
5566 Possible Answers:
5567
5568 "OK" -
5569
5570 on success when NON_MODAL is not supplied
5571
5572 "OK[<job-id>]" -
5573
5574 on success when NON_MODAL is supplied, where <job-id> is a
5575 numerical ID used to obtain status information about the job
5576 progress. See GET DB_INSTRUMENTS_JOB INFO (Section 6.8.21)
5577
5578 "ERR:<error-code>:<error-message>" -
5579
5580 if an invalid path is specified.
5581
5582 Examples:
5583
5584 C: "ADD DB_INSTRUMENTS '/Piano Collection' '/home/me/gigs/PMI
5585 Bosendorfer 290.gig' 0"
5586
5587 S: "OK"
5588
5589 6.8.12. Removing an instrument
5590
5591 The front-end can remove a particular instrument from the instruments
5592 database by sending the following command:
5593
5594
5595
5596
5597
5598
5599 Schoenebeck Expires May 5, 2010 [Page 100]
5600
5601 Internet-Draft LinuxSampler Control Protocol November 2009
5602
5603
5604 REMOVE DB_INSTRUMENT <instr_path>
5605
5606 Where <instr_path> is the absolute path name (in the instruments
5607 database) of the instrument to remove.
5608
5609 Possible Answers:
5610
5611 "OK" -
5612
5613 if the instrument is removed successfully
5614
5615 "ERR:<error-code>:<error-message>" -
5616
5617 if the given path does not exist or is a directory.
5618
5619 Examples:
5620
5621 C: "REMOVE DB_INSTRUMENT '/Piano Collection/Bosendorfer 290'"
5622
5623 S: "OK"
5624
5625 6.8.13. Getting amount of instruments
5626
5627 The front-end can retrieve the current amount of instruments in a
5628 specific directory by sending the following command:
5629
5630 GET DB_INSTRUMENTS [RECURSIVE] <dir>
5631
5632 Where <dir> should be replaced by the absolute path name of the
5633 directory. If RECURSIVE is specified, the number of all instruments,
5634 including those located in subdirectories of the specified directory,
5635 will be returned.
5636
5637 Possible Answers:
5638
5639 The current number of instruments in the specified directory.
5640
5641 "ERR:<error-code>:<error-message>" -
5642
5643 if the given directory does not exist.
5644
5645 Example:
5646
5647 C: "GET DB_INSTRUMENTS '/Piano Collection'"
5648
5649 S: "2"
5650
5651
5652
5653
5654
5655 Schoenebeck Expires May 5, 2010 [Page 101]
5656
5657 Internet-Draft LinuxSampler Control Protocol November 2009
5658
5659
5660 6.8.14. Listing all instruments in specific directory
5661
5662 The front-end can retrieve the current list of instruments in
5663 specific directory by sending the following command:
5664
5665 LIST DB_INSTRUMENTS [RECURSIVE] <dir>
5666
5667 Where <dir> should be replaced by the absolute path name of the
5668 directory. If RECURSIVE is specified, the absolute path names of all
5669 instruments, including those located in subdirectories of the
5670 specified directory, will be returned.
5671
5672 Possible Answers:
5673
5674 A comma separated list of all instruments (encapsulated into
5675 apostrophes) in the specified directory.
5676
5677 "ERR:<error-code>:<error-message>" -
5678
5679 if the given directory does not exist.
5680
5681 Example:
5682
5683 C: "LIST DB_INSTRUMENTS '/Piano Collection'"
5684
5685 S: "'Bosendorfer 290','Steinway D'"
5686
5687 C: "LIST DB_INSTRUMENTS RECURSIVE '/Piano Collection'"
5688
5689 S: "'/Piano Collection/Bosendorfer 290','/Piano Collection/
5690 Steinway D','/Piano Collection/Lite/Free Piano'"
5691
5692 6.8.15. Getting instrument information
5693
5694 The front-end can ask for the current settings of an instrument by
5695 sending the following command:
5696
5697 GET DB_INSTRUMENT INFO <instr_path>
5698
5699 Where <instr_path> should be replaced by the absolute path name of
5700 the instrument the front-end is interested in.
5701
5702 Possible Answers:
5703
5704 LinuxSampler will answer by sending a <CRLF> separated list. Each
5705 answer line begins with the settings category name followed by a
5706 colon and then a space character <SP> and finally the info
5707 character string to that setting category. At the moment the
5708
5709
5710
5711 Schoenebeck Expires May 5, 2010 [Page 102]
5712
5713 Internet-Draft LinuxSampler Control Protocol November 2009
5714
5715
5716 following categories are defined:
5717
5718
5719
5720 INSTRUMENT_FILE -
5721
5722 File name of the instrument. Note that the character string
5723 may contain escape sequences (Section 7.1).
5724
5725 INSTRUMENT_NR -
5726
5727 Index of the instrument within the file.
5728
5729 FORMAT_FAMILY -
5730
5731 The format family of the instrument.
5732
5733 FORMAT_VERSION -
5734
5735 The format version of the instrument.
5736
5737 SIZE -
5738
5739 The size of the instrument in bytes.
5740
5741 CREATED -
5742
5743 The date and time when the instrument is added in the
5744 instruments database, represented in "YYYY-MM-DD HH:MM:SS"
5745 format
5746
5747 MODIFIED -
5748
5749 The date and time of the last modification of the
5750 instrument's database settings, represented in "YYYY-MM-DD
5751 HH:MM:SS" format
5752
5753 DESCRIPTION -
5754
5755 A brief description of the instrument. Note that the
5756 character string may contain escape sequences (Section 7.1).
5757
5758 IS_DRUM -
5759
5760 either true or false, determines whether the instrument is a
5761 drumkit or a chromatic instrument
5762
5763
5764
5765
5766
5767 Schoenebeck Expires May 5, 2010 [Page 103]
5768
5769 Internet-Draft LinuxSampler Control Protocol November 2009
5770
5771
5772 PRODUCT -
5773
5774 The product title of the instrument. Note that the
5775 character string may contain escape sequences (Section 7.1).
5776
5777 ARTISTS -
5778
5779 Lists the artist names. Note that the character string may
5780 contain escape sequences (Section 7.1).
5781
5782 KEYWORDS -
5783
5784 Provides a list of keywords that refer to the instrument.
5785 Keywords are separated with semicolon and blank. Note that
5786 the character string may contain escape sequences
5787 (Section 7.1).
5788
5789 The mentioned fields above don't have to be in particular order.
5790
5791 Example:
5792
5793 C: "GET DB_INSTRUMENT INFO '/Piano Collection/Bosendorfer 290'"
5794
5795 S: "INSTRUMENT_FILE: /home/me/gigs/Bosendorfer 290.gig"
5796
5797 "INSTRUMENT_NR: 0"
5798
5799 "FORMAT_FAMILY: GIG"
5800
5801 "FORMAT_VERSION: 2"
5802
5803 "SIZE: 2050871870"
5804
5805 "CREATED: 2007-02-05 10:23:12"
5806
5807 "MODIFIED: 2007-04-07 12:50:21"
5808
5809 "DESCRIPTION: "
5810
5811 "IS_DRUM: false"
5812
5813 "PRODUCT: GRANDIOSO Bosendorfer 290"
5814
5815 "ARTISTS: Post Musical Instruments"
5816
5817 "KEYWORDS: Bosendorfer"
5818
5819
5820
5821
5822
5823 Schoenebeck Expires May 5, 2010 [Page 104]
5824
5825 Internet-Draft LinuxSampler Control Protocol November 2009
5826
5827
5828 "."
5829
5830 6.8.16. Renaming an instrument
5831
5832 The front-end can alter the name of a specific instrument by sending
5833 the following command:
5834
5835 SET DB_INSTRUMENT NAME <instr> <name>
5836
5837 Where <instr> is the absolute path name of the instrument and <name>
5838 is the new name for that instrument.
5839
5840 Possible Answers:
5841
5842 "OK" -
5843
5844 on success
5845
5846 "ERR:<error-code>:<error-message>" -
5847
5848 in case the given instrument does not exists, or if an
5849 instrument with name equal to the new name already exists.
5850
5851 Example:
5852
5853 C: "SET DB_INSTRUMENT NAME '/Piano Collection/Bosendorfer'
5854 'Bosendorfer 290'"
5855
5856 S: "OK"
5857
5858 6.8.17. Moving an instrument
5859
5860 The front-end can move a specific instrument to another directory by
5861 sending the following command:
5862
5863 MOVE DB_INSTRUMENT <instr> <dst>
5864
5865 Where <instr> is the absolute path name of the instrument to move and
5866 <dst> is the directory where the instrument will be moved to.
5867
5868 Possible Answers:
5869
5870 "OK" -
5871
5872 on success
5873
5874
5875
5876
5877
5878
5879 Schoenebeck Expires May 5, 2010 [Page 105]
5880
5881 Internet-Draft LinuxSampler Control Protocol November 2009
5882
5883
5884 "ERR:<error-code>:<error-message>" -
5885
5886 in case the given instrument does not exists, or if an
5887 instrument with name equal to the name of the specified
5888 instrument already exists in the destination directory.
5889
5890 Example:
5891
5892 C: "MOVE DB_INSTRUMENT '/Piano Collection/Bosendorfer 290' '/Piano
5893 Collection/Acoustic'"
5894
5895 S: "OK"
5896
5897 6.8.18. Copying instruments
5898
5899 The front-end can copy a specific instrument to another directory by
5900 sending the following command:
5901
5902 COPY DB_INSTRUMENT <instr> <dst>
5903
5904 Where <instr> is the absolute path name of the instrument to copy and
5905 <dst> is the directory where the instrument will be copied to.
5906
5907 Possible Answers:
5908
5909 "OK" -
5910
5911 on success
5912
5913 "ERR:<error-code>:<error-message>" -
5914
5915 in case the given instrument does not exists, or if an
5916 instrument with name equal to the name of the specified
5917 instrument already exists in the destination directory.
5918
5919 Example:
5920
5921 C: "COPY DB_INSTRUMENT '/Piano Collection/Bosendorfer 290'
5922 '/Acoustic/Pianos/'"
5923
5924 S: "OK"
5925
5926 6.8.19. Changing the description of instrument
5927
5928 The front-end can alter the description of a specific instrument by
5929 sending the following command:
5930
5931
5932
5933
5934
5935 Schoenebeck Expires May 5, 2010 [Page 106]
5936
5937 Internet-Draft LinuxSampler Control Protocol November 2009
5938
5939
5940 SET DB_INSTRUMENT DESCRIPTION <instr> <desc>
5941
5942 Where <instr> is the absolute path name of the instrument and <desc>
5943 is the new description for the instrument (encapsulated into
5944 apostrophes, supporting escape sequences as described in chapter
5945 "Character Set and Escape Sequences (Section 7.1)").
5946
5947 Possible Answers:
5948
5949 "OK" -
5950
5951 on success
5952
5953 "ERR:<error-code>:<error-message>" -
5954
5955 in case the given instrument does not exists.
5956
5957 Example:
5958
5959 C: "SET DB_INSTRUMENT DESCRIPTION '/Piano Collection/Acoustic/
5960 Bosendorfer 290' 'No comment :)'"
5961
5962 S: "OK"
5963
5964 6.8.20. Finding instruments
5965
5966 The front-end can search for instruments in specific directory by
5967 sending the following command:
5968
5969 FIND DB_INSTRUMENTS [NON_RECURSIVE] <dir> <criteria-list>
5970
5971 Where <dir> should be replaced by the absolute path name of the
5972 directory to search in. If NON_RECURSIVE is specified, the
5973 directories located in subdirectories of the specified directory will
5974 not be searched. <criteria-list> is a list of search criterias in
5975 form of "key1=val1 key2=val2 ...". The following criterias are
5976 allowed:
5977
5978 NAME='<search-string>'
5979
5980 Restricts the search to instruments, which names satisfy the
5981 supplied search string (encapsulated into apostrophes, supporting
5982 escape sequences as described in chapter "Character Set and Escape
5983 Sequences (Section 7.1)").
5984
5985 SIZE=[<min>]..[<max>]
5986
5987
5988
5989
5990
5991 Schoenebeck Expires May 5, 2010 [Page 107]
5992
5993 Internet-Draft LinuxSampler Control Protocol November 2009
5994
5995
5996 Restricts the search to instruments, which size is in the
5997 specified range. If <min> is omitted, the search results are
5998 restricted to instruments with size less then or equal to <max>.
5999 If <max> is omitted, the search is restricted to instruments with
6000 size greater then or equal to <min>.
6001
6002 CREATED='[<date-after>]..[<date-before>]'
6003
6004 Restricts the search to instruments, which creation date satisfies
6005 the specified period, where <date-after> and <date-before> are in
6006 "YYYY-MM-DD HH:MM:SS" format. If <date-after> is omitted the
6007 search is restricted to instruments created before <date-before>.
6008 If <date-before> is omitted, the search is restricted to
6009 instruments created after <date-after>.
6010
6011 MODIFIED='[<date-after>]..[<date-before>]'
6012
6013 Restricts the search to instruments, which date of last
6014 modification satisfies the specified period, where <date-after>
6015 and <date-before> are in "YYYY-MM-DD HH:MM:SS" format. If <date-
6016 after> is omitted the search is restricted to instruments, which
6017 are last modified before <date-before>. If <date-before> is
6018 omitted, the search is restricted to instruments, which are last
6019 modified after <date-after>.
6020
6021 DESCRIPTION='<search-string>'
6022
6023 Restricts the search to instruments with description that
6024 satisfies the supplied search string (encapsulated into
6025 apostrophes, supporting escape sequences as described in chapter
6026 "Character Set and Escape Sequences (Section 7.1)").
6027
6028 PRODUCT='<search-string>'
6029
6030 Restricts the search to instruments with product info that
6031 satisfies the supplied search string (encapsulated into
6032 apostrophes, supporting escape sequences as described in chapter
6033 "Character Set and Escape Sequences (Section 7.1)").
6034
6035 ARTISTS='<search-string>'
6036
6037 Restricts the search to instruments with artists info that
6038 satisfies the supplied search string (encapsulated into
6039 apostrophes, supporting escape sequences as described in chapter
6040 "Character Set and Escape Sequences (Section 7.1)").
6041
6042 KEYWORDS='<search-string>'
6043
6044
6045
6046
6047 Schoenebeck Expires May 5, 2010 [Page 108]
6048
6049 Internet-Draft LinuxSampler Control Protocol November 2009
6050
6051
6052 Restricts the search to instruments with keyword list that
6053 satisfies the supplied search string (encapsulated into
6054 apostrophes, supporting escape sequences as described in chapter
6055 "Character Set and Escape Sequences (Section 7.1)").
6056
6057 IS_DRUM=true | false
6058
6059 Either true or false. Restricts the search to drum kits or
6060 chromatic instruments.
6061
6062 FORMAT_FAMILIES='<format-list>'
6063
6064 Restricts the search to instruments of the supplied format
6065 families, where <format-list> is a comma separated list of format
6066 families.
6067
6068 Where <search-string> is either a regular expression, or a word list
6069 separated with spaces for OR search and with '+' for AND search.
6070
6071 Possible Answers:
6072
6073 A comma separated list with the absolute path names (encapsulated
6074 into apostrophes) of all instruments in the specified directory
6075 that satisfy the supplied search criterias.
6076
6077 "ERR:<error-code>:<error-message>" -
6078
6079 if the given directory does not exist.
6080
6081 Example:
6082
6083 C: "FIND DB_INSTRUMENTS '/Piano Collection' NAME='bosendorfer+
6084 290'"
6085
6086 S: "'/Piano Collection/Bosendorfer 290'"
6087
6088 C: "FIND DB_INSTRUMENTS '/Piano Collection' CREATED='2007-04-01
6089 09:30:13..'"
6090
6091 S: "'/Piano Collection/Bosendorfer 290','/Piano Collection/
6092 Steinway D'"
6093
6094 6.8.21. Getting job status information
6095
6096 The front-end can ask for the current status of a particular database
6097 instruments job by sending the following command:
6098
6099
6100
6101
6102
6103 Schoenebeck Expires May 5, 2010 [Page 109]
6104
6105 Internet-Draft LinuxSampler Control Protocol November 2009
6106
6107
6108 GET DB_INSTRUMENTS_JOB INFO <job-id>
6109
6110 Where <job-id> should be replaced by the numerical ID of the job the
6111 front-end is interested in.
6112
6113 Possible Answers:
6114
6115 LinuxSampler will answer by sending a <CRLF> separated list. Each
6116 answer line begins with the settings category name followed by a
6117 colon and then a space character <SP> and finally the info
6118 character string to that setting category. At the moment the
6119 following categories are defined:
6120
6121
6122
6123 FILES_TOTAL -
6124
6125 The total number of files scheduled for scanning
6126
6127 FILES_SCANNED -
6128
6129 The current number of scanned files
6130
6131 SCANNING -
6132
6133 The absolute path name of the file which is currently being
6134 scanned
6135
6136 STATUS -
6137
6138 An integer value between 0 and 100 indicating the scanning
6139 progress percentage of the file which is currently being
6140 scanned
6141
6142 The mentioned fields above don't have to be in particular order.
6143
6144 Example:
6145
6146 C: "GET DB_INSTRUMENTS_JOB INFO 2"
6147
6148 S: "FILES_TOTAL: 12"
6149
6150 "FILES_SCANNED: 7"
6151
6152 "SCANNING: /home/me/gigs/Bosendorfer 290.gig"
6153
6154 "STATUS: 42"
6155
6156
6157
6158
6159 Schoenebeck Expires May 5, 2010 [Page 110]
6160
6161 Internet-Draft LinuxSampler Control Protocol November 2009
6162
6163
6164 "."
6165
6166 6.8.22. Formatting the instruments database
6167
6168 The front-end can remove all instruments and directories and re-
6169 create the instruments database structure (e.g., in case of a
6170 database corruption) by sending the following command:
6171
6172 FORMAT INSTRUMENTS_DB
6173
6174 Possible Answers:
6175
6176 "OK" -
6177
6178 on success
6179
6180 "ERR:<error-code>:<error-message>" -
6181
6182 If the formatting of the instruments database failed.
6183
6184 6.8.23. Checking for lost instrument files
6185
6186 The front-end can retrieve the list of all instrument files in the
6187 instruments database that don't exist in the filesystem by sending
6188 the following command:
6189
6190 FIND LOST DB_INSTRUMENT_FILES
6191
6192 Possible Answers:
6193
6194 A comma separated list with the absolute path names (encapsulated
6195 into apostrophes) of all lost instrument files.
6196
6197 "ERR:<error-code>:<error-message>" -
6198
6199 in case it failed, providing an appropriate error code and
6200 error message.
6201
6202 Example:
6203
6204 C: "FIND LOST DB_INSTRUMENT_FILES"
6205
6206 S: "'/gigs/Bosendorfer 290.gig','/gigs/Steinway D.gig','/gigs/Free
6207 Piano.gig'"
6208
6209
6210
6211
6212
6213
6214
6215 Schoenebeck Expires May 5, 2010 [Page 111]
6216
6217 Internet-Draft LinuxSampler Control Protocol November 2009
6218
6219
6220 6.8.24. Replacing an instrument file
6221
6222 The front-end can substitute all occurrences of an instrument file in
6223 the instruments database with a new one by sending the following
6224 command:
6225
6226 SET DB_INSTRUMENT FILE_PATH <old_path> <new_path>
6227
6228 Where <old_path> is the absolute path name of the instrument file to
6229 substitute with <new_path>.
6230
6231 Possible Answers:
6232
6233 "OK" -
6234
6235 on success
6236
6237 "ERR:<error-code>:<error-message>" -
6238
6239 in case it failed, providing an appropriate error code and
6240 error message.
6241
6242 Example:
6243
6244 C: "SET DB_INSTRUMENT FILE_PATH '/gigs/Bosendorfer 290.gig'
6245 '/gigs/pianos/Bosendorfer 290.gig'"
6246
6247 S: "OK"
6248
6249 6.9. Editing Instruments
6250
6251 The sampler allows to edit instruments while playing with the sampler
6252 by spawning an external (3rd party) instrument editor application for
6253 a given instrument. The 3rd party instrument editor applications
6254 have to place a respective plugin DLL file into the sampler's plugins
6255 directory. The sampler will automatically try to load all plugin
6256 DLLs in that directory on startup and only on startup!
6257
6258 At the moment there is only one command for this feature set, but
6259 this will most probably change in future.
6260
6261 6.9.1. Opening an appropriate instrument editor application
6262
6263 The front-end can request to open an appropriate instrument editor
6264 application by sending the following command:
6265
6266
6267
6268
6269
6270
6271 Schoenebeck Expires May 5, 2010 [Page 112]
6272
6273 Internet-Draft LinuxSampler Control Protocol November 2009
6274
6275
6276 EDIT CHANNEL INSTRUMENT <sampler-channel>
6277
6278 Where <sampler-channel> should be replaced by the number of the
6279 sampler channel as given by the "ADD CHANNEL" (Section 6.4.5) or
6280 "LIST CHANNELS" (Section 6.4.4) command.
6281
6282 The sampler will try to ask all registered instrument editors (or to
6283 be more specific: their sampler plugins) whether they are capable to
6284 handle the instrument on the given sampler channel. The sampler will
6285 simply use the first instrument editor application which replied with
6286 a positive answer and spawn that instrument editor application within
6287 the sampler's process and provide that application access to the
6288 instrument's data structures, so both applications can share and
6289 access the same instruments data at the same time, thus allowing to
6290 immediately hear changes with the sampler made by the instrument
6291 editor.
6292
6293 Note: consequently instrument editors are always spawned locally on
6294 the same machine where the sampler is running on!
6295
6296 Possible Answers:
6297
6298 "OK" -
6299
6300 when an appropriate instrument editor was launched
6301
6302 "WRN:<warning-code>:<warning-message>" -
6303
6304 when an appropriate instrument editor was launched, but there
6305 are noteworthy issues
6306
6307 "ERR:<error-code>:<error-message>" -
6308
6309 when an appropriate instrument editor could not be launched
6310
6311 Examples:
6312
6313 C: "EDIT CHANNEL INSTRUMENT 0"
6314
6315 S: "OK"
6316
6317 6.10. Managing Files
6318
6319 You can query detailed informations about files located at the same
6320 system where the sampler instance is running on. Using this command
6321 set allows to retrieve file informations even remotely from another
6322 machine.
6323
6324
6325
6326
6327 Schoenebeck Expires May 5, 2010 [Page 113]
6328
6329 Internet-Draft LinuxSampler Control Protocol November 2009
6330
6331
6332 6.10.1. Retrieving amount of instruments of a file
6333
6334 The front-end can retrieve the amount of instruments within a given
6335 instrument file by sending the following command:
6336
6337 GET FILE INSTRUMENTS <filename>
6338
6339 Where <filename> is the name of the instrument file (encapsulated
6340 into apostrophes, supporting escape sequences as described in chapter
6341 "Character Set and Escape Sequences (Section 7.1)").
6342
6343 The sampler will try to ask all sampler engines, whether they support
6344 the given file and ask the first engine with a positive answer for
6345 the amount of instruments.
6346
6347 Possible Answers:
6348
6349 On success, the sampler will answer by returning the amount of
6350 instruments.
6351
6352 "ERR:<error-code>:<error-message>" -
6353
6354 if the file could not be handled
6355
6356 Examples:
6357
6358 C: "GET FILE INSTRUMENTS 'D:/Sounds/Foo.gig'"
6359
6360 S: "10"
6361
6362 6.10.2. Retrieving all instruments of a file
6363
6364 The front-end can retrieve a list of all instruments within a given
6365 instrument file by sending the following command:
6366
6367 LIST FILE INSTRUMENTS <filename>
6368
6369 Where <filename> is the name of the instrument file (encapsulated
6370 into apostrophes, supporting escape sequences as described in chapter
6371 "Character Set and Escape Sequences (Section 7.1)").
6372
6373 The sampler will try to ask all sampler engines, whether they support
6374 the given file and ask the first engine with a positive answer for a
6375 list of IDs for the instruments in the given file.
6376
6377 Possible Answers:
6378
6379
6380
6381
6382
6383 Schoenebeck Expires May 5, 2010 [Page 114]
6384
6385 Internet-Draft LinuxSampler Control Protocol November 2009
6386
6387
6388 On success, the sampler will answer by returning a comma separated
6389 list of instrument IDs.
6390
6391 "ERR:<error-code>:<error-message>" -
6392
6393 if the file could not be handled
6394
6395 Examples:
6396
6397 C: "LIST FILE INSTRUMENTS 'D:/Sounds/Foo.gig'"
6398
6399 S: "0,1,2,3,4,5,6,7,8,9"
6400
6401 6.10.3. Retrieving informations about one instrument in a file
6402
6403 The front-end can retrieve detailed informations about a specific
6404 instrument within a given instrument file by sending the following
6405 command:
6406
6407 GET FILE INSTRUMENT INFO <filename> <instr-id>
6408
6409 Where <filename> is the name of the instrument file (encapsulated
6410 into apostrophes, supporting escape sequences as described in chapter
6411 "Character Set and Escape Sequences (Section 7.1)") and <instr-id> is
6412 the numeric instrument ID as returned by the "LIST FILE INSTRUMENTS"
6413 (Section 6.10.2) command.
6414
6415 The sampler will try to ask all sampler engines, whether they support
6416 the given file and ask the first engine with a positive answer for
6417 informations about the specific instrument in the given file.
6418
6419 Possible Answers:
6420
6421 LinuxSampler will answer by sending a <CRLF> separated list. Each
6422 answer line begins with the settings category name followed by a
6423 colon and then a space character <SP> and finally the info
6424 character string to that setting category. At the moment the
6425 following categories are defined:
6426
6427
6428
6429 NAME -
6430
6431 name of the instrument as stored in the instrument file
6432
6433 FORMAT_FAMILY -
6434
6435
6436
6437
6438
6439 Schoenebeck Expires May 5, 2010 [Page 115]
6440
6441 Internet-Draft LinuxSampler Control Protocol November 2009
6442
6443
6444 name of the sampler format of the given instrument
6445
6446 FORMAT_VERSION -
6447
6448 version of the sampler format the instrumen is stored as
6449
6450 PRODUCT -
6451
6452 official product name of the instrument as stored in the
6453 file
6454
6455 ARTISTS -
6456
6457 artists / sample library vendor of the instrument
6458
6459 KEY_BINDINGS -
6460
6461 comma separated list of integer values representing the
6462 instrument's key mapping in the range between 0 .. 127,
6463 reflecting the analog meaning of the MIDI specification.
6464
6465 KEYSWITCH_BINDINGS -
6466
6467 comma separated list of integer values representing the
6468 instrument's keyswitch mapping in the range between 0 ..
6469 127, reflecting the analog meaning of the MIDI
6470 specification.
6471
6472 The mentioned fields above don't have to be in particular order.
6473
6474 Example:
6475
6476 C: "GET FILE INSTRUMENT INFO 'D:/Sounds/Foo.gig' 0"
6477
6478 S: "NAME: Lunatic Loops"
6479
6480 "FORMAT_FAMILY: GIG"
6481
6482 "FORMAT_VERSION: 3"
6483
6484 "PRODUCT: The Backbone Bongo Beats"
6485
6486 "ARTISTS: Jimmy the Fish"
6487
6488 "."
6489
6490
6491
6492
6493
6494
6495 Schoenebeck Expires May 5, 2010 [Page 116]
6496
6497 Internet-Draft LinuxSampler Control Protocol November 2009
6498
6499
6500 7. Command Syntax
6501
6502 The grammar of the control protocol as descibed in Section 6 is
6503 defined below using Backus-Naur Form (BNF as described in [RFC2234])
6504 where applicable.
6505
6506 input =
6507
6508 line LF
6509
6510 / line CR LF
6511
6512 line =
6513
6514 /* epsilon (empty line ignored) */
6515
6516 / comment
6517
6518 / command
6519
6520 / error
6521
6522 comment =
6523
6524 '#'
6525
6526 / comment '#'
6527
6528 / comment SP
6529
6530 / comment number
6531
6532 / comment string
6533
6534 command =
6535
6536 ADD SP add_instruction
6537
6538 / MAP SP map_instruction
6539
6540 / UNMAP SP unmap_instruction
6541
6542 / GET SP get_instruction
6543
6544 / CREATE SP create_instruction
6545
6546 / DESTROY SP destroy_instruction
6547
6548
6549
6550
6551 Schoenebeck Expires May 5, 2010 [Page 117]
6552
6553 Internet-Draft LinuxSampler Control Protocol November 2009
6554
6555
6556 / LIST SP list_instruction
6557
6558 / LOAD SP load_instruction
6559
6560 / REMOVE SP remove_instruction
6561
6562 / SET SP set_instruction
6563
6564 / SUBSCRIBE SP subscribe_event
6565
6566 / UNSUBSCRIBE SP unsubscribe_event
6567
6568 / RESET SP reset_instruction
6569
6570 / CLEAR SP clear_instruction
6571
6572 / FIND SP find_instruction
6573
6574 / MOVE SP move_instruction
6575
6576 / COPY SP copy_instruction
6577
6578 / EDIT SP edit_instruction
6579
6580 / FORMAT SP format_instruction
6581
6582 / SEND SP send_instruction
6583
6584 / RESET
6585
6586 / QUIT
6587
6588 add_instruction =
6589
6590 CHANNEL
6591
6592 / DB_INSTRUMENT_DIRECTORY SP db_path
6593
6594 / DB_INSTRUMENTS SP NON_MODAL SP scan_mode SP db_path SP filename
6595
6596 / DB_INSTRUMENTS SP NON_MODAL SP scan_mode SP FILE_AS_DIR SP
6597 db_path SP filename
6598
6599 / DB_INSTRUMENTS SP scan_mode SP db_path SP filename
6600
6601 / DB_INSTRUMENTS SP scan_mode SP FILE_AS_DIR SP db_path SP
6602 filename
6603
6604
6605
6606
6607 Schoenebeck Expires May 5, 2010 [Page 118]
6608
6609 Internet-Draft LinuxSampler Control Protocol November 2009
6610
6611
6612 / DB_INSTRUMENTS SP NON_MODAL SP db_path SP filename
6613
6614 / DB_INSTRUMENTS SP NON_MODAL SP db_path SP filename SP
6615 instrument_index
6616
6617 / DB_INSTRUMENTS SP db_path SP filename
6618
6619 / DB_INSTRUMENTS SP db_path SP filename SP instrument_index
6620
6621 / MIDI_INSTRUMENT_MAP
6622
6623 / MIDI_INSTRUMENT_MAP SP map_name
6624
6625 subscribe_event =
6626
6627 AUDIO_OUTPUT_DEVICE_COUNT
6628
6629 / AUDIO_OUTPUT_DEVICE_INFO
6630
6631 / MIDI_INPUT_DEVICE_COUNT
6632
6633 / MIDI_INPUT_DEVICE_INFO
6634
6635 / CHANNEL_COUNT
6636
6637 / CHANNEL_MIDI
6638
6639 / DEVICE_MIDI
6640
6641 / VOICE_COUNT
6642
6643 / STREAM_COUNT
6644
6645 / BUFFER_FILL
6646
6647 / CHANNEL_INFO
6648
6649 / FX_SEND_COUNT
6650
6651 / FX_SEND_INFO
6652
6653 / MIDI_INSTRUMENT_MAP_COUNT
6654
6655 / MIDI_INSTRUMENT_MAP_INFO
6656
6657 / MIDI_INSTRUMENT_COUNT
6658
6659
6660
6661
6662
6663 Schoenebeck Expires May 5, 2010 [Page 119]
6664
6665 Internet-Draft LinuxSampler Control Protocol November 2009
6666
6667
6668 / MIDI_INSTRUMENT_INFO
6669
6670 / DB_INSTRUMENT_DIRECTORY_COUNT
6671
6672 / DB_INSTRUMENT_DIRECTORY_INFO
6673
6674 / DB_INSTRUMENT_COUNT
6675
6676 / DB_INSTRUMENT_INFO
6677
6678 / DB_INSTRUMENTS_JOB_INFO
6679
6680 / MISCELLANEOUS
6681
6682 / TOTAL_STREAM_COUNT
6683
6684 / TOTAL_VOICE_COUNT
6685
6686 / GLOBAL_INFO
6687
6688 unsubscribe_event =
6689
6690 AUDIO_OUTPUT_DEVICE_COUNT
6691
6692 / AUDIO_OUTPUT_DEVICE_INFO
6693
6694 / MIDI_INPUT_DEVICE_COUNT
6695
6696 / MIDI_INPUT_DEVICE_INFO
6697
6698 / CHANNEL_COUNT
6699
6700 / CHANNEL_MIDI
6701
6702 / DEVICE_MIDI
6703
6704 / VOICE_COUNT
6705
6706 / STREAM_COUNT
6707
6708 / BUFFER_FILL
6709
6710 / CHANNEL_INFO
6711
6712 / FX_SEND_COUNT
6713
6714 / FX_SEND_INFO
6715
6716
6717
6718
6719 Schoenebeck Expires May 5, 2010 [Page 120]
6720
6721 Internet-Draft LinuxSampler Control Protocol November 2009
6722
6723
6724 / MIDI_INSTRUMENT_MAP_COUNT
6725
6726 / MIDI_INSTRUMENT_MAP_INFO
6727
6728 / MIDI_INSTRUMENT_COUNT
6729
6730 / MIDI_INSTRUMENT_INFO
6731
6732 / DB_INSTRUMENT_DIRECTORY_COUNT
6733
6734 / DB_INSTRUMENT_DIRECTORY_INFO
6735
6736 / DB_INSTRUMENT_COUNT
6737
6738 / DB_INSTRUMENT_INFO
6739
6740 / DB_INSTRUMENTS_JOB_INFO
6741
6742 / MISCELLANEOUS
6743
6744 / TOTAL_STREAM_COUNT
6745
6746 / TOTAL_VOICE_COUNT
6747
6748 / GLOBAL_INFO
6749
6750 map_instruction =
6751
6752 MIDI_INSTRUMENT SP modal_arg midi_map SP midi_bank SP midi_prog SP
6753 engine_name SP filename SP instrument_index SP volume_value
6754
6755 / MIDI_INSTRUMENT SP modal_arg midi_map SP midi_bank SP midi_prog
6756 SP engine_name SP filename SP instrument_index SP volume_value SP
6757 instr_load_mode
6758
6759 / MIDI_INSTRUMENT SP modal_arg midi_map SP midi_bank SP midi_prog
6760 SP engine_name SP filename SP instrument_index SP volume_value SP
6761 entry_name
6762
6763 / MIDI_INSTRUMENT SP modal_arg midi_map SP midi_bank SP midi_prog
6764 SP engine_name SP filename SP instrument_index SP volume_value SP
6765 instr_load_mode SP entry_name
6766
6767 unmap_instruction =
6768
6769 MIDI_INSTRUMENT SP midi_map SP midi_bank SP midi_prog
6770
6771 remove_instruction =
6772
6773
6774
6775 Schoenebeck Expires May 5, 2010 [Page 121]
6776
6777 Internet-Draft LinuxSampler Control Protocol November 2009
6778
6779
6780 CHANNEL SP sampler_channel
6781
6782 / MIDI_INSTRUMENT_MAP SP midi_map
6783
6784 / MIDI_INSTRUMENT_MAP SP ALL
6785
6786 / DB_INSTRUMENT_DIRECTORY SP FORCE SP db_path
6787
6788 / DB_INSTRUMENT_DIRECTORY SP db_path
6789
6790 / DB_INSTRUMENT SP db_path
6791
6792 get_instruction =
6793
6794 AVAILABLE_ENGINES
6795
6796 / AVAILABLE_MIDI_INPUT_DRIVERS
6797
6798 / MIDI_INPUT_DRIVER SP INFO SP string
6799
6800 / MIDI_INPUT_DRIVER_PARAMETER SP INFO SP string SP string
6801
6802 / MIDI_INPUT_DRIVER_PARAMETER SP INFO SP string SP string SP
6803 key_val_list
6804
6805 / AVAILABLE_AUDIO_OUTPUT_DRIVERS
6806
6807 / AUDIO_OUTPUT_DRIVER SP INFO SP string
6808
6809 / AUDIO_OUTPUT_DRIVER_PARAMETER SP INFO SP string SP string
6810
6811 / AUDIO_OUTPUT_DRIVER_PARAMETER SP INFO SP string SP string SP
6812 key_val_list
6813
6814 / AUDIO_OUTPUT_DEVICES
6815
6816 / MIDI_INPUT_DEVICES
6817
6818 / AUDIO_OUTPUT_DEVICE SP INFO SP number
6819
6820 / MIDI_INPUT_DEVICE SP INFO SP number
6821
6822 / MIDI_INPUT_PORT SP INFO SP number SP number
6823
6824 / MIDI_INPUT_PORT_PARAMETER SP INFO SP number SP number SP string
6825
6826 / AUDIO_OUTPUT_CHANNEL SP INFO SP number SP number
6827
6828
6829
6830
6831 Schoenebeck Expires May 5, 2010 [Page 122]
6832
6833 Internet-Draft LinuxSampler Control Protocol November 2009
6834
6835
6836 / AUDIO_OUTPUT_CHANNEL_PARAMETER SP INFO SP number SP number SP
6837 string
6838
6839 / CHANNELS
6840
6841 / CHANNEL SP INFO SP sampler_channel
6842
6843 / CHANNEL SP BUFFER_FILL SP buffer_size_type SP sampler_channel
6844
6845 / CHANNEL SP STREAM_COUNT SP sampler_channel
6846
6847 / CHANNEL SP VOICE_COUNT SP sampler_channel
6848
6849 / ENGINE SP INFO SP engine_name
6850
6851 / SERVER SP INFO
6852
6853 / TOTAL_STREAM_COUNT
6854
6855 / TOTAL_VOICE_COUNT
6856
6857 / TOTAL_VOICE_COUNT_MAX
6858
6859 / MIDI_INSTRUMENTS SP midi_map
6860
6861 / MIDI_INSTRUMENTS SP ALL
6862
6863 / MIDI_INSTRUMENT SP INFO SP midi_map SP midi_bank SP midi_prog
6864
6865 / MIDI_INSTRUMENT_MAPS
6866
6867 / MIDI_INSTRUMENT_MAP SP INFO SP midi_map
6868
6869 / FX_SENDS SP sampler_channel
6870
6871 / FX_SEND SP INFO SP sampler_channel SP fx_send_id
6872
6873 / DB_INSTRUMENT_DIRECTORIES SP RECURSIVE SP db_path
6874
6875 / DB_INSTRUMENT_DIRECTORIES SP db_path
6876
6877 / DB_INSTRUMENT_DIRECTORY SP INFO SP db_path
6878
6879 / DB_INSTRUMENTS SP RECURSIVE SP db_path
6880
6881 / DB_INSTRUMENTS SP db_path
6882
6883
6884
6885
6886
6887 Schoenebeck Expires May 5, 2010 [Page 123]
6888
6889 Internet-Draft LinuxSampler Control Protocol November 2009
6890
6891
6892 / DB_INSTRUMENT SP INFO SP db_path
6893
6894 / DB_INSTRUMENTS_JOB SP INFO SP number
6895
6896 / VOLUME
6897
6898 / VOICES
6899
6900 / STREAMS
6901
6902 / FILE SP INSTRUMENTS SP filename
6903
6904 / FILE SP INSTRUMENT SP INFO SP filename SP instrument_index
6905
6906 set_instruction =
6907
6908 AUDIO_OUTPUT_DEVICE_PARAMETER SP number SP string '='
6909 param_val_list
6910
6911 / AUDIO_OUTPUT_CHANNEL_PARAMETER SP number SP number SP string '='
6912 param_val_list
6913
6914 / MIDI_INPUT_DEVICE_PARAMETER SP number SP string '='
6915 param_val_list
6916
6917 / MIDI_INPUT_PORT_PARAMETER SP number SP number SP string '=' NONE
6918
6919 / MIDI_INPUT_PORT_PARAMETER SP number SP number SP string '='
6920 param_val_list
6921
6922 / CHANNEL SP set_chan_instruction
6923
6924 / MIDI_INSTRUMENT_MAP SP NAME SP midi_map SP map_name
6925
6926 / FX_SEND SP NAME SP sampler_channel SP fx_send_id SP fx_send_name
6927
6928 / FX_SEND SP AUDIO_OUTPUT_CHANNEL SP sampler_channel SP fx_send_id
6929 SP audio_channel_index SP audio_channel_index
6930
6931 / FX_SEND SP MIDI_CONTROLLER SP sampler_channel SP fx_send_id SP
6932 midi_ctrl
6933
6934 / FX_SEND SP LEVEL SP sampler_channel SP fx_send_id SP
6935 volume_value
6936
6937 / DB_INSTRUMENT_DIRECTORY SP NAME SP db_path SP stringval_escaped
6938
6939
6940
6941
6942
6943 Schoenebeck Expires May 5, 2010 [Page 124]
6944
6945 Internet-Draft LinuxSampler Control Protocol November 2009
6946
6947
6948 / DB_INSTRUMENT_DIRECTORY SP DESCRIPTION SP db_path SP
6949 stringval_escaped
6950
6951 / DB_INSTRUMENT SP NAME SP db_path SP stringval_escaped
6952
6953 / DB_INSTRUMENT SP DESCRIPTION SP db_path SP stringval_escaped
6954
6955 / DB_INSTRUMENT SP FILE_PATH SP filename SP filename
6956
6957 / ECHO SP boolean
6958
6959 / VOLUME SP volume_value
6960
6961 / VOICES SP number
6962
6963 / STREAMS SP number
6964
6965 create_instruction =
6966
6967 AUDIO_OUTPUT_DEVICE SP string SP key_val_list
6968
6969 / AUDIO_OUTPUT_DEVICE SP string
6970
6971 / MIDI_INPUT_DEVICE SP string SP key_val_list
6972
6973 / MIDI_INPUT_DEVICE SP string
6974
6975 / FX_SEND SP sampler_channel SP midi_ctrl
6976
6977 / FX_SEND SP sampler_channel SP midi_ctrl SP fx_send_name
6978
6979 reset_instruction =
6980
6981 CHANNEL SP sampler_channel
6982
6983 clear_instruction =
6984
6985 MIDI_INSTRUMENTS SP midi_map
6986
6987 / MIDI_INSTRUMENTS SP ALL
6988
6989 find_instruction =
6990
6991 DB_INSTRUMENTS SP NON_RECURSIVE SP db_path SP query_val_list
6992
6993 / DB_INSTRUMENTS SP db_path SP query_val_list
6994
6995
6996
6997
6998
6999 Schoenebeck Expires May 5, 2010 [Page 125]
7000
7001 Internet-Draft LinuxSampler Control Protocol November 2009
7002
7003
7004 / DB_INSTRUMENT_DIRECTORIES SP NON_RECURSIVE SP db_path SP
7005 query_val_list
7006
7007 / DB_INSTRUMENT_DIRECTORIES SP db_path SP query_val_list
7008
7009 / LOST SP DB_INSTRUMENT_FILES
7010
7011 move_instruction =
7012
7013 DB_INSTRUMENT_DIRECTORY SP db_path SP db_path
7014
7015 / DB_INSTRUMENT SP db_path SP db_path
7016
7017 copy_instruction =
7018
7019 DB_INSTRUMENT_DIRECTORY SP db_path SP db_path
7020
7021 / DB_INSTRUMENT SP db_path SP db_path
7022
7023 destroy_instruction =
7024
7025 AUDIO_OUTPUT_DEVICE SP number
7026
7027 / MIDI_INPUT_DEVICE SP number
7028
7029 / FX_SEND SP sampler_channel SP fx_send_id
7030
7031 load_instruction =
7032
7033 INSTRUMENT SP load_instr_args
7034
7035 / ENGINE SP load_engine_args
7036
7037 set_chan_instruction =
7038
7039 AUDIO_OUTPUT_DEVICE SP sampler_channel SP device_index
7040
7041 / AUDIO_OUTPUT_CHANNEL SP sampler_channel SP audio_channel_index
7042 SP audio_channel_index
7043
7044 / AUDIO_OUTPUT_TYPE SP sampler_channel SP audio_output_type_name
7045
7046 / MIDI_INPUT SP sampler_channel SP device_index SP
7047 midi_input_port_index SP midi_input_channel_index
7048
7049 / MIDI_INPUT_DEVICE SP sampler_channel SP device_index
7050
7051
7052
7053
7054
7055 Schoenebeck Expires May 5, 2010 [Page 126]
7056
7057 Internet-Draft LinuxSampler Control Protocol November 2009
7058
7059
7060 / MIDI_INPUT_PORT SP sampler_channel SP midi_input_port_index
7061
7062 / MIDI_INPUT_CHANNEL SP sampler_channel SP
7063 midi_input_channel_index
7064
7065 / MIDI_INPUT_TYPE SP sampler_channel SP midi_input_type_name
7066
7067 / VOLUME SP sampler_channel SP volume_value
7068
7069 / MUTE SP sampler_channel SP boolean
7070
7071 / SOLO SP sampler_channel SP boolean
7072
7073 / MIDI_INSTRUMENT_MAP SP sampler_channel SP midi_map
7074
7075 / MIDI_INSTRUMENT_MAP SP sampler_channel SP NONE
7076
7077 / MIDI_INSTRUMENT_MAP SP sampler_channel SP DEFAULT
7078
7079 edit_instruction =
7080
7081 CHANNEL SP INSTRUMENT SP sampler_channel
7082
7083 format_instruction =
7084
7085 INSTRUMENTS_DB
7086
7087 modal_arg =
7088
7089 /* epsilon (empty argument) */
7090
7091 / NON_MODAL SP
7092
7093 key_val_list =
7094
7095 string '=' param_val_list
7096
7097 / key_val_list SP string '=' param_val_list
7098
7099 buffer_size_type =
7100
7101 BYTES
7102
7103 / PERCENTAGE
7104
7105 list_instruction =
7106
7107
7108
7109
7110
7111 Schoenebeck Expires May 5, 2010 [Page 127]
7112
7113 Internet-Draft LinuxSampler Control Protocol November 2009
7114
7115
7116 AUDIO_OUTPUT_DEVICES
7117
7118 / MIDI_INPUT_DEVICES
7119
7120 / CHANNELS
7121
7122 / AVAILABLE_ENGINES
7123
7124 / AVAILABLE_MIDI_INPUT_DRIVERS
7125
7126 / AVAILABLE_AUDIO_OUTPUT_DRIVERS
7127
7128 / MIDI_INSTRUMENTS SP midi_map
7129
7130 / MIDI_INSTRUMENTS SP ALL
7131
7132 / MIDI_INSTRUMENT_MAPS
7133
7134 / FX_SENDS SP sampler_channel
7135
7136 / DB_INSTRUMENT_DIRECTORIES SP RECURSIVE SP db_path
7137
7138 / DB_INSTRUMENT_DIRECTORIES SP db_path
7139
7140 / DB_INSTRUMENTS SP RECURSIVE SP db_path
7141
7142 / DB_INSTRUMENTS SP db_path
7143
7144 / FILE SP INSTRUMENTS SP filename
7145
7146 send_instruction =
7147
7148 CHANNEL SP MIDI_DATA SP string SP sampler_channel SP number SP
7149 number
7150
7151 load_instr_args =
7152
7153 filename SP instrument_index SP sampler_channel
7154
7155 / NON_MODAL SP filename SP instrument_index SP sampler_channel
7156
7157 load_engine_args =
7158
7159 engine_name SP sampler_channel
7160
7161 instr_load_mode =
7162
7163
7164
7165
7166
7167 Schoenebeck Expires May 5, 2010 [Page 128]
7168
7169 Internet-Draft LinuxSampler Control Protocol November 2009
7170
7171
7172 ON_DEMAND
7173
7174 / ON_DEMAND_HOLD
7175
7176 / PERSISTENT
7177
7178 device_index =
7179
7180 number
7181
7182 audio_channel_index =
7183
7184 number
7185
7186 audio_output_type_name =
7187
7188 string
7189
7190 midi_input_port_index =
7191
7192 number
7193
7194 midi_input_channel_index =
7195
7196 number
7197
7198 / ALL
7199
7200 midi_input_type_name =
7201
7202 string
7203
7204 midi_map =
7205
7206 number
7207
7208 midi_bank =
7209
7210 number
7211
7212 midi_prog =
7213
7214 number
7215
7216 midi_ctrl =
7217
7218 number
7219
7220
7221
7222
7223 Schoenebeck Expires May 5, 2010 [Page 129]
7224
7225 Internet-Draft LinuxSampler Control Protocol November 2009
7226
7227
7228 volume_value =
7229
7230 dotnum
7231
7232 / number
7233
7234 sampler_channel =
7235
7236 number
7237
7238 instrument_index =
7239
7240 number
7241
7242 fx_send_id =
7243
7244 number
7245
7246 engine_name =
7247
7248 string
7249
7250 filename =
7251
7252 path
7253
7254 db_path =
7255
7256 path
7257
7258 map_name =
7259
7260 stringval_escaped
7261
7262 entry_name =
7263
7264 stringval_escaped
7265
7266 fx_send_name =
7267
7268 stringval_escaped
7269
7270 param_val_list =
7271
7272 param_val
7273
7274 / param_val_list','param_val
7275
7276
7277
7278
7279 Schoenebeck Expires May 5, 2010 [Page 130]
7280
7281 Internet-Draft LinuxSampler Control Protocol November 2009
7282
7283
7284 param_val =
7285
7286 string
7287
7288 / stringval
7289
7290 / number
7291
7292 / dotnum
7293
7294 query_val_list =
7295
7296 string '=' query_val
7297
7298 / query_val_list SP string '=' query_val
7299
7300 query_val =
7301
7302 text_escaped
7303
7304 / stringval_escaped
7305
7306 scan_mode =
7307
7308 RECURSIVE
7309
7310 / NON_RECURSIVE
7311
7312 / FLAT
7313
7314 7.1. Character Set and Escape Sequences
7315
7316 Older versions of this protocol up to and including v1.1 only
7317 supported the standard ASCII character set (ASCII code 0 - 127)
7318 [RFC20], all younger versions of this protocol however support the
7319 Extended ASCII character set (ASCII code 0 - 255). The same group of
7320 younger protocols also support escape sequences, but only for
7321 certain, explicitly declared parts of the protocol. The supported
7322 escape sequences are defined as follows:
7323
7324
7325
7326
7327
7328
7329
7330
7331
7332
7333
7334
7335 Schoenebeck Expires May 5, 2010 [Page 131]
7336
7337 Internet-Draft LinuxSampler Control Protocol November 2009
7338
7339
7340 +------------------------+------------------------------------------+
7341 | ASCII Character | Translated into (Name) |
7342 | Sequence | |
7343 +------------------------+------------------------------------------+
7344 | \n | new line |
7345 | | |
7346 | \r | carriage return |
7347 | | |
7348 | \f | form feed |
7349 | | |
7350 | \t | horizontal tab |
7351 | | |
7352 | \v | vertical tab |
7353 | | |
7354 | \' | apostrophe |
7355 | | |
7356 | \" | quotation mark |
7357 | | |
7358 | \\ | backslash |
7359 | | |
7360 | \OOO | three digit octal ASCII code of the |
7361 | | character |
7362 | | |
7363 | \xHH | two digit hex ASCII code of the |
7364 | | character |
7365 +------------------------+------------------------------------------+
7366
7367 Notice: due to the transition of certain parts of the protocol which
7368 now support escape sequences, a slight backward incompatibility to
7369 protocols version v1.1 and younger has been introduced. The only
7370 difference is that in parts of the protocol where escape characters
7371 are now supported, a backslash characters MUST be escaped as well
7372 (that is as double backslash), whereas in the old versions a single
7373 backslash was sufficient.
7374
7375 The following LSCP commands support escape sequences as part of their
7376 filename / path based arguments and / or may contain a filename /
7377 path with escape sequences in their response:
7378
7379 "LOAD INSTRUMENT" (Section 6.4.1)
7380
7381 "GET CHANNEL INFO" (Section 6.4.10)
7382
7383 "MAP MIDI_INSTRUMENT" (Section 6.7.7)
7384
7385 "GET MIDI_INSTRUMENT INFO" (Section 6.7.11)
7386
7387
7388
7389
7390
7391 Schoenebeck Expires May 5, 2010 [Page 132]
7392
7393 Internet-Draft LinuxSampler Control Protocol November 2009
7394
7395
7396 "ADD DB_INSTRUMENT_DIRECTORY" (Section 6.8.1)
7397
7398 "ADD DB_INSTRUMENTS" (Section 6.8.11)
7399
7400 "REMOVE DB_INSTRUMENT_DIRECTORY" (Section 6.8.2)
7401
7402 "REMOVE DB_INSTRUMENT" (Section 6.8.12)
7403
7404 "GET DB_INSTRUMENT_DIRECTORIES" (Section 6.8.3)
7405
7406 "LIST DB_INSTRUMENT_DIRECTORIES" (Section 6.8.4)
7407
7408 "GET DB_INSTRUMENT_DIRECTORY INFO" (Section 6.8.5)
7409
7410 "GET DB_INSTRUMENTS" (Section 6.8.13)
7411
7412 "LIST DB_INSTRUMENTS" (Section 6.8.14)
7413
7414 "GET DB_INSTRUMENT INFO" (Section 6.8.15)
7415
7416 "SET DB_INSTRUMENT_DIRECTORY NAME" (Section 6.8.6)
7417
7418 "SET DB_INSTRUMENT_DIRECTORY DESCRIPTION" (Section 6.8.9)
7419
7420 "SET DB_INSTRUMENT NAME" (Section 6.8.16)
7421
7422 "SET DB_INSTRUMENT DESCRIPTION" (Section 6.8.19)
7423
7424 "FIND DB_INSTRUMENTS" (Section 6.8.20)
7425
7426 "FIND DB_INSTRUMENT_DIRECTORIES" (Section 6.8.10)
7427
7428 "MOVE DB_INSTRUMENT" (Section 6.8.17)
7429
7430 "MOVE DB_INSTRUMENT_DIRECTORY" (Section 6.8.7)
7431
7432 "COPY DB_INSTRUMENT" (Section 6.8.18)
7433
7434 "COPY DB_INSTRUMENT_DIRECTORY" (Section 6.8.8)
7435
7436 "FIND LOST DB_INSTRUMENT_FILES" (Section 6.8.23)
7437
7438 "SET DB_INSTRUMENT FILE_PATH" (Section 6.8.24)
7439
7440 "GET FILE INSTRUMENTS" (Section 6.10.1)
7441
7442 "LIST FILE INSTRUMENTS" (Section 6.10.2)
7443
7444
7445
7446
7447 Schoenebeck Expires May 5, 2010 [Page 133]
7448
7449 Internet-Draft LinuxSampler Control Protocol November 2009
7450
7451
7452 "GET FILE INSTRUMENT INFO" (Section 6.10.3)
7453
7454 Note that the forward slash character ('/') has a special meaning in
7455 filename / path based arguments: it acts as separator of the nodes in
7456 the path, thus if a directory- or filename includes a forward slash
7457 (not intended as path node separator), you MUST escape that slash
7458 either with the respective hex escape sequence ("\x2f") or with the
7459 respective octal escape sequence ("\057").
7460
7461 Note for Windows: file path arguments in LSCP are expected to use
7462 forward slashes as directory node separator similar to Unix based
7463 operating systems. In contrast to Unix however a Windows typical
7464 drive character is expected to be prefixed to the path. That is an
7465 original Windows file path like "D:\Sounds\My.gig" would become in
7466 LSCP: "D:/Sounds/My.gig".
7467
7468 The following LSCP commands even support escape sequences as part of
7469 at least one of their text-based arguments (i.e. entity name,
7470 description) and / or may contain escape sequences in at least one of
7471 their text-based fields in their response:
7472
7473 "GET SERVER INFO" (Section 6.6.5)
7474
7475 "GET ENGINE INFO" (Section 6.4.9)
7476
7477 "GET CHANNEL INFO" (Section 6.4.10)
7478
7479 "CREATE FX_SEND" (Section 6.4.25)
7480
7481 "GET FX_SEND INFO" (Section 6.4.29)
7482
7483 "SET FX_SEND NAME" (Section 6.4.30)
7484
7485 "GET MIDI_INSTRUMENT INFO" (Section 6.7.11)
7486
7487 "GET MIDI_INSTRUMENT_MAP INFO" (Section 6.7.5)
7488
7489 "ADD MIDI_INSTRUMENT_MAP" (Section 6.7.1)
7490
7491 "MAP MIDI_INSTRUMENT" (Section 6.7.7)
7492
7493 "SET MIDI_INSTRUMENT_MAP NAME" (Section 6.7.6)
7494
7495 "GET DB_INSTRUMENT_DIRECTORY INFO" (Section 6.8.5)
7496
7497 "SET DB_INSTRUMENT_DIRECTORY NAME" (Section 6.8.6)
7498
7499
7500
7501
7502
7503 Schoenebeck Expires May 5, 2010 [Page 134]
7504
7505 Internet-Draft LinuxSampler Control Protocol November 2009
7506
7507
7508 "SET DB_INSTRUMENT_DIRECTORY DESCRIPTION" (Section 6.8.9)
7509
7510 "FIND DB_INSTRUMENT_DIRECTORIES" (Section 6.8.10)
7511
7512 "GET DB_INSTRUMENT INFO" (Section 6.8.15)
7513
7514 "SET DB_INSTRUMENT NAME" (Section 6.8.16)
7515
7516 "SET DB_INSTRUMENT DESCRIPTION" (Section 6.8.19)
7517
7518 "FIND DB_INSTRUMENTS" (Section 6.8.20)
7519
7520 Please note that these lists are manually maintained. If you find a
7521 command that also supports escape sequences we forgot to mention
7522 here, please report it!
7523
7524
7525
7526
7527
7528
7529
7530
7531
7532
7533
7534
7535
7536
7537
7538
7539
7540
7541
7542
7543
7544
7545
7546
7547
7548
7549
7550
7551
7552
7553
7554
7555
7556
7557
7558
7559 Schoenebeck Expires May 5, 2010 [Page 135]
7560
7561 Internet-Draft LinuxSampler Control Protocol November 2009
7562
7563
7564 8. Events
7565
7566 This chapter will describe all currently defined events supported by
7567 LinuxSampler.
7568
7569 8.1. Number of audio output devices changed
7570
7571 Client may want to be notified when the total number of audio output
7572 devices on the back-end changes by issuing the following command:
7573
7574 SUBSCRIBE AUDIO_OUTPUT_DEVICE_COUNT
7575
7576 Server will start sending the following notification messages:
7577
7578 "NOTIFY:AUDIO_OUTPUT_DEVICE_COUNT:<devices>"
7579
7580 where <devices> will be replaced by the new number of audio output
7581 devices.
7582
7583 8.2. Audio output device's settings changed
7584
7585 Client may want to be notified when changes were made to audio output
7586 devices on the back-end by issuing the following command:
7587
7588 SUBSCRIBE AUDIO_OUTPUT_DEVICE_INFO
7589
7590 Server will start sending the following notification messages:
7591
7592 "NOTIFY:AUDIO_OUTPUT_DEVICE_INFO:<device-id>"
7593
7594 where <device-id> will be replaced by the numerical ID of the audio
7595 output device, which settings has been changed. The front-end will
7596 have to send the respective command to actually get the audio output
7597 device info. Because these messages will be triggered by LSCP
7598 commands issued by other clients rather than real time events
7599 happening on the server, it is believed that an empty notification
7600 message is sufficient here.
7601
7602 8.3. Number of MIDI input devices changed
7603
7604 Client may want to be notified when the total number of MIDI input
7605 devices on the back-end changes by issuing the following command:
7606
7607 SUBSCRIBE MIDI_INPUT_DEVICE_COUNT
7608
7609 Server will start sending the following notification messages:
7610
7611
7612
7613
7614
7615 Schoenebeck Expires May 5, 2010 [Page 136]
7616
7617 Internet-Draft LinuxSampler Control Protocol November 2009
7618
7619
7620 "NOTIFY:MIDI_INPUT_DEVICE_COUNT:<devices>"
7621
7622 where <devices> will be replaced by the new number of MIDI input
7623 devices.
7624
7625 8.4. MIDI input device's settings changed
7626
7627 Client may want to be notified when changes were made to MIDI input
7628 devices on the back-end by issuing the following command:
7629
7630 SUBSCRIBE MIDI_INPUT_DEVICE_INFO
7631
7632 Server will start sending the following notification messages:
7633
7634 "NOTIFY:MIDI_INPUT_DEVICE_INFO:<device-id>"
7635
7636 where <device-id> will be replaced by the numerical ID of the MIDI
7637 input device, which settings has been changed. The front-end will
7638 have to send the respective command to actually get the MIDI input
7639 device info. Because these messages will be triggered by LSCP
7640 commands issued by other clients rather than real time events
7641 happening on the server, it is believed that an empty notification
7642 message is sufficient here.
7643
7644 8.5. Number of sampler channels changed
7645
7646 Client may want to be notified when the total number of channels on
7647 the back-end changes by issuing the following command:
7648
7649 SUBSCRIBE CHANNEL_COUNT
7650
7651 Server will start sending the following notification messages:
7652
7653 "NOTIFY:CHANNEL_COUNT:<channels>"
7654
7655 where <channels> will be replaced by the new number of sampler
7656 channels.
7657
7658 8.6. MIDI data on a sampler channel arrived
7659
7660 Client may want to be notified when MIDI data arrive on sampler
7661 channels on back-end side, by issuing the following command:
7662
7663 SUBSCRIBE CHANNEL_MIDI
7664
7665 Server will start sending one of the the following notification
7666 messages:
7667
7668
7669
7670
7671 Schoenebeck Expires May 5, 2010 [Page 137]
7672
7673 Internet-Draft LinuxSampler Control Protocol November 2009
7674
7675
7676 "NOTIFY:CHANNEL_MIDI:<channel-id> NOTE_ON <note> <velocity>"
7677
7678 "NOTIFY:CHANNEL_MIDI:<channel-id> NOTE_OFF <note> <velocity>"
7679
7680 where <channel-id> will be replaced by the ID of the sampler channel
7681 where the MIDI data arrived. <note> and <velocity> are integer values
7682 in the range between 0 .. 127, reflecting the analog meaning of the
7683 MIDI specification.
7684
7685 CAUTION: no guarantee whatsoever will be made that MIDI events are
7686 actually all delivered by this mechanism! With other words: events
7687 could be lost at any time! This restriction was made to keep the RT-
7688 safeness of the backend's MIDI and audio thread unaffected by this
7689 feature.
7690
7691 8.7. MIDI data on a MIDI input device arrived
7692
7693 Client may want to be notified when MIDI data arrive on MIDI input
7694 devices by issuing the following command:
7695
7696 SUBSCRIBE DEVICE_MIDI
7697
7698 Server will start sending one of the the following notification
7699 messages:
7700
7701 "NOTIFY:DEVICE_MIDI:<device-id> <port-id> NOTE_ON <note>
7702 <velocity>"
7703
7704 "NOTIFY:DEVICE_MIDI:<device-id> <port-id> NOTE_OFF <note>
7705 <velocity>"
7706
7707 where <device-id> <port-id> will be replaced by the IDs of the
7708 respective MIDI input device and the device's MIDI port where the
7709 MIDI data arrived. <note> and <velocity> are integer values in the
7710 range between 0 .. 127, reflecting the analog meaning of the MIDI
7711 specification.
7712
7713 CAUTION: no guarantee whatsoever will be made that MIDI events are
7714 actually all delivered by this mechanism! With other words: events
7715 could be lost at any time! This restriction was made to keep the RT-
7716 safeness of the backend's MIDI and audio thread unaffected by this
7717 feature.
7718
7719 8.8. Number of active voices changed
7720
7721 Client may want to be notified when the number of voices on the back-
7722 end changes by issuing the following command:
7723
7724
7725
7726
7727 Schoenebeck Expires May 5, 2010 [Page 138]
7728
7729 Internet-Draft LinuxSampler Control Protocol November 2009
7730
7731
7732 SUBSCRIBE VOICE_COUNT
7733
7734 Server will start sending the following notification messages:
7735
7736 "NOTIFY:VOICE_COUNT:<sampler-channel> <voices>"
7737
7738 where <sampler-channel> will be replaced by the sampler channel the
7739 voice count change occurred and <voices> by the new number of active
7740 voices on that channel.
7741
7742 8.9. Number of active disk streams changed
7743
7744 Client may want to be notified when the number of streams on the
7745 back-end changes by issuing the following command: SUBSCRIBE
7746 STREAM_COUNT
7747
7748 SUBSCRIBE STREAM_COUNT
7749
7750 Server will start sending the following notification messages:
7751
7752 "NOTIFY:STREAM_COUNT:<sampler-channel> <streams>"
7753
7754 where <sampler-channel> will be replaced by the sampler channel the
7755 stream count change occurred and <streams> by the new number of
7756 active disk streams on that channel.
7757
7758 8.10. Disk stream buffer fill state changed
7759
7760 Client may want to be notified when the buffer fill state of a disk
7761 stream on the back-end changes by issuing the following command:
7762
7763 SUBSCRIBE BUFFER_FILL
7764
7765 Server will start sending the following notification messages:
7766
7767 "NOTIFY:BUFFER_FILL:<sampler-channel> <fill-data>"
7768
7769 where <sampler-channel> will be replaced by the sampler channel the
7770 buffer fill state change occurred on and <fill-data> will be replaced
7771 by the buffer fill data for this channel as described in
7772 Section 6.4.13 as if the "GET CHANNEL BUFFER_FILL PERCENTAGE"
7773 (Section 6.4.13) command was issued on this channel.
7774
7775 8.11. Channel information changed
7776
7777 Client may want to be notified when changes were made to sampler
7778 channels on the back-end by issuing the following command:
7779
7780
7781
7782
7783 Schoenebeck Expires May 5, 2010 [Page 139]
7784
7785 Internet-Draft LinuxSampler Control Protocol November 2009
7786
7787
7788 SUBSCRIBE CHANNEL_INFO
7789
7790 Server will start sending the following notification messages:
7791
7792 "NOTIFY:CHANNEL_INFO:<sampler-channel>"
7793
7794 where <sampler-channel> will be replaced by the sampler channel the
7795 channel info change occurred. The front-end will have to send the
7796 respective command to actually get the channel info. Because these
7797 messages will be triggered by LSCP commands issued by other clients
7798 rather than real time events happening on the server, it is believed
7799 that an empty notification message is sufficient here.
7800
7801 8.12. Number of effect sends changed
7802
7803 Client may want to be notified when the number of effect sends on a
7804 particular sampler channel is changed by issuing the following
7805 command:
7806
7807 SUBSCRIBE FX_SEND_COUNT
7808
7809 Server will start sending the following notification messages:
7810
7811 "NOTIFY:FX_SEND_COUNT:<channel-id> <fx-sends>"
7812
7813 where <channel-id> will be replaced by the numerical ID of the
7814 sampler channel, on which the effect sends number is changed and <fx-
7815 sends> will be replaced by the new number of effect sends on that
7816 channel.
7817
7818 8.13. Effect send information changed
7819
7820 Client may want to be notified when changes were made to effect sends
7821 on a a particular sampler channel by issuing the following command:
7822
7823 SUBSCRIBE FX_SEND_INFO
7824
7825 Server will start sending the following notification messages:
7826
7827 "NOTIFY:FX_SEND_INFO:<channel-id> <fx-send-id>"
7828
7829 where <channel-id> will be replaced by the numerical ID of the
7830 sampler channel, on which an effect send entity is changed and <fx-
7831 send-id> will be replaced by the numerical ID of the changed effect
7832 send.
7833
7834
7835
7836
7837
7838
7839 Schoenebeck Expires May 5, 2010 [Page 140]
7840
7841 Internet-Draft LinuxSampler Control Protocol November 2009
7842
7843
7844 8.14. Total number of active voices changed
7845
7846 Client may want to be notified when the total number of voices on the
7847 back-end changes by issuing the following command:
7848
7849 SUBSCRIBE TOTAL_VOICE_COUNT
7850
7851 Server will start sending the following notification messages:
7852
7853 "NOTIFY:TOTAL_VOICE_COUNT:<voices>"
7854
7855 where <voices> will be replaced by the new number of all currently
7856 active voices.
7857
7858 8.15. Total number of active disk streams changed
7859
7860 Client may want to be notified when the total number of disk streams
7861 on the back-end changes by issuing the following command:
7862
7863 SUBSCRIBE TOTAL_STREAM_COUNT
7864
7865 Server will start sending the following notification messages:
7866
7867 "NOTIFY:TOTAL_STREAM_COUNT:<streams>"
7868
7869 where <streams> will be replaced by the new number of all currently
7870 active disk streams.
7871
7872 8.16. Number of MIDI instrument maps changed
7873
7874 Client may want to be notified when the number of MIDI instrument
7875 maps on the back-end changes by issuing the following command:
7876
7877 SUBSCRIBE MIDI_INSTRUMENT_MAP_COUNT
7878
7879 Server will start sending the following notification messages:
7880
7881 "NOTIFY:MIDI_INSTRUMENT_MAP_COUNT:<maps>"
7882
7883 where <maps> will be replaced by the new number of MIDI instrument
7884 maps.
7885
7886 8.17. MIDI instrument map information changed
7887
7888 Client may want to be notified when changes were made to MIDI
7889 instrument maps on the back-end by issuing the following command:
7890
7891
7892
7893
7894
7895 Schoenebeck Expires May 5, 2010 [Page 141]
7896
7897 Internet-Draft LinuxSampler Control Protocol November 2009
7898
7899
7900 SUBSCRIBE MIDI_INSTRUMENT_MAP_INFO
7901
7902 Server will start sending the following notification messages:
7903
7904 "NOTIFY:MIDI_INSTRUMENT_MAP_INFO:<map-id>"
7905
7906 where <map-id> will be replaced by the numerical ID of the MIDI
7907 instrument map, for which information changes occurred. The front-
7908 end will have to send the respective command to actually get the MIDI
7909 instrument map info. Because these messages will be triggered by
7910 LSCP commands issued by other clients rather than real time events
7911 happening on the server, it is believed that an empty notification
7912 message is sufficient here.
7913
7914 8.18. Number of MIDI instruments changed
7915
7916 Client may want to be notified when the number of MIDI instrument
7917 maps on the back-end changes by issuing the following command:
7918
7919 SUBSCRIBE MIDI_INSTRUMENT_COUNT
7920
7921 Server will start sending the following notification messages:
7922
7923 "NOTIFY:MIDI_INSTRUMENT_COUNT:<map-id> <instruments>"
7924
7925 where <map-id> is the numerical ID of the MIDI instrument map, in
7926 which the nuber of instruments has changed and <instruments> will be
7927 replaced by the new number of MIDI instruments in the specified map.
7928
7929 8.19. MIDI instrument information changed
7930
7931 Client may want to be notified when changes were made to MIDI
7932 instruments on the back-end by issuing the following command:
7933
7934 SUBSCRIBE MIDI_INSTRUMENT_INFO
7935
7936 Server will start sending the following notification messages:
7937
7938 "NOTIFY:MIDI_INSTRUMENT_INFO:<map-id> <bank> <program>"
7939
7940 where <map-id> will be replaced by the numerical ID of the MIDI
7941 instrument map, in which a MIDI instrument is changed. <bank> and
7942 <program> specifies the location of the changed MIDI instrument in
7943 the map. The front-end will have to send the respective command to
7944 actually get the MIDI instrument info. Because these messages will
7945 be triggered by LSCP commands issued by other clients rather than
7946 real time events happening on the server, it is believed that an
7947 empty notification message is sufficient here.
7948
7949
7950
7951 Schoenebeck Expires May 5, 2010 [Page 142]
7952
7953 Internet-Draft LinuxSampler Control Protocol November 2009
7954
7955
7956 8.20. Global settings changed
7957
7958 Client may want to be notified when changes to the global settings of
7959 the sampler were made by issuing the following command:
7960
7961 SUBSCRIBE GLOBAL_INFO
7962
7963 Server will start sending the following types of notification
7964 messages:
7965
7966 "NOTIFY:GLOBAL_INFO:VOLUME <volume>" - Notifies that the golbal
7967 volume of the sampler is changed, where <volume> will be replaced
7968 by the optional dotted floating point value, reflecting the new
7969 global volume parameter.
7970
7971 "NOTIFY:GLOBAL_INFO:VOICES <max-voices>" - Notifies that the
7972 golbal limit of the sampler for maximum voices is changed, where
7973 <max-voices> will be an integer value, reflecting the new global
7974 voice limit parameter.
7975
7976 "NOTIFY:GLOBAL_INFO:STREAMS <max-streams>" - Notifies that the
7977 golbal limit of the sampler for maximum disk streams is changed,
7978 where <max-streams> will be an integer value, reflecting the new
7979 global disk streams limit parameter.
7980
7981 8.21. Number of database instrument directories changed
7982
7983 Client may want to be notified when the number of instrument
7984 directories in a particular directory in the instruments database is
7985 changed by issuing the following command:
7986
7987 SUBSCRIBE DB_INSTRUMENT_DIRECTORY_COUNT
7988
7989 Server will start sending the following notification messages:
7990
7991 "NOTIFY:DB_INSTRUMENT_DIRECTORY_COUNT:<dir-path>"
7992
7993 where <dir-path> will be replaced by the absolute path name of the
7994 directory in the instruments database, in which the number of
7995 directories is changed.
7996
7997 Note that when a non-empty directory is removed, this event is not
7998 sent for the subdirectories in that directory.
7999
8000 8.22. Database instrument directory information changed
8001
8002 Client may want to be notified when changes were made to directories
8003 in the instruments database by issuing the following command:
8004
8005
8006
8007 Schoenebeck Expires May 5, 2010 [Page 143]
8008
8009 Internet-Draft LinuxSampler Control Protocol November 2009
8010
8011
8012 SUBSCRIBE DB_INSTRUMENT_DIRECTORY_INFO
8013
8014 Server will start sending the following notification messages:
8015
8016 "NOTIFY:DB_INSTRUMENT_DIRECTORY_INFO:<dir-path>"
8017
8018 where <dir-path> will be replaced by the absolute path name of the
8019 directory, for which information changes occurred. The front-end
8020 will have to send the respective command to actually get the updated
8021 directory info. Because these messages will be triggered by LSCP
8022 commands issued by other clients rather than real time events
8023 happening on the server, it is believed that an empty notification
8024 message is sufficient here.
8025
8026 "NOTIFY:DB_INSTRUMENT_DIRECTORY_INFO:NAME <old-dir-path> <new-
8027 name>"
8028
8029 where <old-dir-path> is the old absolute path name of the directory
8030 (encapsulated into apostrophes), which name is changes and <new-name>
8031 is the new name of the directory, encapsulated into apostrophes.
8032
8033 8.23. Number of database instruments changed
8034
8035 Client may want to be notified when the number of instruments in a
8036 particular directory in the instruments database is changed by
8037 issuing the following command:
8038
8039 SUBSCRIBE DB_INSTRUMENT_COUNT
8040
8041 Server will start sending the following notification messages:
8042
8043 "NOTIFY:DB_INSTRUMENT_COUNT:<dir-path>"
8044
8045 where <dir-path> will be replaced by the absolute path name of the
8046 directory in the instruments database, in which the number of
8047 instruments is changed.
8048
8049 Note that when a non-empty directory is removed, this event is not
8050 sent for the instruments in that directory.
8051
8052 8.24. Database instrument information changed
8053
8054 Client may want to be notified when changes were made to instruments
8055 in the instruments database by issuing the following command:
8056
8057 SUBSCRIBE DB_INSTRUMENT_INFO
8058
8059 Server will start sending the following notification messages:
8060
8061
8062
8063 Schoenebeck Expires May 5, 2010 [Page 144]
8064
8065 Internet-Draft LinuxSampler Control Protocol November 2009
8066
8067
8068 "NOTIFY:DB_INSTRUMENT_INFO:<instr-path>"
8069
8070 where <instr-path> will be replaced by the absolute path name of the
8071 instrument, which settings are changed. The front-end will have to
8072 send the respective command to actually get the updated directory
8073 info. Because these messages will be triggered by LSCP commands
8074 issued by other clients rather than real time events happening on the
8075 server, it is believed that an empty notification message is
8076 sufficient here.
8077
8078 "NOTIFY:DB_INSTRUMENT_INFO:NAME <old-instr-path> <new-name>"
8079
8080 where <old-instr-path> is the old absolute path name of the
8081 instrument (encapsulated into apostrophes), which name is changes and
8082 <new-name> is the new name of the instrument, encapsulated into
8083 apostrophes.
8084
8085 8.25. Database job status information changed
8086
8087 Client may want to be notified when the status of particular database
8088 instruments job is changed by issuing the following command:
8089
8090 SUBSCRIBE DB_INSTRUMENTS_JOB_INFO
8091
8092 Server will start sending the following notification messages:
8093
8094 "NOTIFY:DB_INSTRUMENTS_JOB_INFO:<job-id>"
8095
8096 where <job-id> will be replaced by the numerical ID of the job, which
8097 status is changed. The front-end will have to send the respective
8098 command to actually get the status info. Because these messages will
8099 be triggered by LSCP commands issued by other clients rather than
8100 real time events happening on the server, it is believed that an
8101 empty notification message is sufficient here.
8102
8103 8.26. Miscellaneous and debugging events
8104
8105 Client may want to be notified of miscellaneous and debugging events
8106 occurring at the server by issuing the following command:
8107
8108 SUBSCRIBE MISCELLANEOUS
8109
8110 Server will start sending the following notification messages:
8111
8112 "NOTIFY:MISCELLANEOUS:<string>"
8113
8114 where <string> will be replaced by whatever data server wants to send
8115 to the client. Client MAY display this data to the user AS IS to
8116
8117
8118
8119 Schoenebeck Expires May 5, 2010 [Page 145]
8120
8121 Internet-Draft LinuxSampler Control Protocol November 2009
8122
8123
8124 facilitate debugging.
8125
8126
8127
8128
8129
8130
8131
8132
8133
8134
8135
8136
8137
8138
8139
8140
8141
8142
8143
8144
8145
8146
8147
8148
8149
8150
8151
8152
8153
8154
8155
8156
8157
8158
8159
8160
8161
8162
8163
8164
8165
8166
8167
8168
8169
8170
8171
8172
8173
8174
8175 Schoenebeck Expires May 5, 2010 [Page 146]
8176
8177 Internet-Draft LinuxSampler Control Protocol November 2009
8178
8179
8180 9. Security Considerations
8181
8182 As there is so far no method of authentication and authorization
8183 defined and so not required for a client applications to succeed to
8184 connect, running LinuxSampler might be a security risk for the host
8185 system the LinuxSampler instance is running on.
8186
8187
8188
8189
8190
8191
8192
8193
8194
8195
8196
8197
8198
8199
8200
8201
8202
8203
8204
8205
8206
8207
8208
8209
8210
8211
8212
8213
8214
8215
8216
8217
8218
8219
8220
8221
8222
8223
8224
8225
8226
8227
8228
8229
8230
8231 Schoenebeck Expires May 5, 2010 [Page 147]
8232
8233 Internet-Draft LinuxSampler Control Protocol November 2009
8234
8235
8236 10. Acknowledgments
8237
8238 This document has benefited greatly from the comments of the
8239 following people, discussed on the LinuxSampler developer's mailing
8240 list:
8241
8242 Rui Nuno Capela
8243
8244 Vladimir Senkov
8245
8246 Mark Knecht
8247
8248 Grigor Iliev
8249
8250
8251
8252
8253
8254
8255
8256
8257
8258
8259
8260
8261
8262
8263
8264
8265
8266
8267
8268
8269
8270
8271
8272
8273
8274
8275
8276
8277
8278
8279
8280
8281
8282
8283
8284
8285
8286
8287 Schoenebeck Expires May 5, 2010 [Page 148]
8288
8289 Internet-Draft LinuxSampler Control Protocol November 2009
8290
8291
8292 11. References
8293
8294 [RFC20] UCLA, "ASCII format for Network Interchange", RFC 20,
8295 1969.
8296
8297 [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
8298 Requirement Levels", RFC 2119, 1997.
8299
8300 [RFC2234] Crocker, D. and P. Overell, "Augmented BNF for Syntax
8301 Specifications", RFC 2234, 1997.
8302
8303 [RFC793] Defense Advanced Research Projects Agency, "TRANSMISSION
8304 CONTROL PROTOCOL", RFC 793, 1981.
8305
8306
8307
8308
8309
8310
8311
8312
8313
8314
8315
8316
8317
8318
8319
8320
8321
8322
8323
8324
8325
8326
8327
8328
8329
8330
8331
8332
8333
8334
8335
8336
8337
8338
8339
8340
8341
8342
8343 Schoenebeck Expires May 5, 2010 [Page 149]
8344
8345 Internet-Draft LinuxSampler Control Protocol November 2009
8346
8347
8348 Author's Address
8349
8350 C. Schoenebeck
8351 Interessengemeinschaft Software Engineering e. V.
8352 Max-Planck-Str. 39
8353 74081 Heilbronn
8354 Germany
8355
8356 Email: schoenebeck at software minus engineering dot org
8357
8358
8359
8360
8361
8362
8363
8364
8365
8366
8367
8368
8369
8370
8371
8372
8373
8374
8375
8376
8377
8378
8379
8380
8381
8382
8383
8384
8385
8386
8387
8388
8389
8390
8391
8392
8393
8394
8395
8396
8397
8398
8399 Schoenebeck Expires May 5, 2010 [Page 150]
8400
8401 Internet-Draft LinuxSampler Control Protocol November 2009
8402
8403
8404 Full Copyright Statement
8405
8406 Copyright (C) The IETF Trust (2009).
8407
8408 This document is subject to the rights, licenses and restrictions
8409 contained in BCP 78, and except as set forth therein, the authors
8410 retain all their rights.
8411
8412 This document and the information contained herein are provided on an
8413 "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS
8414 OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY, THE IETF TRUST AND
8415 THE INTERNET ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS
8416 OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF
8417 THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED
8418 WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
8419
8420
8421 Intellectual Property
8422
8423 The IETF takes no position regarding the validity or scope of any
8424 Intellectual Property Rights or other rights that might be claimed to
8425 pertain to the implementation or use of the technology described in
8426 this document or the extent to which any license under such rights
8427 might or might not be available; nor does it represent that it has
8428 made any independent effort to identify any such rights. Information
8429 on the procedures with respect to rights in RFC documents can be
8430 found in BCP 78 and BCP 79.
8431
8432 Copies of IPR disclosures made to the IETF Secretariat and any
8433 assurances of licenses to be made available, or the result of an
8434 attempt made to obtain a general license or permission for the use of
8435 such proprietary rights by implementers or users of this
8436 specification can be obtained from the IETF on-line IPR repository at
8437 http://www.ietf.org/ipr.
8438
8439 The IETF invites any interested party to bring to its attention any
8440 copyrights, patents or patent applications, or other proprietary
8441 rights that may cover technology that may be required to implement
8442 this standard. Please address the information to the IETF at
8443 ietf-ipr@ietf.org.
8444
8445
8446
8447
8448
8449
8450
8451
8452
8453
8454
8455 Schoenebeck Expires May 5, 2010 [Page 151]
8456
8457

  ViewVC Help
Powered by ViewVC