diff --git a/public/manual.html b/public/manual.html index 4e6a5f1..6437bcf 100644 --- a/public/manual.html +++ b/public/manual.html @@ -1,406 +1,384 @@ -
strlen()
function executed on the same data. rapidxml.hpp
file to a convenient place (such as your project directory), and include it where needed. You may also want to use printing functions contained in header rapidxml_print.hpp
.<cassert>
, <cstdlib>
, <new>
and <exception>
, unless exceptions are disabled). It should compile on any reasonably conformant compiler, and was tested on Visual C++ 2003, Visual C++ 2005, Visual C++ 2008, gcc 3, gcc 4, and Comeau 4.3.3. Care was taken that no warnings are produced on these compilers, even with highest warning levels enabled.wchar_t
strings containing UTF-16 or UTF-32 if endianness of the data matches that of the machine. UTF-8 is fully supported, including all numeric character references, which are expanded into appropriate UTF-8 byte sequences (unless you enable parse_no_utf8 flag). ' & " < > &#...;
Other character references are not expanded.new
operator would be far too slow. Underlying memory allocations performed by the pool can be customized by use of memory_pool::set_allocator() function. See class memory_pool for more information.rapidxml_utils.hpp
and rapidxml_print.hpp
. Contents of these headers is not an essential part of the library, and is currently not documented (otherwise than with comments in code).text
: using namespace rapidxml; -xml_document<> doc; // character type defaults to char -doc.parse<0>(text); // 0 means default parse flags -
doc
object is now a root of DOM tree containing representation of the parsed XML. Because all RapidXml interface is contained inside namespace rapidxml
, users must either bring contents of this namespace into scope, or fully qualify all the names. Class xml_document represents a root of the DOM hierarchy. By means of public inheritance, it is also an xml_node and a memory_pool. Template parameter of xml_document::parse() function is used to specify parsing flags, with which you can fine-tune behaviour of the parser. Note that flags must be a compile-time constant.cout << "Name of my first node is: " << doc.first_node()->name() << "\n"; -xml_node<> *node = doc.first_node("foobar"); -cout << "Node foobar has value " << node->value() << "\n"; -for (xml_attribute<> *attr = node->first_attribute(); - attr; attr = attr->next_attribute()) -{ - cout << "Node foobar has attribute " << attr->name() << " "; - cout << "with value " << attr->value() << "\n"; -} -
xml_document<> doc; -xml_node<> *node = doc.allocate_node(node_element, "a", "Google"); -doc.append_node(node); -xml_attribute<> *attr = doc.allocate_attribute("href", "google.com"); -node->append_attribute(attr); -One quirk is that nodes and attributes do not own the text of their names and values. This is because normally they only store pointers to the source text. So, when assigning a new name or value to the node, care must be taken to ensure proper lifetime of the string. The easiest way to achieve it is to allocate the string from the xml_document memory pool. In the above example this is not necessary, because we are only assigning character constants. But the code below uses memory_pool::allocate_string() function to allocate node name (which will have the same lifetime as the document), and assigns it to a new node:
xml_document<> doc; -char *node_name = doc.allocate_string(name); // Allocate string and copy name into it -xml_node<> *node = doc.allocate_node(node_element, node_name); // Set node name to node_name -Check Reference section for description of the entire interface.
xml_document
and xml_node
objects into an XML string. Use print() function or operator <<, which are defined in rapidxml_print.hpp
header. using namespace rapidxml; -xml_document<> doc; // character type defaults to char -// ... some code to fill the document - -// Print to stream using operator << -std::cout << doc; - -// Print to stream using print function, specifying printing flags -print(std::cout, doc, 0); // 0 means default printing flags - -// Print to string using output iterator -std::string s; -print(std::back_inserter(s), doc, 0); - -// Print to memory buffer using output iterator -char buffer[4096]; // You are responsible for making the buffer large enough! -char *end = print(buffer, doc, 0); // end contains pointer to character after last printed character -*end = 0; // Add string terminator after XML -
strlen()
function executed on the same data. On a modern CPU (as of 2007), you can expect parsing throughput to be close to 1 GB/s. As a rule of thumb, parsing speed is about 50-100x faster than Xerces DOM, 30-60x faster than TinyXml, 3-12x faster than pugxml, and about 5% - 30% faster than pugixml, the fastest XML parser I know of.new
operator, but also their lifetime will be tied to the lifetime of document, possibly simplyfing memory management. free()
function -- all allocations are freed at once when clear() function is called, or when the pool is destroyed. RAPIDXML_STATIC_POOL_SIZE
bytes of statically allocated memory. Until static memory is exhausted, no dynamic memory allocations are done. When static memory is exhausted, pool allocates additional blocks of memory of size RAPIDXML_DYNAMIC_POOL_SIZE
each, by using global new[]
and delete[]
operators. This behaviour can be changed by setting custom allocation routines. Use set_allocator() function to set them. RAPIDXML_ALIGNMENT
bytes. This value defaults to the size of pointer on target architecture. RAPIDXML_STATIC_POOL_SIZE
, RAPIDXML_DYNAMIC_POOL_SIZE
and RAPIDXML_ALIGNMENT
to obtain best wasted memory to performance compromise. To do it, define their values before rapidxml.hpp file is included. memory_pool();
-
~memory_pool();
-
xml_node<Ch>* allocate_node(node_type type, const Ch *name=0, const Ch *value=0, std::size_t name_size=0, std::size_t value_size=0);
-
std::bad_alloc
. If exceptions are disabled by defining RAPIDXML_NO_EXCEPTIONS, this function will call rapidxml::parse_error_handler() function. xml_attribute<Ch>* allocate_attribute(const Ch *name=0, const Ch *value=0, std::size_t name_size=0, std::size_t value_size=0);
-
std::bad_alloc
. If exceptions are disabled by defining RAPIDXML_NO_EXCEPTIONS, this function will call rapidxml::parse_error_handler() function. Ch* allocate_string(const Ch *source=0, std::size_t size=0);
-
std::bad_alloc
. If exceptions are disabled by defining RAPIDXML_NO_EXCEPTIONS, this function will call rapidxml::parse_error_handler() function. xml_node<Ch>* clone_node(const xml_node< Ch > *source, xml_node< Ch > *result=0);
-
void clear();
-
void set_allocator(alloc_func *af, free_func *ff);
-
longjmp()
function to pass control to other place of program. If it returns invalid pointer, results are undefined.
-void *allocate(std::size_t size);
-void free(void *pointer);
std::exception
class. parse_error(const char *what, void *where);
-
virtual const char* what() const;
-
Ch* where() const;
-
xml_attribute();
-
xml_document<Ch>* document() const;
-
xml_attribute<Ch>* previous_attribute(const Ch *name=0, std::size_t name_size=0, bool case_sensitive=true) const;
-
xml_attribute<Ch>* next_attribute(const Ch *name=0, std::size_t name_size=0, bool case_sensitive=true) const;
-
xml_base();
-
Ch* name() const;
-
std::size_t name_size() const;
-
Ch* value() const;
-
std::size_t value_size() const;
-
void name(const Ch *name, std::size_t size);
-
void name(const Ch *name);
-
void value(const Ch *value, std::size_t size);
-
void value(const Ch *value);
-
xml_node<Ch>* parent() const;
-
xml_document();
-
void parse(Ch *text);
-
void clear();
-
xml_node(node_type type);
-
node_type type() const;
-
xml_document<Ch>* document() const;
-
xml_node<Ch>* first_node(const Ch *name=0, std::size_t name_size=0, bool case_sensitive=true) const;
-
xml_node<Ch>* last_node(const Ch *name=0, std::size_t name_size=0, bool case_sensitive=true) const;
-
xml_node<Ch>* previous_sibling(const Ch *name=0, std::size_t name_size=0, bool case_sensitive=true) const;
-
xml_node<Ch>* next_sibling(const Ch *name=0, std::size_t name_size=0, bool case_sensitive=true) const;
-
xml_attribute<Ch>* first_attribute(const Ch *name=0, std::size_t name_size=0, bool case_sensitive=true) const;
-
xml_attribute<Ch>* last_attribute(const Ch *name=0, std::size_t name_size=0, bool case_sensitive=true) const;
-
void type(node_type type);
-
void prepend_node(xml_node< Ch > *child);
-
void append_node(xml_node< Ch > *child);
-
void insert_node(xml_node< Ch > *where, xml_node< Ch > *child);
-
void remove_first_node();
-
void remove_last_node();
-
void remove_node(xml_node< Ch > *where);
-
void remove_all_nodes();
-
void prepend_attribute(xml_attribute< Ch > *attribute);
-
void append_attribute(xml_attribute< Ch > *attribute);
-
void insert_attribute(xml_attribute< Ch > *where, xml_attribute< Ch > *attribute);
-
void remove_first_attribute();
-
void remove_last_attribute();
-
void remove_attribute(xml_attribute< Ch > *where);
-
void remove_all_attributes();
-
void rapidxml::parse_error_handler(const char *what, void *where);
-
Healing Soundscapes is a project developed by the Ligeti Center in collaboration with the University Hospital + Hamburg-Eppendorf (UKE). The project implements an intelligent speaker system to be used in hospital waiting + areas and operation rooms. Music therapists, composers, programmers, patients and doctors collaborate in the + development of soundscapes that ensure to improve patients well-being in waiting areas as well as help doctors + to concentrate during operations.
+ +The Graphic User Interface (GUI) consists of tools for the control of the soundscape, both during operation hours + as well as during the development process of a composition. Hospital staff is advised not to use the expert + control menu, since this is designed for the composers and developers that know the system under-the-hood.
+ +The graphic user interface of the Healing Soundscapes Max patch makes use of the drawsocket package, a + Max/node.js based server/client system. It also requires the CNMAT Odot package which can be installed from the + Max package manager. The patch works in Max 8 and Max 9.
+ +…
+ + + +The Graphic User Interface (GUI) consists of tools for the control of the soundscape, both during operation hours + as well as during the development process of a composition. Hospital staff is advised not to use the expert + control menu, since this is designed for the composers and developers that know the system under-the-hood.
+ +Basic Mode includes the necessary parameters for controlling the soundscape on-site, such as playback and + playlist control.
+ +The dropdown list shows all pieces listed in the currently selected playlist. Read section 2.1.2 for an + explanation on how pieces are changed.
+ +The dropdown list for Playing Mode lists two options:
+ 1. Selected Piece: the title chosen in the Piece list (see section 2.1.1) will be played continuously.
+ 2. Playlist: the patch will play through the pieces in order of sequence.
+ Each piece will be played for the length specified in the duration box. Between the pieces – or the iteration of
+ the same piece – there will be a silence whose length is specified in the silence box. Read section 2.1.3 to
+ learn how to change the selected playlist on your device.
Each device can play only one playlist at a time. Playlists are organized as subfolders within:
+ /Users/user/Documents/Max 8/Library/healing-soundscapes/environments
+ To select a playlist, create an empty text file named blessed.txt
inside the desired playlist
+ folder.
+ ⚠️ Important: The system will automatically select the first folder it finds that contains a
+ blessed.txt
+ file.
+ Only one playlist folder should contain this file at any given time.
+ When switching playlists, be sure to either move the existing blessed.txt
file to the new folder or
+ delete it
+ before creating a new one. Having multiple blessed.txt
files may result in unpredictable behavior.
+
A toggle to start or stop the soundscape.
+ +Set the tempo in beats per minute (BPM) of the soundscape. A lower number results in more sparse events, a higher + number will make the soundscape more lively.
+ +The length of each piece in seconds (e.g. 300 seconds = 5 minutes).
+ +The length of silence between each piece (or iteration of the same piece, if in ‘selected piece’ playing mode) in + seconds.
+ +The volume of the soundscape in decibels.
+ + + +Expert Mode includes all parameters for controlling each individual DJster instance. This screen is meant only + for the composers and programmers. There is a menu where each instance can be selected, called “Player 1” up + until “Player 4”.
+ +Selects the playback instrument or sound source for the sampler.
+ +Defines the tonal environment.
+ +Sets the time signature, choosing rhythmic grouping.
+ +Activates or deactivates the DJster instance.
+ +Determines whether the notes of each event are outputted sorted by pitch or not.
+ +Enables overlapping of musical events, allowing simultaneous layers instead of strictly sequential playback.
+ +?
+ +Controls the overall density and frequency by controlling the probability of note output.
+ +Sets the average duration of events in milliseconds, from short staccato notes to sustained tones.
+ +Controls how strictly the generated notes fall within the chosen meter: lower values produce freer timing, higher + values enforce clearer metric structure.
+ +Controls how close the notes are to the chosen scale: lower values have more notes outside of the scale, higher + values stress tonal stability.
+ +Determines the importance of harmonic (chord-based) events relative to melodic material.
+ +Controls the tendency for melodic continuity: negative values create disjunct leaps, positive values favor + stepwise motion.
+ +Sets the span of melodic exploration, defining how wide or narrow the pitch contour can be.
+ +Assigns the tonal center note of the scale, anchoring pitch relationships to a chosen tonic.
+ +Specifies the register around which pitches are distributed, centering the melodic activity.
+ +Sets the span (in semitones) above and below the pitch center notes can be generated.
+ +Controls the output velocity (loudness) of events, corresponding to MIDI dynamic levels.
+ +Applies a scaling factor to dynamics, reducing or moderating the overall loudness of output.
+ + + +Sets the volume of the first DJster instance in decibels.
+ +Sets the volume of the second DJster instance in decibels.
+ +Sets the volume of the third DJster instance in decibels.
+ +Sets the volume of the fourth DJster instance in decibels.
+ +Sets the virtual size of the simulated acoustic space, from small rooms to large halls.
+ +Controls the reverb decay time in milliseconds.
+ +Adjusts the stereo width of the reverb field: lower values keep it narrow, higher values create a wider spatial + impression.
+ +Sets the frequency range passed into the reverb: lower values darken the sound, higher values keep it brighter. +
+ +Controls the high-frequency absorption in the room: lower values yield brighter tails, higher values make the + reverb warmer and darker.
+ +Balances the level of early reflections, shaping the sense of proximity and room definition.
+ +Adjusts the level of the late reverb tail, affecting the spaciousness and depth of the acoustic.
+ +Sets the balance of the unprocessed (dry) signal relative to the reverberated (wet) signal.
+ + + +Checks for a new software version and updates if new version was found.
+ ⚠️ Important: This requires an active internet connection.
+ ⚠️ Currently not working
Shows the IP address of the GUI, so it can be accessed on another device.
+ +Shuts down the software. This will require a manual restart.
+ + + + + + \ No newline at end of file