--- web/trunk/www.linuxsampler.org/api/draft-linuxsampler-protocol.txt 2006/11/25 17:18:12 940 +++ web/trunk/www.linuxsampler.org/api/draft-linuxsampler-protocol.txt 2006/12/29 20:27:15 1006 @@ -3,17 +3,19 @@ LinuxSampler Developers C. Schoenebeck Internet-Draft Interessengemeinschaft Software -Expires: May 29, 2007 Engineering e. V. - November 25, 2006 +Intended status: Standards Track Engineering e. V. +Expires: July 2, 2007 December 29, 2006 LinuxSampler Control Protocol - LSCP 1.1 + LSCP 1.2 Status of this Memo - This document is an Internet-Draft and is in full conformance with - all provisions of Section 10 of RFC 2026. + By submitting this Internet-Draft, each author represents that any + applicable patent or other IPR claims of which he or she is aware + have been or will be disclosed, and any of which he or she becomes + aware will be disclosed, in accordance with Section 6 of BCP 79. Internet-Drafts are working documents of the Internet Engineering Task Force (IETF), its areas, and its working groups. Note that @@ -31,19 +33,17 @@ The list of Internet-Draft Shadow Directories can be accessed at http://www.ietf.org/shadow.html. - This Internet-Draft will expire on May 29, 2007. + This Internet-Draft will expire on July 2, 2007. Copyright Notice - Copyright (C) The Internet Society (2006). All Rights Reserved. + Copyright (C) The Internet Society (2006). + + + + -Abstract - The LinuxSampler Control Protocol (LSCP) is an application-level - protocol primarily intended for local and remote controlling the - LinuxSampler backend application, which is a sophisticated server- - like console application essentially playing back audio samples and - manipulating the samples in real time to certain extent. @@ -52,121 +52,177 @@ -Schoenebeck Expires May 29, 2007 [Page 1] +Schoenebeck Expires July 2, 2007 [Page 1] -Internet-Draft LinuxSampler Control Protocol November 2006 +Internet-Draft LinuxSampler Control Protocol December 2006 + + +Abstract + + The LinuxSampler Control Protocol (LSCP) is an application-level + protocol primarily intended for local and remote controlling the + LinuxSampler backend application, which is a sophisticated server- + like console application essentially playing back audio samples and + manipulating the samples in real time to certain extent. Table of Contents - 1. Requirements notation . . . . . . . . . . . . . . . . . . . . 4 - 2. Versioning of this specification . . . . . . . . . . . . . . . 5 - 3. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 6 - 4. Focus of this protocol . . . . . . . . . . . . . . . . . . . . 7 - 5. Communication Overview . . . . . . . . . . . . . . . . . . . . 8 - 5.1. Request/response communication method . . . . . . . . . . 8 - 5.1.1. Result format . . . . . . . . . . . . . . . . . . . . 9 - 5.2. Subscribe/notify communication method . . . . . . . . . . 11 - 6. Description for control commands . . . . . . . . . . . . . . . 13 - 6.1. Ignored lines and comments . . . . . . . . . . . . . . . . 13 - 6.2. Configuring audio drivers . . . . . . . . . . . . . . . . 13 - 6.2.1. Getting amount of available audio output drivers . . . 13 - 6.2.2. Getting all available audio output drivers . . . . . . 14 + 1. Requirements notation . . . . . . . . . . . . . . . . . . . . 5 + 2. Versioning of this specification . . . . . . . . . . . . . . 6 + 3. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 7 + 4. Focus of this protocol . . . . . . . . . . . . . . . . . . . 8 + 5. Communication Overview . . . . . . . . . . . . . . . . . . . 9 + 5.1. Request/response communication method . . . . . . . . . . 9 + 5.1.1. Result format . . . . . . . . . . . . . . . . . . . . 10 + 5.2. Subscribe/notify communication method . . . . . . . . . . 12 + 6. Description for control commands . . . . . . . . . . . . . . 14 + 6.1. Ignored lines and comments . . . . . . . . . . . . . . . 14 + 6.2. Configuring audio drivers . . . . . . . . . . . . . . . . 14 + 6.2.1. Getting amount of available audio output drivers . . 15 + 6.2.2. Getting all available audio output drivers . . . . . 15 6.2.3. Getting information about a specific audio output - driver . . . . . . . . . . . . . . . . . . . . . . . . 14 + driver . . . . . . . . . . . . . . . . . . . . . . . 15 6.2.4. Getting information about specific audio output - driver parameter . . . . . . . . . . . . . . . . . . . 15 - 6.2.5. Creating an audio output device . . . . . . . . . . . 19 - 6.2.6. Destroying an audio output device . . . . . . . . . . 20 - 6.2.7. Getting all created audio output device count . . . . 21 - 6.2.8. Getting all created audio output device list . . . . . 21 - 6.2.9. Getting current settings of an audio output device . . 21 - 6.2.10. Changing settings of audio output devices . . . . . . 23 - 6.2.11. Getting information about an audio channel . . . . . . 23 + driver parameter . . . . . . . . . . . . . . . . . . 16 + 6.2.5. Creating an audio output device . . . . . . . . . . . 20 + 6.2.6. Destroying an audio output device . . . . . . . . . . 21 + 6.2.7. Getting all created audio output device count . . . . 22 + 6.2.8. Getting all created audio output device list . . . . 22 + 6.2.9. Getting current settings of an audio output device . 22 + 6.2.10. Changing settings of audio output devices . . . . . . 24 + 6.2.11. Getting information about an audio channel . . . . . 25 6.2.12. Getting information about specific audio channel - parameter . . . . . . . . . . . . . . . . . . . . . . 25 - 6.2.13. Changing settings of audio output channels . . . . . . 27 - 6.3. Configuring MIDI input drivers . . . . . . . . . . . . . . 28 - 6.3.1. Getting amount of available MIDI input drivers . . . . 29 - 6.3.2. Getting all available MIDI input drivers . . . . . . . 29 + parameter . . . . . . . . . . . . . . . . . . . . . . 26 + 6.2.13. Changing settings of audio output channels . . . . . 28 + 6.3. Configuring MIDI input drivers . . . . . . . . . . . . . 29 + 6.3.1. Getting amount of available MIDI input drivers . . . 30 + 6.3.2. Getting all available MIDI input drivers . . . . . . 30 6.3.3. Getting information about a specific MIDI input - driver . . . . . . . . . . . . . . . . . . . . . . . . 29 + driver . . . . . . . . . . . . . . . . . . . . . . . 31 6.3.4. Getting information about specific MIDI input - driver parameter . . . . . . . . . . . . . . . . . . . 30 - 6.3.5. Creating a MIDI input device . . . . . . . . . . . . . 33 - 6.3.6. Destroying a MIDI input device . . . . . . . . . . . . 34 - 6.3.7. Getting all created MIDI input device count . . . . . 35 - 6.3.8. Getting all created MIDI input device list . . . . . . 35 - 6.3.9. Getting current settings of a MIDI input device . . . 35 - 6.3.10. Changing settings of MIDI input devices . . . . . . . 37 - 6.3.11. Getting information about a MIDI port . . . . . . . . 37 - 6.3.12. Getting information about specific MIDI port - parameter . . . . . . . . . . . . . . . . . . . . . . 38 - 6.3.13. Changing settings of MIDI input ports . . . . . . . . 40 - 6.4. Configuring sampler channels . . . . . . . . . . . . . . . 41 - 6.4.1. Loading an instrument . . . . . . . . . . . . . . . . 41 + driver parameter . . . . . . . . . . . . . . . . . . 32 + 6.3.5. Creating a MIDI input device . . . . . . . . . . . . 34 + 6.3.6. Destroying a MIDI input device . . . . . . . . . . . 35 + 6.3.7. Getting all created MIDI input device count . . . . . 36 -Schoenebeck Expires May 29, 2007 [Page 2] - -Internet-Draft LinuxSampler Control Protocol November 2006 - - - 6.4.2. Loading a sampler engine . . . . . . . . . . . . . . . 42 - 6.4.3. Getting all created sampler channel count . . . . . . 43 - 6.4.4. Getting all created sampler channel list . . . . . . . 43 - 6.4.5. Adding a new sampler channel . . . . . . . . . . . . . 43 - 6.4.6. Removing a sampler channel . . . . . . . . . . . . . . 44 - 6.4.7. Getting amount of available engines . . . . . . . . . 45 - 6.4.8. Getting all available engines . . . . . . . . . . . . 45 - 6.4.9. Getting information about an engine . . . . . . . . . 46 - 6.4.10. Getting sampler channel information . . . . . . . . . 47 - 6.4.11. Current number of active voices . . . . . . . . . . . 50 - 6.4.12. Current number of active disk streams . . . . . . . . 50 - 6.4.13. Current fill state of disk stream buffers . . . . . . 50 - 6.4.14. Setting audio output device . . . . . . . . . . . . . 51 - 6.4.15. Setting audio output type . . . . . . . . . . . . . . 52 - 6.4.16. Setting audio output channel . . . . . . . . . . . . . 53 - 6.4.17. Setting MIDI input device . . . . . . . . . . . . . . 54 - 6.4.18. Setting MIDI input type . . . . . . . . . . . . . . . 54 - 6.4.19. Setting MIDI input port . . . . . . . . . . . . . . . 55 - 6.4.20. Setting MIDI input channel . . . . . . . . . . . . . . 56 - 6.4.21. Setting channel volume . . . . . . . . . . . . . . . . 56 - 6.4.22. Muting a sampler channel . . . . . . . . . . . . . . . 57 - 6.4.23. Soloing a sampler channel . . . . . . . . . . . . . . 58 - 6.4.24. Resetting a sampler channel . . . . . . . . . . . . . 58 - 6.5. Controlling connection . . . . . . . . . . . . . . . . . . 59 - 6.5.1. Register front-end for receiving event messages . . . 59 +Schoenebeck Expires July 2, 2007 [Page 2] + +Internet-Draft LinuxSampler Control Protocol December 2006 + + + 6.3.8. Getting all created MIDI input device list . . . . . 36 + 6.3.9. Getting current settings of a MIDI input device . . . 37 + 6.3.10. Changing settings of MIDI input devices . . . . . . . 38 + 6.3.11. Getting information about a MIDI port . . . . . . . . 38 + 6.3.12. Getting information about specific MIDI port + parameter . . . . . . . . . . . . . . . . . . . . . . 39 + 6.3.13. Changing settings of MIDI input ports . . . . . . . . 41 + 6.4. Configuring sampler channels . . . . . . . . . . . . . . 42 + 6.4.1. Loading an instrument . . . . . . . . . . . . . . . . 42 + 6.4.2. Loading a sampler engine . . . . . . . . . . . . . . 43 + 6.4.3. Getting all created sampler channel count . . . . . . 44 + 6.4.4. Getting all created sampler channel list . . . . . . 44 + 6.4.5. Adding a new sampler channel . . . . . . . . . . . . 44 + 6.4.6. Removing a sampler channel . . . . . . . . . . . . . 45 + 6.4.7. Getting amount of available engines . . . . . . . . . 46 + 6.4.8. Getting all available engines . . . . . . . . . . . . 46 + 6.4.9. Getting information about an engine . . . . . . . . . 47 + 6.4.10. Getting sampler channel information . . . . . . . . . 48 + 6.4.11. Current number of active voices . . . . . . . . . . . 51 + 6.4.12. Current number of active disk streams . . . . . . . . 51 + 6.4.13. Current fill state of disk stream buffers . . . . . . 52 + 6.4.14. Setting audio output device . . . . . . . . . . . . . 53 + 6.4.15. Setting audio output type . . . . . . . . . . . . . . 53 + 6.4.16. Setting audio output channel . . . . . . . . . . . . 54 + 6.4.17. Setting MIDI input device . . . . . . . . . . . . . . 55 + 6.4.18. Setting MIDI input type . . . . . . . . . . . . . . . 56 + 6.4.19. Setting MIDI input port . . . . . . . . . . . . . . . 56 + 6.4.20. Setting MIDI input channel . . . . . . . . . . . . . 57 + 6.4.21. Setting channel volume . . . . . . . . . . . . . . . 58 + 6.4.22. Muting a sampler channel . . . . . . . . . . . . . . 58 + 6.4.23. Soloing a sampler channel . . . . . . . . . . . . . . 59 + 6.4.24. Assigning a MIDI instrument map to a sampler + channel . . . . . . . . . . . . . . . . . . . . . . . 60 + 6.4.25. Adding an effect send to a sampler channel . . . . . 61 + 6.4.26. Removing an effect send from a sampler channel . . . 62 + 6.4.27. Getting amount of effect sends on a sampler channel . 63 + 6.4.28. Listing all effect sends on a sampler channel . . . . 63 + 6.4.29. Getting effect send information . . . . . . . . . . . 64 + 6.4.30. Altering effect send's audio routing . . . . . . . . 65 + 6.4.31. Resetting a sampler channel . . . . . . . . . . . . . 66 + 6.5. Controlling connection . . . . . . . . . . . . . . . . . 66 + 6.5.1. Register front-end for receiving event messages . . . 66 6.5.2. Unregister front-end for not receiving event - messages . . . . . . . . . . . . . . . . . . . . . . . 60 - 6.5.3. Enable or disable echo of commands . . . . . . . . . . 61 - 6.5.4. Close client connection . . . . . . . . . . . . . . . 61 - 6.6. Global commands . . . . . . . . . . . . . . . . . . . . . 61 - 6.6.1. Current number of active voices . . . . . . . . . . . 61 - 6.6.2. Maximum amount of active voices . . . . . . . . . . . 62 - 6.6.3. Reset sampler . . . . . . . . . . . . . . . . . . . . 62 - 6.6.4. General sampler informations . . . . . . . . . . . . . 62 - 7. Command Syntax . . . . . . . . . . . . . . . . . . . . . . . . 64 - 8. Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 - 8.1. Number of sampler channels changed . . . . . . . . . . . . 71 - 8.2. Number of active voices changed . . . . . . . . . . . . . 71 - 8.3. Number of active disk streams changed . . . . . . . . . . 71 - 8.4. Disk stream buffer fill state changed . . . . . . . . . . 72 - 8.5. Channel information changed . . . . . . . . . . . . . . . 72 - 8.6. Total number of active voices changed . . . . . . . . . . 72 - 8.7. Miscellaneous and debugging events . . . . . . . . . . . . 73 - 9. Security Considerations . . . . . . . . . . . . . . . . . . . 74 - 10. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 75 - 11. References . . . . . . . . . . . . . . . . . . . . . . . . . . 75 - Author's Address . . . . . . . . . . . . . . . . . . . . . . . . . 76 - Intellectual Property and Copyright Statements . . . . . . . . . . 77 + messages . . . . . . . . . . . . . . . . . . . . . . 67 + 6.5.3. Enable or disable echo of commands . . . . . . . . . 68 + 6.5.4. Close client connection . . . . . . . . . . . . . . . 68 + 6.6. Global commands . . . . . . . . . . . . . . . . . . . . . 69 + 6.6.1. Current number of active voices . . . . . . . . . . . 69 + + + +Schoenebeck Expires July 2, 2007 [Page 3] + +Internet-Draft LinuxSampler Control Protocol December 2006 + + + 6.6.2. Maximum amount of active voices . . . . . . . . . . . 69 + 6.6.3. Reset sampler . . . . . . . . . . . . . . . . . . . . 69 + 6.6.4. General sampler informations . . . . . . . . . . . . 70 + 6.6.5. Getting global volume attenuation . . . . . . . . . . 70 + 6.6.6. Setting global volume attenuation . . . . . . . . . . 71 + 6.7. MIDI Instrument Mapping . . . . . . . . . . . . . . . . . 71 + 6.7.1. Create a new MIDI instrument map . . . . . . . . . . 72 + 6.7.2. Delete one particular or all MIDI instrument maps . . 73 + 6.7.3. Get amount of existing MIDI instrument maps . . . . . 73 + 6.7.4. Getting all created MIDI instrument maps . . . . . . 74 + 6.7.5. Getting MIDI instrument map information . . . . . . . 74 + 6.7.6. Renaming a MIDI instrument map . . . . . . . . . . . 75 + 6.7.7. Create or replace a MIDI instrument map entry . . . . 75 + 6.7.8. Getting ammount of MIDI instrument map entries . . . 78 + 6.7.9. Getting indeces of all entries of a MIDI + instrument map . . . . . . . . . . . . . . . . . . . 79 + 6.7.10. Remove an entry from the MIDI instrument map . . . . 79 + 6.7.11. Get current settings of MIDI instrument map entry . . 80 + 6.7.12. Clear MIDI instrument map . . . . . . . . . . . . . . 82 + 7. Command Syntax . . . . . . . . . . . . . . . . . . . . . . . 83 + 8. Events . . . . . . . . . . . . . . . . . . . . . . . . . . . 94 + 8.1. Number of audio output devices changed . . . . . . . . . 94 + 8.2. Audio output device's settings changed . . . . . . . . . 94 + 8.3. Number of MIDI input devices changed . . . . . . . . . . 94 + 8.4. MIDI input device's settings changed . . . . . . . . . . 95 + 8.5. Number of sampler channels changed . . . . . . . . . . . 95 + 8.6. Number of active voices changed . . . . . . . . . . . . . 95 + 8.7. Number of active disk streams changed . . . . . . . . . . 96 + 8.8. Disk stream buffer fill state changed . . . . . . . . . . 96 + 8.9. Channel information changed . . . . . . . . . . . . . . . 96 + 8.10. Total number of active voices changed . . . . . . . . . . 97 + 8.11. Number of MIDI instrument maps changed . . . . . . . . . 97 + 8.12. MIDI instrument map information changed . . . . . . . . . 97 + 8.13. Number of MIDI instruments changed . . . . . . . . . . . 98 + 8.14. MIDI instrument information changed . . . . . . . . . . . 98 + 8.15. Miscellaneous and debugging events . . . . . . . . . . . 99 + 9. Security Considerations . . . . . . . . . . . . . . . . . . . 100 + 10. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 101 + 11. References . . . . . . . . . . . . . . . . . . . . . . . . . 102 + Author's Address . . . . . . . . . . . . . . . . . . . . . . . . 103 + Intellectual Property and Copyright Statements . . . . . . . . . 104 -Schoenebeck Expires May 29, 2007 [Page 3] + + + + + + + +Schoenebeck Expires July 2, 2007 [Page 4] -Internet-Draft LinuxSampler Control Protocol November 2006 +Internet-Draft LinuxSampler Control Protocol December 2006 1. Requirements notation @@ -220,9 +276,9 @@ -Schoenebeck Expires May 29, 2007 [Page 4] +Schoenebeck Expires July 2, 2007 [Page 5] -Internet-Draft LinuxSampler Control Protocol November 2006 +Internet-Draft LinuxSampler Control Protocol December 2006 2. Versioning of this specification @@ -276,9 +332,9 @@ -Schoenebeck Expires May 29, 2007 [Page 5] +Schoenebeck Expires July 2, 2007 [Page 6] -Internet-Draft LinuxSampler Control Protocol November 2006 +Internet-Draft LinuxSampler Control Protocol December 2006 3. Introduction @@ -332,9 +388,9 @@ -Schoenebeck Expires May 29, 2007 [Page 6] +Schoenebeck Expires July 2, 2007 [Page 7] -Internet-Draft LinuxSampler Control Protocol November 2006 +Internet-Draft LinuxSampler Control Protocol December 2006 4. Focus of this protocol @@ -388,9 +444,9 @@ -Schoenebeck Expires May 29, 2007 [Page 7] +Schoenebeck Expires July 2, 2007 [Page 8] -Internet-Draft LinuxSampler Control Protocol November 2006 +Internet-Draft LinuxSampler Control Protocol December 2006 5. Communication Overview @@ -444,9 +500,9 @@ -Schoenebeck Expires May 29, 2007 [Page 8] +Schoenebeck Expires July 2, 2007 [Page 9] -Internet-Draft LinuxSampler Control Protocol November 2006 +Internet-Draft LinuxSampler Control Protocol December 2006 5.1.1. Result format @@ -500,9 +556,9 @@ -Schoenebeck Expires May 29, 2007 [Page 9] +Schoenebeck Expires July 2, 2007 [Page 10] -Internet-Draft LinuxSampler Control Protocol November 2006 +Internet-Draft LinuxSampler Control Protocol December 2006 set has the following format: @@ -556,9 +612,9 @@ -Schoenebeck Expires May 29, 2007 [Page 10] +Schoenebeck Expires July 2, 2007 [Page 11] -Internet-Draft LinuxSampler Control Protocol November 2006 +Internet-Draft LinuxSampler Control Protocol December 2006 Each line of the result set MUST end with . @@ -612,9 +668,9 @@ -Schoenebeck Expires May 29, 2007 [Page 11] +Schoenebeck Expires July 2, 2007 [Page 12] -Internet-Draft LinuxSampler Control Protocol November 2006 +Internet-Draft LinuxSampler Control Protocol December 2006 inserted in the middle of the event message as well as any other @@ -668,9 +724,9 @@ -Schoenebeck Expires May 29, 2007 [Page 12] +Schoenebeck Expires July 2, 2007 [Page 13] -Internet-Draft LinuxSampler Control Protocol November 2006 +Internet-Draft LinuxSampler Control Protocol December 2006 6. Description for control commands @@ -718,17 +774,20 @@ retrieve what parameters drivers are offering, how to retrieve their possible values, etc. -6.2.1. Getting amount of available audio output drivers - Use the following command to get the number of audio output drivers -Schoenebeck Expires May 29, 2007 [Page 13] + + +Schoenebeck Expires July 2, 2007 [Page 14] -Internet-Draft LinuxSampler Control Protocol November 2006 +Internet-Draft LinuxSampler Control Protocol December 2006 + +6.2.1. Getting amount of available audio output drivers + Use the following command to get the number of audio output drivers currently available for the LinuxSampler instance: GET AVAILABLE_AUDIO_OUTPUT_DRIVERS @@ -777,12 +836,9 @@ - - - -Schoenebeck Expires May 29, 2007 [Page 14] +Schoenebeck Expires July 2, 2007 [Page 15] -Internet-Draft LinuxSampler Control Protocol November 2006 +Internet-Draft LinuxSampler Control Protocol December 2006 LinuxSampler will answer by sending a separated list. Each @@ -836,9 +892,9 @@ -Schoenebeck Expires May 29, 2007 [Page 15] +Schoenebeck Expires July 2, 2007 [Page 16] -Internet-Draft LinuxSampler Control Protocol November 2006 +Internet-Draft LinuxSampler Control Protocol December 2006 obtained (as returned by the "GET AUDIO_OUTPUT_DRIVER INFO" @@ -892,9 +948,9 @@ -Schoenebeck Expires May 29, 2007 [Page 16] +Schoenebeck Expires July 2, 2007 [Page 17] -Internet-Draft LinuxSampler Control Protocol November 2006 +Internet-Draft LinuxSampler Control Protocol December 2006 MULTIPLICITY - @@ -948,9 +1004,9 @@ -Schoenebeck Expires May 29, 2007 [Page 17] +Schoenebeck Expires July 2, 2007 [Page 18] -Internet-Draft LinuxSampler Control Protocol November 2006 +Internet-Draft LinuxSampler Control Protocol December 2006 returned, dependent to driver parameter) @@ -1004,9 +1060,9 @@ -Schoenebeck Expires May 29, 2007 [Page 18] +Schoenebeck Expires July 2, 2007 [Page 19] -Internet-Draft LinuxSampler Control Protocol November 2006 +Internet-Draft LinuxSampler Control Protocol December 2006 "TYPE: INT" @@ -1060,9 +1116,9 @@ -Schoenebeck Expires May 29, 2007 [Page 19] +Schoenebeck Expires July 2, 2007 [Page 20] -Internet-Draft LinuxSampler Control Protocol November 2006 +Internet-Draft LinuxSampler Control Protocol December 2006 providing an appropriate warning code and warning message @@ -1116,9 +1172,9 @@ -Schoenebeck Expires May 29, 2007 [Page 20] +Schoenebeck Expires July 2, 2007 [Page 21] -Internet-Draft LinuxSampler Control Protocol November 2006 +Internet-Draft LinuxSampler Control Protocol December 2006 C: "DESTROY AUDIO_OUTPUT_DEVICE 0" @@ -1172,9 +1228,9 @@ -Schoenebeck Expires May 29, 2007 [Page 21] +Schoenebeck Expires July 2, 2007 [Page 22] -Internet-Draft LinuxSampler Control Protocol November 2006 +Internet-Draft LinuxSampler Control Protocol December 2006 Possible Answers: @@ -1228,9 +1284,9 @@ -Schoenebeck Expires May 29, 2007 [Page 22] +Schoenebeck Expires July 2, 2007 [Page 23] -Internet-Draft LinuxSampler Control Protocol November 2006 +Internet-Draft LinuxSampler Control Protocol December 2006 "FRAGMENTS: 2" @@ -1277,17 +1333,21 @@ S: "OK" -6.2.11. Getting information about an audio channel - Use the following command to get information about an audio channel: -Schoenebeck Expires May 29, 2007 [Page 23] + + +Schoenebeck Expires July 2, 2007 [Page 24] -Internet-Draft LinuxSampler Control Protocol November 2006 +Internet-Draft LinuxSampler Control Protocol December 2006 + +6.2.11. Getting information about an audio channel + + Use the following command to get information about an audio channel: GET AUDIO_OUTPUT_CHANNEL INFO @@ -1334,17 +1394,15 @@ driver. Every audio channel might have its own, additional driver and channel specific parameters. - Examples: - - - -Schoenebeck Expires May 29, 2007 [Page 24] +Schoenebeck Expires July 2, 2007 [Page 25] -Internet-Draft LinuxSampler Control Protocol November 2006 +Internet-Draft LinuxSampler Control Protocol December 2006 + Examples: + C: "GET AUDIO_OUTPUT_CHANNEL INFO 0 0" S: "NAME: studio monitor left" @@ -1391,16 +1449,16 @@ Where is the numerical ID of the audio output device as returned by the "CREATE AUDIO_OUTPUT_DEVICE" (Section 6.2.5) or "LIST AUDIO_OUTPUT_DEVICES" (Section 6.2.8) command, the audio - channel number and a specific channel parameter name for - which information should be obtained (as returned by the "GET -Schoenebeck Expires May 29, 2007 [Page 25] +Schoenebeck Expires July 2, 2007 [Page 26] -Internet-Draft LinuxSampler Control Protocol November 2006 +Internet-Draft LinuxSampler Control Protocol December 2006 + channel number and a specific channel parameter name for + which information should be obtained (as returned by the "GET AUDIO_OUTPUT_CHANNEL INFO" (Section 6.2.11) command). Possible Answers: @@ -1450,11 +1508,9 @@ - - -Schoenebeck Expires May 29, 2007 [Page 26] +Schoenebeck Expires July 2, 2007 [Page 27] -Internet-Draft LinuxSampler Control Protocol November 2006 +Internet-Draft LinuxSampler Control Protocol December 2006 RANGE_MAX - @@ -1508,9 +1564,9 @@ -Schoenebeck Expires May 29, 2007 [Page 27] +Schoenebeck Expires July 2, 2007 [Page 28] -Internet-Draft LinuxSampler Control Protocol November 2006 +Internet-Draft LinuxSampler Control Protocol December 2006 "OK" - @@ -1564,9 +1620,9 @@ -Schoenebeck Expires May 29, 2007 [Page 28] +Schoenebeck Expires July 2, 2007 [Page 29] -Internet-Draft LinuxSampler Control Protocol November 2006 +Internet-Draft LinuxSampler Control Protocol December 2006 Note: examples in this chapter showing particular parameters of @@ -1613,18 +1669,23 @@ S: "ALSA,JACK" -6.3.3. Getting information about a specific MIDI input driver - Use the following command to get detailed information about a - specific MIDI input driver: -Schoenebeck Expires May 29, 2007 [Page 29] + + + +Schoenebeck Expires July 2, 2007 [Page 30] -Internet-Draft LinuxSampler Control Protocol November 2006 +Internet-Draft LinuxSampler Control Protocol December 2006 +6.3.3. Getting information about a specific MIDI input driver + + Use the following command to get detailed information about a + specific MIDI input driver: + GET MIDI_INPUT_DRIVER INFO Where is the name of the MIDI input driver as @@ -1668,18 +1729,18 @@ "." -6.3.4. Getting information about specific MIDI input driver parameter - Use the following command to get detailed information about a - specific parameter of a specific MIDI input driver: +Schoenebeck Expires July 2, 2007 [Page 31] + +Internet-Draft LinuxSampler Control Protocol December 2006 -Schoenebeck Expires May 29, 2007 [Page 30] - -Internet-Draft LinuxSampler Control Protocol November 2006 +6.3.4. Getting information about specific MIDI input driver parameter + Use the following command to get detailed information about a + specific parameter of a specific MIDI input driver: GET MIDI_INPUT_DRIVER_PARAMETER INFO [] @@ -1725,18 +1786,17 @@ MIDI_INPUT_DEVICE' (Section 6.3.5) command (always returned, no matter which driver parameter) - FIX - - - either true or false, if false then this parameter can be - changed at any time, once the device is created by the 'CREATE - -Schoenebeck Expires May 29, 2007 [Page 31] +Schoenebeck Expires July 2, 2007 [Page 32] -Internet-Draft LinuxSampler Control Protocol November 2006 +Internet-Draft LinuxSampler Control Protocol December 2006 + FIX - + + either true or false, if false then this parameter can be + changed at any time, once the device is created by the 'CREATE MIDI_INPUT_DEVICE' (Section 6.3.5) command (always returned, no matter which driver parameter) @@ -1781,18 +1841,17 @@ defines upper limit of the allowed value range for this parameter, can be an integer value as well as a dotted number, this parameter is often used in conjunction with RANGE_MIN, but - may also appear without (optionally returned, dependent to - driver parameter) - - -Schoenebeck Expires May 29, 2007 [Page 32] +Schoenebeck Expires July 2, 2007 [Page 33] -Internet-Draft LinuxSampler Control Protocol November 2006 +Internet-Draft LinuxSampler Control Protocol December 2006 + may also appear without (optionally returned, dependent to + driver parameter) + POSSIBILITIES - comma separated list of possible values for this parameter, @@ -1837,17 +1896,19 @@ Possible Answers: - "OK[]" - - in case the device was successfully created, where - is the numerical ID of the new device -Schoenebeck Expires May 29, 2007 [Page 33] +Schoenebeck Expires July 2, 2007 [Page 34] -Internet-Draft LinuxSampler Control Protocol November 2006 +Internet-Draft LinuxSampler Control Protocol December 2006 + + "OK[]" - + + in case the device was successfully created, where + is the numerical ID of the new device "WRN[]::" - @@ -1891,19 +1952,19 @@ "ERR::" - - in case it failed, providing an appropriate error code and - error message - Example: +Schoenebeck Expires July 2, 2007 [Page 35] + +Internet-Draft LinuxSampler Control Protocol December 2006 -Schoenebeck Expires May 29, 2007 [Page 34] - -Internet-Draft LinuxSampler Control Protocol November 2006 + in case it failed, providing an appropriate error code and + error message + Example: C: "DESTROY MIDI_INPUT_DEVICE 0" @@ -1947,19 +2008,19 @@ S: "1,3" -6.3.9. Getting current settings of a MIDI input device - Use the following command to get current settings of a specific, - created MIDI input device: +Schoenebeck Expires July 2, 2007 [Page 36] + +Internet-Draft LinuxSampler Control Protocol December 2006 -Schoenebeck Expires May 29, 2007 [Page 35] - -Internet-Draft LinuxSampler Control Protocol November 2006 +6.3.9. Getting current settings of a MIDI input device + Use the following command to get current settings of a specific, + created MIDI input device: GET MIDI_INPUT_DEVICE INFO @@ -2004,18 +2065,17 @@ S: "DRIVER: ALSA" - "ACTIVE: true" - - "." +Schoenebeck Expires July 2, 2007 [Page 37] + +Internet-Draft LinuxSampler Control Protocol December 2006 -Schoenebeck Expires May 29, 2007 [Page 36] - -Internet-Draft LinuxSampler Control Protocol November 2006 + "ACTIVE: true" + "." 6.3.10. Changing settings of MIDI input devices @@ -2061,18 +2121,19 @@ Where is the numerical ID of the MIDI input device as returned by the "CREATE MIDI_INPUT_DEVICE" (Section 6.3.5) or "LIST - MIDI_INPUT_DEVICES" (Section 6.3.8) command and the MIDI - input port number. - Possible Answers: - -Schoenebeck Expires May 29, 2007 [Page 37] +Schoenebeck Expires July 2, 2007 [Page 38] -Internet-Draft LinuxSampler Control Protocol November 2006 +Internet-Draft LinuxSampler Control Protocol December 2006 + MIDI_INPUT_DEVICES" (Section 6.3.8) command and the MIDI + input port number. + + Possible Answers: + LinuxSampler will answer by sending a separated list. Each answer line begins with the information category name followed by a colon and then a space character and finally the info @@ -2116,19 +2177,20 @@ LinuxSampler will answer by sending a separated list. Each answer line begins with the information category name followed by a colon and then a space character and finally the info - character string to that info category. There is information - which is always returned, independently of the given channel - parameter and there is optional information which are only shown - dependently to the given MIDI port. At the moment the following - information categories are defined: -Schoenebeck Expires May 29, 2007 [Page 38] +Schoenebeck Expires July 2, 2007 [Page 39] -Internet-Draft LinuxSampler Control Protocol November 2006 +Internet-Draft LinuxSampler Control Protocol December 2006 + character string to that info category. There is information + which is always returned, independently of the given channel + parameter and there is optional information which are only shown + dependently to the given MIDI port. At the moment the following + information categories are defined: + TYPE - either "BOOL" for boolean value(s) or "INT" for integer @@ -2171,19 +2233,19 @@ comma separated list of possible values for this parameter, character strings are encapsulated into apostrophes (optionally - returned, dependent to device and port parameter) - The mentioned fields above don't have to be in particular order. - Example: +Schoenebeck Expires July 2, 2007 [Page 40] + +Internet-Draft LinuxSampler Control Protocol December 2006 + returned, dependent to device and port parameter) -Schoenebeck Expires May 29, 2007 [Page 39] - -Internet-Draft LinuxSampler Control Protocol November 2006 + The mentioned fields above don't have to be in particular order. + Example: C: "GET MIDI_INPUT_PORT_PARAMETER INFO 0 0 ALSA_SEQ_BINDINGS" @@ -2226,20 +2288,19 @@ "ERR::" - - in case it failed, providing an appropriate error code and - error message - - Example: +Schoenebeck Expires July 2, 2007 [Page 41] + +Internet-Draft LinuxSampler Control Protocol December 2006 -Schoenebeck Expires May 29, 2007 [Page 40] - -Internet-Draft LinuxSampler Control Protocol November 2006 + in case it failed, providing an appropriate error code and + error message + Example: @@ -2284,19 +2345,18 @@ in case the instrument was loaded successfully, but there are noteworthy issue(s) related (e.g. Engine doesn't support one - or more patch parameters provided by the loaded instrument - file), providing an appropriate warning code and warning - message - - -Schoenebeck Expires May 29, 2007 [Page 41] +Schoenebeck Expires July 2, 2007 [Page 42] -Internet-Draft LinuxSampler Control Protocol November 2006 +Internet-Draft LinuxSampler Control Protocol December 2006 + or more patch parameters provided by the loaded instrument + file), providing an appropriate warning code and warning + message + "ERR::" - in case it failed, providing an appropriate error code and @@ -2342,16 +2402,14 @@ in case it failed, providing an appropriate error code and error message - Example: - - - -Schoenebeck Expires May 29, 2007 [Page 42] +Schoenebeck Expires July 2, 2007 [Page 43] -Internet-Draft LinuxSampler Control Protocol November 2006 +Internet-Draft LinuxSampler Control Protocol December 2006 + + Example: @@ -2398,17 +2456,18 @@ A new sampler channel can be added to the end of the sampler channel list by sending the following command: - ADD CHANNEL - This will increment the sampler channel count by one and the new -Schoenebeck Expires May 29, 2007 [Page 43] +Schoenebeck Expires July 2, 2007 [Page 44] -Internet-Draft LinuxSampler Control Protocol November 2006 +Internet-Draft LinuxSampler Control Protocol December 2006 + ADD CHANNEL + + This will increment the sampler channel count by one and the new sampler channel will be appended to the end of the sampler channel list. The front-end should send the respective, related commands right after to e.g. load an engine, load an instrument and setting @@ -2457,12 +2516,9 @@ - - - -Schoenebeck Expires May 29, 2007 [Page 44] +Schoenebeck Expires July 2, 2007 [Page 45] -Internet-Draft LinuxSampler Control Protocol November 2006 +Internet-Draft LinuxSampler Control Protocol December 2006 "OK" - @@ -2516,9 +2572,9 @@ -Schoenebeck Expires May 29, 2007 [Page 45] +Schoenebeck Expires July 2, 2007 [Page 46] -Internet-Draft LinuxSampler Control Protocol November 2006 +Internet-Draft LinuxSampler Control Protocol December 2006 LinuxSampler will answer by sending a comma separated list of the @@ -2572,9 +2628,9 @@ -Schoenebeck Expires May 29, 2007 [Page 46] +Schoenebeck Expires July 2, 2007 [Page 47] -Internet-Draft LinuxSampler Control Protocol November 2006 +Internet-Draft LinuxSampler Control Protocol December 2006 "VERSION: testing-1.0" @@ -2628,9 +2684,9 @@ -Schoenebeck Expires May 29, 2007 [Page 47] +Schoenebeck Expires July 2, 2007 [Page 48] -Internet-Draft LinuxSampler Control Protocol November 2006 +Internet-Draft LinuxSampler Control Protocol December 2006 output channel 0 is routed to channel 0 of the audio output @@ -2684,9 +2740,9 @@ -Schoenebeck Expires May 29, 2007 [Page 48] +Schoenebeck Expires July 2, 2007 [Page 49] -Internet-Draft LinuxSampler Control Protocol November 2006 +Internet-Draft LinuxSampler Control Protocol December 2006 MUTE - @@ -2702,6 +2758,13 @@ Determines whether this is a solo channel, "true" if the channel is a solo channel; "false" otherwise + MIDI_INSTRUMENT_MAP - + + Determines to which MIDI instrument map this sampler channel + is assigned to. Read chapter "SET CHANNEL + MIDI_INSTRUMENT_MAP" (Section 6.4.24) for a list of possible + values. + The mentioned fields above don't have to be in particular order. Example: @@ -2730,20 +2793,25 @@ "MIDI_INPUT_PORT: 0" - "MIDI_INPUT_CHANNEL: 5" - "." +Schoenebeck Expires July 2, 2007 [Page 50] + +Internet-Draft LinuxSampler Control Protocol December 2006 + "MIDI_INPUT_CHANNEL: 5" + "VOLUME: 1.0" + "MUTE: false" -Schoenebeck Expires May 29, 2007 [Page 49] - -Internet-Draft LinuxSampler Control Protocol November 2006 + "SOLO: false" + "MIDI_INSTRUMENT_MAP: NONE" + + "." 6.4.11. Current number of active voices @@ -2781,25 +2849,24 @@ LinuxSampler will answer by returning the number of active disk streams on that channel in case the engine supports disk streaming, if the engine doesn't support disk streaming it will - return "NA" for not available. - - Example: -6.4.13. Current fill state of disk stream buffers +Schoenebeck Expires July 2, 2007 [Page 51] + +Internet-Draft LinuxSampler Control Protocol December 2006 - The front-end can ask for the current fill state of all disk streams - on a sampler channel by sending the following command: + return "NA" for not available. + Example: -Schoenebeck Expires May 29, 2007 [Page 50] - -Internet-Draft LinuxSampler Control Protocol November 2006 +6.4.13. Current fill state of disk stream buffers + The front-end can ask for the current fill state of all disk streams + on a sampler channel by sending the following command: GET CHANNEL BUFFER_FILL BYTES @@ -2837,6 +2904,15 @@ C: "GET CHANNEL BUFFER_FILL PERCENTAGE 4" + + + + +Schoenebeck Expires July 2, 2007 [Page 52] + +Internet-Draft LinuxSampler Control Protocol December 2006 + + S: "" 6.4.14. Setting audio output device @@ -2849,14 +2925,6 @@ Where is the respective sampler channel number as returned by the "ADD CHANNEL" (Section 6.4.5) or "LIST CHANNELS" - - - -Schoenebeck Expires May 29, 2007 [Page 51] - -Internet-Draft LinuxSampler Control Protocol November 2006 - - (Section 6.4.4) command and is the numerical ID of the audio output device as given by the "CREATE AUDIO_OUTPUT_DEVICE" (Section 6.2.5) or "LIST AUDIO_OUTPUT_DEVICES" (Section 6.2.8) @@ -2893,6 +2961,14 @@ SET CHANNEL AUDIO_OUTPUT_TYPE + + + +Schoenebeck Expires July 2, 2007 [Page 53] + +Internet-Draft LinuxSampler Control Protocol December 2006 + + Where is currently either "ALSA" or "JACK" and is the respective sampler channel number. @@ -2904,15 +2980,6 @@ "WRN::" - - - - - -Schoenebeck Expires May 29, 2007 [Page 52] - -Internet-Draft LinuxSampler Control Protocol November 2006 - - if audio output type was set, but there are noteworthy issue(s) related, providing an appropriate warning code and warning message @@ -2949,6 +3016,15 @@ "WRN::" - + + + + +Schoenebeck Expires July 2, 2007 [Page 54] + +Internet-Draft LinuxSampler Control Protocol December 2006 + + if audio output channel was set, but there are noteworthy issue(s) related, providing an appropriate warning code and warning message @@ -2962,15 +3038,6 @@ - - -Schoenebeck Expires May 29, 2007 [Page 53] - -Internet-Draft LinuxSampler Control Protocol November 2006 - - - - 6.4.17. Setting MIDI input device The front-end can set the MIDI input device on a specific sampler @@ -3005,6 +3072,15 @@ + + + + +Schoenebeck Expires July 2, 2007 [Page 55] + +Internet-Draft LinuxSampler Control Protocol December 2006 + + 6.4.18. Setting MIDI input type DEPRECATED: THIS COMMAND WILL DISAPPEAR SOON! @@ -3017,14 +3093,6 @@ Where is currently only "ALSA" and is the respective sampler channel number. - - - -Schoenebeck Expires May 29, 2007 [Page 54] - -Internet-Draft LinuxSampler Control Protocol November 2006 - - Possible Answers: "OK" - @@ -3060,6 +3128,15 @@ "OK" - + + + + +Schoenebeck Expires July 2, 2007 [Page 56] + +Internet-Draft LinuxSampler Control Protocol December 2006 + + on success "WRN::" - @@ -3073,14 +3150,6 @@ in case it failed, providing an appropriate error code and error message - - - -Schoenebeck Expires May 29, 2007 [Page 55] - -Internet-Draft LinuxSampler Control Protocol November 2006 - - Examples: @@ -3117,6 +3186,15 @@ + + +Schoenebeck Expires July 2, 2007 [Page 57] + +Internet-Draft LinuxSampler Control Protocol December 2006 + + + + 6.4.21. Setting channel volume The front-end can alter the volume of a sampler channel by sending @@ -3129,14 +3207,6 @@ means amplification) and defines the sampler channel where this volume factor should be set. - - - -Schoenebeck Expires May 29, 2007 [Page 56] - -Internet-Draft LinuxSampler Control Protocol November 2006 - - Possible Answers: "OK" - @@ -3172,6 +3242,13 @@ Possible Answers: + + +Schoenebeck Expires July 2, 2007 [Page 58] + +Internet-Draft LinuxSampler Control Protocol December 2006 + + "OK" - on success @@ -3184,15 +3261,6 @@ "ERR::" - - - - - -Schoenebeck Expires May 29, 2007 [Page 57] - -Internet-Draft LinuxSampler Control Protocol November 2006 - - in case it failed, providing an appropriate error code and error message @@ -3229,26 +3297,364 @@ in case it failed, providing an appropriate error code and error message + + + +Schoenebeck Expires July 2, 2007 [Page 59] + +Internet-Draft LinuxSampler Control Protocol December 2006 + + Examples: -6.4.24. Resetting a sampler channel +6.4.24. Assigning a MIDI instrument map to a sampler channel - The front-end can reset a particular sampler channel by sending the - following command: + The front-end can assign a MIDI instrument map to a specific sampler + channel by sending the following command: - RESET CHANNEL + SET CHANNEL MIDI_INSTRUMENT_MAP - Where defines the sampler channel to be reset. + Where is the respective sampler channel number as + returned by the "ADD CHANNEL" (Section 6.4.5) or "LIST CHANNELS" + (Section 6.4.4) command and can have the following + possibilites: + + "NONE" - + + This is the default setting. In this case the sampler channel + is not assigned any MIDI instrument map and thus will ignore + all MIDI program change messages. + + "DEFAULT" - + + The sampler channel will always use the default MIDI instrument + map to handle MIDI program change messages. + + numeric ID - + + You can assign a specific MIDI instrument map by replacing + with the respective numeric ID of the MIDI instrument map + as returned by the "LIST MIDI_INSTRUMENT_MAPS" (Section 6.7.4) + command. Once that map will be deleted, the sampler channel + would fall back to "NONE". + + Read chapter "MIDI Instrument Mapping" (Section 6.7) for details + regarding MIDI instrument mapping. + + Possible Answers: + + "OK" - + + on success + + "ERR::" - + + in case it failed, providing an appropriate error code and + error message + + + +Schoenebeck Expires July 2, 2007 [Page 60] + +Internet-Draft LinuxSampler Control Protocol December 2006 + + + Examples: + + + +6.4.25. Adding an effect send to a sampler channel + + The front-end can create an additional effect send on a specific + sampler channel by sending the following command: + + CREATE FX_SEND [] + + Where is the respective sampler channel number as + returned by the "ADD CHANNEL" (Section 6.4.5) or "LIST CHANNELS" + (Section 6.4.4) command, that is the sampler channel on which the + effect send should be created on, is a number between + 0..127 defining the MIDI controller which can alter the effect send + level and is an optional argument defining a name for the + effect send entity. The name does not have to be unique. + + By default, that is as initial routing, the effect send's audio + channels are automatically routed to the last audio channels of the + sampler channel's audio output device, that way you can i.e. first + increase the amount of audio channels on the audio output device for + having dedicated effect send output channels and when "CREATE + FX_SEND" is called, those channels will automatically be picked. You + can alter the destination channels however with "SET FX_SEND + AUDIO_OUTPUT_CHANNEL" (Section 6.4.30). + + Note: Create effect sends on a sampler channel only when needed, + because having effect sends on a sampler channel will decrease + runtime performance, because for implementing channel effect sends, + separate (sampler channel local) audio buffers are needed to render + and mix the voices and route the audio signal afterwards to the + master outputs and effect send outputs (along with their respective + effect send levels). A sampler channel without effect sends however + can mix its voices directly into the audio output devices's audio + buffers and is thus faster. + + Possible Answers: + + "OK[]" - + + in case a new effect send could be added to the sampler + channel, where reflects the unique ID of the newly + created effect send entity + + + + + + +Schoenebeck Expires July 2, 2007 [Page 61] + +Internet-Draft LinuxSampler Control Protocol December 2006 + + + "ERR::" - + + when a new effect send could not be added, i.e. due to invalid + parameters + + Examples: + + C: "CREATE FX_SEND 0 91 'Reverb Send'" + + S: "OK[0]" + + C: "CREATE FX_SEND 0 93" + + S: "OK[1]" + +6.4.26. Removing an effect send from a sampler channel + + The front-end can remove an existing effect send on a specific + sampler channel by sending the following command: + + DESTROY FX_SEND + + Where is the respective sampler channel number as + returned by the "ADD CHANNEL" (Section 6.4.5) or "LIST CHANNELS" + (Section 6.4.4) command, that is the sampler channel from which the + effect send should be removed from and is the respective + effect send number as returned by the "CREATE FX_SEND" + (Section 6.4.25) or "LIST FX_SENDS" (Section 6.4.28) command. + + Possible Answers: + + "OK" - + + on success + + "ERR::" - + + in case it failed, providing an appropriate error code and + error message + + Example: + + C: "DESTROY FX_SEND 0 0" + + S: "OK" + + + + + + +Schoenebeck Expires July 2, 2007 [Page 62] + +Internet-Draft LinuxSampler Control Protocol December 2006 + + +6.4.27. Getting amount of effect sends on a sampler channel + + The front-end can ask for the amount of effect sends on a specific + sampler channel by sending the following command: + + GET FX_SENDS + + Where is the respective sampler channel number as + returned by the "ADD CHANNEL" (Section 6.4.5) or "LIST CHANNELS" + (Section 6.4.4) command. + + Possible Answers: + + The sampler will answer by returning the number of effect sends on + the given sampler channel. + + Example: + + C: "GET FX_SENDS 0" + + S: "2" + +6.4.28. Listing all effect sends on a sampler channel + + The front-end can ask for a list of effect sends on a specific + sampler channel by sending the following command: + + LIST FX_SENDS + + Where is the respective sampler channel number as + returned by the "ADD CHANNEL" (Section 6.4.5) or "LIST CHANNELS" + (Section 6.4.4) command. + + Possible Answers: + + The sampler will answer by returning a comma separated list with + all effect sends' numerical IDs on the given sampler channel. + + Examples: + + C: "LIST FX_SENDS 0" + + S: "0,1" + + C: "LIST FX_SENDS 1" + + S: "" + + + + +Schoenebeck Expires July 2, 2007 [Page 63] + +Internet-Draft LinuxSampler Control Protocol December 2006 + + +6.4.29. Getting effect send information + + The front-end can ask for the current settings of an effect send + entity by sending the following command: + + GET FX_SEND INFO + + Where is the sampler channel number as returned by + the "ADD CHANNEL" (Section 6.4.5) or "LIST CHANNELS" (Section 6.4.4) + command and reflects the numerical ID of the effect send + entity as returned by the "CREATE FX_SEND" (Section 6.4.25) or "LIST + FX_SENDS" (Section 6.4.28) command. + + Possible Answers: + + The sampler will answer by sending a separated list. Each + answer line begins with the settings category name followed by a + colon and then a space character and finally the info + character string to that setting category. At the moment the + following categories are defined: + + + + NAME - + + name of the effect send entity + + AUDIO_OUTPUT_ROUTING - + + comma separated list which reflects to which audio channel + of the selected audio output device each effect send output + channel is routed to, e.g. "0,3" would mean the effect + send's output channel 0 is routed to channel 0 of the audio + output device and the effect send's output channel 1 is + routed to the channel 3 of the audio output device (see "SET + FX_SEND AUDIO_OUTPUT_CHANNEL" (Section 6.4.30) for details) + + The mentioned fields above don't have to be in particular order. + + Example: + + C: "GET FX_SEND INFO 0 0" + + S: "NAME: Reverb Send" + + "AUDIO_OUTPUT_ROUTING: 2,3" + + + + + +Schoenebeck Expires July 2, 2007 [Page 64] + +Internet-Draft LinuxSampler Control Protocol December 2006 + + + "." + +6.4.30. Altering effect send's audio routing + + The front-end can alter the destination of an effect send's audio + channel on a specific sampler channel by sending the following + command: + + SET FX_SEND AUDIO_OUTPUT_CHANNEL + + + Where is the sampler channel number as returned by the + "ADD CHANNEL" (Section 6.4.5) or "LIST CHANNELS" (Section 6.4.4) + command, reflects the numerical ID of the effect send + entity as returned by the "CREATE FX_SEND" (Section 6.4.25) or "LIST + FX_SENDS" (Section 6.4.28) command, is the numerical ID + of the effect send's audio channel which should be rerouted and + is the numerical ID of the audio channel of the selected + audio output device where should be routed to. + + Note that effect sends can only route audio to the same audio output + device as assigned to the effect send's sampler channel. Also note + that an effect send entity does always have exactly as much audio + channels as its sampler channel. So if the sampler channel is + stereo, the effect send does have two audio channels as well. Also + keep in mind that the amount of audio channels on a sampler channel + might be dependant not only to the deployed sampler engine on the + sampler channel, but also dependant to the instrument currently + loaded. However you can (effectively) turn an i.e. stereo effect + send into a mono one by simply altering its audio routing + appropriately. + + Possible Answers: + + "OK" - + + on success + + "WRN::" - + + if audio output channel was set, but there are noteworthy + issue(s) related, providing an appropriate warning code and + warning message + + "ERR::" - + + in case it failed, providing an appropriate error code and + error message -Schoenebeck Expires May 29, 2007 [Page 58] +Schoenebeck Expires July 2, 2007 [Page 65] -Internet-Draft LinuxSampler Control Protocol November 2006 +Internet-Draft LinuxSampler Control Protocol December 2006 + + + Example: + + C: "SET FX_SEND AUDIO_OUTPUT_CHANNEL 0 0 0 2" + + S: "OK" + +6.4.31. Resetting a sampler channel + + The front-end can reset a particular sampler channel by sending the + following command: + RESET CHANNEL + Where defines the sampler channel to be reset. This will cause the engine on that sampler channel, its voices and eventually disk streams and all control and status variables to be reset. @@ -3284,6 +3690,13 @@ The front-end can register itself to the LinuxSampler application to be informed about noteworthy events by sending this command: + + +Schoenebeck Expires July 2, 2007 [Page 66] + +Internet-Draft LinuxSampler Control Protocol December 2006 + + SUBSCRIBE where will be replaced by the respective event that client @@ -3295,16 +3708,6 @@ on success - - - - - -Schoenebeck Expires May 29, 2007 [Page 59] - -Internet-Draft LinuxSampler Control Protocol November 2006 - - "WRN::" - if registration succeeded, but there are noteworthy issue(s) @@ -3342,23 +3745,21 @@ related, providing an appropriate warning code and warning message - "ERR::" - - - in case it failed, providing an appropriate error code and - error message - - Examples: +Schoenebeck Expires July 2, 2007 [Page 67] + +Internet-Draft LinuxSampler Control Protocol December 2006 + "ERR::" - + in case it failed, providing an appropriate error code and + error message + Examples: -Schoenebeck Expires May 29, 2007 [Page 60] - -Internet-Draft LinuxSampler Control Protocol November 2006 6.5.3. Enable or disable echo of commands @@ -3399,23 +3800,23 @@ This is probably more interesting for manual telnet connections to LinuxSampler than really useful for a front-end implementation. -6.6. Global commands - The following commands have global impact on the sampler. -6.6.1. Current number of active voices - The front-end can ask for the current number of active voices on the - sampler by sending the following command: +Schoenebeck Expires July 2, 2007 [Page 68] + +Internet-Draft LinuxSampler Control Protocol December 2006 +6.6. Global commands + The following commands have global impact on the sampler. -Schoenebeck Expires May 29, 2007 [Page 61] - -Internet-Draft LinuxSampler Control Protocol November 2006 +6.6.1. Current number of active voices + The front-end can ask for the current number of active voices on the + sampler by sending the following command: GET TOTAL_VOICE_COUNT @@ -3453,6 +3854,17 @@ + + + + + + +Schoenebeck Expires July 2, 2007 [Page 69] + +Internet-Draft LinuxSampler Control Protocol December 2006 + + 6.6.4. General sampler informations The client can ask for general informations about the LinuxSampler @@ -3465,14 +3877,6 @@ LinuxSampler will answer by sending a separated list. Each answer line begins with the information category name followed by a colon and then a space character and finally the info - - - -Schoenebeck Expires May 29, 2007 [Page 62] - -Internet-Draft LinuxSampler Control Protocol November 2006 - - character string to that information category. At the moment the following categories are defined: @@ -3494,39 +3898,699 @@ The mentioned fields above don't have to be in particular order. Other fields might be added in future. +6.6.5. Getting global volume attenuation + + The client can ask for the current global sampler-wide volume + attenuation by sending the following command: + + GET VOLUME + + Possible Answers: + + The sampler will always answer by returning the optional dotted + floating point coefficient, reflecting the current global volume + attenuation. + + Note: it is up to the respective sampler engine whether to obey that + global volume parameter or not, but in general all engines SHOULD use + + + +Schoenebeck Expires July 2, 2007 [Page 70] + +Internet-Draft LinuxSampler Control Protocol December 2006 + + + this parameter. + +6.6.6. Setting global volume attenuation + + The client can alter the current global sampler-wide volume + attenuation by sending the following command: + + SET VOLUME + + Where should be replaced by the optional dotted floating + point value, reflecting the new global volume parameter. This value + might usually be in the range between 0.0 and 1.0, that is for + attenuating the overall volume. + + Possible Answers: + + "OK" - + + on success + + "WRN::" - + + if the global volume was set, but there are noteworthy issue(s) + related, providing an appropriate warning code and warning + message + + "ERR::" - + + in case it failed, providing an appropriate error code and + error message + +6.7. MIDI Instrument Mapping + + The MIDI protocol provides a way to switch between instruments by + sending so called MIDI bank select and MIDI program change messages + which are essentially just numbers. The following commands allow to + actually map arbitrary MIDI bank select / program change numbers with + real instruments. + + The sampler allows to manage an arbitrary amount of MIDI instrument + maps which define which instrument to load on which MIDI program + change message. + + By default, that is when the sampler is launched, there is no map, + thus the sampler will simply ignore all program change messages. The + front-end has to explicitly create at least one map, add entries to + the map and tell the respective sampler channel(s) which MIDI + instrument map to use, so the sampler knows how to react on a given + + + +Schoenebeck Expires July 2, 2007 [Page 71] + +Internet-Draft LinuxSampler Control Protocol December 2006 + + + program change message on the respective sampler channel, that is by + switching to the respectively defined engine type and loading the + respective instrument. See command "SET CHANNEL MIDI_INSTRUMENT_MAP" + (Section 6.4.24) for how to assign a MIDI instrument map to a sampler + channel. + + Also note per MIDI specification a bank select message does not cause + to switch to another instrument. Instead when receiving a bank + select message the bank value will be stored and a subsequent program + change message (which may occur at any time) will finally cause the + sampler to switch to the respective instrument as reflected by the + current MIDI instrument map. + +6.7.1. Create a new MIDI instrument map + + The front-end can add a new MIDI instrument map by sending the + following command: + + ADD MIDI_INSTRUMENT_MAP [] + + Where is an optional argument allowing to assign a custom name + to the new map. MIDI instrument Map names do not have to be unique. + + Possible Answers: + + "OK[]" - + in case a new MIDI instrument map could be added, where + reflects the unique ID of the newly created MIDI instrument map + "ERR::" - + + when a new map could not be created, which might never occur in + practice + + Examples: + + C: "ADD MIDI_INSTRUMENT_MAP 'Standard Map'" + + S: "OK[0]" + + C: "ADD MIDI_INSTRUMENT_MAP 'Standard Drumkit'" + + S: "OK[1]" + C: "ADD MIDI_INSTRUMENT_MAP" +Schoenebeck Expires July 2, 2007 [Page 72] + +Internet-Draft LinuxSampler Control Protocol December 2006 + + + S: "OK[5]" + +6.7.2. Delete one particular or all MIDI instrument maps + + The front-end can delete a particular MIDI instrument map by sending + the following command: + + REMOVE MIDI_INSTRUMENT_MAP + Where reflects the unique ID of the map to delete as returned + by the "LIST MIDI_INSTRUMENT_MAPS" (Section 6.7.4) command. + The front-end can delete all MIDI instrument maps by sending the + following command: + REMOVE MIDI_INSTRUMENT_MAP ALL + + Possible Answers: + "OK" - + in case the map(s) could be deleted + "ERR::" - + when the given map does not exist + Examples: + C: "REMOVE MIDI_INSTRUMENT_MAP 0" + S: "OK" + C: "REMOVE MIDI_INSTRUMENT_MAP ALL" + S: "OK" +6.7.3. Get amount of existing MIDI instrument maps + The front-end can retrieve the current amount of MIDI instrument maps + by sending the following command: + GET MIDI_INSTRUMENT_MAPS + Possible Answers: -Schoenebeck Expires May 29, 2007 [Page 63] +Schoenebeck Expires July 2, 2007 [Page 73] -Internet-Draft LinuxSampler Control Protocol November 2006 +Internet-Draft LinuxSampler Control Protocol December 2006 + + + The sampler will answer by returning the current number of MIDI + instrument maps. + + Example: + + C: "GET MIDI_INSTRUMENT_MAPS" + + S: "2" + +6.7.4. Getting all created MIDI instrument maps + + The number of MIDI instrument maps can change on runtime. To get the + current list of MIDI instrument maps, the front-end can send the + following command: + + LIST MIDI_INSTRUMENT_MAPS + + Possible Answers: + + The sampler will answer by returning a comma separated list with + all MIDI instrument maps' numerical IDs. + + Example: + + C: "LIST MIDI_INSTRUMENT_MAPS" + + S: "0,1,5,12" + +6.7.5. Getting MIDI instrument map information + + The front-end can ask for the current settings of a MIDI instrument + map by sending the following command: + + GET MIDI_INSTRUMENT_MAP INFO + + Where is the numerical ID of the map the front-end is + interested in as returned by the "LIST MIDI_INSTRUMENT_MAPS" + (Section 6.7.4) command. + + Possible Answers: + + LinuxSampler will answer by sending a separated list. Each + answer line begins with the settings category name followed by a + colon and then a space character and finally the info + character string to that setting category. At the moment the + following categories are defined: + + + + + +Schoenebeck Expires July 2, 2007 [Page 74] + +Internet-Draft LinuxSampler Control Protocol December 2006 + + + + + NAME - + + custom name of the given map, which does not have to be + unique + + The mentioned fields above don't have to be in particular order. + + Example: + + C: "GET MIDI_INSTRUMENT_MAP INFO 0" + + S: "NAME: Standard Map" + + "." + +6.7.6. Renaming a MIDI instrument map + + The front-end can alter the custom name of a MIDI instrument map by + sending the following command: + + SET MIDI_INSTRUMENT_MAP NAME + + Where is the numerical ID of the map and the new custom + name of the map, which does not have to be unique. + + Possible Answers: + + "OK" - + + on success + + "ERR::" - + + in case the given map does not exist + + Example: + + C: "SET MIDI_INSTRUMENT_MAP NAME 0 'Foo instruments'" + + S: "OK" + +6.7.7. Create or replace a MIDI instrument map entry + + The front-end can create a new or replace an existing entry in a + sampler's MIDI instrument map by sending the following command: + + + + +Schoenebeck Expires July 2, 2007 [Page 75] + +Internet-Draft LinuxSampler Control Protocol December 2006 + + + MAP MIDI_INSTRUMENT + [] + [] + + Where is the numeric ID of the map to alter, is an + integer value between 0..16383 reflecting the MIDI bank select index, + an integer value between 0..127 reflecting the MIDI + program change index, a sampler engine name as returned + by the "LIST AVAILABLE_ENGINES" (Section 6.4.8) command (not + encapsulated into apostrophes), the name of the + instrument's file to be deployed (encapsulated into apostrophes), + the index (integer value) of the instrument within + the given file, reflects the master volume of the + instrument as optionally dotted number (where a value < 1.0 means + attenuation and a value > 1.0 means amplification). This parameter + easily allows to adjust the volume of all intruments within a custom + instrument map without having to adjust their instrument files. The + OPTIONAL argument defines the life time of the + instrument, that is when the instrument should be loaded, when freed + and has exactly the following possibilities: + + "ON_DEMAND" - + + The instrument will be loaded when needed, that is when + demanded by at least one sampler channel. It will immediately + be freed from memory when not needed by any sampler channel + anymore. + + "ON_DEMAND_HOLD" - + + The instrument will be loaded when needed, that is when + demanded by at least one sampler channel. It will be kept in + memory even when not needed by any sampler channel anymore. + Instruments with this mode are only freed when the sampler is + reset or all mapping entries with this mode (and respective + instrument) are explicitly changed to "ON_DEMAND" and no + sampler channel is using the instrument anymore. + + "PERSISTENT" - + + The instrument will immediately be loaded into memory in the + background when this mapping command is sent and the instrument + is kept all the time. Instruments with this mode are only + freed when the sampler is reset or all mapping entries with + this mode (and respective instrument) are explicitly changed to + "ON_DEMAND" and no sampler channel is using the instrument + anymore. + + + + +Schoenebeck Expires July 2, 2007 [Page 76] + +Internet-Draft LinuxSampler Control Protocol December 2006 + + + not supplied - + + In case there is no argument given, it will + be up to the InstrumentManager to decide which mode to use. + Usually it will use "ON_DEMAND" if an entry for the given + instrument does not exist in the InstrumentManager's list yet, + otherwise if an entry already exists, it will simply stick with + the mode currently reflected by the already existing entry, + that is it will not change the mode. + + The argument thus allows to define an appropriate + strategy (low memory consumption vs. fast instrument switching) for + each instrument individually. Note, the following restrictions apply + to this argument: "ON_DEMAND_HOLD" and "PERSISTENT" have to be + supported by the respective sampler engine (which is technically the + case when the engine provides an InstrumentManager for its format). + If this is not the case the argument will automatically fall back to + the default value "ON_DEMAND". Also the load mode of one instrument + may automatically change the laod mode of other instrument(s), i.e. + because the instruments are part of the same file and the engine does + not allow a way to manage load modes for them individually. Due to + this, in case the frontend shows the load modes of entries, the + frontend should retrieve the actual mode by i.e. sending "GET + MIDI_INSTRUMENT INFO" (Section 6.7.11) command(s). Finally the + OPTIONAL argument allows to set a custom name (encapsulated + into apostrophes) for the mapping entry, useful for frontends for + displaying an appropriate name for mapped instruments (using "GET + MIDI_INSTRUMENT INFO" (Section 6.7.11)). + + The "MAP MIDI_INSTRUMENT" command will immediately return, thus it + will not block when an instrument is to be loaded due to a + "PERSISTENT" type entry as instruments are loaded in the background. + As a consequence this command may not necessarily return an error + i.e. when the given instrument file does not exist or may turn out to + be corrupt. + + Possible Answers: + + "OK" - + + usually + + "ERR::" - + + when the given map or engine does not exist or a value is out + of range + + Examples: + + + +Schoenebeck Expires July 2, 2007 [Page 77] + +Internet-Draft LinuxSampler Control Protocol December 2006 + + + C: "MAP MIDI_INSTRUMENT 0 3 0 gig '/usr/share/Steinway D.gig' 0 + 0.8 PERSISTENT" + + S: "OK" + + C: "MAP MIDI_INSTRUMENT 0 4 50 gig '/home/john/foostrings.gig' 7 + 1.0" + + S: "OK" + + C: "MAP MIDI_INSTRUMENT 0 0 0 gig '/usr/share/piano.gig' 0 1.0 + 'Normal Piano'" + + S: "OK" + + C: "MAP MIDI_INSTRUMENT 0 1 0 gig '/usr/share/piano.gig' 0 0.25 + 'Silent Piano'" + + S: "OK" + + C: "MAP MIDI_INSTRUMENT 1 8 120 gig '/home/joe/foodrums.gig' 0 1.0 + PERSISTENT 'Foo Drumkit'" + + S: "OK" + +6.7.8. Getting ammount of MIDI instrument map entries + + The front-end can query the amount of currently existing entries in a + MIDI instrument map by sending the following command: + + GET MIDI_INSTRUMENTS + + The front-end can query the amount of currently existing entries in + all MIDI instrument maps by sending the following command: + + GET MIDI_INSTRUMENTS ALL + + Possible Answers: + + The sampler will answer by sending the current number of entries + in the MIDI instrument map(s). + + Example: + + C: "GET MIDI_INSTRUMENTS 0" + + S: "234" + + + + +Schoenebeck Expires July 2, 2007 [Page 78] + +Internet-Draft LinuxSampler Control Protocol December 2006 + + + C: "GET MIDI_INSTRUMENTS ALL" + + S: "954" + +6.7.9. Getting indeces of all entries of a MIDI instrument map + + The front-end can query a list of all currently existing entries in a + certain MIDI instrument map by sending the following command: + + LIST MIDI_INSTRUMENTS + + Where is the numeric ID of the MIDI instrument map. + + The front-end can query a list of all currently existing entries of + all MIDI instrument maps by sending the following command: + + LIST MIDI_INSTRUMENTS ALL + + Possible Answers: + + The sampler will answer by sending a comma separated list of map + ID - MIDI bank - MIDI program triples, where each triple is + encapsulated into curly braces. The list is returned in one + single line. Each triple just reflects the key of the respective + map entry, thus subsequent "GET MIDI_INSTRUMENT INFO" + (Section 6.7.11) command(s) are necessary to retrieve detailed + informations about each entry. + + Example: + + C: "LIST MIDI_INSTRUMENTS 0" + + S: "{0,0,0},{0,0,1},{0,0,3},{0,1,4},{1,127,127}" + +6.7.10. Remove an entry from the MIDI instrument map + + The front-end can delete an entry from a MIDI instrument map by + sending the following command: + + UNMAP MIDI_INSTRUMENT + + Where is the numeric ID of the MIDI instrument map, + is an integer value between 0..16383 reflecting the MIDI bank value + and an integer value between 0..127 reflecting the MIDI + program value of the map's entrie's key index triple. + + Possible Answers: + + + + +Schoenebeck Expires July 2, 2007 [Page 79] + +Internet-Draft LinuxSampler Control Protocol December 2006 + + + "OK" - + + usually + + "ERR::" - + + when index out of bounds + + Example: + + C: "UNMAP MIDI_INSTRUMENT 0 2 127" + + S: "OK" + +6.7.11. Get current settings of MIDI instrument map entry + + The front-end can retrieve the current settings of a certain + instrument map entry by sending the following command: + + GET MIDI_INSTRUMENT INFO + + Where is the numeric ID of the MIDI instrument map, + is an integer value between 0..16383 reflecting the MIDI bank value, + and an integer value between 0..127 + reflecting the MIDI program value of the map's entrie's key index + triple. + + Possible Answers: + + LinuxSampler will answer by sending a separated list. Each + answer line begins with the information category name followed by + a colon and then a space character and finally the info + character string to that info category. At the moment the + following categories are defined: + + "NAME" - + + Name for this MIDI instrument map entry (if defined). This + name shall be used by frontends for displaying a name for this + mapped instrument. It can be set and changed with the "MAP + MIDI_INSTRUMENT" (Section 6.7.7) command and does not have to + be unique. + + "ENGINE_NAME" - + + Name of the engine to be deployed for this instrument. + + + + + +Schoenebeck Expires July 2, 2007 [Page 80] + +Internet-Draft LinuxSampler Control Protocol December 2006 + + + "INSTRUMENT_FILE" - + + File name of the instrument. + + "INSTRUMENT_NR" - + + Index of the instrument within the file. + + "INSTRUMENT_NAME" - + + Name of the loaded instrument as reflected by its file. In + contrast to the "NAME" field, the "INSTRUMENT_NAME" field + cannot be changed. + + "LOAD_MODE" - + + Life time of instrument (see "MAP MIDI_INSTRUMENT" + (Section 6.7.7) for details about this setting). + + "VOLUME" - + + master volume of the instrument as optionally dotted number + (where a value < 1.0 means attenuation and a value > 1.0 means + amplification) + + The mentioned fields above don't have to be in particular order. + + Example: + + C: "GET MIDI_INSTRUMENT INFO 1 45 120" + + S: "NAME: Drums for Foo Song" + + "ENGINE_NAME: GigEngine" + + "INSTRUMENT_FILE: /usr/share/joesdrumkit.gig" + + "INSTRUMENT_NR: 0" + + "INSTRUMENT_NAME: Joe's Drumkit" + + "LOAD_MODE: PERSISTENT" + + "VOLUME: 1.0" + + "." + + + + + +Schoenebeck Expires July 2, 2007 [Page 81] + +Internet-Draft LinuxSampler Control Protocol December 2006 + + +6.7.12. Clear MIDI instrument map + + The front-end can clear a whole MIDI instrument map, that is delete + all its entries by sending the following command: + + CLEAR MIDI_INSTRUMENTS + + Where is the numeric ID of the map to clear. + + The front-end can clear all MIDI instrument maps, that is delete all + entries of all maps by sending the following command: + + CLEAR MIDI_INSTRUMENTS ALL + + The command "CLEAR MIDI_INSTRUMENTS ALL" does not delete the maps, + only their entries, thus the map's settings like custom name will be + preservevd. + + Possible Answers: + + "OK" - + + always + + Examples: + + C: "CLEAR MIDI_INSTRUMENTS 0" + + S: "OK" + + C: "CLEAR MIDI_INSTRUMENTS ALL" + + S: "OK" + + + + + + + + + + + + + + + + + + +Schoenebeck Expires July 2, 2007 [Page 82] + +Internet-Draft LinuxSampler Control Protocol December 2006 7. Command Syntax @@ -3565,7 +4629,11 @@ command = - ADD SP CHANNEL + ADD SP add_instruction + + / MAP SP map_instruction + + / UNMAP SP unmap_instruction / GET SP get_instruction @@ -3573,19 +4641,19 @@ / DESTROY SP destroy_instruction - / LIST SP list_instruction - / LOAD SP load_instruction +Schoenebeck Expires July 2, 2007 [Page 83] + +Internet-Draft LinuxSampler Control Protocol December 2006 -Schoenebeck Expires May 29, 2007 [Page 64] - -Internet-Draft LinuxSampler Control Protocol November 2006 + / LIST SP list_instruction + / LOAD SP load_instruction - / REMOVE SP CHANNEL SP sampler_channel + / REMOVE SP remove_instruction / SET SP set_instruction @@ -3595,15 +4663,33 @@ / SELECT SP text - / RESET SP CHANNEL SP sampler_channel + / RESET SP reset_instruction + + / CLEAR SP clear_instruction / RESET / QUIT + add_instruction = + + CHANNEL + + / MIDI_INSTRUMENT_MAP + + / MIDI_INSTRUMENT_MAP SP map_name + subscribe_event = - CHANNEL_COUNT + AUDIO_OUTPUT_DEVICE_COUNT + + / AUDIO_OUTPUT_DEVICE_INFO + + / MIDI_INPUT_DEVICE_COUNT + + / MIDI_INPUT_DEVICE_INFO + + / CHANNEL_COUNT / VOICE_COUNT @@ -3611,15 +4697,39 @@ / BUFFER_FILL + + + +Schoenebeck Expires July 2, 2007 [Page 84] + +Internet-Draft LinuxSampler Control Protocol December 2006 + + / CHANNEL_INFO + / MIDI_INSTRUMENT_MAP_COUNT + + / MIDI_INSTRUMENT_MAP_INFO + + / MIDI_INSTRUMENT_COUNT + + / MIDI_INSTRUMENT_INFO + / MISCELLANEOUS / TOTAL_VOICE_COUNT unsubscribe_event = - CHANNEL_COUNT + AUDIO_OUTPUT_DEVICE_COUNT + + / AUDIO_OUTPUT_DEVICE_INFO + + / MIDI_INPUT_DEVICE_COUNT + + / MIDI_INPUT_DEVICE_INFO + + / CHANNEL_COUNT / VOICE_COUNT @@ -3629,17 +4739,54 @@ / CHANNEL_INFO + / MIDI_INSTRUMENT_MAP_COUNT + + / MIDI_INSTRUMENT_MAP_INFO + + / MIDI_INSTRUMENT_COUNT + + / MIDI_INSTRUMENT_INFO + / MISCELLANEOUS / TOTAL_VOICE_COUNT + map_instruction = + -Schoenebeck Expires May 29, 2007 [Page 65] +Schoenebeck Expires July 2, 2007 [Page 85] -Internet-Draft LinuxSampler Control Protocol November 2006 +Internet-Draft LinuxSampler Control Protocol December 2006 + + + MIDI_INSTRUMENT SP midi_map SP midi_bank SP midi_prog SP + engine_name SP filename SP instrument_index SP volume_value + + / MIDI_INSTRUMENT SP midi_map SP midi_bank SP midi_prog SP + engine_name SP filename SP instrument_index SP volume_value SP + instr_load_mode + + / MIDI_INSTRUMENT SP midi_map SP midi_bank SP midi_prog SP + engine_name SP filename SP instrument_index SP volume_value SP + entry_name + + / MIDI_INSTRUMENT SP midi_map SP midi_bank SP midi_prog SP + engine_name SP filename SP instrument_index SP volume_value SP + instr_load_mode SP entry_name + + unmap_instruction = + + MIDI_INSTRUMENT SP midi_map SP midi_bank SP midi_prog + + remove_instruction = + + CHANNEL SP sampler_channel + + / MIDI_INSTRUMENT_MAP SP midi_map + / MIDI_INSTRUMENT_MAP SP ALL get_instruction = @@ -3663,6 +4810,13 @@ / AUDIO_OUTPUT_DRIVER_PARAMETER SP INFO SP string SP string SP key_val_list + + +Schoenebeck Expires July 2, 2007 [Page 86] + +Internet-Draft LinuxSampler Control Protocol December 2006 + + / AUDIO_OUTPUT_DEVICES / MIDI_INPUT_DEVICES @@ -3688,24 +4842,40 @@ / CHANNEL SP STREAM_COUNT SP sampler_channel + / CHANNEL SP VOICE_COUNT SP sampler_channel + / ENGINE SP INFO SP engine_name + / SERVER SP INFO + / TOTAL_VOICE_COUNT -Schoenebeck Expires May 29, 2007 [Page 66] - -Internet-Draft LinuxSampler Control Protocol November 2006 + / TOTAL_VOICE_COUNT_MAX + / MIDI_INSTRUMENTS SP midi_map - / CHANNEL SP VOICE_COUNT SP sampler_channel + / MIDI_INSTRUMENTS SP ALL - / ENGINE SP INFO SP engine_name + / MIDI_INSTRUMENT SP INFO SP midi_map SP midi_bank SP midi_prog + + / MIDI_INSTRUMENT_MAPS + + / MIDI_INSTRUMENT_MAP SP INFO SP midi_map + + / FX_SENDS SP sampler_channel - / SERVER SP INFO - / TOTAL_VOICE_COUNT - / TOTAL_VOICE_COUNT_MAX + + +Schoenebeck Expires July 2, 2007 [Page 87] + +Internet-Draft LinuxSampler Control Protocol December 2006 + + + / FX_SEND SP INFO SP sampler_channel SP fx_send_id + + / VOLUME set_instruction = @@ -3723,8 +4893,15 @@ / CHANNEL SP set_chan_instruction + / MIDI_INSTRUMENT_MAP SP NAME SP midi_map SP map_name + + / FX_SEND SP AUDIO_OUTPUT_CHANNEL SP sampler_channel SP fx_send_id + SP audio_channel_index SP audio_channel_index + / ECHO SP boolean + / VOLUME SP volume_value + create_instruction = AUDIO_OUTPUT_DEVICE SP string SP key_val_list @@ -3735,24 +4912,39 @@ / MIDI_INPUT_DEVICE SP string - destroy_instruction = - - AUDIO_OUTPUT_DEVICE SP number + / FX_SEND SP sampler_channel SP midi_ctrl - / MIDI_INPUT_DEVICE SP number + / FX_SEND SP sampler_channel SP midi_ctrl SP fx_send_name - load_instruction = + reset_instruction = - INSTRUMENT SP load_instr_args + CHANNEL SP sampler_channel + clear_instruction = -Schoenebeck Expires May 29, 2007 [Page 67] +Schoenebeck Expires July 2, 2007 [Page 88] -Internet-Draft LinuxSampler Control Protocol November 2006 +Internet-Draft LinuxSampler Control Protocol December 2006 + MIDI_INSTRUMENTS SP midi_map + + / MIDI_INSTRUMENTS SP ALL + + destroy_instruction = + + AUDIO_OUTPUT_DEVICE SP number + + / MIDI_INPUT_DEVICE SP number + + / FX_SEND SP sampler_channel SP fx_send_id + + load_instruction = + + INSTRUMENT SP load_instr_args + / ENGINE SP load_engine_args set_chan_instruction = @@ -3782,6 +4974,21 @@ / SOLO SP sampler_channel SP boolean + / MIDI_INSTRUMENT_MAP SP sampler_channel SP midi_map + + + + + +Schoenebeck Expires July 2, 2007 [Page 89] + +Internet-Draft LinuxSampler Control Protocol December 2006 + + + / MIDI_INSTRUMENT_MAP SP sampler_channel SP NONE + + / MIDI_INSTRUMENT_MAP SP sampler_channel SP DEFAULT + key_val_list = string '=' param_val_list @@ -3800,15 +5007,6 @@ / MIDI_INPUT_DEVICES - - - - -Schoenebeck Expires May 29, 2007 [Page 68] - -Internet-Draft LinuxSampler Control Protocol November 2006 - - / CHANNELS / AVAILABLE_ENGINES @@ -3817,6 +5015,14 @@ / AVAILABLE_AUDIO_OUTPUT_DRIVERS + / MIDI_INSTRUMENTS SP midi_map + + / MIDI_INSTRUMENTS SP ALL + + / MIDI_INSTRUMENT_MAPS + + / FX_SENDS SP sampler_channel + load_instr_args = filename SP instrument_index SP sampler_channel @@ -3827,6 +5033,22 @@ engine_name SP sampler_channel + + + +Schoenebeck Expires July 2, 2007 [Page 90] + +Internet-Draft LinuxSampler Control Protocol December 2006 + + + instr_load_mode = + + ON_DEMAND + + / ON_DEMAND_HOLD + + / PERSISTENT + device_index = number @@ -3853,18 +5075,34 @@ string - volume_value = + midi_map = - dotnum + number + + midi_bank = + + number + + midi_prog = + + number + + midi_ctrl = -Schoenebeck Expires May 29, 2007 [Page 69] +Schoenebeck Expires July 2, 2007 [Page 91] -Internet-Draft LinuxSampler Control Protocol November 2006 +Internet-Draft LinuxSampler Control Protocol December 2006 + number + + volume_value = + + dotnum + / number sampler_channel = @@ -3875,6 +5113,10 @@ number + fx_send_id = + + number + engine_name = string @@ -3883,6 +5125,18 @@ stringval + map_name = + + stringval + + entry_name = + + stringval + + fx_send_name = + + stringval + param_val_list = param_val @@ -3891,6 +5145,14 @@ param_val = + + + +Schoenebeck Expires July 2, 2007 [Page 92] + +Internet-Draft LinuxSampler Control Protocol December 2006 + + string / stringval @@ -3916,9 +5178,35 @@ -Schoenebeck Expires May 29, 2007 [Page 70] + + + + + + + + + + + + + + + + + + + + + + + + + + +Schoenebeck Expires July 2, 2007 [Page 93] -Internet-Draft LinuxSampler Control Protocol November 2006 +Internet-Draft LinuxSampler Control Protocol December 2006 8. Events @@ -3926,7 +5214,82 @@ This chapter will describe all currently defined events supported by LinuxSampler. -8.1. Number of sampler channels changed +8.1. Number of audio output devices changed + + Client may want to be notified when the total number of audio output + devices on the back-end changes by issuing the following command: + + SUBSCRIBE AUDIO_OUTPUT_DEVICE_COUNT + + Server will start sending the following notification messages: + + "NOTIFY:AUDIO_OUTPUT_DEVICE_COUNT:" + + where will be replaced by the new number of audio output + devices. + +8.2. Audio output device's settings changed + + Client may want to be notified when changes were made to audio output + devices on the back-end by issuing the following command: + + SUBSCRIBE AUDIO_OUTPUT_DEVICE_INFO + + Server will start sending the following notification messages: + + "NOTIFY:AUDIO_OUTPUT_DEVICE_INFO:" + + where will be replaced by the numerical ID of the audio + output device, which settings has been changed. The front-end will + have to send the respective command to actually get the audio output + device info. Because these messages will be triggered by LSCP + commands issued by other clients rather than real time events + happening on the server, it is believed that an empty notification + message is sufficient here. + +8.3. Number of MIDI input devices changed + + Client may want to be notified when the total number of MIDI input + devices on the back-end changes by issuing the following command: + + SUBSCRIBE MIDI_INPUT_DEVICE_COUNT + + Server will start sending the following notification messages: + + + + + +Schoenebeck Expires July 2, 2007 [Page 94] + +Internet-Draft LinuxSampler Control Protocol December 2006 + + + "NOTIFY:MIDI_INPUT_DEVICE_COUNT:" + + where will be replaced by the new number of MIDI input + devices. + +8.4. MIDI input device's settings changed + + Client may want to be notified when changes were made to MIDI input + devices on the back-end by issuing the following command: + + SUBSCRIBE MIDI_INPUT_DEVICE_INFO + + Server will start sending the following notification messages: + + "NOTIFY:MIDI_INPUT_DEVICE_INFO:" + + where will be replaced by the numerical ID of the MIDI + input device, which settings has been changed. The front-end will + have to send the respective command to actually get the MIDI input + device info. Because these messages will be triggered by LSCP + commands issued by other clients rather than real time events + happening on the server, it is believed that an empty notification + message is sufficient here. + +8.5. Number of sampler channels changed Client may want to be notified when the total number of channels on the back-end changes by issuing the following command: @@ -3940,7 +5303,7 @@ where will be replaced by the new number of sampler channels. -8.2. Number of active voices changed +8.6. Number of active voices changed Client may want to be notified when the number of voices on the back- end changes by issuing the following command: @@ -3949,13 +5312,22 @@ Server will start sending the following notification messages: + + + + +Schoenebeck Expires July 2, 2007 [Page 95] + +Internet-Draft LinuxSampler Control Protocol December 2006 + + "NOTIFY:VOICE_COUNT: where will be replaced by the sampler channel the voice count change occurred and by the new number of active voices on that channel. -8.3. Number of active disk streams changed +8.7. Number of active disk streams changed Client may want to be notified when the number of streams on the back-end changes by issuing the following command: SUBSCRIBE @@ -3969,17 +5341,9 @@ where will be replaced by the sampler channel the stream count change occurred and by the new number of - - - -Schoenebeck Expires May 29, 2007 [Page 71] - -Internet-Draft LinuxSampler Control Protocol November 2006 - - active disk streams on that channel. -8.4. Disk stream buffer fill state changed +8.8. Disk stream buffer fill state changed Client may want to be notified when the buffer fill state of a disk stream on the back-end changes by issuing the following command: @@ -3996,7 +5360,7 @@ Section 6.4.13 as if the "GET CHANNEL BUFFER_FILL PERCENTAGE" (Section 6.4.13) command was issued on this channel. -8.5. Channel information changed +8.9. Channel information changed Client may want to be notified when changes were made to sampler channels on the back-end by issuing the following command: @@ -4005,6 +5369,14 @@ Server will start sending the following notification messages: + + + +Schoenebeck Expires July 2, 2007 [Page 96] + +Internet-Draft LinuxSampler Control Protocol December 2006 + + "NOTIFY:CHANNEL_INFO:" where will be replaced by the sampler channel the @@ -4014,7 +5386,7 @@ rather than real time events happening on the server, it is believed that an empty notification message is sufficient here. -8.6. Total number of active voices changed +8.10. Total number of active voices changed Client may want to be notified when the total number of voices on the back-end changes by issuing the following command: @@ -4023,22 +5395,101 @@ Server will start sending the following notification messages: + "NOTIFY:TOTAL_VOICE_COUNT: + where will be replaced by the new number of all currently + active voices. +8.11. Number of MIDI instrument maps changed + Client may want to be notified when the number of MIDI instrument + maps on the back-end changes by issuing the following command: + SUBSCRIBE MIDI_INSTRUMENT_MAP_COUNT -Schoenebeck Expires May 29, 2007 [Page 72] + Server will start sending the following notification messages: + + "NOTIFY:MIDI_INSTRUMENT_MAP_COUNT:" + + where will be replaced by the new number of MIDI instrument + maps. + +8.12. MIDI instrument map information changed + + Client may want to be notified when changes were made to MIDI + instrument maps on the back-end by issuing the following command: + + SUBSCRIBE MIDI_INSTRUMENT_MAP_INFO + + Server will start sending the following notification messages: + + + + + + +Schoenebeck Expires July 2, 2007 [Page 97] -Internet-Draft LinuxSampler Control Protocol November 2006 +Internet-Draft LinuxSampler Control Protocol December 2006 - "NOTIFY:TOTAL_VOICE_COUNT: + "NOTIFY:MIDI_INSTRUMENT_MAP_INFO:" - where will be replaced by the new number of all currently - active voices. + where will be replaced by the numerical ID of the MIDI + instrument map, for which information changes occurred. The front- + end will have to send the respective command to actually get the MIDI + instrument map info. Because these messages will be triggered by + LSCP commands issued by other clients rather than real time events + happening on the server, it is believed that an empty notification + message is sufficient here. + +8.13. Number of MIDI instruments changed + + Client may want to be notified when the number of MIDI instrument + maps on the back-end changes by issuing the following command: -8.7. Miscellaneous and debugging events + SUBSCRIBE MIDI_INSTRUMENT_COUNT + + Server will start sending the following notification messages: + + "NOTIFY:MIDI_INSTRUMENT_COUNT: " + + where is the numerical ID of the MIDI instrument map, in + which the nuber of instruments has changed and will be + replaced by the new number of MIDI instruments in the specified map. + +8.14. MIDI instrument information changed + + Client may want to be notified when changes were made to MIDI + instruments on the back-end by issuing the following command: + + SUBSCRIBE MIDI_INSTRUMENT_INFO + + Server will start sending the following notification messages: + + "NOTIFY:MIDI_INSTRUMENT_INFO: " + + where will be replaced by the numerical ID of the MIDI + instrument map, in which a MIDI instrument is changed. and + specifies the location of the changed MIDI instrument in + the map. The front-end will have to send the respective command to + actually get the MIDI instrument info. Because these messages will + be triggered by LSCP commands issued by other clients rather than + real time events happening on the server, it is believed that an + empty notification message is sufficient here. + + + + + + + +Schoenebeck Expires July 2, 2007 [Page 98] + +Internet-Draft LinuxSampler Control Protocol December 2006 + + +8.15. Miscellaneous and debugging events Client may want to be notified of miscellaneous and debugging events occurring at the server by issuing the following command: @@ -4084,9 +5535,14 @@ -Schoenebeck Expires May 29, 2007 [Page 73] + + + + + +Schoenebeck Expires July 2, 2007 [Page 99] -Internet-Draft LinuxSampler Control Protocol November 2006 +Internet-Draft LinuxSampler Control Protocol December 2006 9. Security Considerations @@ -4140,9 +5596,9 @@ -Schoenebeck Expires May 29, 2007 [Page 74] +Schoenebeck Expires July 2, 2007 [Page 100] -Internet-Draft LinuxSampler Control Protocol November 2006 +Internet-Draft LinuxSampler Control Protocol December 2006 10. Acknowledgments @@ -4160,16 +5616,9 @@ Grigor Iliev -11. References - [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate - Requirement Levels", RFC 2119, 1997. - [RFC2234] Crocker, D. and P. Overell, "Augmented BNF for Syntax - Specifications", RFC 2234, 1997. - [RFC793] Defense Advanced Research Projects Agency, "TRANSMISSION - CONTROL PROTOCOL", RFC 793, 1981. @@ -4196,21 +5645,28 @@ -Schoenebeck Expires May 29, 2007 [Page 75] + + + + + + + +Schoenebeck Expires July 2, 2007 [Page 101] -Internet-Draft LinuxSampler Control Protocol November 2006 +Internet-Draft LinuxSampler Control Protocol December 2006 -Author's Address +11. References - C. Schoenebeck - Interessengemeinschaft Software Engineering e. V. - Max-Planck-Str. 39 - 74081 Heilbronn - Germany + [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate + Requirement Levels", RFC 2119, 1997. - Email: schoenebeck at software minus engineering dot org + [RFC2234] Crocker, D. and P. Overell, "Augmented BNF for Syntax + Specifications", RFC 2234, 1997. + [RFC793] Defense Advanced Research Projects Agency, "TRANSMISSION + CONTROL PROTOCOL", RFC 793, 1981. @@ -4252,75 +5708,34 @@ -Schoenebeck Expires May 29, 2007 [Page 76] +Schoenebeck Expires July 2, 2007 [Page 102] -Internet-Draft LinuxSampler Control Protocol November 2006 +Internet-Draft LinuxSampler Control Protocol December 2006 -Intellectual Property Statement +Author's Address - The IETF takes no position regarding the validity or scope of any - intellectual property or other rights that might be claimed to - pertain to the implementation or use of the technology described in - this document or the extent to which any license under such rights - might or might not be available; neither does it represent that it - has made any effort to identify any such rights. Information on the - IETF's procedures with respect to rights in standards-track and - standards-related documentation can be found in BCP 11. Copies of - claims of rights made available for publication and any assurances of - licenses to be made available, or the result of an attempt made to - obtain a general license or permission for the use of such - proprietary rights by implementors or users of this specification can - be obtained from the IETF Secretariat. + C. Schoenebeck + Interessengemeinschaft Software Engineering e. V. + Max-Planck-Str. 39 + 74081 Heilbronn + Germany - The IETF invites any interested party to bring to its attention any - copyrights, patents or patent applications, or other proprietary - rights which may cover technology that may be required to practice - this standard. Please address the information to the IETF Executive - Director. + Email: schoenebeck at software minus engineering dot org -Full Copyright Statement - Copyright (C) The Internet Society (2006). All Rights Reserved. - This document and translations of it may be copied and furnished to - others, and derivative works that comment on or otherwise explain it - or assist in its implementation may be prepared, copied, published - and distributed, in whole or in part, without restriction of any - kind, provided that the above copyright notice and this paragraph are - included on all such copies and derivative works. However, this - document itself may not be modified in any way, such as by removing - the copyright notice or references to the Internet Society or other - Internet organizations, except as needed for the purpose of - developing Internet standards in which case the procedures for - copyrights defined in the Internet Standards process must be - followed, or as required to translate it into languages other than - English. - The limited permissions granted above are perpetual and will not be - revoked by the Internet Society or its successors or assignees. - This document and the information contained herein is provided on an - "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING - TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING - BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION -Schoenebeck Expires May 29, 2007 [Page 77] - -Internet-Draft LinuxSampler Control Protocol November 2006 - HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF - MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. -Acknowledgment - Funding for the RFC Editor function is currently provided by the - Internet Society. @@ -4349,20 +5764,61 @@ +Schoenebeck Expires July 2, 2007 [Page 103] + +Internet-Draft LinuxSampler Control Protocol December 2006 +Full Copyright Statement + Copyright (C) The Internet Society (2006). + This document is subject to the rights, licenses and restrictions + contained in BCP 78, and except as set forth therein, the authors + retain all their rights. + + This document and the information contained herein are provided on an + "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS + OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY AND THE INTERNET + ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED, + INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE + INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED + WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. +Intellectual Property + The IETF takes no position regarding the validity or scope of any + Intellectual Property Rights or other rights that might be claimed to + pertain to the implementation or use of the technology described in + this document or the extent to which any license under such rights + might or might not be available; nor does it represent that it has + made any independent effort to identify any such rights. Information + on the procedures with respect to rights in RFC documents can be + found in BCP 78 and BCP 79. + + Copies of IPR disclosures made to the IETF Secretariat and any + assurances of licenses to be made available, or the result of an + attempt made to obtain a general license or permission for the use of + such proprietary rights by implementers or users of this + specification can be obtained from the IETF on-line IPR repository at + http://www.ietf.org/ipr. + The IETF invites any interested party to bring to its attention any + copyrights, patents or patent applications, or other proprietary + rights that may cover technology that may be required to implement + this standard. Please address the information to the IETF at + ietf-ipr@ietf.org. +Acknowledgment + + Funding for the RFC Editor function is provided by the IETF + Administrative Support Activity (IASA). -Schoenebeck Expires May 29, 2007 [Page 78] +Schoenebeck Expires July 2, 2007 [Page 104]