You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

1571 lines
76 KiB

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="generator" content="Asciidoctor 2.0.17">
<meta name="author" content="Laborejo Software Suite">
<title>Patroneo</title>
<style>
/*! Asciidoctor default stylesheet | MIT License | https://asciidoctor.org */
/* Uncomment the following line when using as a custom stylesheet */
/* @import "https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700"; */
html{font-family:sans-serif;-webkit-text-size-adjust:100%}
a{background:none}
a:focus{outline:thin dotted}
a:active,a:hover{outline:0}
h1{font-size:2em;margin:.67em 0}
b,strong{font-weight:bold}
abbr{font-size:.9em}
abbr[title]{cursor:help;border-bottom:1px dotted #dddddf;text-decoration:none}
dfn{font-style:italic}
hr{height:0}
mark{background:#ff0;color:#000}
code,kbd,pre,samp{font-family:monospace;font-size:1em}
pre{white-space:pre-wrap}
q{quotes:"\201C" "\201D" "\2018" "\2019"}
small{font-size:80%}
sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}
sup{top:-.5em}
sub{bottom:-.25em}
img{border:0}
svg:not(:root){overflow:hidden}
figure{margin:0}
audio,video{display:inline-block}
audio:not([controls]){display:none;height:0}
fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}
legend{border:0;padding:0}
button,input,select,textarea{font-family:inherit;font-size:100%;margin:0}
button,input{line-height:normal}
button,select{text-transform:none}
button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}
button[disabled],html input[disabled]{cursor:default}
input[type=checkbox],input[type=radio]{padding:0}
button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}
textarea{overflow:auto;vertical-align:top}
table{border-collapse:collapse;border-spacing:0}
*,::before,::after{box-sizing:border-box}
html,body{font-size:100%}
body{background:#fff;color:rgba(0,0,0,.8);padding:0;margin:0;font-family:"Noto Serif","DejaVu Serif",serif;line-height:1;position:relative;cursor:auto;-moz-tab-size:4;-o-tab-size:4;tab-size:4;word-wrap:anywhere;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}
a:hover{cursor:pointer}
img,object,embed{max-width:100%;height:auto}
object,embed{height:100%}
img{-ms-interpolation-mode:bicubic}
.left{float:left!important}
.right{float:right!important}
.text-left{text-align:left!important}
.text-right{text-align:right!important}
.text-center{text-align:center!important}
.text-justify{text-align:justify!important}
.hide{display:none}
img,object,svg{display:inline-block;vertical-align:middle}
textarea{height:auto;min-height:50px}
select{width:100%}
.subheader,.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{line-height:1.45;color:#7a2518;font-weight:400;margin-top:0;margin-bottom:.25em}
div,dl,dt,dd,ul,ol,li,h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6,pre,form,p,blockquote,th,td{margin:0;padding:0}
a{color:#2156a5;text-decoration:underline;line-height:inherit}
a:hover,a:focus{color:#1d4b8f}
a img{border:0}
p{line-height:1.6;margin-bottom:1.25em;text-rendering:optimizeLegibility}
p aside{font-size:.875em;line-height:1.35;font-style:italic}
h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{font-family:"Open Sans","DejaVu Sans",sans-serif;font-weight:300;font-style:normal;color:#ba3925;text-rendering:optimizeLegibility;margin-top:1em;margin-bottom:.5em;line-height:1.0125em}
h1 small,h2 small,h3 small,#toctitle small,.sidebarblock>.content>.title small,h4 small,h5 small,h6 small{font-size:60%;color:#e99b8f;line-height:0}
h1{font-size:2.125em}
h2{font-size:1.6875em}
h3,#toctitle,.sidebarblock>.content>.title{font-size:1.375em}
h4,h5{font-size:1.125em}
h6{font-size:1em}
hr{border:solid #dddddf;border-width:1px 0 0;clear:both;margin:1.25em 0 1.1875em}
em,i{font-style:italic;line-height:inherit}
strong,b{font-weight:bold;line-height:inherit}
small{font-size:60%;line-height:inherit}
code{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;font-weight:400;color:rgba(0,0,0,.9)}
ul,ol,dl{line-height:1.6;margin-bottom:1.25em;list-style-position:outside;font-family:inherit}
ul,ol{margin-left:1.5em}
ul li ul,ul li ol{margin-left:1.25em;margin-bottom:0}
ul.square li ul,ul.circle li ul,ul.disc li ul{list-style:inherit}
ul.square{list-style-type:square}
ul.circle{list-style-type:circle}
ul.disc{list-style-type:disc}
ol li ul,ol li ol{margin-left:1.25em;margin-bottom:0}
dl dt{margin-bottom:.3125em;font-weight:bold}
dl dd{margin-bottom:1.25em}
blockquote{margin:0 0 1.25em;padding:.5625em 1.25em 0 1.1875em;border-left:1px solid #ddd}
blockquote,blockquote p{line-height:1.6;color:rgba(0,0,0,.85)}
@media screen and (min-width:768px){h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2}
h1{font-size:2.75em}
h2{font-size:2.3125em}
h3,#toctitle,.sidebarblock>.content>.title{font-size:1.6875em}
h4{font-size:1.4375em}}
table{background:#fff;margin-bottom:1.25em;border:1px solid #dedede;word-wrap:normal}
table thead,table tfoot{background:#f7f8f7}
table thead tr th,table thead tr td,table tfoot tr th,table tfoot tr td{padding:.5em .625em .625em;font-size:inherit;color:rgba(0,0,0,.8);text-align:left}
table tr th,table tr td{padding:.5625em .625em;font-size:inherit;color:rgba(0,0,0,.8)}
table tr.even,table tr.alt{background:#f8f8f7}
table thead tr th,table tfoot tr th,table tbody tr td,table tr td,table tfoot tr td{line-height:1.6}
h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2;word-spacing:-.05em}
h1 strong,h2 strong,h3 strong,#toctitle strong,.sidebarblock>.content>.title strong,h4 strong,h5 strong,h6 strong{font-weight:400}
.center{margin-left:auto;margin-right:auto}
.stretch{width:100%}
.clearfix::before,.clearfix::after,.float-group::before,.float-group::after{content:" ";display:table}
.clearfix::after,.float-group::after{clear:both}
:not(pre).nobreak{word-wrap:normal}
:not(pre).nowrap{white-space:nowrap}
:not(pre).pre-wrap{white-space:pre-wrap}
:not(pre):not([class^=L])>code{font-size:.9375em;font-style:normal!important;letter-spacing:0;padding:.1em .5ex;word-spacing:-.15em;background:#f7f7f8;border-radius:4px;line-height:1.45;text-rendering:optimizeSpeed}
pre{color:rgba(0,0,0,.9);font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;line-height:1.45;text-rendering:optimizeSpeed}
pre code,pre pre{color:inherit;font-size:inherit;line-height:inherit}
pre>code{display:block}
pre.nowrap,pre.nowrap pre{white-space:pre;word-wrap:normal}
em em{font-style:normal}
strong strong{font-weight:400}
.keyseq{color:rgba(51,51,51,.8)}
kbd{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;display:inline-block;color:rgba(0,0,0,.8);font-size:.65em;line-height:1.45;background:#f7f7f7;border:1px solid #ccc;border-radius:3px;box-shadow:0 1px 0 rgba(0,0,0,.2),inset 0 0 0 .1em #fff;margin:0 .15em;padding:.2em .5em;vertical-align:middle;position:relative;top:-.1em;white-space:nowrap}
.keyseq kbd:first-child{margin-left:0}
.keyseq kbd:last-child{margin-right:0}
.menuseq,.menuref{color:#000}
.menuseq b:not(.caret),.menuref{font-weight:inherit}
.menuseq{word-spacing:-.02em}
.menuseq b.caret{font-size:1.25em;line-height:.8}
.menuseq i.caret{font-weight:bold;text-align:center;width:.45em}
b.button::before,b.button::after{position:relative;top:-1px;font-weight:400}
b.button::before{content:"[";padding:0 3px 0 2px}
b.button::after{content:"]";padding:0 2px 0 3px}
p a>code:hover{color:rgba(0,0,0,.9)}
#header,#content,#footnotes,#footer{width:100%;margin:0 auto;max-width:62.5em;*zoom:1;position:relative;padding-left:.9375em;padding-right:.9375em}
#header::before,#header::after,#content::before,#content::after,#footnotes::before,#footnotes::after,#footer::before,#footer::after{content:" ";display:table}
#header::after,#content::after,#footnotes::after,#footer::after{clear:both}
#content{margin-top:1.25em}
#content::before{content:none}
#header>h1:first-child{color:rgba(0,0,0,.85);margin-top:2.25rem;margin-bottom:0}
#header>h1:first-child+#toc{margin-top:8px;border-top:1px solid #dddddf}
#header>h1:only-child,body.toc2 #header>h1:nth-last-child(2){border-bottom:1px solid #dddddf;padding-bottom:8px}
#header .details{border-bottom:1px solid #dddddf;line-height:1.45;padding-top:.25em;padding-bottom:.25em;padding-left:.25em;color:rgba(0,0,0,.6);display:flex;flex-flow:row wrap}
#header .details span:first-child{margin-left:-.125em}
#header .details span.email a{color:rgba(0,0,0,.85)}
#header .details br{display:none}
#header .details br+span::before{content:"\00a0\2013\00a0"}
#header .details br+span.author::before{content:"\00a0\22c5\00a0";color:rgba(0,0,0,.85)}
#header .details br+span#revremark::before{content:"\00a0|\00a0"}
#header #revnumber{text-transform:capitalize}
#header #revnumber::after{content:"\00a0"}
#content>h1:first-child:not([class]){color:rgba(0,0,0,.85);border-bottom:1px solid #dddddf;padding-bottom:8px;margin-top:0;padding-top:1rem;margin-bottom:1.25rem}
#toc{border-bottom:1px solid #e7e7e9;padding-bottom:.5em}
#toc>ul{margin-left:.125em}
#toc ul.sectlevel0>li>a{font-style:italic}
#toc ul.sectlevel0 ul.sectlevel1{margin:.5em 0}
#toc ul{font-family:"Open Sans","DejaVu Sans",sans-serif;list-style-type:none}
#toc li{line-height:1.3334;margin-top:.3334em}
#toc a{text-decoration:none}
#toc a:active{text-decoration:underline}
#toctitle{color:#7a2518;font-size:1.2em}
@media screen and (min-width:768px){#toctitle{font-size:1.375em}
body.toc2{padding-left:15em;padding-right:0}
#toc.toc2{margin-top:0!important;background:#f8f8f7;position:fixed;width:15em;left:0;top:0;border-right:1px solid #e7e7e9;border-top-width:0!important;border-bottom-width:0!important;z-index:1000;padding:1.25em 1em;height:100%;overflow:auto}
#toc.toc2 #toctitle{margin-top:0;margin-bottom:.8rem;font-size:1.2em}
#toc.toc2>ul{font-size:.9em;margin-bottom:0}
#toc.toc2 ul ul{margin-left:0;padding-left:1em}
#toc.toc2 ul.sectlevel0 ul.sectlevel1{padding-left:0;margin-top:.5em;margin-bottom:.5em}
body.toc2.toc-right{padding-left:0;padding-right:15em}
body.toc2.toc-right #toc.toc2{border-right-width:0;border-left:1px solid #e7e7e9;left:auto;right:0}}
@media screen and (min-width:1280px){body.toc2{padding-left:20em;padding-right:0}
#toc.toc2{width:20em}
#toc.toc2 #toctitle{font-size:1.375em}
#toc.toc2>ul{font-size:.95em}
#toc.toc2 ul ul{padding-left:1.25em}
body.toc2.toc-right{padding-left:0;padding-right:20em}}
#content #toc{border:1px solid #e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;border-radius:4px}
#content #toc>:first-child{margin-top:0}
#content #toc>:last-child{margin-bottom:0}
#footer{max-width:none;background:rgba(0,0,0,.8);padding:1.25em}
#footer-text{color:hsla(0,0%,100%,.8);line-height:1.44}
#content{margin-bottom:.625em}
.sect1{padding-bottom:.625em}
@media screen and (min-width:768px){#content{margin-bottom:1.25em}
.sect1{padding-bottom:1.25em}}
.sect1:last-child{padding-bottom:0}
.sect1+.sect1{border-top:1px solid #e7e7e9}
#content h1>a.anchor,h2>a.anchor,h3>a.anchor,#toctitle>a.anchor,.sidebarblock>.content>.title>a.anchor,h4>a.anchor,h5>a.anchor,h6>a.anchor{position:absolute;z-index:1001;width:1.5ex;margin-left:-1.5ex;display:block;text-decoration:none!important;visibility:hidden;text-align:center;font-weight:400}
#content h1>a.anchor::before,h2>a.anchor::before,h3>a.anchor::before,#toctitle>a.anchor::before,.sidebarblock>.content>.title>a.anchor::before,h4>a.anchor::before,h5>a.anchor::before,h6>a.anchor::before{content:"\00A7";font-size:.85em;display:block;padding-top:.1em}
#content h1:hover>a.anchor,#content h1>a.anchor:hover,h2:hover>a.anchor,h2>a.anchor:hover,h3:hover>a.anchor,#toctitle:hover>a.anchor,.sidebarblock>.content>.title:hover>a.anchor,h3>a.anchor:hover,#toctitle>a.anchor:hover,.sidebarblock>.content>.title>a.anchor:hover,h4:hover>a.anchor,h4>a.anchor:hover,h5:hover>a.anchor,h5>a.anchor:hover,h6:hover>a.anchor,h6>a.anchor:hover{visibility:visible}
#content h1>a.link,h2>a.link,h3>a.link,#toctitle>a.link,.sidebarblock>.content>.title>a.link,h4>a.link,h5>a.link,h6>a.link{color:#ba3925;text-decoration:none}
#content h1>a.link:hover,h2>a.link:hover,h3>a.link:hover,#toctitle>a.link:hover,.sidebarblock>.content>.title>a.link:hover,h4>a.link:hover,h5>a.link:hover,h6>a.link:hover{color:#a53221}
details,.audioblock,.imageblock,.literalblock,.listingblock,.stemblock,.videoblock{margin-bottom:1.25em}
details{margin-left:1.25rem}
details>summary{cursor:pointer;display:block;position:relative;line-height:1.6;margin-bottom:.625rem;outline:none;-webkit-tap-highlight-color:transparent}
details>summary::-webkit-details-marker{display:none}
details>summary::before{content:"";border:solid transparent;border-left:solid;border-width:.3em 0 .3em .5em;position:absolute;top:.5em;left:-1.25rem;transform:translateX(15%)}
details[open]>summary::before{border:solid transparent;border-top:solid;border-width:.5em .3em 0;transform:translateY(15%)}
details>summary::after{content:"";width:1.25rem;height:1em;position:absolute;top:.3em;left:-1.25rem}
.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{text-rendering:optimizeLegibility;text-align:left;font-family:"Noto Serif","DejaVu Serif",serif;font-size:1rem;font-style:italic}
table.tableblock.fit-content>caption.title{white-space:nowrap;width:0}
.paragraph.lead>p,#preamble>.sectionbody>[class=paragraph]:first-of-type p{font-size:1.21875em;line-height:1.6;color:rgba(0,0,0,.85)}
.admonitionblock>table{border-collapse:separate;border:0;background:none;width:100%}
.admonitionblock>table td.icon{text-align:center;width:80px}
.admonitionblock>table td.icon img{max-width:none}
.admonitionblock>table td.icon .title{font-weight:bold;font-family:"Open Sans","DejaVu Sans",sans-serif;text-transform:uppercase}
.admonitionblock>table td.content{padding-left:1.125em;padding-right:1.25em;border-left:1px solid #dddddf;color:rgba(0,0,0,.6);word-wrap:anywhere}
.admonitionblock>table td.content>:last-child>:last-child{margin-bottom:0}
.exampleblock>.content{border:1px solid #e6e6e6;margin-bottom:1.25em;padding:1.25em;background:#fff;border-radius:4px}
.exampleblock>.content>:first-child{margin-top:0}
.exampleblock>.content>:last-child{margin-bottom:0}
.sidebarblock{border:1px solid #dbdbd6;margin-bottom:1.25em;padding:1.25em;background:#f3f3f2;border-radius:4px}
.sidebarblock>:first-child{margin-top:0}
.sidebarblock>:last-child{margin-bottom:0}
.sidebarblock>.content>.title{color:#7a2518;margin-top:0;text-align:center}
.exampleblock>.content>:last-child>:last-child,.exampleblock>.content .olist>ol>li:last-child>:last-child,.exampleblock>.content .ulist>ul>li:last-child>:last-child,.exampleblock>.content .qlist>ol>li:last-child>:last-child,.sidebarblock>.content>:last-child>:last-child,.sidebarblock>.content .olist>ol>li:last-child>:last-child,.sidebarblock>.content .ulist>ul>li:last-child>:last-child,.sidebarblock>.content .qlist>ol>li:last-child>:last-child{margin-bottom:0}
.literalblock pre,.listingblock>.content>pre{border-radius:4px;overflow-x:auto;padding:1em;font-size:.8125em}
@media screen and (min-width:768px){.literalblock pre,.listingblock>.content>pre{font-size:.90625em}}
@media screen and (min-width:1280px){.literalblock pre,.listingblock>.content>pre{font-size:1em}}
.literalblock pre,.listingblock>.content>pre:not(.highlight),.listingblock>.content>pre[class=highlight],.listingblock>.content>pre[class^="highlight "]{background:#f7f7f8}
.literalblock.output pre{color:#f7f7f8;background:rgba(0,0,0,.9)}
.listingblock>.content{position:relative}
.listingblock code[data-lang]::before{display:none;content:attr(data-lang);position:absolute;font-size:.75em;top:.425rem;right:.5rem;line-height:1;text-transform:uppercase;color:inherit;opacity:.5}
.listingblock:hover code[data-lang]::before{display:block}
.listingblock.terminal pre .command::before{content:attr(data-prompt);padding-right:.5em;color:inherit;opacity:.5}
.listingblock.terminal pre .command:not([data-prompt])::before{content:"$"}
.listingblock pre.highlightjs{padding:0}
.listingblock pre.highlightjs>code{padding:1em;border-radius:4px}
.listingblock pre.prettyprint{border-width:0}
.prettyprint{background:#f7f7f8}
pre.prettyprint .linenums{line-height:1.45;margin-left:2em}
pre.prettyprint li{background:none;list-style-type:inherit;padding-left:0}
pre.prettyprint li code[data-lang]::before{opacity:1}
pre.prettyprint li:not(:first-child) code[data-lang]::before{display:none}
table.linenotable{border-collapse:separate;border:0;margin-bottom:0;background:none}
table.linenotable td[class]{color:inherit;vertical-align:top;padding:0;line-height:inherit;white-space:normal}
table.linenotable td.code{padding-left:.75em}
table.linenotable td.linenos,pre.pygments .linenos{border-right:1px solid;opacity:.35;padding-right:.5em;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}
pre.pygments span.linenos{display:inline-block;margin-right:.75em}
.quoteblock{margin:0 1em 1.25em 1.5em;display:table}
.quoteblock:not(.excerpt)>.title{margin-left:-1.5em;margin-bottom:.75em}
.quoteblock blockquote,.quoteblock p{color:rgba(0,0,0,.85);font-size:1.15rem;line-height:1.75;word-spacing:.1em;letter-spacing:0;font-style:italic;text-align:justify}
.quoteblock blockquote{margin:0;padding:0;border:0}
.quoteblock blockquote::before{content:"\201c";float:left;font-size:2.75em;font-weight:bold;line-height:.6em;margin-left:-.6em;color:#7a2518;text-shadow:0 1px 2px rgba(0,0,0,.1)}
.quoteblock blockquote>.paragraph:last-child p{margin-bottom:0}
.quoteblock .attribution{margin-top:.75em;margin-right:.5ex;text-align:right}
.verseblock{margin:0 1em 1.25em}
.verseblock pre{font-family:"Open Sans","DejaVu Sans",sans-serif;font-size:1.15rem;color:rgba(0,0,0,.85);font-weight:300;text-rendering:optimizeLegibility}
.verseblock pre strong{font-weight:400}
.verseblock .attribution{margin-top:1.25rem;margin-left:.5ex}
.quoteblock .attribution,.verseblock .attribution{font-size:.9375em;line-height:1.45;font-style:italic}
.quoteblock .attribution br,.verseblock .attribution br{display:none}
.quoteblock .attribution cite,.verseblock .attribution cite{display:block;letter-spacing:-.025em;color:rgba(0,0,0,.6)}
.quoteblock.abstract blockquote::before,.quoteblock.excerpt blockquote::before,.quoteblock .quoteblock blockquote::before{display:none}
.quoteblock.abstract blockquote,.quoteblock.abstract p,.quoteblock.excerpt blockquote,.quoteblock.excerpt p,.quoteblock .quoteblock blockquote,.quoteblock .quoteblock p{line-height:1.6;word-spacing:0}
.quoteblock.abstract{margin:0 1em 1.25em;display:block}
.quoteblock.abstract>.title{margin:0 0 .375em;font-size:1.15em;text-align:center}
.quoteblock.excerpt>blockquote,.quoteblock .quoteblock{padding:0 0 .25em 1em;border-left:.25em solid #dddddf}
.quoteblock.excerpt,.quoteblock .quoteblock{margin-left:0}
.quoteblock.excerpt blockquote,.quoteblock.excerpt p,.quoteblock .quoteblock blockquote,.quoteblock .quoteblock p{color:inherit;font-size:1.0625rem}
.quoteblock.excerpt .attribution,.quoteblock .quoteblock .attribution{color:inherit;font-size:.85rem;text-align:left;margin-right:0}
p.tableblock:last-child{margin-bottom:0}
td.tableblock>.content{margin-bottom:1.25em;word-wrap:anywhere}
td.tableblock>.content>:last-child{margin-bottom:-1.25em}
table.tableblock,th.tableblock,td.tableblock{border:0 solid #dedede}
table.grid-all>*>tr>*{border-width:1px}
table.grid-cols>*>tr>*{border-width:0 1px}
table.grid-rows>*>tr>*{border-width:1px 0}
table.frame-all{border-width:1px}
table.frame-ends{border-width:1px 0}
table.frame-sides{border-width:0 1px}
table.frame-none>colgroup+*>:first-child>*,table.frame-sides>colgroup+*>:first-child>*{border-top-width:0}
table.frame-none>:last-child>:last-child>*,table.frame-sides>:last-child>:last-child>*{border-bottom-width:0}
table.frame-none>*>tr>:first-child,table.frame-ends>*>tr>:first-child{border-left-width:0}
table.frame-none>*>tr>:last-child,table.frame-ends>*>tr>:last-child{border-right-width:0}
table.stripes-all>*>tr,table.stripes-odd>*>tr:nth-of-type(odd),table.stripes-even>*>tr:nth-of-type(even),table.stripes-hover>*>tr:hover{background:#f8f8f7}
th.halign-left,td.halign-left{text-align:left}
th.halign-right,td.halign-right{text-align:right}
th.halign-center,td.halign-center{text-align:center}
th.valign-top,td.valign-top{vertical-align:top}
th.valign-bottom,td.valign-bottom{vertical-align:bottom}
th.valign-middle,td.valign-middle{vertical-align:middle}
table thead th,table tfoot th{font-weight:bold}
tbody tr th{background:#f7f8f7}
tbody tr th,tbody tr th p,tfoot tr th,tfoot tr th p{color:rgba(0,0,0,.8);font-weight:bold}
p.tableblock>code:only-child{background:none;padding:0}
p.tableblock{font-size:1em}
ol{margin-left:1.75em}
ul li ol{margin-left:1.5em}
dl dd{margin-left:1.125em}
dl dd:last-child,dl dd:last-child>:last-child{margin-bottom:0}
li p,ul dd,ol dd,.olist .olist,.ulist .ulist,.ulist .olist,.olist .ulist{margin-bottom:.625em}
ul.checklist,ul.none,ol.none,ul.no-bullet,ol.no-bullet,ol.unnumbered,ul.unstyled,ol.unstyled{list-style-type:none}
ul.no-bullet,ol.no-bullet,ol.unnumbered{margin-left:.625em}
ul.unstyled,ol.unstyled{margin-left:0}
li>p:empty:only-child::before{content:"";display:inline-block}
ul.checklist>li>p:first-child{margin-left:-1em}
ul.checklist>li>p:first-child>.fa-square-o:first-child,ul.checklist>li>p:first-child>.fa-check-square-o:first-child{width:1.25em;font-size:.8em;position:relative;bottom:.125em}
ul.checklist>li>p:first-child>input[type=checkbox]:first-child{margin-right:.25em}
ul.inline{display:flex;flex-flow:row wrap;list-style:none;margin:0 0 .625em -1.25em}
ul.inline>li{margin-left:1.25em}
.unstyled dl dt{font-weight:400;font-style:normal}
ol.arabic{list-style-type:decimal}
ol.decimal{list-style-type:decimal-leading-zero}
ol.loweralpha{list-style-type:lower-alpha}
ol.upperalpha{list-style-type:upper-alpha}
ol.lowerroman{list-style-type:lower-roman}
ol.upperroman{list-style-type:upper-roman}
ol.lowergreek{list-style-type:lower-greek}
.hdlist>table,.colist>table{border:0;background:none}
.hdlist>table>tbody>tr,.colist>table>tbody>tr{background:none}
td.hdlist1,td.hdlist2{vertical-align:top;padding:0 .625em}
td.hdlist1{font-weight:bold;padding-bottom:1.25em}
td.hdlist2{word-wrap:anywhere}
.literalblock+.colist,.listingblock+.colist{margin-top:-.5em}
.colist td:not([class]):first-child{padding:.4em .75em 0;line-height:1;vertical-align:top}
.colist td:not([class]):first-child img{max-width:none}
.colist td:not([class]):last-child{padding:.25em 0}
.thumb,.th{line-height:0;display:inline-block;border:4px solid #fff;box-shadow:0 0 0 1px #ddd}
.imageblock.left{margin:.25em .625em 1.25em 0}
.imageblock.right{margin:.25em 0 1.25em .625em}
.imageblock>.title{margin-bottom:0}
.imageblock.thumb,.imageblock.th{border-width:6px}
.imageblock.thumb>.title,.imageblock.th>.title{padding:0 .125em}
.image.left,.image.right{margin-top:.25em;margin-bottom:.25em;display:inline-block;line-height:0}
.image.left{margin-right:.625em}
.image.right{margin-left:.625em}
a.image{text-decoration:none;display:inline-block}
a.image object{pointer-events:none}
sup.footnote,sup.footnoteref{font-size:.875em;position:static;vertical-align:super}
sup.footnote a,sup.footnoteref a{text-decoration:none}
sup.footnote a:active,sup.footnoteref a:active{text-decoration:underline}
#footnotes{padding-top:.75em;padding-bottom:.75em;margin-bottom:.625em}
#footnotes hr{width:20%;min-width:6.25em;margin:-.25em 0 .75em;border-width:1px 0 0}
#footnotes .footnote{padding:0 .375em 0 .225em;line-height:1.3334;font-size:.875em;margin-left:1.2em;margin-bottom:.2em}
#footnotes .footnote a:first-of-type{font-weight:bold;text-decoration:none;margin-left:-1.05em}
#footnotes .footnote:last-of-type{margin-bottom:0}
#content #footnotes{margin-top:-.625em;margin-bottom:0;padding:.75em 0}
div.unbreakable{page-break-inside:avoid}
.big{font-size:larger}
.small{font-size:smaller}
.underline{text-decoration:underline}
.overline{text-decoration:overline}
.line-through{text-decoration:line-through}
.aqua{color:#00bfbf}
.aqua-background{background:#00fafa}
.black{color:#000}
.black-background{background:#000}
.blue{color:#0000bf}
.blue-background{background:#0000fa}
.fuchsia{color:#bf00bf}
.fuchsia-background{background:#fa00fa}
.gray{color:#606060}
.gray-background{background:#7d7d7d}
.green{color:#006000}
.green-background{background:#007d00}
.lime{color:#00bf00}
.lime-background{background:#00fa00}
.maroon{color:#600000}
.maroon-background{background:#7d0000}
.navy{color:#000060}
.navy-background{background:#00007d}
.olive{color:#606000}
.olive-background{background:#7d7d00}
.purple{color:#600060}
.purple-background{background:#7d007d}
.red{color:#bf0000}
.red-background{background:#fa0000}
.silver{color:#909090}
.silver-background{background:#bcbcbc}
.teal{color:#006060}
.teal-background{background:#007d7d}
.white{color:#bfbfbf}
.white-background{background:#fafafa}
.yellow{color:#bfbf00}
.yellow-background{background:#fafa00}
span.icon>.fa{cursor:default}
a span.icon>.fa{cursor:inherit}
.admonitionblock td.icon [class^="fa icon-"]{font-size:2.5em;text-shadow:1px 1px 2px rgba(0,0,0,.5);cursor:default}
.admonitionblock td.icon .icon-note::before{content:"\f05a";color:#19407c}
.admonitionblock td.icon .icon-tip::before{content:"\f0eb";text-shadow:1px 1px 2px rgba(155,155,0,.8);color:#111}
.admonitionblock td.icon .icon-warning::before{content:"\f071";color:#bf6900}
.admonitionblock td.icon .icon-caution::before{content:"\f06d";color:#bf3400}
.admonitionblock td.icon .icon-important::before{content:"\f06a";color:#bf0000}
.conum[data-value]{display:inline-block;color:#fff!important;background:rgba(0,0,0,.8);border-radius:50%;text-align:center;font-size:.75em;width:1.67em;height:1.67em;line-height:1.67em;font-family:"Open Sans","DejaVu Sans",sans-serif;font-style:normal;font-weight:bold}
.conum[data-value] *{color:#fff!important}
.conum[data-value]+b{display:none}
.conum[data-value]::after{content:attr(data-value)}
pre .conum[data-value]{position:relative;top:-.125em}
b.conum *{color:inherit!important}
.conum:not([data-value]):empty{display:none}
dt,th.tableblock,td.content,div.footnote{text-rendering:optimizeLegibility}
h1,h2,p,td.content,span.alt,summary{letter-spacing:-.01em}
p strong,td.content strong,div.footnote strong{letter-spacing:-.005em}
p,blockquote,dt,td.content,span.alt,summary{font-size:1.0625rem}
p{margin-bottom:1.25rem}
.sidebarblock p,.sidebarblock dt,.sidebarblock td.content,p.tableblock{font-size:1em}
.exampleblock>.content{background:#fffef7;border-color:#e0e0dc;box-shadow:0 1px 4px #e0e0dc}
.print-only{display:none!important}
@page{margin:1.25cm .75cm}
@media print{*{box-shadow:none!important;text-shadow:none!important}
html{font-size:80%}
a{color:inherit!important;text-decoration:underline!important}
a.bare,a[href^="#"],a[href^="mailto:"]{text-decoration:none!important}
a[href^="http:"]:not(.bare)::after,a[href^="https:"]:not(.bare)::after{content:"(" attr(href) ")";display:inline-block;font-size:.875em;padding-left:.25em}
abbr[title]{border-bottom:1px dotted}
abbr[title]::after{content:" (" attr(title) ")"}
pre,blockquote,tr,img,object,svg{page-break-inside:avoid}
thead{display:table-header-group}
svg{max-width:100%}
p,blockquote,dt,td.content{font-size:1em;orphans:3;widows:3}
h2,h3,#toctitle,.sidebarblock>.content>.title{page-break-after:avoid}
#header,#content,#footnotes,#footer{max-width:none}
#toc,.sidebarblock,.exampleblock>.content{background:none!important}
#toc{border-bottom:1px solid #dddddf!important;padding-bottom:0!important}
body.book #header{text-align:center}
body.book #header>h1:first-child{border:0!important;margin:2.5em 0 1em}
body.book #header .details{border:0!important;display:block;padding:0!important}
body.book #header .details span:first-child{margin-left:0!important}
body.book #header .details br{display:block}
body.book #header .details br+span::before{content:none!important}
body.book #toc{border:0!important;text-align:left!important;padding:0!important;margin:0!important}
body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-break-before:always}
.listingblock code[data-lang]::before{display:block}
#footer{padding:0 .9375em}
.hide-on-print{display:none!important}
.print-only{display:block!important}
.hide-for-print{display:none!important}
.show-for-print{display:inherit!important}}
@media amzn-kf8,print{#header>h1:first-child{margin-top:1.25rem}
.sect1{padding:0!important}
.sect1+.sect1{border:0}
#footer{background:none}
#footer-text{color:rgba(0,0,0,.6);font-size:.9em}}
@media amzn-kf8{#header,#content,#footnotes,#footer{padding:0}}
</style>
</head>
<body class="article toc2 toc-left">
<div id="header">
<h1>Patroneo</h1>
<div class="details">
<span id="author" class="author">Laborejo Software Suite</span><br>
</div>
<div id="toc" class="toc2">
<div id="toctitle">Table of Contents</div>
<ul class="sectlevel1">
<li><a href="#_introduction">1. Introduction</a>
<ul class="sectlevel2">
<li><a href="#_quick_start">1.1. Quick Start</a></li>
<li><a href="#_basic_principles">1.2. Basic Principles</a></li>
<li><a href="#_keyboard_controls">1.3. Keyboard Controls</a></li>
</ul>
</li>
<li><a href="#_description_of_the_graphical_user_interface_and_its_functions">2. Description of the graphical user interface and its functions</a>
<ul class="sectlevel2">
<li><a href="#_toolbar">2.1. Toolbar</a>
<ul class="sectlevel3">
<li><a href="#_swing">2.1.1. Swing</a></li>
</ul>
</li>
<li><a href="#_form_editor">2.2. Form Editor</a>
<ul class="sectlevel3">
<li><a href="#_measure_modifications_transposition_and_rhythm">2.2.1. Measure Modifications: Transposition and Rhythm</a></li>
<li><a href="#_track_groups">2.2.2. Track Groups</a></li>
<li><a href="#_extending_measure_lengths_of_individual_tracks">2.2.3. Extending Measure Lengths of Individual Tracks</a></li>
<li><a href="#_midi_channel">2.2.4. MIDI-Channel</a></li>
</ul>
</li>
<li><a href="#_pattern_editor">2.3. Pattern Editor</a>
<ul class="sectlevel3">
<li><a href="#_pattern_context_menu">2.3.1. Pattern Context Menu</a></li>
<li><a href="#_duration_and_volume">2.3.2. Duration and Volume</a></li>
<li><a href="#_pitches_and_scales">2.3.3. Pitches and Scales</a></li>
<li><a href="#_changing_the_number_of_available_pitches">2.3.4. Changing the number of available pitches</a></li>
<li><a href="#_shadows">2.3.5. Shadows</a></li>
</ul>
</li>
<li><a href="#_grouping_in_the_pattern">2.4. Grouping in the Pattern</a></li>
<li><a href="#_miscellaneous">2.5. Miscellaneous</a>
<ul class="sectlevel3">
<li><a href="#_global_rhythm_offset">2.5.1. Global rhythm offset</a></li>
<li><a href="#_hardware_akai_apcmini">2.5.2. Hardware: AKAI APCmini</a></li>
</ul>
</li>
</ul>
</li>
<li><a href="#_installation_and_start">3. Installation and Start</a></li>
<li><a href="#_help_and_development">4. Help and Development</a>
<ul class="sectlevel2">
<li><a href="#_testing_and_reporting_errors">4.1. Testing and Reporting Errors</a></li>
<li><a href="#_programming">4.2. Programming</a></li>
<li><a href="#_translations">4.3. Translations</a></li>
</ul>
</li>
</ul>
</div>
</div>
<div id="content">
<div id="preamble">
<div class="sectionbody">
<div class="paragraph">
<p>For program version 2.3.2</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_introduction">1. Introduction</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Patroneo (which is Esperanto for "Pattern") is an easy to use, pattern based midi sequencer, a
program that sends digital "notes" to software instruments such as synthesizers and samplers.</p>
</div>
<div class="paragraph">
<p>This program is feature-complete with version 2.3.0 in 2022.
Further releases will be limited to maintenance and fixing problems.</p>
</div>
<div class="paragraph">
<p>Patroneo is primarily designed for educational purposes, where the main goal is to teach the
importance of patterns and repetitions in any kind of music. However, Patroneo is a full sequencer
you can use to create real music. The constraints it presents will more likely boost your
creativity than suppressing it.</p>
</div>
<div class="paragraph">
<p>You have tracks with one pattern each. Turn on steps in the pattern to play
musical notes. Switch the patterns on and off in a sequence to create a song structure.
Connect external synthesizers and samplers to create sounds.</p>
</div>
<div class="sect2">
<h3 id="_quick_start">1.1. Quick Start</h3>
<div class="paragraph">
<p>To get to know the most important functions and workflows, this video tutorial series has been created.</p>
</div>
<div class="paragraph">
<p><a href="https://laborejo.org/patroneo/videos">Video Tutorials</a></p>
</div>
<div class="paragraph">
<p>Or as Youtube Mirror</p>
</div>
<div class="paragraph">
<p><a href="https://youtube.com/playlist?list=PLSQAc8dt9jR37eKDhr86VxLkFYQN9HNiO">Video Tutorials Youtube</a></p>
</div>
</div>
<div class="sect2">
<h3 id="_basic_principles">1.2. Basic Principles</h3>
<div class="imageblock">
<div class="content">
<a class="image" href="en_overview.png"><img src="en_overview.png" alt="en overview"></a>
</div>
</div>
<div class="paragraph">
<p>Patroneo organizes its music in tracks that contain measures. All measures of a track play the same
"pattern" that creates music through a sequence of "steps".</p>
</div>
<div class="paragraph">
<p>The track is connected to an instrument through JACK, so Patroneo itself does not produce any
sounds.</p>
</div>
<div class="paragraph">
<p>If you press Play, the track plays back from left to right. Whenever a measure is highlighted in
the Form Editor, the pattern is played.</p>
</div>
<div class="paragraph">
<p>If you want to hear different patterns from the same instrument, you create several tracks for the
same JACK instrument.</p>
</div>
<div class="paragraph">
<p>The selection of the tones per pattern is freely selectable. You can use normal musical scales or
set any tones in any order. If you change the scale later, the pattern sounds different without
having to switch tones on and off again.</p>
</div>
<div class="paragraph">
<p>Saving and loading your project is done by the New Session Manager (Agordejo). There you will find
a "Save" button.</p>
</div>
</div>
<div class="sect2">
<h3 id="_keyboard_controls">1.3. Keyboard Controls</h3>
<div class="paragraph">
<p>In principle, Patroneo can be operated with the mouse. The keyboard is needed for only a few
functions, such as changing track names or setting half-tone transposition. However, the keyboard
makes some workflows faster and more convenient.</p>
</div>
<div class="ulist">
<div class="title">Shortcuts</div>
<ul>
<li>
<p>Space: Start and pause playback</p>
</li>
<li>
<p>L: Play the current measure as a loop</p>
</li>
<li>
<p>Home: Set playback to the beginning of the track.</p>
</li>
</ul>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_description_of_the_graphical_user_interface_and_its_functions">2. Description of the graphical user interface and its functions</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Patroneo consists of three parts: The Toolbar, the Form Editor, and the Pattern Editor. Between
form- and pattern editor there is a <strong>Handle</strong> which you can grab with the left mouse button and
move it up or down to give more space to one or the other area.</p>
</div>
<div class="sect2">
<h3 id="_toolbar">2.1. Toolbar</h3>
<div class="paragraph">
<p><span class="image"><a class="image" href="en_toolbar.png"><img src="en_toolbar.png" alt="en toolbar"></a></span></p>
</div>
<div class="paragraph">
<p>The <strong>Toolbar</strong> combines various commands with properties of the entire piece.</p>
</div>
<div class="paragraph">
<p><strong>Clone Selected Track</strong> adds a new track based on the currently selected one. This is an
important and often used command that is mainly used to enable variants. The cloned track is empty,
but inherits the scale of the original, its average velocity or volume, color and name. If the name
ends in a single letter like "A", "g" or a number, it is automatically incremented, as you can see
in the screenshot. The new track automatically connects to the same JACK instrument.</p>
</div>
<div class="paragraph">
<p><strong>Add Track</strong> adds an empty track. It is given a random name and is not connected in JACK. Scale,
note-names etc. will be taken from the currently selected track.</p>
</div>
<div class="paragraph">
<p><strong>BPM / Tempo</strong>: The tempo can be completely deactivated by unchecking the box. In this case, the
"JACK Transport" system takes over, as indicated by the "JACK" logo in the deactivated input field.
This allows programs running in parallel to create complex tempo sequences, which is not possible
in Patroneo alone. If the checkbox is activated, the specified tempo is considered to be beats per
minute. A "beat" is the selected note value of the list. More on that later.</p>
</div>
<div class="paragraph">
<p><strong>Measures per Track</strong> controls the total length of the piece, whereby the absolute number of
seconds can change depending on how the tempo is selected and how long a measure should be. If the
number of measures is reduced, no measures are actually deleted, but just ignored. If you later set
the number of measures higher again, you will get your old configuration back. Patroneo nevers
stops playback on its own. Especially in a JACK-transport environment it will continue playing even
after its own end.</p>
</div>
<div class="paragraph">
<p><strong>Steps per Pattern, in groups of &#8230;&#8203; so that each group produces a &#8230;&#8203;</strong> note. Here you can set
how long the patterns are and what grouping below the beat they have. This is the most complicated
part in Patroneo and will be discussed later in this manual. For now it is recommended to ignore
the "groups" field. Steps per Pattern is simply the number of tones that can be switched on and
off. The drop down list selects how long each of these steps is.</p>
</div>
<div class="paragraph">
<p><strong>Playback Controls</strong> are three buttons. From left to right:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>Play / Pause. Press to play or pause the music at the current location. You can also press the space bar.</p>
</li>
<li>
<p>Loop on and off. The currently played measure (in all tracks) is continuously repeated. This function is suitable for working in a certain place by getting to hear your changes quickly. The loop is broken up by pressing the button again or jumping around in the timeline.</p>
</li>
<li>
<p>To the start: Jumps back to the beginning, whether the music is playing or not.</p>
</li>
</ul>
</div>
<div class="paragraph">
<p>The duration of the loop in measures can be set next to the loop button. As a reminder, the loop is
a function to try out ideas while composing. It is not suitable, both technically and in terms of
user interface, to be changed spontaneously during a live performance or recording, or during a
recording session.</p>
</div>
<div class="sect3">
<h4 id="_swing">2.1.1. Swing</h4>
<div class="paragraph">
<p><span class="image"><a class="image" href="en_swing.png"><img src="en_swing.png" alt="en swing"></a></span></p>
</div>
<div class="paragraph">
<p><strong>Swing</strong> (also called shuffle) can be adjusted by a slider in percent. The slider
is located on the far right of the toolbar. The slider is only visible when the group
(see above) is set to either 2 or 4. Swing is also only applied in these groupings.</p>
</div>
<div class="paragraph">
<p>The start value is 0% and means: no swing; in a pair of notes both are of equal length.
By changing the value, you can lengthen the first note of each pair and shorten the second.
Which amount you like should be decided by listening.</p>
</div>
<div class="paragraph">
<p>The swing value has a very different effect, depending on whether a grouping of 2 or 4 notes is
selected. For example with a grouping of 2, 40% is a moderate value, as experienced in Jazz.
With a grouping of 4 (same BPM/tempo) already 15% are clearly audible.</p>
</div>
</div>
</div>
<div class="sect2">
<h3 id="_form_editor">2.2. Form Editor</h3>
<div class="paragraph">
<p><span class="image"><a class="image" href="en_form_editor.png"><img src="en_form_editor.png" alt="en form editor"></a></span></p>
</div>
<div class="paragraph">
<p>In the <strong>Form Editor</strong> you create the structure of a piece. To do this, the measures in each
track can be switched on and off as desired. One can imagine, for example, a drum set that plays
three bars in a row and makes a "break" every fourth bar. For this common drum technique you need
two tracks. In the screenshot this "3+1" pattern can be seen in the third section (bars 17 to 24)
in the orange bass track.</p>
</div>
<div class="paragraph">
<p>Whole parts (e.g. verse and chorus) are implemented by using different
tracks. To make the creation of related tracks as comfortable as possible, the "clone" command
exists.</p>
</div>
<div class="paragraph">
<p>It is possible to zoom in on the measures. To do this, hold down the <strong>CTRL</strong> key and turn the mouse
wheel up or down. Please make sure that the mouse cursor is actually over the measures and not over
the track names or on the timeline.</p>
</div>
<div class="paragraph">
<p><strong>Timeline</strong>: a click with the left mouse button sets the playback position, even during
playback. In addition, the measure groups (not to be confused with grouping in the pattern)
can be seen and set here. If you hover over the timeline with the mouse cursor, you can
reduce or increase the size of the groups with the mouse wheel. The groups not only have an
cosmetical function but are also used as units of measurement if you want to delete or add entire
ranges.</p>
</div>
<div class="paragraph">
<p><strong>Track Names</strong>. Here you can move tracks, rename them, give them a different color and more:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>A single click with the left mouse button on a name selects a track without changing anything. This is the best way to just look at a track. (A click on the measure area changes a measure immediately!)</p>
</li>
<li>
<p>The double arrow on the far left can be used to move tracks up and down to organize them. It has no effect on the sound or the JACK connections. To move, click on the arrow with the left mouse button, hold it down and move the mouse up and down.</p>
</li>
<li>
<p>The colored square shows the current color. A left mouse click opens a dialog.</p>
</li>
<li>
<p>Track names can be changed at any time by a double-clicking with the left mouse button. Press the Return key to finish renaming. The JACK connection is retained when renaming. It is a good habit to end tracks on a single letter or number. These are used in "cloning" to construct a variant of the name. See the screenshot above.</p>
</li>
<li>
<p>A click with the right mouse button on a name opens the context menu of a track. Here you can</p>
<div class="ulist">
<ul>
<li>
<p>Switch all measures on or off (only applies to the visible measures)</p>
</li>
<li>
<p>Invert the activated measures: Off becomes On and vice versa.</p>
</li>
<li>
<p>Clone this track (same function as in the toolbar)</p>
</li>
<li>
<p>Delete the track permanently and irreversibly</p>
</li>
<li>
<p>Copy the measure sequence of another track onto the selected one. Measures that have already been set are preserved. If you use this function from an empty track you will practically get "copy track".</p>
</li>
</ul>
</div>
</li>
</ul>
</div>
<div class="paragraph">
<p>Now finally the <strong>Track</strong> itself. A left click on a measure switches it on or off again. You can
switch several measures in a row on and off by holding down the left mouse button after clicking
and moving the mouse left or right. A right click on a specific measure opens a context menu:
Insert new measures in all tracks(!) at this position or delete measures from all tracks. The
number of measures results from the current measure group setting from the time line.</p>
</div>
<div class="paragraph">
<p>These functions are especially understandable if you apply them to the first measure of a
group (after the white line). This allows you to insert new "parts" or delete an entire part.</p>
</div>
<div class="paragraph">
<p>A good method is also to change the group size for these functions briefly and then reset them
immediately afterwards.</p>
</div>
<div class="sect3">
<h4 id="_measure_modifications_transposition_and_rhythm">2.2.1. Measure Modifications: Transposition and Rhythm</h4>
<div class="paragraph">
<p><span class="image"><a class="image" href="en_modifications.png"><img src="en_modifications.png" alt="en modifications"></a></span></p>
</div>
<div class="paragraph">
<p>The following functions can be looked up in the Edit menu at any time, but cannot be invoked
directly from there, but require the use of keyboard and mouse at the same time. Use the keys while
hovering the mouse pointer over a measure in the track editor (upper half of the screen).</p>
</div>
<div class="paragraph">
<p>For each of the following four possibilities there is a separate key to increase a value (e.g.
semitones) or, together with the shift key, to decrease the value.</p>
</div>
<div class="paragraph">
<p>In the measures themselves, there is a small lettering that shows the current values. There is
graphically only space for 3 of 4 modifications, but this is not a limitation in practice.</p>
</div>
<div class="paragraph">
<p>The modifications always apply to an individual bar and are not visible in the pattern (lower part
of the screen). If the bar is switched off (and on again), the modification is deleted.</p>
</div>
<div class="sect4">
<h5 id="_halftone_transposition">Halftone transposition</h5>
<div class="paragraph">
<p>Halftone transposition (H / Shift+H) changes all notes in this individual bar by e.g. +5h, that is
five semitones upwards: C becomes F, MIDI note 60 becomes 65. -7h is a fifth downwards.</p>
</div>
<div class="paragraph">
<p>The scale transposition is calculated first and then the semitone transposition.</p>
</div>
</div>
<div class="sect4">
<h5 id="_scale_transposition">Scale transposition</h5>
<div class="paragraph">
<p>Scale transposition (S / Shift+S) raises, or lowers, everything to the notes that follow next in
the respective scale.</p>
</div>
<div class="paragraph">
<p>One can imagine that the steps in the pattern are shifted up or down in the rows behind the scenes.
Whatever tone is set in this row gets played. With a normal scale, this is musically easy to
understand: The tones are moved up or down in the scale.</p>
</div>
<div class="paragraph">
<p>However, if the scale is chosen freely, there are non-intuitive outcomes; "up and down" with
respect to pitches may lose their meaning. It is possible to use two interleaved scales in the
pattern and to switch between them by scale transposition +1. Or even uses completely different
tones, so that only the rhythm remains the same.</p>
</div>
<div class="paragraph">
<p>The scale transposition is calculated first and then the semitone transposition.</p>
</div>
</div>
<div class="sect4">
<h5 id="_step_delay">Step delay</h5>
<div class="paragraph">
<p>Step delay (D / Shift+D) makes all notes of the bar sound earlier or later than they are created in
the pattern itself. The rhythmic consequence is determined by the time signature and subgrouping of
the track. Example: If the step delay is set to "2", a tone in column 3 will not sound until column
5. Negative values move them earlier accordingly.</p>
</div>
<div class="paragraph">
<p>Tones that would sound earlier than 0 or would be shifted behind the end of the bar are ignored at
first. But if you activate "Step delay wrap-around" in the context menu (right click) of the track,
these tones are moved to the beginning or end of the bar, like on a cylinder, whose end is followed
by the beginning again.</p>
</div>
<div class="paragraph">
<p>The step delay is calculated first and then the augmentation factor.</p>
</div>
</div>
<div class="sect4">
<h5 id="_augmentation_factor">Augmentation factor</h5>
<div class="paragraph">
<p>The augmentation factor (A / Shift+A) doubles (x2, x4, x8, x16 &#8230;&#8203;) or halves (quarters, eighths
&#8230;&#8203;) all note lengths of the bar. Subsequent notes are played earlier or later as a result.
Augmentation means lengthening and diminution means shortening all note values by a factor.</p>
</div>
<div class="paragraph">
<p>Tones that would sound earlier than 0 or would be shifted to the end of the bar are ignored at
first. But if you switch on "Repeat diminuated patterns in itself" in the context menu (right
click) of the track, a halved bar is played twice in quick succession, a quartered bar four times
in quick succession and so on. This setting has no effect on augmented bars.</p>
</div>
<div class="paragraph">
<p>The step delay is calculated first and then the augmentation factor.</p>
</div>
</div>
</div>
<div class="sect3">
<h4 id="_track_groups">2.2.2. Track Groups</h4>
<div class="paragraph">
<p><span class="image"><a class="image" href="en_trackgroups.png"><img src="en_trackgroups.png" alt="en trackgroups"></a></span></p>
</div>
<div class="paragraph">
<p>Tracks can be grouped together. This is not to be confused with the rhythm groups of patters.</p>
</div>
<div class="paragraph">
<p>Groups have two functions: they improve the clarity of layout and group JACK midiports together.
(All tracks in a group send via the same port).</p>
</div>
<div class="paragraph">
<p>Typically, groups are used to combine individual tracks into "logical instruments". It is highly
recommended to use groups, that&#8217;s why the empty Patroneo project is already set up that way.</p>
</div>
<div class="paragraph">
<p>Double-clicking on the name of the group "opens" and "closes" it, which has no effect on the music,
but is purely visual.</p>
</div>
<div class="paragraph">
<p>Groups can be moved by using their arrow symbol located on the far left (hold down the left mouse
button and drag up or down), just like the individual tracks. The order of tracks within the group
is also arbitrary.</p>
</div>
<div class="paragraph">
<p>Groups and individual tracks can be mixed in any order.</p>
</div>
<div class="paragraph">
<p>All options and functions for track groups can be accesesd via the context menu of a track (right
mouse click):</p>
</div>
<div class="ulist">
<ul>
<li>
<p>Tracks can be added to, moved to or removed from existing groups at any time.</p>
</li>
<li>
<p>A track can be moved into a newly created group, which can be given a name immediately.</p>
</li>
<li>
<p>If a track is removed from a group, it becomes a standalone one again.</p>
</li>
<li>
<p>If a track is cloned, it is in the same group as the original.</p>
</li>
<li>
<p>New, empty tracks (those with random numbers as names) are initially not assigned to a group.</p>
</li>
<li>
<p>Groups cannot be renamed.</p>
</li>
</ul>
</div>
</div>
<div class="sect3">
<h4 id="_extending_measure_lengths_of_individual_tracks">2.2.3. Extending Measure Lengths of Individual Tracks</h4>
<div class="paragraph">
<p><span class="image"><a class="image" href="en_pattern_multiplier.png"><img src="en_pattern_multiplier.png" alt="en pattern multiplier"></a></span></p>
</div>
<div class="paragraph">
<p>At first, all measures of all tracks are of the same length in Patroneo, namely as you have set the
steps per pattern (start value: 8).</p>
</div>
<div class="paragraph">
<p>To the left of the track name is a number field for the "measure multiplier". The start value is
"1x". If you increase this value, one measure of this track will be x times longer from now on. The
measure grid changes accordingly and a click now activates the longer measure.</p>
</div>
<div class="paragraph">
<p>The pattern in the lower part of the screen will be longer, so you have more space to compose.
compose.</p>
</div>
<div class="paragraph">
<p>Placing a long measure follows the old grid. You can only switch on a bar every x bars (multiples
of the set value) to place a measure.</p>
</div>
<div class="paragraph">
<p>A halving of the measure lengths or crooked multipliers (1,4) are not possible (only whole numbers).</p>
</div>
</div>
<div class="sect3">
<h4 id="_midi_channel">2.2.4. MIDI-Channel</h4>
<div class="paragraph">
<p>The MIDI channel a track transmits on can be set via the context menu of a track (right click). The
start value is Channel 1. Only one channel per track is possible at a time. For more demanding
scenarios, external JACK programs must be used.</p>
</div>
</div>
</div>
<div class="sect2">
<h3 id="_pattern_editor">2.3. Pattern Editor</h3>
<div class="paragraph">
<p><span class="image"><a class="image" href="en_pattern_editor.png"><img src="en_pattern_editor.png" alt="en pattern editor"></a></span></p>
</div>
<div class="paragraph">
<p>The <strong>Pattern Editor</strong> is used for composing. The tones, also called "steps", are used to form a
measure. The pattern is exactly as long as a measure and is played from left to right. There are
several possibilities for tonal arrangement, which are now explained.</p>
</div>
<div class="paragraph">
<p>The pattern is always as long as set in the toolbar. Steps that have been set are
never deleted by rezising! If you make the measures shorter, tones "too far to the right" are
simply ignored. You can see them again as soon as you make the measures longer again.</p>
</div>
<div class="paragraph">
<p>If the pattern is larger than the screen you can either use the scroll bars or zoom. To zoom hold
down the <strong>CTRL</strong> key and turn the mouse wheel up or down.</p>
</div>
<div class="paragraph">
<p>At the top you can see a label for the <strong>Active Track</strong>.</p>
</div>
<div class="paragraph">
<p>The pattern itself is arranged in rows and columns. The rows symbolise the (adjustable) pitches,
the columns show their rhythmic sequence and position in time.</p>
</div>
<div class="sect3">
<h4 id="_pattern_context_menu">2.3.1. Pattern Context Menu</h4>
<div class="paragraph">
<p>A right click on a step opens a context menu that provides the following exclusive functions. For
all functions that reverse or invert ("On" becomes "Off" and vice versa), please note that all
volume information (see below) is lost.</p>
</div>
<div class="paragraph">
<p>"Row" here refer to all steps of the same pitch. From left to right.</p>
</div>
<div class="ulist">
<ul>
<li>
<p>Invert row (an empty row is completely filled)</p>
</li>
<li>
<p>Clear row</p>
</li>
<li>
<p>Repeat to here to fill row (see below)</p>
</li>
<li>
<p>Invert Steps (the whole pattern)</p>
</li>
<li>
<p>All Steps On</p>
</li>
<li>
<p>All Steps Off</p>
</li>
</ul>
</div>
<div class="paragraph">
<p>The function "Repeat to here to fill row" opens up many creative possibilities: All steps from the
beginning of the row to the selected one (incl.) are taken as a "sub-pattern" which is used to fill
the rest of the row. All existing steps will be deleted with their volumes.</p>
</div>
<div class="paragraph">
<p>For example, if you want a note every fourth step, activate the first step of the row, leave three
empty and click on the fourth step as context menu and select the fill function. The whole row will
now be a recurring pattern of "X o o o X o o o&#8230;&#8203;".</p>
</div>
</div>
<div class="sect3">
<h4 id="_duration_and_volume">2.3.2. Duration and Volume</h4>
<div class="paragraph">
<p><span class="image"><a class="image" href="en_velocities.png"><img src="en_velocities.png" alt="en velocities"></a></span></p>
</div>
<div class="paragraph">
<p>A <strong>Step</strong> is a grey or coloured box. Grey means pause, coloured means <strong>Sounding Tone</strong>. A
click with the left mouse button switches the steps on and off. A right click opens the context
menu. Here you can switch all (currently visible) steps on, off or invert all: Off On becomes Off
and vice versa. All volume information (see below) will be lost.</p>
</div>
<div class="paragraph">
<p>All steps are equal length. <strong>Other Durations</strong> are also possible: If you hold down the left
mouse button after activating a step, you can shorten or lengthen the tone by moving it to the left
or right. It must be at least half the length. A tone is at most as long as the measure itself.</p>
</div>
<div class="paragraph">
<p>You can activate as many steps in a row or simultaneously as you like. Thus <strong>Chords</strong> can be
built.</p>
</div>
<div class="paragraph">
<p>Steps can have different <strong>Volumes</strong>. For this Patroneo uses so-called MIDI Velocity. If you hold
the mouse cursor over an activated step, you can make its sound softer or louder by turning the
mouse wheel. The volumes are displayed as numbers between 0 and 127.</p>
</div>
<div class="paragraph">
<p>If you want to see all the volume levels at once, hover the mouse cursor over one of the two volume
buttons in the menu in the middle of the screen. There is also a setting in the "View" menu to
display the numbers permanently. Additionaly a step looks more transparent the quieter it is. If
the step is switched on and off, the volume is set back to the normal value, derived from the
average volume of all tones of this pattern.</p>
</div>
<div class="paragraph">
<p>You can use the <strong>Velocity</strong> buttons to make all tones of a pattern quieter or louder. If you
click on it, the volume changes by 1 each, but if you hold the mouse cursor over a button and
rotate your mouse wheel the velocity changes by 10 each. It doesn&#8217;t matter which velocity button
(plus or minus) you hover over.</p>
</div>
<div class="paragraph">
<p>To make all tones of a row quieter or louder hold the Alt key (not AltGr) and use your mousewheel
on a step of that row.</p>
</div>
</div>
<div class="sect3">
<h4 id="_pitches_and_scales">2.3.3. Pitches and Scales</h4>
<div class="paragraph">
<p><span class="image"><a class="image" href="en_pitches.png"><img src="en_pitches.png" alt="en pitches"></a></span></p>
</div>
<div class="paragraph">
<p>Click with the middle mouse button on a step to hear the sound it plays. This allows you to
"pre-listen" before you decide to set a note. Tip: Hold down the middle mouse button and move the
mouse up and down the steps.</p>
</div>
<div class="paragraph">
<p>Which actual pitch is played ("MIDI Key") is determined by the <strong>Scale</strong>.
Usually these are common musical scales: seven different notes and the octave of the root note.</p>
</div>
<div class="paragraph">
<p>Such common <strong>Scales</strong> can be selected directly. For example, major, minor, various so-called
"church modes" but also the blues scale or chromatic (e.g. to GM drum mapping).</p>
</div>
<div class="paragraph">
<p>If you select a scale from the list, it will be built upon the bottom row. As a rule of thumb this
is also the lowest note. In the screenshot this is midi note 60 / C4, located bottom left. You must
first select the root directly and then select a <strong>Scale</strong>.</p>
</div>
<div class="paragraph">
<p>There are four buttons to change the pitch of both the root note and the entire scale:</p>
</div>
<div class="ulist">
<ul>
<li>
<p><strong>Half Tone</strong> Plus or minus shifts the whole scale up or down by one semitone each. This should not be confused with the temporary transposition from the form editor. This is called destructive change, since the values themselves are permanently changed.</p>
</li>
<li>
<p><strong>Octave</strong> Plus or minus shifts directly by a whole octave. You could also press the half-tone button 12 times. Don&#8217;t.</p>
</li>
</ul>
</div>
<div class="paragraph">
<p>As already described in the scale transposition, it is also possible to directly
input any value between 0 and 127 in the <strong>Fields of the Scale</strong>. The tones do not have to have
musically meaningful intervals, nor do they have to be sorted in ascending or descending order.</p>
</div>
</div>
<div class="sect3">
<h4 id="_changing_the_number_of_available_pitches">2.3.4. Changing the number of available pitches</h4>
<div class="paragraph">
<p><span class="image"><a class="image" href="en_pattern_height.png"><img src="en_pattern_height.png" alt="en pattern height"></a></span></p>
</div>
<div class="paragraph">
<p>In the toolbar in the center, next to the transposition and scale options, there is a
a setting option to change the number of available pitches.
The starting value is "8 notes". Possible values are 1 to 127, but these are extreme values.
Normal, and tested, is 1 to about 24 (two chromatic octaves).</p>
</div>
<div class="paragraph">
<p>Changing the number applies only to the currently selected pattern. Different patterns
can have different numbers of pitches.</p>
</div>
<div class="paragraph">
<p>The notes are added or taken away at the bottom. Already existing activated notes
will remain, even if they become "invisible", because there is no more space for them.</p>
</div>
</div>
<div class="sect3">
<h4 id="_shadows">2.3.5. Shadows</h4>
<div class="paragraph">
<p><span class="image"><a class="image" href="en_shadows.png"><img src="en_shadows.png" alt="en shadows"></a></span></p>
</div>
<div class="paragraph">
<p>Often you want to add more tones to an existing track in a different pattern. A second voice,
question/answer technique etc. To help you, it is possible to display other tracks as <strong>Shadows</strong>.
Just click with the middle mouse button on the track you want to see. This is only possible in the
measure area, not on the track name or on the timeline.</p>
</div>
<div class="paragraph">
<p>You can display as many shadows as you want, until you lose track. All shadows disappear as soon as
the active track changes.</p>
</div>
<div class="paragraph">
<p>Shadows are just a guidance and not litereal pitches: If you choose a shadow-track with a different
scale than your current one the shadow-pitches will be technically wrong. Shadows are very simple
in principle. They just show which steps are marked, nothing more.</p>
</div>
</div>
</div>
<div class="sect2">
<h3 id="_grouping_in_the_pattern">2.4. Grouping in the Pattern</h3>
<div class="paragraph">
<p><span class="image"><a class="image" href="en_timesig.png"><img src="en_timesig.png" alt="en timesig"></a></span></p>
</div>
<div class="paragraph">
<p>Grouping is part of the time signature.</p>
</div>
<div class="paragraph">
<p>As mentioned above <strong>steps per pattern</strong>, sets the length of the pattern. Patroneo starts with 8
steps per measure for a new project (see screenshot). On the far right is a drop down list, which
is set to "Quarter" for a new project. You start with a traditional 8/4 time signature.</p>
</div>
<div class="paragraph">
<p>The field <strong>in groups of</strong> allows you to group steps together, each group being as long as specified
in the drop down list. This allows you to further subdivide your time signature. The "beat", i.e.
the tempo, is based on the main beats, the first step of each group.</p>
</div>
<div class="ulist">
<div class="title">Examples</div>
<ul>
<li>
<p>4/4 time signature with eights notes as smallest rhythmical unit</p>
<div class="ulist">
<ul>
<li>
<p>8 steps per pattern / in groups of 2 / so that each group produces a quarter</p>
</li>
</ul>
</div>
</li>
<li>
<p>4/4 time signature subdivided as triplet eights notes (swing)</p>
<div class="ulist">
<ul>
<li>
<p>9 steps per pattern / in groups of 3 / so that each group produces a quarter</p>
</li>
</ul>
</div>
</li>
<li>
<p>12/8 time signature</p>
<div class="ulist">
<ul>
<li>
<p>12 steps per pattern / in groups of 1 / so that each group produces an eigth</p>
</li>
</ul>
</div>
</li>
<li>
<p>8/4 time signature subdivided as sixteenth notes</p>
<div class="ulist">
<ul>
<li>
<p>32 steps per pattern / in groups of 4 / so that each group produces a quarter</p>
</li>
</ul>
</div>
</li>
</ul>
</div>
<div class="paragraph">
<p>Normally, the time signature is set relatively at the beginning of a new project. However, it
happens every now and then that you need smaller rhythm values than you thought at the beginning.
If you simply increase the value of the grouping, you get more subdivisions, but the number of
steps remains the same. Likewise, the notes remain exactly in the "column" in which they were
previously placed. In other words, the music will sound different. Overall, the measure is also
getting shorter, as the same number of steps is now assigned shorter note values.</p>
</div>
<div class="paragraph">
<p><span class="image"><a class="image" href="en_convert_grouping.png"><img src="en_convert_grouping.png" alt="en convert grouping"></a></span></p>
</div>
<div class="paragraph">
<p>Patroneo therefore offers the function <strong>Convert Grouping</strong> (in the Edit menu) to change the existing
measure structure and to resize steps already set so that the music sounds the same.</p>
</div>
<div class="paragraph">
<p>If you click on the button in the toolbar, a small dialog box opens in which you can enter the
desired grouping. It is also possible to set what should happen if the conversion would not work
properly for musical reasons (see below).</p>
</div>
<div class="paragraph">
<p>Conversion is often possible without any problems:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>If the grouping of <code>1</code> is set to a higher value, it always works</p>
</li>
<li>
<p>If the grouping is set from <code>2</code> to <code>4</code> it always works</p>
</li>
</ul>
</div>
<div class="paragraph">
<p>For all other transformations it depends on whether the existing tones lie between the new grid
after the conversion or not. The former case is not possible and you have to decide:</p>
</div>
<div class="ulist">
<div class="title">Error Handling</div>
<ul>
<li>
<p>Do nothing (default)</p>
<div class="ulist">
<ul>
<li>
<p>The operation is aborted, everything remains as before.</p>
</li>
</ul>
</div>
</li>
<li>
<p>Delete wrong steps</p>
<div class="ulist">
<ul>
<li>
<p>Anything that would appear between the grid will be deleted or discarded.</p>
</li>
</ul>
</div>
</li>
<li>
<p>Merge wrong steps</p>
<div class="ulist">
<ul>
<li>
<p>Impossible positions are moved to the next possible position. In any case, this means that the music now sounds different. Usually several notes are pushed on top of each other and form chords.</p>
</li>
</ul>
</div>
</li>
</ul>
</div>
<div class="paragraph">
<p>With a little experience you will be able to estimate what error handling you need.</p>
</div>
</div>
<div class="sect2">
<h3 id="_miscellaneous">2.5. Miscellaneous</h3>
<div class="sect3">
<h4 id="_global_rhythm_offset">2.5.1. Global rhythm offset</h4>
<div class="paragraph">
<p>In the Edit menu you will find the Global Rhythm Offset. In modular music production with several
programs, synchronised by JACK transport, Patroneo can be shifted entirely backwards (or even
forwards) on the timeline.</p>
</div>
<div class="paragraph">
<p>For example, a performance is conceivable and the Patroneo song should only start at 52:00. Or you
want to make a bar- and rhythmless intro in another program, which lasts exactly XY miditicks.</p>
</div>
<div class="paragraph">
<p>This command is explicitly aimed at advanced users and is documented in detail in the application
itself when you use the menu command.</p>
</div>
</div>
<div class="sect3">
<h4 id="_hardware_akai_apcmini">2.5.2. Hardware: AKAI APCmini</h4>
<div class="paragraph">
<p><span class="image"><a class="image" href="akai_apc_mini.png"><img src="akai_apc_mini.png" alt="akai apc mini"></a></span></p>
</div>
<div class="paragraph">
<p>The AKAI APCmini can be used as an input device. Patroneo has a JACK-Midi input and output port
for this purpose: once for the actual input and then back to the unit to control its LEDs.</p>
</div>
<div class="paragraph">
<p>For an actual tutorial how to use the hardware please refer to the video in our series of video
tutorials (see introduction of this manual).</p>
</div>
<div class="paragraph">
<p>It may seem strange that this is only offered for one specific device. You may even wonder if you
should buy this device yourself now?</p>
</div>
<div class="paragraph">
<p>No, don&#8217;t buy it. Working on the computer itself is faster and more convenient.</p>
</div>
<div class="paragraph">
<p>The author tried it out as an experiment. The APCmini was the cheapest device of this kind (69€ as
of 2021) with at least 8 by 8 buttons (standard layout of the Patroneo pattern). There are no plans
to buy more devices of this kind, so there will be no software support.</p>
</div>
<div class="paragraph">
<p>In Patroneo, you can only do pattern input with the APCmini. Everything that has to do with tracks,
as well as measure modifications (transposition etc.), the selection of the scale, time signature
and grouping etc. must still be done on the computer. And even then, the handling of
volume/velocity is inconvenient and tone lengths cannot be adjusted as finely.</p>
</div>
<div class="paragraph">
<p>Once the programming was done, however, it was not worth leaving the functionality out of the
program. After all, it is Patroneo&#8217;s only remote control from the outside, which can perhaps be
"abused" for other creative purposes at some point.</p>
</div>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_installation_and_start">3. Installation and Start</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Patroneo is exclusive for Linux. The best way to install is to use your package manager.
If it is not there, or only in an outdated version, please ask your Linux distribution to provide a recent version.</p>
</div>
<div class="paragraph">
<p>If available in the package repository, please continue reading directly at "Start patroneo from Agordejo / New Session Manager".
If not, you can build Patroneo yourself.</p>
</div>
<div class="ulist">
<div class="title">Build and Install</div>
<ul>
<li>
<p>Please check the supplied README.md for dependencies.</p>
</li>
<li>
<p>You can download a release or clone the git version</p>
<div class="ulist">
<ul>
<li>
<p>Download the latest version from <a href="https://www.laborejo.org/downloads" class="bare">https://www.laborejo.org/downloads</a> and extract it.</p>
</li>
<li>
<p>git clone <a href="https://git.laborejo.org/lss/patroneo.git" class="bare">https://git.laborejo.org/lss/patroneo.git</a></p>
</li>
</ul>
</div>
</li>
<li>
<p>Change into the new directory and use these commands:</p>
</li>
<li>
<p><code>./configure --prefix=/usr</code></p>
<div class="ulist">
<ul>
<li>
<p>The default prefix is /usr/local</p>
</li>
</ul>
</div>
</li>
<li>
<p><code>make</code></p>
</li>
<li>
<p><code>sudo make install</code></p>
</li>
</ul>
</div>
<div class="ulist">
<div class="title">Start patroneo from Agordejo (New Session Manager, NSM)</div>
<ul>
<li>
<p>Run <code>agordejo</code></p>
</li>
<li>
<p>Press the <code>New</code> button, and enter a name for your piece of music.</p>
</li>
<li>
<p>Use the launcher to add <code>patroneo</code> to the session.</p>
</li>
<li>
<p>Add any compatible programs, e.g. synthesizers.</p>
</li>
</ul>
</div>
<div class="paragraph">
<p>Please read README.md for other ways of starting patroneo, which are impractical for actual use but can
be helpful for testing and development.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_help_and_development">4. Help and Development</h2>
<div class="sectionbody">
<div class="paragraph">
<p>You can help Patroneo in several ways: Testing and reporting errors, translating, marketing, support, programming and more.</p>
</div>
<div class="sect2">
<h3 id="_testing_and_reporting_errors">4.1. Testing and Reporting Errors</h3>
<div class="paragraph">
<p>If you find a bug in the program (or it runs too slow) please contact us in a way that suits you best.
We are thankful for any help.</p>
</div>
<div class="ulist">
<div class="title">How to contact us</div>
<ul>
<li>
<p>Report bugs and issues: <a href="https://www.laborejo.org/bugs" class="bare">https://www.laborejo.org/bugs</a></p>
</li>
<li>
<p>Website: <a href="https://www.laborejo.org" class="bare">https://www.laborejo.org</a></p>
</li>
<li>
<p>E-Mail: <a href="mailto:info@laborejo.org">info@laborejo.org</a></p>
</li>
<li>
<p>If you see the opportunity and know that a developer will read it also forums, social media etc..</p>
</li>
</ul>
</div>
</div>
<div class="sect2">
<h3 id="_programming">4.2. Programming</h3>
<div class="paragraph">
<p>If you want to do some programming and don&#8217;t know where to start please get in contact with us directly.
The short version is: clone the git, change the code, create a git patch or point me to your public git.</p>
</div>
</div>
<div class="sect2">
<h3 id="_translations">4.3. Translations</h3>
<div class="paragraph">
<p>Patroneo is very easy to translate with the help of the Qt-Toolchain, without any need for programming.
The easiest way is to contact the developers and they will setup the new language.</p>
</div>
<div class="paragraph">
<p>However, here are the complete instructions for doing a translation completely on your own and integrating it into the program.
The program is split in two parts. A shared "template" between the Laborejo Software Suite and the actual program.</p>
</div>
<div class="paragraph">
<p>The process is the same for both parts, but needs to be done in different directories:
<code>template/qtgui</code> and plain <code>/qtgui</code>, relative to the root directory, where the patroneo executable is.</p>
</div>
<div class="paragraph">
<p>Everytime you see "template/qtgui" below you can substitute that with just "qtgui" to translate the other part of Patroneo.</p>
</div>
<div class="paragraph">
<p>You can add a new language like this:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>Open a terminal and navigate to template/qtgui/resources/translations</p>
</li>
<li>
<p>Edit the file <code>config.pro</code> with a text editor</p>
<div class="ulist">
<ul>
<li>
<p>Append the name of your language in the last line, in the form <code>XY.ts</code>, where XY is the language code.</p>
</li>
<li>
<p>Make sure to leave a space between the individual languages entries.</p>
</li>
</ul>
</div>
</li>
<li>
<p>Run <code>sh update.sh</code> in the same directory</p>
<div class="ulist">
<ul>
<li>
<p>The program has now generated a new <code>.ts</code> file in the same directory.</p>
</li>
</ul>
</div>
</li>
<li>
<p>Start Qt Linguist with <code>linguist-qt5</code> (may be named differently) and open your newly generated file</p>
</li>
<li>
<p>Select your "Target Language" and use the program to create a translation</p>
</li>
<li>
<p>Send us the <code>.ts</code> file, such as by e-mail to <a href="mailto:info@laborejo.org">info@laborejo.org</a></p>
</li>
</ul>
</div>
<div class="paragraph">
<p>You can also incorporate the translation into Patroneo for testing purposes. This requires rudimentary Python knowledge.</p>
</div>
<div class="ulist">
<ul>
<li>
<p>Run the "Release" option in QtLinguists "File" menu. It creates a <code>.qm</code> file in the same directory as your <code>.ts</code> file.</p>
</li>
<li>
<p>Edit <code>template/qtgui/resources/resources.qrc</code> and duplicate the line <code>&lt;file&gt;translations/de.qm&lt;/file&gt;</code> but change it to your new .qm file.</p>
</li>
<li>
<p>run <code>sh buildresources.sh</code></p>
</li>
<li>
<p>Edit <code>engine/config.py</code>: add your language to the line that begins with "supportedLanguages" like this: <code>{"German": "de.qm", "Esperanto: "eo.qm"}</code></p>
<div class="ulist">
<ul>
<li>
<p>To find out your language string (German, Esperanto etc.) open the <code>python3</code> interpreter in a terminal and run the following command:</p>
</li>
<li>
<p><code>from PyQt5 import QtCore;QtCore.QLocale().languageToString(QtCore.QLocale().language())</code></p>
</li>
</ul>
</div>
</li>
</ul>
</div>
<div class="paragraph">
<p>To test the new translation you can either run the program normally, if your system is set to that language. Alternatively start patroneo via the terminal:</p>
</div>
<div class="ulist">
<ul>
<li>
<p><code>LANGUAGE=de_DE.UTF-8 ./patroneo -V --save /dev/null</code></p>
</li>
</ul>
</div>
</div>
</div>
</div>
</div>
<div id="footer">
<div id="footer-text">
Last updated 2022-04-17 21:08:29 +0200
</div>
</div>
</body>
</html>