{"id":16138193,"url":"https://github.com/ul/lightnote","last_synced_at":"2026-03-15T10:00:19.229Z","repository":{"id":146516536,"uuid":"83452966","full_name":"ul/lightnote","owner":"ul","description":"Extempore exercises following https://app.lightnote.co/ course","archived":false,"fork":false,"pushed_at":"2017-08-13T08:09:05.000Z","size":37,"stargazers_count":8,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-03-08T17:08:55.850Z","etag":null,"topics":["extempore","live-coding","livecoding","music"],"latest_commit_sha":null,"homepage":null,"language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ul.png","metadata":{"files":{"readme":"README.html","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-02-28T16:12:06.000Z","updated_at":"2021-09-16T06:10:32.000Z","dependencies_parsed_at":"2023-04-27T07:05:27.481Z","dependency_job_id":null,"html_url":"https://github.com/ul/lightnote","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ul%2Flightnote","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ul%2Flightnote/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ul%2Flightnote/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ul%2Flightnote/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ul","download_url":"https://codeload.github.com/ul/lightnote/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243940101,"owners_count":20372045,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["extempore","live-coding","livecoding","music"],"created_at":"2024-10-09T23:32:49.165Z","updated_at":"2026-03-15T10:00:13.915Z","avatar_url":"https://github.com/ul.png","language":"Shell","readme":"\u003c?xml version=\"1.0\" encoding=\"utf-8\"?\u003e\n\u003c!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\"\n\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\"\u003e\n\u003chtml xmlns=\"http://www.w3.org/1999/xhtml\" lang=\"en\" xml:lang=\"en\"\u003e\n\u003chead\u003e\n\u003c!-- 2017-08-13 Sun 18:06 --\u003e\n\u003cmeta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\" /\u003e\n\u003cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1\" /\u003e\n\u003ctitle\u003e\u003c/title\u003e\n\u003cmeta name=\"generator\" content=\"Org mode\" /\u003e\n\u003cmeta name=\"author\" content=\"Ruslan Prakapchuk\" /\u003e\n\u003cstyle type=\"text/css\"\u003e\n \u003c!--/*--\u003e\u003c![CDATA[/*\u003e\u003c!--*/\n  .title  { text-align: center;\n             margin-bottom: .2em; }\n  .subtitle { text-align: center;\n              font-size: medium;\n              font-weight: bold;\n              margin-top:0; }\n  .todo   { font-family: monospace; color: red; }\n  .done   { font-family: monospace; color: green; }\n  .priority { font-family: monospace; color: orange; }\n  .tag    { background-color: #eee; font-family: monospace;\n            padding: 2px; font-size: 80%; font-weight: normal; }\n  .timestamp { color: #bebebe; }\n  .timestamp-kwd { color: #5f9ea0; }\n  .org-right  { margin-left: auto; margin-right: 0px;  text-align: right; }\n  .org-left   { margin-left: 0px;  margin-right: auto; text-align: left; }\n  .org-center { margin-left: auto; margin-right: auto; text-align: center; }\n  .underline { text-decoration: underline; }\n  #postamble p, #preamble p { font-size: 90%; margin: .2em; }\n  p.verse { margin-left: 3%; }\n  pre {\n    border: 1px solid #ccc;\n    box-shadow: 3px 3px 3px #eee;\n    padding: 8pt;\n    font-family: monospace;\n    overflow: auto;\n    margin: 1.2em;\n  }\n  pre.src {\n    position: relative;\n    overflow: visible;\n    padding-top: 1.2em;\n  }\n  pre.src:before {\n    display: none;\n    position: absolute;\n    background-color: white;\n    top: -10px;\n    right: 10px;\n    padding: 3px;\n    border: 1px solid black;\n  }\n  pre.src:hover:before { display: inline;}\n  /* Languages per Org manual */\n  pre.src-asymptote:before { content: 'Asymptote'; }\n  pre.src-awk:before { content: 'Awk'; }\n  pre.src-C:before { content: 'C'; }\n  /* pre.src-C++ doesn't work in CSS */\n  pre.src-clojure:before { content: 'Clojure'; }\n  pre.src-css:before { content: 'CSS'; }\n  pre.src-D:before { content: 'D'; }\n  pre.src-ditaa:before { content: 'ditaa'; }\n  pre.src-dot:before { content: 'Graphviz'; }\n  pre.src-calc:before { content: 'Emacs Calc'; }\n  pre.src-emacs-lisp:before { content: 'Emacs Lisp'; }\n  pre.src-fortran:before { content: 'Fortran'; }\n  pre.src-gnuplot:before { content: 'gnuplot'; }\n  pre.src-haskell:before { content: 'Haskell'; }\n  pre.src-java:before { content: 'Java'; }\n  pre.src-js:before { content: 'Javascript'; }\n  pre.src-latex:before { content: 'LaTeX'; }\n  pre.src-ledger:before { content: 'Ledger'; }\n  pre.src-lisp:before { content: 'Lisp'; }\n  pre.src-lilypond:before { content: 'Lilypond'; }\n  pre.src-lua:before { content: 'Lua'; }\n  pre.src-matlab:before { content: 'MATLAB'; }\n  pre.src-mscgen:before { content: 'Mscgen'; }\n  pre.src-ocaml:before { content: 'Objective Caml'; }\n  pre.src-octave:before { content: 'Octave'; }\n  pre.src-org:before { content: 'Org mode'; }\n  pre.src-oz:before { content: 'OZ'; }\n  pre.src-plantuml:before { content: 'Plantuml'; }\n  pre.src-processing:before { content: 'Processing.js'; }\n  pre.src-python:before { content: 'Python'; }\n  pre.src-R:before { content: 'R'; }\n  pre.src-ruby:before { content: 'Ruby'; }\n  pre.src-sass:before { content: 'Sass'; }\n  pre.src-scheme:before { content: 'Scheme'; }\n  pre.src-screen:before { content: 'Gnu Screen'; }\n  pre.src-sed:before { content: 'Sed'; }\n  pre.src-sh:before { content: 'shell'; }\n  pre.src-sql:before { content: 'SQL'; }\n  pre.src-sqlite:before { content: 'SQLite'; }\n  /* additional languages in org.el's org-babel-load-languages alist */\n  pre.src-forth:before { content: 'Forth'; }\n  pre.src-io:before { content: 'IO'; }\n  pre.src-J:before { content: 'J'; }\n  pre.src-makefile:before { content: 'Makefile'; }\n  pre.src-maxima:before { content: 'Maxima'; }\n  pre.src-perl:before { content: 'Perl'; }\n  pre.src-picolisp:before { content: 'Pico Lisp'; }\n  pre.src-scala:before { content: 'Scala'; }\n  pre.src-shell:before { content: 'Shell Script'; }\n  pre.src-ebnf2ps:before { content: 'ebfn2ps'; }\n  /* additional language identifiers per \"defun org-babel-execute\"\n       in ob-*.el */\n  pre.src-cpp:before  { content: 'C++'; }\n  pre.src-abc:before  { content: 'ABC'; }\n  pre.src-coq:before  { content: 'Coq'; }\n  pre.src-groovy:before  { content: 'Groovy'; }\n  /* additional language identifiers from org-babel-shell-names in\n     ob-shell.el: ob-shell is the only babel language using a lambda to put\n     the execution function name together. */\n  pre.src-bash:before  { content: 'bash'; }\n  pre.src-csh:before  { content: 'csh'; }\n  pre.src-ash:before  { content: 'ash'; }\n  pre.src-dash:before  { content: 'dash'; }\n  pre.src-ksh:before  { content: 'ksh'; }\n  pre.src-mksh:before  { content: 'mksh'; }\n  pre.src-posh:before  { content: 'posh'; }\n  /* Additional Emacs modes also supported by the LaTeX listings package */\n  pre.src-ada:before { content: 'Ada'; }\n  pre.src-asm:before { content: 'Assembler'; }\n  pre.src-caml:before { content: 'Caml'; }\n  pre.src-delphi:before { content: 'Delphi'; }\n  pre.src-html:before { content: 'HTML'; }\n  pre.src-idl:before { content: 'IDL'; }\n  pre.src-mercury:before { content: 'Mercury'; }\n  pre.src-metapost:before { content: 'MetaPost'; }\n  pre.src-modula-2:before { content: 'Modula-2'; }\n  pre.src-pascal:before { content: 'Pascal'; }\n  pre.src-ps:before { content: 'PostScript'; }\n  pre.src-prolog:before { content: 'Prolog'; }\n  pre.src-simula:before { content: 'Simula'; }\n  pre.src-tcl:before { content: 'tcl'; }\n  pre.src-tex:before { content: 'TeX'; }\n  pre.src-plain-tex:before { content: 'Plain TeX'; }\n  pre.src-verilog:before { content: 'Verilog'; }\n  pre.src-vhdl:before { content: 'VHDL'; }\n  pre.src-xml:before { content: 'XML'; }\n  pre.src-nxml:before { content: 'XML'; }\n  /* add a generic configuration mode; LaTeX export needs an additional\n     (add-to-list 'org-latex-listings-langs '(conf \" \")) in .emacs */\n  pre.src-conf:before { content: 'Configuration File'; }\n\n  table { border-collapse:collapse; }\n  caption.t-above { caption-side: top; }\n  caption.t-bottom { caption-side: bottom; }\n  td, th { vertical-align:top;  }\n  th.org-right  { text-align: center;  }\n  th.org-left   { text-align: center;   }\n  th.org-center { text-align: center; }\n  td.org-right  { text-align: right;  }\n  td.org-left   { text-align: left;   }\n  td.org-center { text-align: center; }\n  dt { font-weight: bold; }\n  .footpara { display: inline; }\n  .footdef  { margin-bottom: 1em; }\n  .figure { padding: 1em; }\n  .figure p { text-align: center; }\n  .inlinetask {\n    padding: 10px;\n    border: 2px solid gray;\n    margin: 10px;\n    background: #ffffcc;\n  }\n  #org-div-home-and-up\n   { text-align: right; font-size: 70%; white-space: nowrap; }\n  textarea { overflow-x: auto; }\n  .linenr { font-size: smaller }\n  .code-highlighted { background-color: #ffff00; }\n  .org-info-js_info-navigation { border-style: none; }\n  #org-info-js_console-label\n    { font-size: 10px; font-weight: bold; white-space: nowrap; }\n  .org-info-js_search-highlight\n    { background-color: #ffff00; color: #000000; font-weight: bold; }\n  .org-svg { width: 90%; }\n  /*]]\u003e*/--\u003e\n\u003c/style\u003e\n\u003cscript type=\"text/javascript\"\u003e\n/*\n@licstart  The following is the entire license notice for the\nJavaScript code in this tag.\n\nCopyright (C) 2012-2017 Free Software Foundation, Inc.\n\nThe JavaScript code in this tag is free software: you can\nredistribute it and/or modify it under the terms of the GNU\nGeneral Public License (GNU GPL) as published by the Free Software\nFoundation, either version 3 of the License, or (at your option)\nany later version.  The code is distributed WITHOUT ANY WARRANTY;\nwithout even the implied warranty of MERCHANTABILITY or FITNESS\nFOR A PARTICULAR PURPOSE.  See the GNU GPL for more details.\n\nAs additional permission under GNU GPL version 3 section 7, you\nmay distribute non-source (e.g., minimized or compacted) forms of\nthat code without the copy of the GNU GPL normally required by\nsection 4, provided you include this license notice and a URL\nthrough which recipients can access the Corresponding Source.\n\n\n@licend  The above is the entire license notice\nfor the JavaScript code in this tag.\n*/\n\u003c!--/*--\u003e\u003c![CDATA[/*\u003e\u003c!--*/\n function CodeHighlightOn(elem, id)\n {\n   var target = document.getElementById(id);\n   if(null != target) {\n     elem.cacheClassElem = elem.className;\n     elem.cacheClassTarget = target.className;\n     target.className = \"code-highlighted\";\n     elem.className   = \"code-highlighted\";\n   }\n }\n function CodeHighlightOff(elem, id)\n {\n   var target = document.getElementById(id);\n   if(elem.cacheClassElem)\n     elem.className = elem.cacheClassElem;\n   if(elem.cacheClassTarget)\n     target.className = elem.cacheClassTarget;\n }\n/*]]\u003e*///--\u003e\n\u003c/script\u003e\n\u003c/head\u003e\n\u003cbody\u003e\n\u003cdiv id=\"content\"\u003e\n\u003cdiv id=\"table-of-contents\"\u003e\n\u003ch2\u003eTable of Contents\u003c/h2\u003e\n\u003cdiv id=\"text-table-of-contents\"\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"#orge5869a2\"\u003e1. WTF?\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#org77f1f9c\"\u003e2. Setup\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#org8daca5f\"\u003e3. The Essential Guide to Music Theory\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"#org119836c\"\u003e3.1. Sound\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"#org778767f\"\u003e3.1.1. Sound\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#orgd65a712\"\u003e3.1.2. Harmony\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#org165287f\"\u003e3.1.3. Intermezzo: \u003ccode\u003eosc_c\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#orged10707\"\u003e3.2. Keys \u0026amp; Scales\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"#org98eb7ba\"\u003e3.2.1. Pentatonic scale\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv id=\"outline-container-orge5869a2\" class=\"outline-2\"\u003e\n\u003ch2 id=\"orge5869a2\"\u003e\u003cspan class=\"section-number-2\"\u003e1\u003c/span\u003e WTF?\u003c/h2\u003e\n\u003cdiv class=\"outline-text-2\" id=\"text-1\"\u003e\n\u003cp\u003e\nLearning \u003ca href=\"https://github.com/digego/extempore\"\u003eExtempore\u003c/a\u003e while following \u003ca href=\"https://www.lightnote.co/course/\"\u003eLightNote\u003c/a\u003e music theory course.\n\u003c/p\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\n\u003cdiv id=\"outline-container-org77f1f9c\" class=\"outline-2\"\u003e\n\u003ch2 id=\"org77f1f9c\"\u003e\u003cspan class=\"section-number-2\"\u003e2\u003c/span\u003e Setup\u003c/h2\u003e\n\u003cdiv class=\"outline-text-2\" id=\"text-2\"\u003e\n\u003cp\u003e\nTo run examples you need Extempore's master branch HEAD compiled. Version 0.7\ndoesn't fit, because Extempore API is undergoing substantial change. Some of\ncode suppose knowledge obtained from \u003ca href=\"http://digego.github.io/extempore/index.html\"\u003eofficial documentation\u003c/a\u003e, especially about\nsetup and language basics.\n\u003c/p\u003e\n\n\u003cp\u003e\nTo follow the course you need access to \u003ca href=\"https://app.lightnote.co/\"\u003eapp,\u003c/a\u003e could be purchased \u003ca href=\"https://www.lightnote.co/course/?ref=sidebarpremium#buy\"\u003ehere.\u003c/a\u003e But\nfollowing course is not required for reading this document, especially if you\nare already familiar with basic music theory and came here for Extempore\nexamples.\n\u003c/p\u003e\n\n\u003cp\u003e\nIf you are proficient with org-mode, you already know how it would best for\nyou to run examples. Otherwise you have two basic options:\n\u003c/p\u003e\n\n\u003col class=\"org-ol\"\u003e\n\u003cli\u003eCopy and paste code to buffer/editor from which you know how to send it to\nExtempore compiler (see \u003ca href=\"http://digego.github.io/extempore/index.html\"\u003edocumentation\u003c/a\u003e). Blocks are enclosed with xml-like\ncomments to help you because GitHub org renderer doesn't do tangling. HTML\nexported version is included in repo (read it \u003ca href=\"http://ul.mantike.pro/lightnote/\"\u003ehere\u003c/a\u003e) for easier following,\nbut it's not guaranteed to be up-to-date.\u003c/li\u003e\n\u003cli\u003eIf you have Emacs installed then run \u003ccode\u003etangle.sh\u003c/code\u003e to produce xtm files and\nrun code from them. Xml-like comments with block names helps here with\nfollowing too. Generated files are included in this repo either, but they\nare not guaranteed to be up-to-date.\u003c/li\u003e\n\u003c/ol\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\n\u003cdiv id=\"outline-container-org8daca5f\" class=\"outline-2\"\u003e\n\u003ch2 id=\"org8daca5f\"\u003e\u003cspan class=\"section-number-2\"\u003e3\u003c/span\u003e The Essential Guide to Music Theory\u003c/h2\u003e\n\u003cdiv class=\"outline-text-2\" id=\"text-3\"\u003e\n\u003c/div\u003e\u003cdiv id=\"outline-container-org119836c\" class=\"outline-3\"\u003e\n\u003ch3 id=\"org119836c\"\u003e\u003cspan class=\"section-number-3\"\u003e3.1\u003c/span\u003e Sound\u003c/h3\u003e\n\u003cdiv class=\"outline-text-3\" id=\"text-3-1\"\u003e\n\u003c/div\u003e\u003cdiv id=\"outline-container-org778767f\" class=\"outline-4\"\u003e\n\u003ch4 id=\"org778767f\"\u003e\u003cspan class=\"section-number-4\"\u003e3.1.1\u003c/span\u003e \u003ca href=\"https://app.lightnote.co/sound\"\u003eSound\u003c/a\u003e\u003c/h4\u003e\n\u003cdiv class=\"outline-text-4\" id=\"text-3-1-1\"\u003e\n\u003cp\u003e\nTo produce sound in Extempore we need to setup xtlang callback:\n\u003c/p\u003e\n\n\u003cdiv class=\"org-src-container\"\u003e\n\u003cpre class=\"src src-extempore\" id=\"org8aa00f3\"\u003e\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;set-dsp\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #707183;\"\u003e(\u003c/span\u003edsp\u003cspan style=\"color: #6434A3;\"\u003e:set!\u003c/span\u003e dsp\u003cspan style=\"color: #707183;\"\u003e)\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;/set-dsp\u0026gt;\u003c/span\u003e\n\u003c/pre\u003e\n\u003c/div\u003e\n\n\u003cdiv class=\"org-src-container\"\u003e\n\u003cpre class=\"src src-extempore\" id=\"orgc38fd13\"\u003e\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;xtm/00-sound-silence.xtm\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #707183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003ebind-func\u003c/span\u003e \u003cspan style=\"color: #006699;\"\u003edsp\u003c/span\u003e\u003cspan style=\"color: #6434A3;\"\u003e:DSP\u003c/span\u003e\n  \u003cspan style=\"color: #7388D6;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elambda\u003c/span\u003e \u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003ein time chan dat\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e\n    \u003cspan style=\"color: #D0372D;\"\u003e0.0\u003c/span\u003e\u003cspan style=\"color: #7388D6;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #707183;\"\u003e)\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;set-dsp\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #707183;\"\u003e(\u003c/span\u003edsp\u003cspan style=\"color: #6434A3;\"\u003e:set!\u003c/span\u003e dsp\u003cspan style=\"color: #707183;\"\u003e)\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;/set-dsp\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;/xtm/00-sound-silence.xtm\u0026gt;\u003c/span\u003e\n\u003c/pre\u003e\n\u003c/div\u003e\n\n\u003cp\u003e\nNote callback signature:\n\u003c/p\u003e\n\n\u003cdl class=\"org-dl\"\u003e\n\u003cdt\u003ein:SAMPLE\u003c/dt\u003e\u003cdd\u003esample from input device\u003c/dd\u003e\n\u003cdt\u003etime:i64\u003c/dt\u003e\u003cdd\u003esample number\u003c/dd\u003e\n\u003cdt\u003echan:i64\u003c/dt\u003e\u003cdd\u003eaudio channel\u003c/dd\u003e\n\u003cdt\u003edat:SAMPLE*\u003c/dt\u003e\u003cdd\u003euser data\u003c/dd\u003e\n\u003cdt\u003e\u0026lt;return\u0026gt;:SAMPLE\u003c/dt\u003e\u003cdd\u003esample at given channel and time\u003c/dd\u003e\n\u003c/dl\u003e\n\n\u003cp\u003e\nsample value varies from -1.0 to 1.0\n\u003c/p\u003e\n\n\u003cp\u003e\nYou can set dsp function once, but then redefine it as many times as your\nwant. Our first attempt produces silence, let's make it more audible:\n\u003c/p\u003e\n\n\u003cdiv class=\"org-src-container\"\u003e\n\u003cpre class=\"src src-extempore\" id=\"orgb3a0774\"\u003e\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;xtm/01-sound-sine.xtm\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #707183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003ebind-func\u003c/span\u003e \u003cspan style=\"color: #006699;\"\u003edsp\u003c/span\u003e\u003cspan style=\"color: #6434A3;\"\u003e:DSP\u003c/span\u003e\n  \u003cspan style=\"color: #7388D6;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elambda\u003c/span\u003e \u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003ein time chan dat\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e\n    \u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elet\u003c/span\u003e \u003cspan style=\"color: #709870;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #907373;\"\u003e(\u003c/span\u003eamplitude \u003cspan style=\"color: #D0372D;\"\u003e0.5\u003c/span\u003e\u003cspan style=\"color: #907373;\"\u003e)\u003c/span\u003e\n          \u003cspan style=\"color: #907373;\"\u003e(\u003c/span\u003efrequency \u003cspan style=\"color: #D0372D;\"\u003e440.0\u003c/span\u003e\u003cspan style=\"color: #907373;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #709870;\"\u003e)\u003c/span\u003e\n      \u003cspan style=\"color: #709870;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003e*\u003c/span\u003e amplitude\n         \u003cspan style=\"color: #907373;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003esin\u003c/span\u003e \u003cspan style=\"color: #6276BA;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003e*\u003c/span\u003e frequency\n                 \u003cspan style=\"color: #858580;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003e/\u003c/span\u003e STWOPI SRf\u003cspan style=\"color: #858580;\"\u003e)\u003c/span\u003e\n                 \u003cspan style=\"color: #858580;\"\u003e(\u003c/span\u003econvert time\u003cspan style=\"color: #858580;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #6276BA;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #907373;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #709870;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #7388D6;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #707183;\"\u003e)\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;set-dsp\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #707183;\"\u003e(\u003c/span\u003edsp\u003cspan style=\"color: #6434A3;\"\u003e:set!\u003c/span\u003e dsp\u003cspan style=\"color: #707183;\"\u003e)\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;/set-dsp\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;/xtm/01-sound-sine.xtm\u0026gt;\u003c/span\u003e\n\u003c/pre\u003e\n\u003c/div\u003e\n\n\u003cp\u003e\n\u003ccode\u003eSTWOPI\u003c/code\u003e is \u003ci\u003e2pi of type SAMPLE\u003c/i\u003e constant, and \u003ccode\u003econvert\u003c/code\u003e allows us to make a\n\u003ccode\u003eSAMPLE\u003c/code\u003e typed value from \u003ccode\u003etime\u003c/code\u003e. \u003ccode\u003eSRf\u003c/code\u003e refers to current sampling frequency.\nExtempore uses symbiosis of two different languages with similar, LISPy,\nsyntax: Scheme and xtlang. Performance-sensitive parts (usually dsp) are\nimplemented in xtlang, and other stuff (usually control) is done in Scheme.\nxtlang is very much like C but with LISP syntax and proper closures.\n\u003c/p\u003e\n\n\u003cp\u003e\nSo far so good, we've obtained a basic form of sound — a sine wave.\nAmplitude, or height of the wave (in case you are following graphics in\ncourse), in our example is half of maximum available. \u003ccode\u003esin\u003c/code\u003e ranges from -1.0\nto 1.0 and we multiply it by 0.5. It affects sound loudness. Try to play with\nit.\n\u003c/p\u003e\n\n\u003cp\u003e\nFrequency, or density of the wave, is perceived as a pitch. Play with it.\n\u003c/p\u003e\n\u003c/div\u003e\n\n\u003col class=\"org-ol\"\u003e\u003cli\u003e\u003ca id=\"orgbd93527\"\u003e\u003c/a\u003eMIDI controller\u003cbr /\u003e\u003cdiv class=\"outline-text-5\" id=\"text-3-1-1-1\"\u003e\n\u003cp\u003e\nWhile the essence of live coding is performance created with code,\ncyber-physical environment incorporates various media. Let's plug MIDI\ncontroller and play with amplitude and frequency using it. For that purpose\nwe are going to load \u003ccode\u003emidi_input\u003c/code\u003e library:\n\u003c/p\u003e\n\n\u003cdiv class=\"org-src-container\"\u003e\n\u003cpre class=\"src src-extempore\" id=\"org8a5d431\"\u003e\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;load-midi-input\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #707183;\"\u003e(\u003c/span\u003esys\u003cspan style=\"color: #6434A3;\"\u003e:load\u003c/span\u003e \u003cspan style=\"color: #008000;\"\u003e\"libs/external/midi_input.xtm\"\u003c/span\u003e\u003cspan style=\"color: #707183;\"\u003e)\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;/load-midi-input\u0026gt;\u003c/span\u003e\n\u003c/pre\u003e\n\u003c/div\u003e\n\n\u003cp\u003e\nIt load a \u003ccode\u003eportmidi\u003c/code\u003e wrapper and tries to connect to the first midi device.\nThe latter fact is important because if you will try to connect to this\ndevice again by \u003ccode\u003e(set_midi_in 0)\u003c/code\u003e you will get unhelpful error message\n\u003ci\u003eInvalid device ID.\u003c/i\u003e\n\u003c/p\u003e\n\n\u003cp\u003e\nLook into console where you are running Extempore. \u003ccode\u003emidi_input\u003c/code\u003e calls\n\u003ccode\u003e(pm_print_devices)\u003c/code\u003e on startup. If you MIDI controller is listed under the\nindex 0 then nothing to do. Otherwise execute (replace \u003cb\u003e3\u003c/b\u003e with required index):\n\u003c/p\u003e\n\n\u003cdiv class=\"org-src-container\"\u003e\n\u003cpre class=\"src src-extempore\" id=\"org86d1f84\"\u003e\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;set-midi-in\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #707183;\"\u003e(\u003c/span\u003eset_midi_in \u003cspan style=\"color: #D0372D;\"\u003e3\u003c/span\u003e\u003cspan style=\"color: #707183;\"\u003e)\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;/set-midi-in\u0026gt;\u003c/span\u003e\n\u003c/pre\u003e\n\u003c/div\u003e\n\n\u003cp\u003e\nTo make our \u003ccode\u003edsp\u003c/code\u003e function controllable outside let's move \u003ccode\u003eamplitude\u003c/code\u003e and\n\u003ccode\u003econtroller\u003c/code\u003e outside of lambda:\n\u003c/p\u003e\n\n\u003cdiv class=\"org-src-container\"\u003e\n\u003cpre class=\"src src-extempore\" id=\"org6fb2524\"\u003e\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;sine-closure-dsp\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #707183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003ebind-func\u003c/span\u003e \u003cspan style=\"color: #006699;\"\u003edsp\u003c/span\u003e\u003cspan style=\"color: #6434A3;\"\u003e:DSP\u003c/span\u003e\n  \u003cspan style=\"color: #7388D6;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elet\u003c/span\u003e \u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #709870;\"\u003e(\u003c/span\u003eamplitude \u003cspan style=\"color: #D0372D;\"\u003e0.5\u003c/span\u003e\u003cspan style=\"color: #709870;\"\u003e)\u003c/span\u003e\n        \u003cspan style=\"color: #709870;\"\u003e(\u003c/span\u003efrequency \u003cspan style=\"color: #D0372D;\"\u003e440.0\u003c/span\u003e\u003cspan style=\"color: #709870;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e\n    \u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elambda\u003c/span\u003e \u003cspan style=\"color: #709870;\"\u003e(\u003c/span\u003ein time chan dat\u003cspan style=\"color: #709870;\"\u003e)\u003c/span\u003e\n        \u003cspan style=\"color: #709870;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003e*\u003c/span\u003e amplitude\n           \u003cspan style=\"color: #907373;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003esin\u003c/span\u003e \u003cspan style=\"color: #6276BA;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003e*\u003c/span\u003e frequency\n                   \u003cspan style=\"color: #858580;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003e/\u003c/span\u003e STWOPI SRf\u003cspan style=\"color: #858580;\"\u003e)\u003c/span\u003e\n                   \u003cspan style=\"color: #858580;\"\u003e(\u003c/span\u003econvert time\u003cspan style=\"color: #858580;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #6276BA;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #907373;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #709870;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #7388D6;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #707183;\"\u003e)\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;/sine-closure-dsp\u0026gt;\u003c/span\u003e\n\u003c/pre\u003e\n\u003c/div\u003e\n\n\u003cp\u003e\nxtlang has a nice feature: closure environment is accessible outside using\ndot-syntax, \u003ccode\u003e(closure.variable:type)\u003c/code\u003e as getter and \u003ccode\u003e(closure.variable:type\n     value)\u003c/code\u003e as setter. This feature is arguable from the point of view of\nfunctional style leaning towards purity and referential transparency, but I\nguess it provides good trade for performance.\n\u003c/p\u003e\n\n\u003cp\u003e\nTo read values from controller we would override \u003ccode\u003emidi_cc\u003c/code\u003e function callback\nprovided by \u003ccode\u003emidi_input\u003c/code\u003e (replace \u003cb\u003e19\u003c/b\u003e and \u003cb\u003e23\u003c/b\u003e with your knobs CCs):\n\u003c/p\u003e\n\n\u003cdiv class=\"org-src-container\"\u003e\n\u003cpre class=\"src src-extempore\" id=\"orgff9792b\"\u003e\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;sine-midi-cc\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #707183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003ebind-func\u003c/span\u003e \u003cspan style=\"color: #006699;\"\u003emidi_cc\u003c/span\u003e\n  \u003cspan style=\"color: #7388D6;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elambda\u003c/span\u003e \u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003etimestamp\u003cspan style=\"color: #6434A3;\"\u003e:i32\u003c/span\u003e controller\u003cspan style=\"color: #6434A3;\"\u003e:i32\u003c/span\u003e value\u003cspan style=\"color: #6434A3;\"\u003e:i32\u003c/span\u003e chan\u003cspan style=\"color: #6434A3;\"\u003e:i32\u003c/span\u003e\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e\n    \u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003eprintln\u003c/span\u003e \u003cspan style=\"color: #008000;\"\u003e\"MIDI CC\"\u003c/span\u003e controller value\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e\n    \u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003econd\u003c/span\u003e \u003cspan style=\"color: #709870;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #907373;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003e=\u003c/span\u003e controller \u003cspan style=\"color: #D0372D;\"\u003e19\u003c/span\u003e\u003cspan style=\"color: #907373;\"\u003e)\u003c/span\u003e \u003cspan style=\"color: #907373;\"\u003e(\u003c/span\u003edsp.amplitude\u003cspan style=\"color: #6434A3;\"\u003e:SAMPLE\u003c/span\u003e \u003cspan style=\"color: #6276BA;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003e/\u003c/span\u003e \u003cspan style=\"color: #858580;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003econvert\u003c/span\u003e value\u003cspan style=\"color: #858580;\"\u003e)\u003c/span\u003e \u003cspan style=\"color: #D0372D;\"\u003e127.\u003c/span\u003e\u003cspan style=\"color: #6276BA;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #907373;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #709870;\"\u003e)\u003c/span\u003e\n          \u003cspan style=\"color: #709870;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #907373;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003e=\u003c/span\u003e controller \u003cspan style=\"color: #D0372D;\"\u003e23\u003c/span\u003e\u003cspan style=\"color: #907373;\"\u003e)\u003c/span\u003e \u003cspan style=\"color: #907373;\"\u003e(\u003c/span\u003edsp.frequency\u003cspan style=\"color: #6434A3;\"\u003e:SAMPLE\u003c/span\u003e \u003cspan style=\"color: #6276BA;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003e*\u003c/span\u003e \u003cspan style=\"color: #858580;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003econvert\u003c/span\u003e value\u003cspan style=\"color: #858580;\"\u003e)\u003c/span\u003e \u003cspan style=\"color: #D0372D;\"\u003e10.\u003c/span\u003e\u003cspan style=\"color: #6276BA;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #907373;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #709870;\"\u003e)\u003c/span\u003e\n          \u003cspan style=\"color: #709870;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003eelse\u003c/span\u003e \u003cspan style=\"color: #D0372D;\"\u003e0.0:f\u003c/span\u003e\u003cspan style=\"color: #709870;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e\n    \u003cspan style=\"color: #006699;\"\u003evoid\u003c/span\u003e\u003cspan style=\"color: #7388D6;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #707183;\"\u003e)\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;/sine-midi-cc\u0026gt;\u003c/span\u003e\n\u003c/pre\u003e\n\u003c/div\u003e\n\n\u003cp\u003e\nIf you execute snippets one-by-one then you should have response already.\nOtherwise here is entire file:\n\u003c/p\u003e\n\n\u003cdiv class=\"org-src-container\"\u003e\n\u003cpre class=\"src src-extempore\" id=\"orgd8dbdc6\"\u003e\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;xtm/02-sound-sine-midi.xtm\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;load-midi-input\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #707183;\"\u003e(\u003c/span\u003esys\u003cspan style=\"color: #6434A3;\"\u003e:load\u003c/span\u003e \u003cspan style=\"color: #008000;\"\u003e\"libs/external/midi_input.xtm\"\u003c/span\u003e\u003cspan style=\"color: #707183;\"\u003e)\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;/load-midi-input\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;sine-closure-dsp\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #707183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003ebind-func\u003c/span\u003e \u003cspan style=\"color: #006699;\"\u003edsp\u003c/span\u003e\u003cspan style=\"color: #6434A3;\"\u003e:DSP\u003c/span\u003e\n  \u003cspan style=\"color: #7388D6;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elet\u003c/span\u003e \u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #709870;\"\u003e(\u003c/span\u003eamplitude \u003cspan style=\"color: #D0372D;\"\u003e0.5\u003c/span\u003e\u003cspan style=\"color: #709870;\"\u003e)\u003c/span\u003e\n        \u003cspan style=\"color: #709870;\"\u003e(\u003c/span\u003efrequency \u003cspan style=\"color: #D0372D;\"\u003e440.0\u003c/span\u003e\u003cspan style=\"color: #709870;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e\n    \u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elambda\u003c/span\u003e \u003cspan style=\"color: #709870;\"\u003e(\u003c/span\u003ein time chan dat\u003cspan style=\"color: #709870;\"\u003e)\u003c/span\u003e\n        \u003cspan style=\"color: #709870;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003e*\u003c/span\u003e amplitude\n           \u003cspan style=\"color: #907373;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003esin\u003c/span\u003e \u003cspan style=\"color: #6276BA;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003e*\u003c/span\u003e frequency\n                   \u003cspan style=\"color: #858580;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003e/\u003c/span\u003e STWOPI SRf\u003cspan style=\"color: #858580;\"\u003e)\u003c/span\u003e\n                   \u003cspan style=\"color: #858580;\"\u003e(\u003c/span\u003econvert time\u003cspan style=\"color: #858580;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #6276BA;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #907373;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #709870;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #7388D6;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #707183;\"\u003e)\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;/sine-closure-dsp\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;set-dsp\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #707183;\"\u003e(\u003c/span\u003edsp\u003cspan style=\"color: #6434A3;\"\u003e:set!\u003c/span\u003e dsp\u003cspan style=\"color: #707183;\"\u003e)\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;/set-dsp\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e;; \u0026lt;set-midi-in\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e(set_midi_in 3)\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e;; \u0026lt;/set-midi-in\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;sine-midi-cc\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #707183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003ebind-func\u003c/span\u003e \u003cspan style=\"color: #006699;\"\u003emidi_cc\u003c/span\u003e\n  \u003cspan style=\"color: #7388D6;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elambda\u003c/span\u003e \u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003etimestamp\u003cspan style=\"color: #6434A3;\"\u003e:i32\u003c/span\u003e controller\u003cspan style=\"color: #6434A3;\"\u003e:i32\u003c/span\u003e value\u003cspan style=\"color: #6434A3;\"\u003e:i32\u003c/span\u003e chan\u003cspan style=\"color: #6434A3;\"\u003e:i32\u003c/span\u003e\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e\n    \u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003eprintln\u003c/span\u003e \u003cspan style=\"color: #008000;\"\u003e\"MIDI CC\"\u003c/span\u003e controller value\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e\n    \u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003econd\u003c/span\u003e \u003cspan style=\"color: #709870;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #907373;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003e=\u003c/span\u003e controller \u003cspan style=\"color: #D0372D;\"\u003e19\u003c/span\u003e\u003cspan style=\"color: #907373;\"\u003e)\u003c/span\u003e \u003cspan style=\"color: #907373;\"\u003e(\u003c/span\u003edsp.amplitude\u003cspan style=\"color: #6434A3;\"\u003e:SAMPLE\u003c/span\u003e \u003cspan style=\"color: #6276BA;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003e/\u003c/span\u003e \u003cspan style=\"color: #858580;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003econvert\u003c/span\u003e value\u003cspan style=\"color: #858580;\"\u003e)\u003c/span\u003e \u003cspan style=\"color: #D0372D;\"\u003e127.\u003c/span\u003e\u003cspan style=\"color: #6276BA;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #907373;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #709870;\"\u003e)\u003c/span\u003e\n          \u003cspan style=\"color: #709870;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #907373;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003e=\u003c/span\u003e controller \u003cspan style=\"color: #D0372D;\"\u003e23\u003c/span\u003e\u003cspan style=\"color: #907373;\"\u003e)\u003c/span\u003e \u003cspan style=\"color: #907373;\"\u003e(\u003c/span\u003edsp.frequency\u003cspan style=\"color: #6434A3;\"\u003e:SAMPLE\u003c/span\u003e \u003cspan style=\"color: #6276BA;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003e*\u003c/span\u003e \u003cspan style=\"color: #858580;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003econvert\u003c/span\u003e value\u003cspan style=\"color: #858580;\"\u003e)\u003c/span\u003e \u003cspan style=\"color: #D0372D;\"\u003e10.\u003c/span\u003e\u003cspan style=\"color: #6276BA;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #907373;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #709870;\"\u003e)\u003c/span\u003e\n          \u003cspan style=\"color: #709870;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003eelse\u003c/span\u003e \u003cspan style=\"color: #D0372D;\"\u003e0.0:f\u003c/span\u003e\u003cspan style=\"color: #709870;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e\n    \u003cspan style=\"color: #006699;\"\u003evoid\u003c/span\u003e\u003cspan style=\"color: #7388D6;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #707183;\"\u003e)\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;/sine-midi-cc\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;/xtm/02-sound-sine-midi.xtm\u0026gt;\u003c/span\u003e\n\u003c/pre\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003c/li\u003e\u003c/ol\u003e\n\u003c/div\u003e\n\n\u003cdiv id=\"outline-container-orgd65a712\" class=\"outline-4\"\u003e\n\u003ch4 id=\"orgd65a712\"\u003e\u003cspan class=\"section-number-4\"\u003e3.1.2\u003c/span\u003e \u003ca href=\"https://app.lightnote.co/harmony\"\u003eHarmony\u003c/a\u003e\u003c/h4\u003e\n\u003cdiv class=\"outline-text-4\" id=\"text-3-1-2\"\u003e\n\u003cp\u003e\nThis section involves playing notes, to ease tinkering with them let's\nintroduce instruments. Extempore instrument is essentially a pair of\nfunctions which knows how to render note of the given frequency and\namplitude. Let's call our first intrument just a \u003ccode\u003etuner\u003c/code\u003e, because it doesn't\ncare about shape of the note of any sound effects, it just tries to play a\nplain sine wave for us. First function is \u003ccode\u003etuner_note\u003c/code\u003e and\nconvert note data to sample. Second function is \u003ccode\u003etuner_fx\u003c/code\u003e which adds\nadditional processing to the sound (none in our case).\n\u003c/p\u003e\n\n\u003cp\u003e\nLet's load instrument library:\n\u003c/p\u003e\n\n\u003cdiv class=\"org-src-container\"\u003e\n\u003cpre class=\"src src-extempore\" id=\"org93ae2b6\"\u003e\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;load-instruments\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #707183;\"\u003e(\u003c/span\u003esys\u003cspan style=\"color: #6434A3;\"\u003e:load\u003c/span\u003e \u003cspan style=\"color: #008000;\"\u003e\"libs/core/instruments.xtm\"\u003c/span\u003e\u003cspan style=\"color: #707183;\"\u003e)\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;/load-instruments\u0026gt;\u003c/span\u003e\n\u003c/pre\u003e\n\u003c/div\u003e\n\n\u003cp\u003e\nAnd define helpers for generating sine wave:\n\u003c/p\u003e\n\n\u003cdiv class=\"org-src-container\"\u003e\n\u003cpre class=\"src src-extempore\" id=\"orgc153215\"\u003e\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;define-sine\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #707183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003ebind-val\u003c/span\u003e \u003cspan style=\"color: #006699;\"\u003eomega\u003c/span\u003e \u003cspan style=\"color: #6434A3;\"\u003eSAMPLE\u003c/span\u003e \u003cspan style=\"color: #7388D6;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003e/\u003c/span\u003e STWOPI SRf\u003cspan style=\"color: #7388D6;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #707183;\"\u003e)\u003c/span\u003e\n\n\u003cspan style=\"color: #707183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003ebind-func\u003c/span\u003e \u003cspan style=\"color: #006699;\"\u003esine\u003c/span\u003e\n  \u003cspan style=\"color: #7388D6;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elambda\u003c/span\u003e \u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003etime\u003cspan style=\"color: #6434A3;\"\u003e:i64\u003c/span\u003e freq\u003cspan style=\"color: #6434A3;\"\u003e:SAMPLE\u003c/span\u003e\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e\n    \u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003esin\u003c/span\u003e \u003cspan style=\"color: #709870;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003e*\u003c/span\u003e omega freq \u003cspan style=\"color: #907373;\"\u003e(\u003c/span\u003econvert time\u003cspan style=\"color: #907373;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #709870;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #7388D6;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #707183;\"\u003e)\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;/define-sine\u0026gt;\u003c/span\u003e\n\u003c/pre\u003e\n\u003c/div\u003e\n\n\u003cp\u003e\nAlternatively, you can use Extempore's built-in \u003ccode\u003eosc_c\u003c/code\u003e generator which\ncloses over phase by itself and don't require passing down the time.\n\u003c/p\u003e\n\n\u003cp\u003e\n\u003ccode\u003etuner_note\u003c/code\u003e would be a quite straightforward, very similar to \u003ccode\u003edsp\u003c/code\u003e\nfunction from previous chapter, but wrapped in several lambdas to provide\ninitialization and context for several layers: instrument instance, note\ninstance and calculating note's samples.\n\u003c/p\u003e\n\n\u003cdiv class=\"org-src-container\"\u003e\n\u003cpre class=\"src src-extempore\" id=\"org44c2378\"\u003e\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;tuner-note\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #707183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003ebind-func\u003c/span\u003e \u003cspan style=\"color: #006699;\"\u003etuner_note\u003c/span\u003e\n  \u003cspan style=\"color: #7388D6;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elambda\u003c/span\u003e \u003cspan style=\"color: #909183;\"\u003e()\u003c/span\u003e\n    \u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003ehere you can put init of entire instrument\u003c/span\u003e\n    \u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elambda\u003c/span\u003e \u003cspan style=\"color: #709870;\"\u003e(\u003c/span\u003edata\u003cspan style=\"color: #6434A3;\"\u003e:NoteData*\u003c/span\u003e nargs\u003cspan style=\"color: #6434A3;\"\u003e:i64\u003c/span\u003e dargs\u003cspan style=\"color: #6434A3;\"\u003e:SAMPLE*\u003c/span\u003e\u003cspan style=\"color: #709870;\"\u003e)\u003c/span\u003e\n      \u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003ehere init of certain note\u003c/span\u003e\n      \u003cspan style=\"color: #709870;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elet\u003c/span\u003e \u003cspan style=\"color: #907373;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #6276BA;\"\u003e(\u003c/span\u003efrequency \u003cspan style=\"color: #858580;\"\u003e(\u003c/span\u003enote_frequency data\u003cspan style=\"color: #858580;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #6276BA;\"\u003e)\u003c/span\u003e\n            \u003cspan style=\"color: #6276BA;\"\u003e(\u003c/span\u003eamplitude \u003cspan style=\"color: #858580;\"\u003e(\u003c/span\u003enote_amplitude data\u003cspan style=\"color: #858580;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #6276BA;\"\u003e)\u003c/span\u003e\n            \u003cspan style=\"color: #6276BA;\"\u003e(\u003c/span\u003estarttime \u003cspan style=\"color: #858580;\"\u003e(\u003c/span\u003enote_starttime data\u003cspan style=\"color: #858580;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #6276BA;\"\u003e)\u003c/span\u003e\n            \u003cspan style=\"color: #6276BA;\"\u003e(\u003c/span\u003eduration \u003cspan style=\"color: #858580;\"\u003e(\u003c/span\u003enote_duration data\u003cspan style=\"color: #858580;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #6276BA;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #907373;\"\u003e)\u003c/span\u003e\n        \u003cspan style=\"color: #907373;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elambda\u003c/span\u003e \u003cspan style=\"color: #6276BA;\"\u003e(\u003c/span\u003etime\u003cspan style=\"color: #6434A3;\"\u003e:i64\u003c/span\u003e chan\u003cspan style=\"color: #6434A3;\"\u003e:i64\u003c/span\u003e\u003cspan style=\"color: #6276BA;\"\u003e)\u003c/span\u003e\n          \u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003ehere we produce samples for this note\u003c/span\u003e\n          \u003cspan style=\"color: #6276BA;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003eif\u003c/span\u003e \u003cspan style=\"color: #858580;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003e\u0026lt;\u003c/span\u003e \u003cspan style=\"color: #80A880;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003e-\u003c/span\u003e time starttime\u003cspan style=\"color: #80A880;\"\u003e)\u003c/span\u003e duration\u003cspan style=\"color: #858580;\"\u003e)\u003c/span\u003e\n              \u003cspan style=\"color: #858580;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003e*\u003c/span\u003e amplitude \u003cspan style=\"color: #80A880;\"\u003e(\u003c/span\u003esine time frequency\u003cspan style=\"color: #80A880;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #858580;\"\u003e)\u003c/span\u003e\n              \u003cspan style=\"color: #D0372D;\"\u003e0.0\u003c/span\u003e\u003cspan style=\"color: #6276BA;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #907373;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #709870;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #7388D6;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #707183;\"\u003e)\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;/tuner-note\u0026gt;\u003c/span\u003e\n\u003c/pre\u003e\n\u003c/div\u003e\n\n\u003cp\u003e\n\u003ccode\u003etuner_fx\u003c/code\u003e is even easier, because we just pass \u003ccode\u003etuner_note\u003c/code\u003e result without\nany change:\n\u003c/p\u003e\n\n\u003cdiv class=\"org-src-container\"\u003e\n\u003cpre class=\"src src-extempore\" id=\"org94206de\"\u003e\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;tuner-fx\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #707183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003ebind-func\u003c/span\u003e \u003cspan style=\"color: #006699;\"\u003etuner_fx\u003c/span\u003e\n  \u003cspan style=\"color: #7388D6;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elambda\u003c/span\u003e \u003cspan style=\"color: #909183;\"\u003e()\u003c/span\u003e\n    \u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003ehere put fx init\u003c/span\u003e\n    \u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elambda\u003c/span\u003e \u003cspan style=\"color: #709870;\"\u003e(\u003c/span\u003ein\u003cspan style=\"color: #6434A3;\"\u003e:SAMPLE\u003c/span\u003e time\u003cspan style=\"color: #6434A3;\"\u003e:i64\u003c/span\u003e chan\u003cspan style=\"color: #6434A3;\"\u003e:i64\u003c/span\u003e dat\u003cspan style=\"color: #6434A3;\"\u003e:SAMPLE*\u003c/span\u003e\u003cspan style=\"color: #709870;\"\u003e)\u003c/span\u003e\n      in\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #7388D6;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #707183;\"\u003e)\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;/tuner-fx\u0026gt;\u003c/span\u003e\n\u003c/pre\u003e\n\u003c/div\u003e\n\n\u003cp\u003e\n\u003ccode\u003emake-instrument\u003c/code\u003e macro allows to glue it together:\n\u003c/p\u003e\n\n\u003cdiv class=\"org-src-container\"\u003e\n\u003cpre class=\"src src-extempore\" id=\"orgb2b81ac\"\u003e\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;make-tuner\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #707183;\"\u003e(\u003c/span\u003emake-instrument tuner tuner\u003cspan style=\"color: #707183;\"\u003e)\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;/make-tuner\u0026gt;\u003c/span\u003e\n\u003c/pre\u003e\n\u003c/div\u003e\n\n\u003cp\u003e\nThe first \u003ccode\u003etuner\u003c/code\u003e is the name of our instrument, and the second one is\nfunction name prefix. Extempore than will glue \u003ccode\u003etuner_note\u003c/code\u003e and \u003ccode\u003etuner_fx\u003c/code\u003e\nfunctions. Beware not to make a typo in function names, because otherwise\nsegmentation fault is more than probable. Extempore will warn new that\nfunctino is not found, but then will say that new instrument is bound anyway\nand then will crash trying to play it.\n\u003c/p\u003e\n\n\u003cp\u003e\nNext step is to use our brand new instrument in dsp function:\n\u003c/p\u003e\n\n\u003cdiv class=\"org-src-container\"\u003e\n\u003cpre class=\"src src-extempore\" id=\"orga4c98db\"\u003e\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;tuner-dsp\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #707183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003ebind-func\u003c/span\u003e \u003cspan style=\"color: #006699;\"\u003edsp\u003c/span\u003e\u003cspan style=\"color: #6434A3;\"\u003e:DSP\u003c/span\u003e\n  \u003cspan style=\"color: #7388D6;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elambda\u003c/span\u003e \u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003ein time chan dat\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e\n    \u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003etuner in time chan dat\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #7388D6;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #707183;\"\u003e)\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;/tuner-dsp\u0026gt;\u003c/span\u003e\n\u003c/pre\u003e\n\u003c/div\u003e\n\n\u003cp\u003e\nOkay, instrument is set up, let's play a note finally!\n\u003c/p\u003e\n\n\u003cdiv class=\"org-src-container\"\u003e\n\u003cpre class=\"src src-extempore\" id=\"orgbe3851f\"\u003e\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;play-note-now\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #707183;\"\u003e(\u003c/span\u003eplay-note \u003cspan style=\"color: #7388D6;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003enow\u003c/span\u003e\u003cspan style=\"color: #7388D6;\"\u003e)\u003c/span\u003e tuner \u003cspan style=\"color: #D0372D;\"\u003e60\u003c/span\u003e \u003cspan style=\"color: #D0372D;\"\u003e90\u003c/span\u003e \u003cspan style=\"color: #D0372D;\"\u003e44100\u003c/span\u003e\u003cspan style=\"color: #707183;\"\u003e)\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;/play-note-now\u0026gt;\u003c/span\u003e\n\u003c/pre\u003e\n\u003c/div\u003e\n\n\u003cp\u003e\nWow! That's magic. Here is complete file for instrument and one note. Sip\nyour coffee, we'll move to \u003ccode\u003eplay-note\u003c/code\u003e signature explanation and playing harmony then.\n\u003c/p\u003e\n\n\u003cdiv class=\"org-src-container\"\u003e\n\u003cpre class=\"src src-extempore\" id=\"orgdc49e47\"\u003e\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;setup-tuner\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;load-instruments\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #707183;\"\u003e(\u003c/span\u003esys\u003cspan style=\"color: #6434A3;\"\u003e:load\u003c/span\u003e \u003cspan style=\"color: #008000;\"\u003e\"libs/core/instruments.xtm\"\u003c/span\u003e\u003cspan style=\"color: #707183;\"\u003e)\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;/load-instruments\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;define-sine\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #707183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003ebind-val\u003c/span\u003e \u003cspan style=\"color: #006699;\"\u003eomega\u003c/span\u003e \u003cspan style=\"color: #6434A3;\"\u003eSAMPLE\u003c/span\u003e \u003cspan style=\"color: #7388D6;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003e/\u003c/span\u003e STWOPI SRf\u003cspan style=\"color: #7388D6;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #707183;\"\u003e)\u003c/span\u003e\n\n\u003cspan style=\"color: #707183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003ebind-func\u003c/span\u003e \u003cspan style=\"color: #006699;\"\u003esine\u003c/span\u003e\n  \u003cspan style=\"color: #7388D6;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elambda\u003c/span\u003e \u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003etime\u003cspan style=\"color: #6434A3;\"\u003e:i64\u003c/span\u003e freq\u003cspan style=\"color: #6434A3;\"\u003e:SAMPLE\u003c/span\u003e\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e\n    \u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003esin\u003c/span\u003e \u003cspan style=\"color: #709870;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003e*\u003c/span\u003e omega freq \u003cspan style=\"color: #907373;\"\u003e(\u003c/span\u003econvert time\u003cspan style=\"color: #907373;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #709870;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #7388D6;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #707183;\"\u003e)\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;/define-sine\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;tuner-note\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #707183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003ebind-func\u003c/span\u003e \u003cspan style=\"color: #006699;\"\u003etuner_note\u003c/span\u003e\n  \u003cspan style=\"color: #7388D6;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elambda\u003c/span\u003e \u003cspan style=\"color: #909183;\"\u003e()\u003c/span\u003e\n    \u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003ehere you can put init of entire instrument\u003c/span\u003e\n    \u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elambda\u003c/span\u003e \u003cspan style=\"color: #709870;\"\u003e(\u003c/span\u003edata\u003cspan style=\"color: #6434A3;\"\u003e:NoteData*\u003c/span\u003e nargs\u003cspan style=\"color: #6434A3;\"\u003e:i64\u003c/span\u003e dargs\u003cspan style=\"color: #6434A3;\"\u003e:SAMPLE*\u003c/span\u003e\u003cspan style=\"color: #709870;\"\u003e)\u003c/span\u003e\n      \u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003ehere init of certain note\u003c/span\u003e\n      \u003cspan style=\"color: #709870;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elet\u003c/span\u003e \u003cspan style=\"color: #907373;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #6276BA;\"\u003e(\u003c/span\u003efrequency \u003cspan style=\"color: #858580;\"\u003e(\u003c/span\u003enote_frequency data\u003cspan style=\"color: #858580;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #6276BA;\"\u003e)\u003c/span\u003e\n            \u003cspan style=\"color: #6276BA;\"\u003e(\u003c/span\u003eamplitude \u003cspan style=\"color: #858580;\"\u003e(\u003c/span\u003enote_amplitude data\u003cspan style=\"color: #858580;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #6276BA;\"\u003e)\u003c/span\u003e\n            \u003cspan style=\"color: #6276BA;\"\u003e(\u003c/span\u003estarttime \u003cspan style=\"color: #858580;\"\u003e(\u003c/span\u003enote_starttime data\u003cspan style=\"color: #858580;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #6276BA;\"\u003e)\u003c/span\u003e\n            \u003cspan style=\"color: #6276BA;\"\u003e(\u003c/span\u003eduration \u003cspan style=\"color: #858580;\"\u003e(\u003c/span\u003enote_duration data\u003cspan style=\"color: #858580;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #6276BA;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #907373;\"\u003e)\u003c/span\u003e\n        \u003cspan style=\"color: #907373;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elambda\u003c/span\u003e \u003cspan style=\"color: #6276BA;\"\u003e(\u003c/span\u003etime\u003cspan style=\"color: #6434A3;\"\u003e:i64\u003c/span\u003e chan\u003cspan style=\"color: #6434A3;\"\u003e:i64\u003c/span\u003e\u003cspan style=\"color: #6276BA;\"\u003e)\u003c/span\u003e\n          \u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003ehere we produce samples for this note\u003c/span\u003e\n          \u003cspan style=\"color: #6276BA;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003eif\u003c/span\u003e \u003cspan style=\"color: #858580;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003e\u0026lt;\u003c/span\u003e \u003cspan style=\"color: #80A880;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003e-\u003c/span\u003e time starttime\u003cspan style=\"color: #80A880;\"\u003e)\u003c/span\u003e duration\u003cspan style=\"color: #858580;\"\u003e)\u003c/span\u003e\n              \u003cspan style=\"color: #858580;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003e*\u003c/span\u003e amplitude \u003cspan style=\"color: #80A880;\"\u003e(\u003c/span\u003esine time frequency\u003cspan style=\"color: #80A880;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #858580;\"\u003e)\u003c/span\u003e\n              \u003cspan style=\"color: #D0372D;\"\u003e0.0\u003c/span\u003e\u003cspan style=\"color: #6276BA;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #907373;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #709870;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #7388D6;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #707183;\"\u003e)\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;/tuner-note\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;tuner-fx\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #707183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003ebind-func\u003c/span\u003e \u003cspan style=\"color: #006699;\"\u003etuner_fx\u003c/span\u003e\n  \u003cspan style=\"color: #7388D6;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elambda\u003c/span\u003e \u003cspan style=\"color: #909183;\"\u003e()\u003c/span\u003e\n    \u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003ehere put fx init\u003c/span\u003e\n    \u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elambda\u003c/span\u003e \u003cspan style=\"color: #709870;\"\u003e(\u003c/span\u003ein\u003cspan style=\"color: #6434A3;\"\u003e:SAMPLE\u003c/span\u003e time\u003cspan style=\"color: #6434A3;\"\u003e:i64\u003c/span\u003e chan\u003cspan style=\"color: #6434A3;\"\u003e:i64\u003c/span\u003e dat\u003cspan style=\"color: #6434A3;\"\u003e:SAMPLE*\u003c/span\u003e\u003cspan style=\"color: #709870;\"\u003e)\u003c/span\u003e\n      in\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #7388D6;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #707183;\"\u003e)\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;/tuner-fx\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;make-tuner\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #707183;\"\u003e(\u003c/span\u003emake-instrument tuner tuner\u003cspan style=\"color: #707183;\"\u003e)\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;/make-tuner\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;tuner-dsp\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #707183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003ebind-func\u003c/span\u003e \u003cspan style=\"color: #006699;\"\u003edsp\u003c/span\u003e\u003cspan style=\"color: #6434A3;\"\u003e:DSP\u003c/span\u003e\n  \u003cspan style=\"color: #7388D6;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elambda\u003c/span\u003e \u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003ein time chan dat\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e\n    \u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003etuner in time chan dat\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #7388D6;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #707183;\"\u003e)\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;/tuner-dsp\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;set-dsp\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #707183;\"\u003e(\u003c/span\u003edsp\u003cspan style=\"color: #6434A3;\"\u003e:set!\u003c/span\u003e dsp\u003cspan style=\"color: #707183;\"\u003e)\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;/set-dsp\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;/setup-tuner\u0026gt;\u003c/span\u003e\n\u003c/pre\u003e\n\u003c/div\u003e\n\n\u003cdiv class=\"org-src-container\"\u003e\n\u003cpre class=\"src src-extempore\" id=\"org0e7e700\"\u003e\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;xtm/03-harmony-tuner.xtm\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;setup-tuner\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;load-instruments\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #707183;\"\u003e(\u003c/span\u003esys\u003cspan style=\"color: #6434A3;\"\u003e:load\u003c/span\u003e \u003cspan style=\"color: #008000;\"\u003e\"libs/core/instruments.xtm\"\u003c/span\u003e\u003cspan style=\"color: #707183;\"\u003e)\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;/load-instruments\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;define-sine\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #707183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003ebind-val\u003c/span\u003e \u003cspan style=\"color: #006699;\"\u003eomega\u003c/span\u003e \u003cspan style=\"color: #6434A3;\"\u003eSAMPLE\u003c/span\u003e \u003cspan style=\"color: #7388D6;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003e/\u003c/span\u003e STWOPI SRf\u003cspan style=\"color: #7388D6;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #707183;\"\u003e)\u003c/span\u003e\n\n\u003cspan style=\"color: #707183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003ebind-func\u003c/span\u003e \u003cspan style=\"color: #006699;\"\u003esine\u003c/span\u003e\n  \u003cspan style=\"color: #7388D6;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elambda\u003c/span\u003e \u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003etime\u003cspan style=\"color: #6434A3;\"\u003e:i64\u003c/span\u003e freq\u003cspan style=\"color: #6434A3;\"\u003e:SAMPLE\u003c/span\u003e\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e\n    \u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003esin\u003c/span\u003e \u003cspan style=\"color: #709870;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003e*\u003c/span\u003e omega freq \u003cspan style=\"color: #907373;\"\u003e(\u003c/span\u003econvert time\u003cspan style=\"color: #907373;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #709870;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #7388D6;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #707183;\"\u003e)\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;/define-sine\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;tuner-note\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #707183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003ebind-func\u003c/span\u003e \u003cspan style=\"color: #006699;\"\u003etuner_note\u003c/span\u003e\n  \u003cspan style=\"color: #7388D6;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elambda\u003c/span\u003e \u003cspan style=\"color: #909183;\"\u003e()\u003c/span\u003e\n    \u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003ehere you can put init of entire instrument\u003c/span\u003e\n    \u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elambda\u003c/span\u003e \u003cspan style=\"color: #709870;\"\u003e(\u003c/span\u003edata\u003cspan style=\"color: #6434A3;\"\u003e:NoteData*\u003c/span\u003e nargs\u003cspan style=\"color: #6434A3;\"\u003e:i64\u003c/span\u003e dargs\u003cspan style=\"color: #6434A3;\"\u003e:SAMPLE*\u003c/span\u003e\u003cspan style=\"color: #709870;\"\u003e)\u003c/span\u003e\n      \u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003ehere init of certain note\u003c/span\u003e\n      \u003cspan style=\"color: #709870;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elet\u003c/span\u003e \u003cspan style=\"color: #907373;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #6276BA;\"\u003e(\u003c/span\u003efrequency \u003cspan style=\"color: #858580;\"\u003e(\u003c/span\u003enote_frequency data\u003cspan style=\"color: #858580;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #6276BA;\"\u003e)\u003c/span\u003e\n            \u003cspan style=\"color: #6276BA;\"\u003e(\u003c/span\u003eamplitude \u003cspan style=\"color: #858580;\"\u003e(\u003c/span\u003enote_amplitude data\u003cspan style=\"color: #858580;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #6276BA;\"\u003e)\u003c/span\u003e\n            \u003cspan style=\"color: #6276BA;\"\u003e(\u003c/span\u003estarttime \u003cspan style=\"color: #858580;\"\u003e(\u003c/span\u003enote_starttime data\u003cspan style=\"color: #858580;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #6276BA;\"\u003e)\u003c/span\u003e\n            \u003cspan style=\"color: #6276BA;\"\u003e(\u003c/span\u003eduration \u003cspan style=\"color: #858580;\"\u003e(\u003c/span\u003enote_duration data\u003cspan style=\"color: #858580;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #6276BA;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #907373;\"\u003e)\u003c/span\u003e\n        \u003cspan style=\"color: #907373;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elambda\u003c/span\u003e \u003cspan style=\"color: #6276BA;\"\u003e(\u003c/span\u003etime\u003cspan style=\"color: #6434A3;\"\u003e:i64\u003c/span\u003e chan\u003cspan style=\"color: #6434A3;\"\u003e:i64\u003c/span\u003e\u003cspan style=\"color: #6276BA;\"\u003e)\u003c/span\u003e\n          \u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003ehere we produce samples for this note\u003c/span\u003e\n          \u003cspan style=\"color: #6276BA;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003eif\u003c/span\u003e \u003cspan style=\"color: #858580;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003e\u0026lt;\u003c/span\u003e \u003cspan style=\"color: #80A880;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003e-\u003c/span\u003e time starttime\u003cspan style=\"color: #80A880;\"\u003e)\u003c/span\u003e duration\u003cspan style=\"color: #858580;\"\u003e)\u003c/span\u003e\n              \u003cspan style=\"color: #858580;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003e*\u003c/span\u003e amplitude \u003cspan style=\"color: #80A880;\"\u003e(\u003c/span\u003esine time frequency\u003cspan style=\"color: #80A880;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #858580;\"\u003e)\u003c/span\u003e\n              \u003cspan style=\"color: #D0372D;\"\u003e0.0\u003c/span\u003e\u003cspan style=\"color: #6276BA;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #907373;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #709870;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #7388D6;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #707183;\"\u003e)\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;/tuner-note\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;tuner-fx\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #707183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003ebind-func\u003c/span\u003e \u003cspan style=\"color: #006699;\"\u003etuner_fx\u003c/span\u003e\n  \u003cspan style=\"color: #7388D6;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elambda\u003c/span\u003e \u003cspan style=\"color: #909183;\"\u003e()\u003c/span\u003e\n    \u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003ehere put fx init\u003c/span\u003e\n    \u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elambda\u003c/span\u003e \u003cspan style=\"color: #709870;\"\u003e(\u003c/span\u003ein\u003cspan style=\"color: #6434A3;\"\u003e:SAMPLE\u003c/span\u003e time\u003cspan style=\"color: #6434A3;\"\u003e:i64\u003c/span\u003e chan\u003cspan style=\"color: #6434A3;\"\u003e:i64\u003c/span\u003e dat\u003cspan style=\"color: #6434A3;\"\u003e:SAMPLE*\u003c/span\u003e\u003cspan style=\"color: #709870;\"\u003e)\u003c/span\u003e\n      in\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #7388D6;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #707183;\"\u003e)\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;/tuner-fx\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;make-tuner\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #707183;\"\u003e(\u003c/span\u003emake-instrument tuner tuner\u003cspan style=\"color: #707183;\"\u003e)\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;/make-tuner\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;tuner-dsp\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #707183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003ebind-func\u003c/span\u003e \u003cspan style=\"color: #006699;\"\u003edsp\u003c/span\u003e\u003cspan style=\"color: #6434A3;\"\u003e:DSP\u003c/span\u003e\n  \u003cspan style=\"color: #7388D6;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elambda\u003c/span\u003e \u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003ein time chan dat\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e\n    \u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003etuner in time chan dat\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #7388D6;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #707183;\"\u003e)\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;/tuner-dsp\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;set-dsp\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #707183;\"\u003e(\u003c/span\u003edsp\u003cspan style=\"color: #6434A3;\"\u003e:set!\u003c/span\u003e dsp\u003cspan style=\"color: #707183;\"\u003e)\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;/set-dsp\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;/setup-tuner\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;play-note-now\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #707183;\"\u003e(\u003c/span\u003eplay-note \u003cspan style=\"color: #7388D6;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003enow\u003c/span\u003e\u003cspan style=\"color: #7388D6;\"\u003e)\u003c/span\u003e tuner \u003cspan style=\"color: #D0372D;\"\u003e60\u003c/span\u003e \u003cspan style=\"color: #D0372D;\"\u003e90\u003c/span\u003e \u003cspan style=\"color: #D0372D;\"\u003e44100\u003c/span\u003e\u003cspan style=\"color: #707183;\"\u003e)\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;/play-note-now\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;/xtm/03-harmony-tuner.xtm\u0026gt;\u003c/span\u003e\n\u003c/pre\u003e\n\u003c/div\u003e\n\n\u003cp\u003e\nIf you want just play chord from course page then don't wait anymore:\n\u003c/p\u003e\n\n\u003cdiv class=\"org-src-container\"\u003e\n\u003cpre class=\"src src-extempore\" id=\"org86bb407\"\u003e\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;play-pleasant-chord\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #707183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elet\u003c/span\u003e \u003cspan style=\"color: #7388D6;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003et \u003cspan style=\"color: #709870;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003enow\u003c/span\u003e\u003cspan style=\"color: #709870;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e\n      \u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003edur \u003cspan style=\"color: #D0372D;\"\u003e22050\u003c/span\u003e\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #7388D6;\"\u003e)\u003c/span\u003e\n  \u003cspan style=\"color: #7388D6;\"\u003e(\u003c/span\u003eplay-note t tuner \u003cspan style=\"color: #D0372D;\"\u003e60\u003c/span\u003e \u003cspan style=\"color: #D0372D;\"\u003e100\u003c/span\u003e dur\u003cspan style=\"color: #7388D6;\"\u003e)\u003c/span\u003e\n  \u003cspan style=\"color: #7388D6;\"\u003e(\u003c/span\u003eplay-note \u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003e+\u003c/span\u003e t \u003cspan style=\"color: #709870;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003e*\u003c/span\u003e \u003cspan style=\"color: #D0372D;\"\u003e2\u003c/span\u003e dur\u003cspan style=\"color: #709870;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e tuner \u003cspan style=\"color: #D0372D;\"\u003e64\u003c/span\u003e \u003cspan style=\"color: #D0372D;\"\u003e100\u003c/span\u003e dur\u003cspan style=\"color: #7388D6;\"\u003e)\u003c/span\u003e\n  \u003cspan style=\"color: #7388D6;\"\u003e(\u003c/span\u003eplay-note \u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003e+\u003c/span\u003e t \u003cspan style=\"color: #709870;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003e*\u003c/span\u003e \u003cspan style=\"color: #D0372D;\"\u003e4\u003c/span\u003e dur\u003cspan style=\"color: #709870;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e tuner \u003cspan style=\"color: #D0372D;\"\u003e67\u003c/span\u003e \u003cspan style=\"color: #D0372D;\"\u003e100\u003c/span\u003e dur\u003cspan style=\"color: #7388D6;\"\u003e)\u003c/span\u003e\n  \u003cspan style=\"color: #7388D6;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elet\u003c/span\u003e \u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #709870;\"\u003e(\u003c/span\u003et \u003cspan style=\"color: #907373;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003e+\u003c/span\u003e t \u003cspan style=\"color: #6276BA;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003e*\u003c/span\u003e \u003cspan style=\"color: #D0372D;\"\u003e6\u003c/span\u003e dur\u003cspan style=\"color: #6276BA;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #907373;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #709870;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e\n    \u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003eplay-note t tuner \u003cspan style=\"color: #D0372D;\"\u003e60\u003c/span\u003e \u003cspan style=\"color: #D0372D;\"\u003e100\u003c/span\u003e dur\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e\n    \u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003eplay-note t tuner \u003cspan style=\"color: #D0372D;\"\u003e64\u003c/span\u003e \u003cspan style=\"color: #D0372D;\"\u003e100\u003c/span\u003e dur\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e\n    \u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003eplay-note t tuner \u003cspan style=\"color: #D0372D;\"\u003e67\u003c/span\u003e \u003cspan style=\"color: #D0372D;\"\u003e100\u003c/span\u003e dur\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #7388D6;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #707183;\"\u003e)\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;/play-pleasant-chord\u0026gt;\u003c/span\u003e\n\u003c/pre\u003e\n\u003c/div\u003e\n\n\u003cp\u003e\nAnd not so pleasant one:\n\u003c/p\u003e\n\n\u003cdiv class=\"org-src-container\"\u003e\n\u003cpre class=\"src src-extempore\" id=\"org1c881e4\"\u003e\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;play-unpleasant-chord\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #707183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elet\u003c/span\u003e \u003cspan style=\"color: #7388D6;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003et \u003cspan style=\"color: #709870;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003enow\u003c/span\u003e\u003cspan style=\"color: #709870;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e\n      \u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003edur \u003cspan style=\"color: #D0372D;\"\u003e22050\u003c/span\u003e\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #7388D6;\"\u003e)\u003c/span\u003e\n  \u003cspan style=\"color: #7388D6;\"\u003e(\u003c/span\u003eplay-note t tuner \u003cspan style=\"color: #D0372D;\"\u003e61\u003c/span\u003e \u003cspan style=\"color: #D0372D;\"\u003e100\u003c/span\u003e dur\u003cspan style=\"color: #7388D6;\"\u003e)\u003c/span\u003e\n  \u003cspan style=\"color: #7388D6;\"\u003e(\u003c/span\u003eplay-note \u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003e+\u003c/span\u003e t \u003cspan style=\"color: #709870;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003e*\u003c/span\u003e \u003cspan style=\"color: #D0372D;\"\u003e2\u003c/span\u003e dur\u003cspan style=\"color: #709870;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e tuner \u003cspan style=\"color: #D0372D;\"\u003e67\u003c/span\u003e \u003cspan style=\"color: #D0372D;\"\u003e100\u003c/span\u003e dur\u003cspan style=\"color: #7388D6;\"\u003e)\u003c/span\u003e\n  \u003cspan style=\"color: #7388D6;\"\u003e(\u003c/span\u003eplay-note \u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003e+\u003c/span\u003e t \u003cspan style=\"color: #709870;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003e*\u003c/span\u003e \u003cspan style=\"color: #D0372D;\"\u003e4\u003c/span\u003e dur\u003cspan style=\"color: #709870;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e tuner \u003cspan style=\"color: #D0372D;\"\u003e75\u003c/span\u003e \u003cspan style=\"color: #D0372D;\"\u003e100\u003c/span\u003e dur\u003cspan style=\"color: #7388D6;\"\u003e)\u003c/span\u003e\n  \u003cspan style=\"color: #7388D6;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elet\u003c/span\u003e \u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #709870;\"\u003e(\u003c/span\u003et \u003cspan style=\"color: #907373;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003e+\u003c/span\u003e t \u003cspan style=\"color: #6276BA;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003e*\u003c/span\u003e \u003cspan style=\"color: #D0372D;\"\u003e6\u003c/span\u003e dur\u003cspan style=\"color: #6276BA;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #907373;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #709870;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e\n    \u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003eplay-note t tuner \u003cspan style=\"color: #D0372D;\"\u003e61\u003c/span\u003e \u003cspan style=\"color: #D0372D;\"\u003e100\u003c/span\u003e dur\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e\n    \u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003eplay-note t tuner \u003cspan style=\"color: #D0372D;\"\u003e67\u003c/span\u003e \u003cspan style=\"color: #D0372D;\"\u003e100\u003c/span\u003e dur\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e\n    \u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003eplay-note t tuner \u003cspan style=\"color: #D0372D;\"\u003e75\u003c/span\u003e \u003cspan style=\"color: #D0372D;\"\u003e100\u003c/span\u003e dur\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #7388D6;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #707183;\"\u003e)\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;/play-unpleasant-chord\u0026gt;\u003c/span\u003e\n\u003c/pre\u003e\n\u003c/div\u003e\n\n\u003cp\u003e\nLeveraging basic abstractions:\n\u003c/p\u003e\n\n\u003cdiv class=\"org-src-container\"\u003e\n\u003cpre class=\"src src-extempore\" id=\"orga47a0cd\"\u003e\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;define-pleasant-chord\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #707183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003edefine\u003c/span\u003e \u003cspan style=\"color: #006699;\"\u003epleasant-chord\u003c/span\u003e\n  \u003cspan style=\"color: #7388D6;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elambda\u003c/span\u003e \u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003epitch\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e\n    \u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003elist\u003c/span\u003e pitch \u003cspan style=\"color: #709870;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003e+\u003c/span\u003e pitch \u003cspan style=\"color: #D0372D;\"\u003e4\u003c/span\u003e\u003cspan style=\"color: #709870;\"\u003e)\u003c/span\u003e \u003cspan style=\"color: #709870;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003e+\u003c/span\u003e pitch \u003cspan style=\"color: #D0372D;\"\u003e7\u003c/span\u003e\u003cspan style=\"color: #709870;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #7388D6;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #707183;\"\u003e)\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;/define-pleasant-chord\u0026gt;\u003c/span\u003e\n\u003c/pre\u003e\n\u003c/div\u003e\n\n\u003cdiv class=\"org-src-container\"\u003e\n\u003cpre class=\"src src-extempore\" id=\"org00ef852\"\u003e\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;define-unpleasant-chord\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #707183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003edefine\u003c/span\u003e \u003cspan style=\"color: #006699;\"\u003eunpleasant-chord\u003c/span\u003e\n  \u003cspan style=\"color: #7388D6;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elambda\u003c/span\u003e \u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003epitch\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e\n    \u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003elist\u003c/span\u003e \u003cspan style=\"color: #709870;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003e+\u003c/span\u003e pitch \u003cspan style=\"color: #D0372D;\"\u003e1\u003c/span\u003e\u003cspan style=\"color: #709870;\"\u003e)\u003c/span\u003e \u003cspan style=\"color: #709870;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003e+\u003c/span\u003e pitch \u003cspan style=\"color: #D0372D;\"\u003e7\u003c/span\u003e\u003cspan style=\"color: #709870;\"\u003e)\u003c/span\u003e \u003cspan style=\"color: #709870;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003e+\u003c/span\u003e pitch \u003cspan style=\"color: #D0372D;\"\u003e15\u003c/span\u003e\u003cspan style=\"color: #709870;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #7388D6;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #707183;\"\u003e)\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;/define-unpleasant-chord\u0026gt;\u003c/span\u003e\n\u003c/pre\u003e\n\u003c/div\u003e\n\n\u003cdiv class=\"org-src-container\"\u003e\n\u003cpre class=\"src src-extempore\" id=\"org07bff86\"\u003e\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;play-chord\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #707183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003edefine\u003c/span\u003e \u003cspan style=\"color: #006699;\"\u003eplay-chord\u003c/span\u003e\n  \u003cspan style=\"color: #7388D6;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elambda\u003c/span\u003e \u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003et inst pitches dur\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e\n    \u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elet\u003c/span\u003e \u003cspan style=\"color: #709870;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #907373;\"\u003e(\u003c/span\u003etogether-time \u003cspan style=\"color: #6276BA;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003e+\u003c/span\u003e t \u003cspan style=\"color: #858580;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003e*\u003c/span\u003e \u003cspan style=\"color: #D0372D;\"\u003e2\u003c/span\u003e \u003cspan style=\"color: #80A880;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003elength\u003c/span\u003e pitches\u003cspan style=\"color: #80A880;\"\u003e)\u003c/span\u003e dur\u003cspan style=\"color: #858580;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #6276BA;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #907373;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #709870;\"\u003e)\u003c/span\u003e\n      \u003cspan style=\"color: #709870;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003efor-each\u003c/span\u003e\n       \u003cspan style=\"color: #907373;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elambda\u003c/span\u003e \u003cspan style=\"color: #6276BA;\"\u003e(\u003c/span\u003ei pitch\u003cspan style=\"color: #6276BA;\"\u003e)\u003c/span\u003e\n         \u003cspan style=\"color: #6276BA;\"\u003e(\u003c/span\u003eplay-note \u003cspan style=\"color: #858580;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003e+\u003c/span\u003e t \u003cspan style=\"color: #80A880;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003e*\u003c/span\u003e \u003cspan style=\"color: #D0372D;\"\u003e2\u003c/span\u003e i dur\u003cspan style=\"color: #80A880;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #858580;\"\u003e)\u003c/span\u003e inst pitch \u003cspan style=\"color: #D0372D;\"\u003e100\u003c/span\u003e dur\u003cspan style=\"color: #6276BA;\"\u003e)\u003c/span\u003e\n         \u003cspan style=\"color: #6276BA;\"\u003e(\u003c/span\u003eplay-note together-time inst pitch \u003cspan style=\"color: #D0372D;\"\u003e100\u003c/span\u003e dur\u003cspan style=\"color: #6276BA;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #907373;\"\u003e)\u003c/span\u003e\n       \u003cspan style=\"color: #907373;\"\u003e(\u003c/span\u003erange \u003cspan style=\"color: #6276BA;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003elength\u003c/span\u003e pitches\u003cspan style=\"color: #6276BA;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #907373;\"\u003e)\u003c/span\u003e\n       pitches\u003cspan style=\"color: #709870;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #7388D6;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #707183;\"\u003e)\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;/play-chord\u0026gt;\u003c/span\u003e\n\u003c/pre\u003e\n\u003c/div\u003e\n\n\u003cp\u003e\nAnd the source file:\n\u003c/p\u003e\n\n\u003cdiv class=\"org-src-container\"\u003e\n\u003cpre class=\"src src-extempore\" id=\"org65010fc\"\u003e\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;xtm/04-harmony-chord.xtm\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;setup-tuner\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;load-instruments\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #707183;\"\u003e(\u003c/span\u003esys\u003cspan style=\"color: #6434A3;\"\u003e:load\u003c/span\u003e \u003cspan style=\"color: #008000;\"\u003e\"libs/core/instruments.xtm\"\u003c/span\u003e\u003cspan style=\"color: #707183;\"\u003e)\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;/load-instruments\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;define-sine\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #707183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003ebind-val\u003c/span\u003e \u003cspan style=\"color: #006699;\"\u003eomega\u003c/span\u003e \u003cspan style=\"color: #6434A3;\"\u003eSAMPLE\u003c/span\u003e \u003cspan style=\"color: #7388D6;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003e/\u003c/span\u003e STWOPI SRf\u003cspan style=\"color: #7388D6;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #707183;\"\u003e)\u003c/span\u003e\n\n\u003cspan style=\"color: #707183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003ebind-func\u003c/span\u003e \u003cspan style=\"color: #006699;\"\u003esine\u003c/span\u003e\n  \u003cspan style=\"color: #7388D6;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elambda\u003c/span\u003e \u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003etime\u003cspan style=\"color: #6434A3;\"\u003e:i64\u003c/span\u003e freq\u003cspan style=\"color: #6434A3;\"\u003e:SAMPLE\u003c/span\u003e\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e\n    \u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003esin\u003c/span\u003e \u003cspan style=\"color: #709870;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003e*\u003c/span\u003e omega freq \u003cspan style=\"color: #907373;\"\u003e(\u003c/span\u003econvert time\u003cspan style=\"color: #907373;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #709870;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #7388D6;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #707183;\"\u003e)\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;/define-sine\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;tuner-note\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #707183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003ebind-func\u003c/span\u003e \u003cspan style=\"color: #006699;\"\u003etuner_note\u003c/span\u003e\n  \u003cspan style=\"color: #7388D6;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elambda\u003c/span\u003e \u003cspan style=\"color: #909183;\"\u003e()\u003c/span\u003e\n    \u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003ehere you can put init of entire instrument\u003c/span\u003e\n    \u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elambda\u003c/span\u003e \u003cspan style=\"color: #709870;\"\u003e(\u003c/span\u003edata\u003cspan style=\"color: #6434A3;\"\u003e:NoteData*\u003c/span\u003e nargs\u003cspan style=\"color: #6434A3;\"\u003e:i64\u003c/span\u003e dargs\u003cspan style=\"color: #6434A3;\"\u003e:SAMPLE*\u003c/span\u003e\u003cspan style=\"color: #709870;\"\u003e)\u003c/span\u003e\n      \u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003ehere init of certain note\u003c/span\u003e\n      \u003cspan style=\"color: #709870;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elet\u003c/span\u003e \u003cspan style=\"color: #907373;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #6276BA;\"\u003e(\u003c/span\u003efrequency \u003cspan style=\"color: #858580;\"\u003e(\u003c/span\u003enote_frequency data\u003cspan style=\"color: #858580;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #6276BA;\"\u003e)\u003c/span\u003e\n            \u003cspan style=\"color: #6276BA;\"\u003e(\u003c/span\u003eamplitude \u003cspan style=\"color: #858580;\"\u003e(\u003c/span\u003enote_amplitude data\u003cspan style=\"color: #858580;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #6276BA;\"\u003e)\u003c/span\u003e\n            \u003cspan style=\"color: #6276BA;\"\u003e(\u003c/span\u003estarttime \u003cspan style=\"color: #858580;\"\u003e(\u003c/span\u003enote_starttime data\u003cspan style=\"color: #858580;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #6276BA;\"\u003e)\u003c/span\u003e\n            \u003cspan style=\"color: #6276BA;\"\u003e(\u003c/span\u003eduration \u003cspan style=\"color: #858580;\"\u003e(\u003c/span\u003enote_duration data\u003cspan style=\"color: #858580;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #6276BA;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #907373;\"\u003e)\u003c/span\u003e\n        \u003cspan style=\"color: #907373;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elambda\u003c/span\u003e \u003cspan style=\"color: #6276BA;\"\u003e(\u003c/span\u003etime\u003cspan style=\"color: #6434A3;\"\u003e:i64\u003c/span\u003e chan\u003cspan style=\"color: #6434A3;\"\u003e:i64\u003c/span\u003e\u003cspan style=\"color: #6276BA;\"\u003e)\u003c/span\u003e\n          \u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003ehere we produce samples for this note\u003c/span\u003e\n          \u003cspan style=\"color: #6276BA;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003eif\u003c/span\u003e \u003cspan style=\"color: #858580;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003e\u0026lt;\u003c/span\u003e \u003cspan style=\"color: #80A880;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003e-\u003c/span\u003e time starttime\u003cspan style=\"color: #80A880;\"\u003e)\u003c/span\u003e duration\u003cspan style=\"color: #858580;\"\u003e)\u003c/span\u003e\n              \u003cspan style=\"color: #858580;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003e*\u003c/span\u003e amplitude \u003cspan style=\"color: #80A880;\"\u003e(\u003c/span\u003esine time frequency\u003cspan style=\"color: #80A880;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #858580;\"\u003e)\u003c/span\u003e\n              \u003cspan style=\"color: #D0372D;\"\u003e0.0\u003c/span\u003e\u003cspan style=\"color: #6276BA;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #907373;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #709870;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #7388D6;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #707183;\"\u003e)\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;/tuner-note\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;tuner-fx\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #707183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003ebind-func\u003c/span\u003e \u003cspan style=\"color: #006699;\"\u003etuner_fx\u003c/span\u003e\n  \u003cspan style=\"color: #7388D6;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elambda\u003c/span\u003e \u003cspan style=\"color: #909183;\"\u003e()\u003c/span\u003e\n    \u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003ehere put fx init\u003c/span\u003e\n    \u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elambda\u003c/span\u003e \u003cspan style=\"color: #709870;\"\u003e(\u003c/span\u003ein\u003cspan style=\"color: #6434A3;\"\u003e:SAMPLE\u003c/span\u003e time\u003cspan style=\"color: #6434A3;\"\u003e:i64\u003c/span\u003e chan\u003cspan style=\"color: #6434A3;\"\u003e:i64\u003c/span\u003e dat\u003cspan style=\"color: #6434A3;\"\u003e:SAMPLE*\u003c/span\u003e\u003cspan style=\"color: #709870;\"\u003e)\u003c/span\u003e\n      in\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #7388D6;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #707183;\"\u003e)\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;/tuner-fx\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;make-tuner\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #707183;\"\u003e(\u003c/span\u003emake-instrument tuner tuner\u003cspan style=\"color: #707183;\"\u003e)\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;/make-tuner\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;tuner-dsp\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #707183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003ebind-func\u003c/span\u003e \u003cspan style=\"color: #006699;\"\u003edsp\u003c/span\u003e\u003cspan style=\"color: #6434A3;\"\u003e:DSP\u003c/span\u003e\n  \u003cspan style=\"color: #7388D6;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elambda\u003c/span\u003e \u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003ein time chan dat\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e\n    \u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003etuner in time chan dat\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #7388D6;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #707183;\"\u003e)\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;/tuner-dsp\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;set-dsp\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #707183;\"\u003e(\u003c/span\u003edsp\u003cspan style=\"color: #6434A3;\"\u003e:set!\u003c/span\u003e dsp\u003cspan style=\"color: #707183;\"\u003e)\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;/set-dsp\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;/setup-tuner\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;define-pleasant-chord\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #707183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003edefine\u003c/span\u003e \u003cspan style=\"color: #006699;\"\u003epleasant-chord\u003c/span\u003e\n  \u003cspan style=\"color: #7388D6;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elambda\u003c/span\u003e \u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003epitch\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e\n    \u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003elist\u003c/span\u003e pitch \u003cspan style=\"color: #709870;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003e+\u003c/span\u003e pitch \u003cspan style=\"color: #D0372D;\"\u003e4\u003c/span\u003e\u003cspan style=\"color: #709870;\"\u003e)\u003c/span\u003e \u003cspan style=\"color: #709870;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003e+\u003c/span\u003e pitch \u003cspan style=\"color: #D0372D;\"\u003e7\u003c/span\u003e\u003cspan style=\"color: #709870;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #7388D6;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #707183;\"\u003e)\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;/define-pleasant-chord\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;define-unpleasant-chord\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #707183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003edefine\u003c/span\u003e \u003cspan style=\"color: #006699;\"\u003eunpleasant-chord\u003c/span\u003e\n  \u003cspan style=\"color: #7388D6;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elambda\u003c/span\u003e \u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003epitch\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e\n    \u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003elist\u003c/span\u003e \u003cspan style=\"color: #709870;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003e+\u003c/span\u003e pitch \u003cspan style=\"color: #D0372D;\"\u003e1\u003c/span\u003e\u003cspan style=\"color: #709870;\"\u003e)\u003c/span\u003e \u003cspan style=\"color: #709870;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003e+\u003c/span\u003e pitch \u003cspan style=\"color: #D0372D;\"\u003e7\u003c/span\u003e\u003cspan style=\"color: #709870;\"\u003e)\u003c/span\u003e \u003cspan style=\"color: #709870;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003e+\u003c/span\u003e pitch \u003cspan style=\"color: #D0372D;\"\u003e15\u003c/span\u003e\u003cspan style=\"color: #709870;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #7388D6;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #707183;\"\u003e)\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;/define-unpleasant-chord\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;play-chord\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #707183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003edefine\u003c/span\u003e \u003cspan style=\"color: #006699;\"\u003eplay-chord\u003c/span\u003e\n  \u003cspan style=\"color: #7388D6;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elambda\u003c/span\u003e \u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003et inst pitches dur\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e\n    \u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elet\u003c/span\u003e \u003cspan style=\"color: #709870;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #907373;\"\u003e(\u003c/span\u003etogether-time \u003cspan style=\"color: #6276BA;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003e+\u003c/span\u003e t \u003cspan style=\"color: #858580;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003e*\u003c/span\u003e \u003cspan style=\"color: #D0372D;\"\u003e2\u003c/span\u003e \u003cspan style=\"color: #80A880;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003elength\u003c/span\u003e pitches\u003cspan style=\"color: #80A880;\"\u003e)\u003c/span\u003e dur\u003cspan style=\"color: #858580;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #6276BA;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #907373;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #709870;\"\u003e)\u003c/span\u003e\n      \u003cspan style=\"color: #709870;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003efor-each\u003c/span\u003e\n       \u003cspan style=\"color: #907373;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elambda\u003c/span\u003e \u003cspan style=\"color: #6276BA;\"\u003e(\u003c/span\u003ei pitch\u003cspan style=\"color: #6276BA;\"\u003e)\u003c/span\u003e\n         \u003cspan style=\"color: #6276BA;\"\u003e(\u003c/span\u003eplay-note \u003cspan style=\"color: #858580;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003e+\u003c/span\u003e t \u003cspan style=\"color: #80A880;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003e*\u003c/span\u003e \u003cspan style=\"color: #D0372D;\"\u003e2\u003c/span\u003e i dur\u003cspan style=\"color: #80A880;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #858580;\"\u003e)\u003c/span\u003e inst pitch \u003cspan style=\"color: #D0372D;\"\u003e100\u003c/span\u003e dur\u003cspan style=\"color: #6276BA;\"\u003e)\u003c/span\u003e\n         \u003cspan style=\"color: #6276BA;\"\u003e(\u003c/span\u003eplay-note together-time inst pitch \u003cspan style=\"color: #D0372D;\"\u003e100\u003c/span\u003e dur\u003cspan style=\"color: #6276BA;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #907373;\"\u003e)\u003c/span\u003e\n       \u003cspan style=\"color: #907373;\"\u003e(\u003c/span\u003erange \u003cspan style=\"color: #6276BA;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003elength\u003c/span\u003e pitches\u003cspan style=\"color: #6276BA;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #907373;\"\u003e)\u003c/span\u003e\n       pitches\u003cspan style=\"color: #709870;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #7388D6;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #707183;\"\u003e)\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;/play-chord\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #707183;\"\u003e(\u003c/span\u003eplay-chord \u003cspan style=\"color: #7388D6;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003enow\u003c/span\u003e\u003cspan style=\"color: #7388D6;\"\u003e)\u003c/span\u003e tuner \u003cspan style=\"color: #7388D6;\"\u003e(\u003c/span\u003epleasant-chord \u003cspan style=\"color: #D0372D;\"\u003e60\u003c/span\u003e\u003cspan style=\"color: #7388D6;\"\u003e)\u003c/span\u003e \u003cspan style=\"color: #D0372D;\"\u003e22050\u003c/span\u003e\u003cspan style=\"color: #707183;\"\u003e)\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e(play-chord (now) tuner (unpleasant-chord 60) 22050)\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;/xtm/04-harmony-chord.xtm\u0026gt;\u003c/span\u003e\n\u003c/pre\u003e\n\u003c/div\u003e\n\n\u003cp\u003e\nNow let's go into details what's happening in code above.\n\u003c/p\u003e\n\n\u003cp\u003e\nFirst of all, breakdown of \u003ccode\u003eplay-note\u003c/code\u003e signature:\n\u003c/p\u003e\n\n\u003cdl class=\"org-dl\"\u003e\n\u003cdt\u003etime\u003c/dt\u003e\u003cdd\u003ewhen note should be started. Time in Extempore is expressed in\nnumber of samples rendered from its start. Current time is\navailable via \u003ccode\u003enow\u003c/code\u003e function.\u003c/dd\u003e\n\u003cdt\u003einstrument\u003c/dt\u003e\u003cdd\u003einstrument to play note with. Remember second-level closure\nin \u003ccode\u003einstrument_note\u003c/code\u003e? Instrument argument is required to\ncall it and initialize the note we are going to play.\u003c/dd\u003e\n\u003cdt\u003epitch\u003c/dt\u003e\u003cdd\u003efrequency of the note expressed in terms of \u003ca href=\"https://en.wikipedia.org/wiki/MIDI_tuning_standard\"\u003eMIDI pitch\u003c/a\u003e, 0-127\u003c/dd\u003e\n\u003cdt\u003evol\u003c/dt\u003e\u003cdd\u003eamplitude of the note expressed as volume, as per formula: \u003ccode\u003e(/ (exp\n             (/ vol 26.222)) 127.0)\u003c/code\u003e, 0-127\u003c/dd\u003e\n\u003cdt\u003eduration\u003c/dt\u003e\u003cdd\u003eduration of note. Duration in Extempore is expressed as a\nnumber of samples to be generated. If you are rendering sound at 44100Hz\nsampling rate, then you need to pass 44100 for a 1 second long\nnote.\u003c/dd\u003e\n\u003c/dl\u003e\n\n\u003cp\u003e\nNotice that \u003ccode\u003eplay-note\u003c/code\u003e allows us to schedule note start at any time.\nWe use it in \u003ccode\u003eplay-chord\u003c/code\u003e to play all passed pitches one by one and then to\nplay them all again, but simultaneously. We schedule all notes at ones, just\nat differents points in time.\n\u003c/p\u003e\n\u003c/div\u003e\n\n\u003col class=\"org-ol\"\u003e\u003cli\u003e\u003ca id=\"orgd0332a7\"\u003e\u003c/a\u003e\u003cspan class=\"done DONE\"\u003eDONE\u003c/span\u003e MIDI controller\u003cbr /\u003e\u003cdiv class=\"outline-text-5\" id=\"text-3-1-2-1\"\u003e\n\u003cp\u003e\nLet's do the trick and play notes from MIDI controller. The latest\n\u003ccode\u003emidi_input\u003c/code\u003e supports defining MIDI callback in Scheme (not only xtlang),\nit will make stuff easier for us because of no need to switch language\ncontexts. Replace \u003cb\u003e19\u003c/b\u003e with your pitch slider CC.\n\u003c/p\u003e\n\n\u003cdiv class=\"org-src-container\"\u003e\n\u003cpre class=\"src src-extempore\" id=\"orgbf5b780\"\u003e\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;midi-chords-pitch\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #707183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003edefine\u003c/span\u003e \u003cspan style=\"color: #006699;\"\u003e*pitch*\u003c/span\u003e \u003cspan style=\"color: #D0372D;\"\u003e60\u003c/span\u003e\u003cspan style=\"color: #707183;\"\u003e)\u003c/span\u003e\n\u003cspan style=\"color: #707183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003edefine\u003c/span\u003e \u003cspan style=\"color: #006699;\"\u003emidi-cc\u003c/span\u003e\n  \u003cspan style=\"color: #7388D6;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elambda\u003c/span\u003e \u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003etimestamp controller value chan\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e\n    \u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003econd\u003c/span\u003e \u003cspan style=\"color: #709870;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #907373;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003e=\u003c/span\u003e controller \u003cspan style=\"color: #D0372D;\"\u003e19\u003c/span\u003e\u003cspan style=\"color: #907373;\"\u003e)\u003c/span\u003e \u003cspan style=\"color: #907373;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003eset!\u003c/span\u003e *pitch* value\u003cspan style=\"color: #907373;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #709870;\"\u003e)\u003c/span\u003e\n          \u003cspan style=\"color: #709870;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003eelse\u003c/span\u003e \u003cspan style=\"color: #D0372D;\"\u003e#f\u003c/span\u003e\u003cspan style=\"color: #709870;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #7388D6;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #707183;\"\u003e)\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;/midi-chords-pitch\u0026gt;\u003c/span\u003e\n\u003c/pre\u003e\n\u003c/div\u003e\n\n\u003cp\u003e\nNow let's control note start and stop. Replace \u003cb\u003e1\u003c/b\u003e with you button NT.\n\u003c/p\u003e\n\n\u003cdiv class=\"org-src-container\"\u003e\n\u003cpre class=\"src src-extempore\" id=\"org9f8797f\"\u003e\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;midi-chords-play-button\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #707183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003edefine\u003c/span\u003e \u003cspan style=\"color: #006699;\"\u003emidi-note-on\u003c/span\u003e\n  \u003cspan style=\"color: #7388D6;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elambda\u003c/span\u003e \u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003etimestamp pitch volume chan\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e\n    \u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003eif\u003c/span\u003e \u003cspan style=\"color: #709870;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003e=\u003c/span\u003e pitch \u003cspan style=\"color: #D0372D;\"\u003e1\u003c/span\u003e\u003cspan style=\"color: #709870;\"\u003e)\u003c/span\u003e\n        \u003cspan style=\"color: #709870;\"\u003e(\u003c/span\u003eplay-chord \u003cspan style=\"color: #907373;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003enow\u003c/span\u003e\u003cspan style=\"color: #907373;\"\u003e)\u003c/span\u003e tuner \u003cspan style=\"color: #907373;\"\u003e(\u003c/span\u003epleasant-chord *pitch*\u003cspan style=\"color: #907373;\"\u003e)\u003c/span\u003e \u003cspan style=\"color: #D0372D;\"\u003e22050\u003c/span\u003e\u003cspan style=\"color: #709870;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #7388D6;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #707183;\"\u003e)\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;/midi-chords-play-button\u0026gt;\u003c/span\u003e\n\u003c/pre\u003e\n\u003c/div\u003e\n\n\u003cp\u003e\nAs an alternative, if you have MIDI keyboard, you can take pitch directly\nfrom pressed key:\n\u003c/p\u003e\n\n\u003cdiv class=\"org-src-container\"\u003e\n\u003cpre class=\"src src-extempore\" id=\"org993e32c\"\u003e\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;midi-chords-play-keyboard\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #707183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003edefine\u003c/span\u003e \u003cspan style=\"color: #006699;\"\u003emidi-note-on\u003c/span\u003e\n  \u003cspan style=\"color: #7388D6;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elambda\u003c/span\u003e \u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003etimestamp pitch volume chan\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e\n    \u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003eplay-chord \u003cspan style=\"color: #709870;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003enow\u003c/span\u003e\u003cspan style=\"color: #709870;\"\u003e)\u003c/span\u003e tuner \u003cspan style=\"color: #709870;\"\u003e(\u003c/span\u003epleasant-chord pitch\u003cspan style=\"color: #709870;\"\u003e)\u003c/span\u003e \u003cspan style=\"color: #D0372D;\"\u003e22050\u003c/span\u003e\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #7388D6;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #707183;\"\u003e)\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;/midi-chords-play-keyboard\u0026gt;\u003c/span\u003e\n\u003c/pre\u003e\n\u003c/div\u003e\n\n\u003cp\u003e\nTo make it work we need to start listener:\n\u003c/p\u003e\n\n\u003cdiv class=\"org-src-container\"\u003e\n\u003cpre class=\"src src-extempore\" id=\"org02ed1f4\"\u003e\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;start-midi-listener\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #707183;\"\u003e(\u003c/span\u003escheme-midi-listener \u003cspan style=\"color: #7388D6;\"\u003e(\u003c/span\u003e*metro* 'get-beat \u003cspan style=\"color: #D0372D;\"\u003e4\u003c/span\u003e\u003cspan style=\"color: #7388D6;\"\u003e)\u003c/span\u003e \u003cspan style=\"color: #D0372D;\"\u003e1/24\u003c/span\u003e\u003cspan style=\"color: #707183;\"\u003e)\u003c/span\u003e\u003cspan style=\"background-color: #FFDCDC; text-decoration: underline;\"\u003e)\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;/start-midi-listener\u0026gt;\u003c/span\u003e\n\u003c/pre\u003e\n\u003c/div\u003e\n\n\u003cp\u003e\nAnd whole files for button and keyboard:\n\u003c/p\u003e\n\n\u003cdiv class=\"org-src-container\"\u003e\n\u003cpre class=\"src src-extempore\" id=\"org551af76\"\u003e\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;xtm/05-midi-chord-button.xtm\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;xtm/04-harmony-chord.xtm\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;setup-tuner\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;load-instruments\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #707183;\"\u003e(\u003c/span\u003esys\u003cspan style=\"color: #6434A3;\"\u003e:load\u003c/span\u003e \u003cspan style=\"color: #008000;\"\u003e\"libs/core/instruments.xtm\"\u003c/span\u003e\u003cspan style=\"color: #707183;\"\u003e)\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;/load-instruments\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;define-sine\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #707183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003ebind-val\u003c/span\u003e \u003cspan style=\"color: #006699;\"\u003eomega\u003c/span\u003e \u003cspan style=\"color: #6434A3;\"\u003eSAMPLE\u003c/span\u003e \u003cspan style=\"color: #7388D6;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003e/\u003c/span\u003e STWOPI SRf\u003cspan style=\"color: #7388D6;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #707183;\"\u003e)\u003c/span\u003e\n\n\u003cspan style=\"color: #707183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003ebind-func\u003c/span\u003e \u003cspan style=\"color: #006699;\"\u003esine\u003c/span\u003e\n  \u003cspan style=\"color: #7388D6;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elambda\u003c/span\u003e \u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003etime\u003cspan style=\"color: #6434A3;\"\u003e:i64\u003c/span\u003e freq\u003cspan style=\"color: #6434A3;\"\u003e:SAMPLE\u003c/span\u003e\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e\n    \u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003esin\u003c/span\u003e \u003cspan style=\"color: #709870;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003e*\u003c/span\u003e omega freq \u003cspan style=\"color: #907373;\"\u003e(\u003c/span\u003econvert time\u003cspan style=\"color: #907373;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #709870;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #7388D6;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #707183;\"\u003e)\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;/define-sine\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;tuner-note\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #707183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003ebind-func\u003c/span\u003e \u003cspan style=\"color: #006699;\"\u003etuner_note\u003c/span\u003e\n  \u003cspan style=\"color: #7388D6;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elambda\u003c/span\u003e \u003cspan style=\"color: #909183;\"\u003e()\u003c/span\u003e\n    \u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003ehere you can put init of entire instrument\u003c/span\u003e\n    \u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elambda\u003c/span\u003e \u003cspan style=\"color: #709870;\"\u003e(\u003c/span\u003edata\u003cspan style=\"color: #6434A3;\"\u003e:NoteData*\u003c/span\u003e nargs\u003cspan style=\"color: #6434A3;\"\u003e:i64\u003c/span\u003e dargs\u003cspan style=\"color: #6434A3;\"\u003e:SAMPLE*\u003c/span\u003e\u003cspan style=\"color: #709870;\"\u003e)\u003c/span\u003e\n      \u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003ehere init of certain note\u003c/span\u003e\n      \u003cspan style=\"color: #709870;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elet\u003c/span\u003e \u003cspan style=\"color: #907373;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #6276BA;\"\u003e(\u003c/span\u003efrequency \u003cspan style=\"color: #858580;\"\u003e(\u003c/span\u003enote_frequency data\u003cspan style=\"color: #858580;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #6276BA;\"\u003e)\u003c/span\u003e\n            \u003cspan style=\"color: #6276BA;\"\u003e(\u003c/span\u003eamplitude \u003cspan style=\"color: #858580;\"\u003e(\u003c/span\u003enote_amplitude data\u003cspan style=\"color: #858580;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #6276BA;\"\u003e)\u003c/span\u003e\n            \u003cspan style=\"color: #6276BA;\"\u003e(\u003c/span\u003estarttime \u003cspan style=\"color: #858580;\"\u003e(\u003c/span\u003enote_starttime data\u003cspan style=\"color: #858580;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #6276BA;\"\u003e)\u003c/span\u003e\n            \u003cspan style=\"color: #6276BA;\"\u003e(\u003c/span\u003eduration \u003cspan style=\"color: #858580;\"\u003e(\u003c/span\u003enote_duration data\u003cspan style=\"color: #858580;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #6276BA;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #907373;\"\u003e)\u003c/span\u003e\n        \u003cspan style=\"color: #907373;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elambda\u003c/span\u003e \u003cspan style=\"color: #6276BA;\"\u003e(\u003c/span\u003etime\u003cspan style=\"color: #6434A3;\"\u003e:i64\u003c/span\u003e chan\u003cspan style=\"color: #6434A3;\"\u003e:i64\u003c/span\u003e\u003cspan style=\"color: #6276BA;\"\u003e)\u003c/span\u003e\n          \u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003ehere we produce samples for this note\u003c/span\u003e\n          \u003cspan style=\"color: #6276BA;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003eif\u003c/span\u003e \u003cspan style=\"color: #858580;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003e\u0026lt;\u003c/span\u003e \u003cspan style=\"color: #80A880;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003e-\u003c/span\u003e time starttime\u003cspan style=\"color: #80A880;\"\u003e)\u003c/span\u003e duration\u003cspan style=\"color: #858580;\"\u003e)\u003c/span\u003e\n              \u003cspan style=\"color: #858580;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003e*\u003c/span\u003e amplitude \u003cspan style=\"color: #80A880;\"\u003e(\u003c/span\u003esine time frequency\u003cspan style=\"color: #80A880;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #858580;\"\u003e)\u003c/span\u003e\n              \u003cspan style=\"color: #D0372D;\"\u003e0.0\u003c/span\u003e\u003cspan style=\"color: #6276BA;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #907373;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #709870;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #7388D6;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #707183;\"\u003e)\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;/tuner-note\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;tuner-fx\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #707183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003ebind-func\u003c/span\u003e \u003cspan style=\"color: #006699;\"\u003etuner_fx\u003c/span\u003e\n  \u003cspan style=\"color: #7388D6;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elambda\u003c/span\u003e \u003cspan style=\"color: #909183;\"\u003e()\u003c/span\u003e\n    \u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003ehere put fx init\u003c/span\u003e\n    \u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elambda\u003c/span\u003e \u003cspan style=\"color: #709870;\"\u003e(\u003c/span\u003ein\u003cspan style=\"color: #6434A3;\"\u003e:SAMPLE\u003c/span\u003e time\u003cspan style=\"color: #6434A3;\"\u003e:i64\u003c/span\u003e chan\u003cspan style=\"color: #6434A3;\"\u003e:i64\u003c/span\u003e dat\u003cspan style=\"color: #6434A3;\"\u003e:SAMPLE*\u003c/span\u003e\u003cspan style=\"color: #709870;\"\u003e)\u003c/span\u003e\n      in\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #7388D6;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #707183;\"\u003e)\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;/tuner-fx\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;make-tuner\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #707183;\"\u003e(\u003c/span\u003emake-instrument tuner tuner\u003cspan style=\"color: #707183;\"\u003e)\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;/make-tuner\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;tuner-dsp\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #707183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003ebind-func\u003c/span\u003e \u003cspan style=\"color: #006699;\"\u003edsp\u003c/span\u003e\u003cspan style=\"color: #6434A3;\"\u003e:DSP\u003c/span\u003e\n  \u003cspan style=\"color: #7388D6;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elambda\u003c/span\u003e \u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003ein time chan dat\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e\n    \u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003etuner in time chan dat\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #7388D6;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #707183;\"\u003e)\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;/tuner-dsp\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;set-dsp\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #707183;\"\u003e(\u003c/span\u003edsp\u003cspan style=\"color: #6434A3;\"\u003e:set!\u003c/span\u003e dsp\u003cspan style=\"color: #707183;\"\u003e)\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;/set-dsp\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;/setup-tuner\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;define-pleasant-chord\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #707183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003edefine\u003c/span\u003e \u003cspan style=\"color: #006699;\"\u003epleasant-chord\u003c/span\u003e\n  \u003cspan style=\"color: #7388D6;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elambda\u003c/span\u003e \u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003epitch\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e\n    \u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003elist\u003c/span\u003e pitch \u003cspan style=\"color: #709870;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003e+\u003c/span\u003e pitch \u003cspan style=\"color: #D0372D;\"\u003e4\u003c/span\u003e\u003cspan style=\"color: #709870;\"\u003e)\u003c/span\u003e \u003cspan style=\"color: #709870;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003e+\u003c/span\u003e pitch \u003cspan style=\"color: #D0372D;\"\u003e7\u003c/span\u003e\u003cspan style=\"color: #709870;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #7388D6;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #707183;\"\u003e)\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;/define-pleasant-chord\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;define-unpleasant-chord\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #707183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003edefine\u003c/span\u003e \u003cspan style=\"color: #006699;\"\u003eunpleasant-chord\u003c/span\u003e\n  \u003cspan style=\"color: #7388D6;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elambda\u003c/span\u003e \u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003epitch\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e\n    \u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003elist\u003c/span\u003e \u003cspan style=\"color: #709870;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003e+\u003c/span\u003e pitch \u003cspan style=\"color: #D0372D;\"\u003e1\u003c/span\u003e\u003cspan style=\"color: #709870;\"\u003e)\u003c/span\u003e \u003cspan style=\"color: #709870;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003e+\u003c/span\u003e pitch \u003cspan style=\"color: #D0372D;\"\u003e7\u003c/span\u003e\u003cspan style=\"color: #709870;\"\u003e)\u003c/span\u003e \u003cspan style=\"color: #709870;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003e+\u003c/span\u003e pitch \u003cspan style=\"color: #D0372D;\"\u003e15\u003c/span\u003e\u003cspan style=\"color: #709870;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #7388D6;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #707183;\"\u003e)\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;/define-unpleasant-chord\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;play-chord\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #707183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003edefine\u003c/span\u003e \u003cspan style=\"color: #006699;\"\u003eplay-chord\u003c/span\u003e\n  \u003cspan style=\"color: #7388D6;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elambda\u003c/span\u003e \u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003et inst pitches dur\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e\n    \u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elet\u003c/span\u003e \u003cspan style=\"color: #709870;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #907373;\"\u003e(\u003c/span\u003etogether-time \u003cspan style=\"color: #6276BA;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003e+\u003c/span\u003e t \u003cspan style=\"color: #858580;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003e*\u003c/span\u003e \u003cspan style=\"color: #D0372D;\"\u003e2\u003c/span\u003e \u003cspan style=\"color: #80A880;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003elength\u003c/span\u003e pitches\u003cspan style=\"color: #80A880;\"\u003e)\u003c/span\u003e dur\u003cspan style=\"color: #858580;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #6276BA;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #907373;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #709870;\"\u003e)\u003c/span\u003e\n      \u003cspan style=\"color: #709870;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003efor-each\u003c/span\u003e\n       \u003cspan style=\"color: #907373;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elambda\u003c/span\u003e \u003cspan style=\"color: #6276BA;\"\u003e(\u003c/span\u003ei pitch\u003cspan style=\"color: #6276BA;\"\u003e)\u003c/span\u003e\n         \u003cspan style=\"color: #6276BA;\"\u003e(\u003c/span\u003eplay-note \u003cspan style=\"color: #858580;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003e+\u003c/span\u003e t \u003cspan style=\"color: #80A880;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003e*\u003c/span\u003e \u003cspan style=\"color: #D0372D;\"\u003e2\u003c/span\u003e i dur\u003cspan style=\"color: #80A880;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #858580;\"\u003e)\u003c/span\u003e inst pitch \u003cspan style=\"color: #D0372D;\"\u003e100\u003c/span\u003e dur\u003cspan style=\"color: #6276BA;\"\u003e)\u003c/span\u003e\n         \u003cspan style=\"color: #6276BA;\"\u003e(\u003c/span\u003eplay-note together-time inst pitch \u003cspan style=\"color: #D0372D;\"\u003e100\u003c/span\u003e dur\u003cspan style=\"color: #6276BA;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #907373;\"\u003e)\u003c/span\u003e\n       \u003cspan style=\"color: #907373;\"\u003e(\u003c/span\u003erange \u003cspan style=\"color: #6276BA;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003elength\u003c/span\u003e pitches\u003cspan style=\"color: #6276BA;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #907373;\"\u003e)\u003c/span\u003e\n       pitches\u003cspan style=\"color: #709870;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #7388D6;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #707183;\"\u003e)\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;/play-chord\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #707183;\"\u003e(\u003c/span\u003eplay-chord \u003cspan style=\"color: #7388D6;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003enow\u003c/span\u003e\u003cspan style=\"color: #7388D6;\"\u003e)\u003c/span\u003e tuner \u003cspan style=\"color: #7388D6;\"\u003e(\u003c/span\u003epleasant-chord \u003cspan style=\"color: #D0372D;\"\u003e60\u003c/span\u003e\u003cspan style=\"color: #7388D6;\"\u003e)\u003c/span\u003e \u003cspan style=\"color: #D0372D;\"\u003e22050\u003c/span\u003e\u003cspan style=\"color: #707183;\"\u003e)\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e(play-chord (now) tuner (unpleasant-chord 60) 22050)\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;/xtm/04-harmony-chord.xtm\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;midi-chords-pitch\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #707183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003edefine\u003c/span\u003e \u003cspan style=\"color: #006699;\"\u003e*pitch*\u003c/span\u003e \u003cspan style=\"color: #D0372D;\"\u003e60\u003c/span\u003e\u003cspan style=\"color: #707183;\"\u003e)\u003c/span\u003e\n\u003cspan style=\"color: #707183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003edefine\u003c/span\u003e \u003cspan style=\"color: #006699;\"\u003emidi-cc\u003c/span\u003e\n  \u003cspan style=\"color: #7388D6;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elambda\u003c/span\u003e \u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003etimestamp controller value chan\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e\n    \u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003econd\u003c/span\u003e \u003cspan style=\"color: #709870;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #907373;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003e=\u003c/span\u003e controller \u003cspan style=\"color: #D0372D;\"\u003e19\u003c/span\u003e\u003cspan style=\"color: #907373;\"\u003e)\u003c/span\u003e \u003cspan style=\"color: #907373;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003eset!\u003c/span\u003e *pitch* value\u003cspan style=\"color: #907373;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #709870;\"\u003e)\u003c/span\u003e\n          \u003cspan style=\"color: #709870;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003eelse\u003c/span\u003e \u003cspan style=\"color: #D0372D;\"\u003e#f\u003c/span\u003e\u003cspan style=\"color: #709870;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #7388D6;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #707183;\"\u003e)\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;/midi-chords-pitch\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;midi-chords-play-button\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #707183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003edefine\u003c/span\u003e \u003cspan style=\"color: #006699;\"\u003emidi-note-on\u003c/span\u003e\n  \u003cspan style=\"color: #7388D6;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elambda\u003c/span\u003e \u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003etimestamp pitch volume chan\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e\n    \u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003eif\u003c/span\u003e \u003cspan style=\"color: #709870;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003e=\u003c/span\u003e pitch \u003cspan style=\"color: #D0372D;\"\u003e1\u003c/span\u003e\u003cspan style=\"color: #709870;\"\u003e)\u003c/span\u003e\n        \u003cspan style=\"color: #709870;\"\u003e(\u003c/span\u003eplay-chord \u003cspan style=\"color: #907373;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003enow\u003c/span\u003e\u003cspan style=\"color: #907373;\"\u003e)\u003c/span\u003e tuner \u003cspan style=\"color: #907373;\"\u003e(\u003c/span\u003epleasant-chord *pitch*\u003cspan style=\"color: #907373;\"\u003e)\u003c/span\u003e \u003cspan style=\"color: #D0372D;\"\u003e22050\u003c/span\u003e\u003cspan style=\"color: #709870;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #7388D6;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #707183;\"\u003e)\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;/midi-chords-play-button\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;start-midi-listener\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #707183;\"\u003e(\u003c/span\u003escheme-midi-listener \u003cspan style=\"color: #7388D6;\"\u003e(\u003c/span\u003e*metro* 'get-beat \u003cspan style=\"color: #D0372D;\"\u003e4\u003c/span\u003e\u003cspan style=\"color: #7388D6;\"\u003e)\u003c/span\u003e \u003cspan style=\"color: #D0372D;\"\u003e1/24\u003c/span\u003e\u003cspan style=\"color: #707183;\"\u003e)\u003c/span\u003e\u003cspan style=\"background-color: #FFDCDC; text-decoration: underline;\"\u003e)\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;/start-midi-listener\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;/xtm/05-midi-chord-button.xtm\u0026gt;\u003c/span\u003e\n\u003c/pre\u003e\n\u003c/div\u003e\n\n\u003cdiv class=\"org-src-container\"\u003e\n\u003cpre class=\"src src-extempore\" id=\"org777d8d7\"\u003e\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;xtm/06-midi-chord-keyboard.xtm\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;xtm/04-harmony-chord.xtm\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;setup-tuner\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;load-instruments\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #707183;\"\u003e(\u003c/span\u003esys\u003cspan style=\"color: #6434A3;\"\u003e:load\u003c/span\u003e \u003cspan style=\"color: #008000;\"\u003e\"libs/core/instruments.xtm\"\u003c/span\u003e\u003cspan style=\"color: #707183;\"\u003e)\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;/load-instruments\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;define-sine\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #707183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003ebind-val\u003c/span\u003e \u003cspan style=\"color: #006699;\"\u003eomega\u003c/span\u003e \u003cspan style=\"color: #6434A3;\"\u003eSAMPLE\u003c/span\u003e \u003cspan style=\"color: #7388D6;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003e/\u003c/span\u003e STWOPI SRf\u003cspan style=\"color: #7388D6;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #707183;\"\u003e)\u003c/span\u003e\n\n\u003cspan style=\"color: #707183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003ebind-func\u003c/span\u003e \u003cspan style=\"color: #006699;\"\u003esine\u003c/span\u003e\n  \u003cspan style=\"color: #7388D6;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elambda\u003c/span\u003e \u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003etime\u003cspan style=\"color: #6434A3;\"\u003e:i64\u003c/span\u003e freq\u003cspan style=\"color: #6434A3;\"\u003e:SAMPLE\u003c/span\u003e\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e\n    \u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003esin\u003c/span\u003e \u003cspan style=\"color: #709870;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003e*\u003c/span\u003e omega freq \u003cspan style=\"color: #907373;\"\u003e(\u003c/span\u003econvert time\u003cspan style=\"color: #907373;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #709870;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #7388D6;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #707183;\"\u003e)\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;/define-sine\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;tuner-note\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #707183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003ebind-func\u003c/span\u003e \u003cspan style=\"color: #006699;\"\u003etuner_note\u003c/span\u003e\n  \u003cspan style=\"color: #7388D6;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elambda\u003c/span\u003e \u003cspan style=\"color: #909183;\"\u003e()\u003c/span\u003e\n    \u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003ehere you can put init of entire instrument\u003c/span\u003e\n    \u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elambda\u003c/span\u003e \u003cspan style=\"color: #709870;\"\u003e(\u003c/span\u003edata\u003cspan style=\"color: #6434A3;\"\u003e:NoteData*\u003c/span\u003e nargs\u003cspan style=\"color: #6434A3;\"\u003e:i64\u003c/span\u003e dargs\u003cspan style=\"color: #6434A3;\"\u003e:SAMPLE*\u003c/span\u003e\u003cspan style=\"color: #709870;\"\u003e)\u003c/span\u003e\n      \u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003ehere init of certain note\u003c/span\u003e\n      \u003cspan style=\"color: #709870;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elet\u003c/span\u003e \u003cspan style=\"color: #907373;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #6276BA;\"\u003e(\u003c/span\u003efrequency \u003cspan style=\"color: #858580;\"\u003e(\u003c/span\u003enote_frequency data\u003cspan style=\"color: #858580;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #6276BA;\"\u003e)\u003c/span\u003e\n            \u003cspan style=\"color: #6276BA;\"\u003e(\u003c/span\u003eamplitude \u003cspan style=\"color: #858580;\"\u003e(\u003c/span\u003enote_amplitude data\u003cspan style=\"color: #858580;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #6276BA;\"\u003e)\u003c/span\u003e\n            \u003cspan style=\"color: #6276BA;\"\u003e(\u003c/span\u003estarttime \u003cspan style=\"color: #858580;\"\u003e(\u003c/span\u003enote_starttime data\u003cspan style=\"color: #858580;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #6276BA;\"\u003e)\u003c/span\u003e\n            \u003cspan style=\"color: #6276BA;\"\u003e(\u003c/span\u003eduration \u003cspan style=\"color: #858580;\"\u003e(\u003c/span\u003enote_duration data\u003cspan style=\"color: #858580;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #6276BA;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #907373;\"\u003e)\u003c/span\u003e\n        \u003cspan style=\"color: #907373;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elambda\u003c/span\u003e \u003cspan style=\"color: #6276BA;\"\u003e(\u003c/span\u003etime\u003cspan style=\"color: #6434A3;\"\u003e:i64\u003c/span\u003e chan\u003cspan style=\"color: #6434A3;\"\u003e:i64\u003c/span\u003e\u003cspan style=\"color: #6276BA;\"\u003e)\u003c/span\u003e\n          \u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003ehere we produce samples for this note\u003c/span\u003e\n          \u003cspan style=\"color: #6276BA;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003eif\u003c/span\u003e \u003cspan style=\"color: #858580;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003e\u0026lt;\u003c/span\u003e \u003cspan style=\"color: #80A880;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003e-\u003c/span\u003e time starttime\u003cspan style=\"color: #80A880;\"\u003e)\u003c/span\u003e duration\u003cspan style=\"color: #858580;\"\u003e)\u003c/span\u003e\n              \u003cspan style=\"color: #858580;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003e*\u003c/span\u003e amplitude \u003cspan style=\"color: #80A880;\"\u003e(\u003c/span\u003esine time frequency\u003cspan style=\"color: #80A880;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #858580;\"\u003e)\u003c/span\u003e\n              \u003cspan style=\"color: #D0372D;\"\u003e0.0\u003c/span\u003e\u003cspan style=\"color: #6276BA;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #907373;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #709870;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #7388D6;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #707183;\"\u003e)\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;/tuner-note\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;tuner-fx\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #707183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003ebind-func\u003c/span\u003e \u003cspan style=\"color: #006699;\"\u003etuner_fx\u003c/span\u003e\n  \u003cspan style=\"color: #7388D6;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elambda\u003c/span\u003e \u003cspan style=\"color: #909183;\"\u003e()\u003c/span\u003e\n    \u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003ehere put fx init\u003c/span\u003e\n    \u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elambda\u003c/span\u003e \u003cspan style=\"color: #709870;\"\u003e(\u003c/span\u003ein\u003cspan style=\"color: #6434A3;\"\u003e:SAMPLE\u003c/span\u003e time\u003cspan style=\"color: #6434A3;\"\u003e:i64\u003c/span\u003e chan\u003cspan style=\"color: #6434A3;\"\u003e:i64\u003c/span\u003e dat\u003cspan style=\"color: #6434A3;\"\u003e:SAMPLE*\u003c/span\u003e\u003cspan style=\"color: #709870;\"\u003e)\u003c/span\u003e\n      in\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #7388D6;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #707183;\"\u003e)\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;/tuner-fx\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;make-tuner\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #707183;\"\u003e(\u003c/span\u003emake-instrument tuner tuner\u003cspan style=\"color: #707183;\"\u003e)\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;/make-tuner\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;tuner-dsp\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #707183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003ebind-func\u003c/span\u003e \u003cspan style=\"color: #006699;\"\u003edsp\u003c/span\u003e\u003cspan style=\"color: #6434A3;\"\u003e:DSP\u003c/span\u003e\n  \u003cspan style=\"color: #7388D6;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elambda\u003c/span\u003e \u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003ein time chan dat\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e\n    \u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003etuner in time chan dat\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #7388D6;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #707183;\"\u003e)\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;/tuner-dsp\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;set-dsp\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #707183;\"\u003e(\u003c/span\u003edsp\u003cspan style=\"color: #6434A3;\"\u003e:set!\u003c/span\u003e dsp\u003cspan style=\"color: #707183;\"\u003e)\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;/set-dsp\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;/setup-tuner\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;define-pleasant-chord\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #707183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003edefine\u003c/span\u003e \u003cspan style=\"color: #006699;\"\u003epleasant-chord\u003c/span\u003e\n  \u003cspan style=\"color: #7388D6;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elambda\u003c/span\u003e \u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003epitch\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e\n    \u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003elist\u003c/span\u003e pitch \u003cspan style=\"color: #709870;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003e+\u003c/span\u003e pitch \u003cspan style=\"color: #D0372D;\"\u003e4\u003c/span\u003e\u003cspan style=\"color: #709870;\"\u003e)\u003c/span\u003e \u003cspan style=\"color: #709870;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003e+\u003c/span\u003e pitch \u003cspan style=\"color: #D0372D;\"\u003e7\u003c/span\u003e\u003cspan style=\"color: #709870;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #7388D6;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #707183;\"\u003e)\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;/define-pleasant-chord\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;define-unpleasant-chord\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #707183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003edefine\u003c/span\u003e \u003cspan style=\"color: #006699;\"\u003eunpleasant-chord\u003c/span\u003e\n  \u003cspan style=\"color: #7388D6;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elambda\u003c/span\u003e \u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003epitch\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e\n    \u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003elist\u003c/span\u003e \u003cspan style=\"color: #709870;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003e+\u003c/span\u003e pitch \u003cspan style=\"color: #D0372D;\"\u003e1\u003c/span\u003e\u003cspan style=\"color: #709870;\"\u003e)\u003c/span\u003e \u003cspan style=\"color: #709870;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003e+\u003c/span\u003e pitch \u003cspan style=\"color: #D0372D;\"\u003e7\u003c/span\u003e\u003cspan style=\"color: #709870;\"\u003e)\u003c/span\u003e \u003cspan style=\"color: #709870;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003e+\u003c/span\u003e pitch \u003cspan style=\"color: #D0372D;\"\u003e15\u003c/span\u003e\u003cspan style=\"color: #709870;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #7388D6;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #707183;\"\u003e)\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;/define-unpleasant-chord\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;play-chord\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #707183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003edefine\u003c/span\u003e \u003cspan style=\"color: #006699;\"\u003eplay-chord\u003c/span\u003e\n  \u003cspan style=\"color: #7388D6;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elambda\u003c/span\u003e \u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003et inst pitches dur\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e\n    \u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elet\u003c/span\u003e \u003cspan style=\"color: #709870;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #907373;\"\u003e(\u003c/span\u003etogether-time \u003cspan style=\"color: #6276BA;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003e+\u003c/span\u003e t \u003cspan style=\"color: #858580;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003e*\u003c/span\u003e \u003cspan style=\"color: #D0372D;\"\u003e2\u003c/span\u003e \u003cspan style=\"color: #80A880;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003elength\u003c/span\u003e pitches\u003cspan style=\"color: #80A880;\"\u003e)\u003c/span\u003e dur\u003cspan style=\"color: #858580;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #6276BA;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #907373;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #709870;\"\u003e)\u003c/span\u003e\n      \u003cspan style=\"color: #709870;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003efor-each\u003c/span\u003e\n       \u003cspan style=\"color: #907373;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elambda\u003c/span\u003e \u003cspan style=\"color: #6276BA;\"\u003e(\u003c/span\u003ei pitch\u003cspan style=\"color: #6276BA;\"\u003e)\u003c/span\u003e\n         \u003cspan style=\"color: #6276BA;\"\u003e(\u003c/span\u003eplay-note \u003cspan style=\"color: #858580;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003e+\u003c/span\u003e t \u003cspan style=\"color: #80A880;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003e*\u003c/span\u003e \u003cspan style=\"color: #D0372D;\"\u003e2\u003c/span\u003e i dur\u003cspan style=\"color: #80A880;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #858580;\"\u003e)\u003c/span\u003e inst pitch \u003cspan style=\"color: #D0372D;\"\u003e100\u003c/span\u003e dur\u003cspan style=\"color: #6276BA;\"\u003e)\u003c/span\u003e\n         \u003cspan style=\"color: #6276BA;\"\u003e(\u003c/span\u003eplay-note together-time inst pitch \u003cspan style=\"color: #D0372D;\"\u003e100\u003c/span\u003e dur\u003cspan style=\"color: #6276BA;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #907373;\"\u003e)\u003c/span\u003e\n       \u003cspan style=\"color: #907373;\"\u003e(\u003c/span\u003erange \u003cspan style=\"color: #6276BA;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003elength\u003c/span\u003e pitches\u003cspan style=\"color: #6276BA;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #907373;\"\u003e)\u003c/span\u003e\n       pitches\u003cspan style=\"color: #709870;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #7388D6;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #707183;\"\u003e)\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;/play-chord\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #707183;\"\u003e(\u003c/span\u003eplay-chord \u003cspan style=\"color: #7388D6;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003enow\u003c/span\u003e\u003cspan style=\"color: #7388D6;\"\u003e)\u003c/span\u003e tuner \u003cspan style=\"color: #7388D6;\"\u003e(\u003c/span\u003epleasant-chord \u003cspan style=\"color: #D0372D;\"\u003e60\u003c/span\u003e\u003cspan style=\"color: #7388D6;\"\u003e)\u003c/span\u003e \u003cspan style=\"color: #D0372D;\"\u003e22050\u003c/span\u003e\u003cspan style=\"color: #707183;\"\u003e)\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e(play-chord (now) tuner (unpleasant-chord 60) 22050)\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;/xtm/04-harmony-chord.xtm\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;midi-chords-play-keyboard\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #707183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003edefine\u003c/span\u003e \u003cspan style=\"color: #006699;\"\u003emidi-note-on\u003c/span\u003e\n  \u003cspan style=\"color: #7388D6;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elambda\u003c/span\u003e \u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003etimestamp pitch volume chan\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e\n    \u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003eplay-chord \u003cspan style=\"color: #709870;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003enow\u003c/span\u003e\u003cspan style=\"color: #709870;\"\u003e)\u003c/span\u003e tuner \u003cspan style=\"color: #709870;\"\u003e(\u003c/span\u003epleasant-chord pitch\u003cspan style=\"color: #709870;\"\u003e)\u003c/span\u003e \u003cspan style=\"color: #D0372D;\"\u003e22050\u003c/span\u003e\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #7388D6;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #707183;\"\u003e)\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;/midi-chords-play-keyboard\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;start-midi-listener\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #707183;\"\u003e(\u003c/span\u003escheme-midi-listener \u003cspan style=\"color: #7388D6;\"\u003e(\u003c/span\u003e*metro* 'get-beat \u003cspan style=\"color: #D0372D;\"\u003e4\u003c/span\u003e\u003cspan style=\"color: #7388D6;\"\u003e)\u003c/span\u003e \u003cspan style=\"color: #D0372D;\"\u003e1/24\u003c/span\u003e\u003cspan style=\"color: #707183;\"\u003e)\u003c/span\u003e\u003cspan style=\"background-color: #FFDCDC; text-decoration: underline;\"\u003e)\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;/start-midi-listener\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;/xtm/06-midi-chord-keyboard.xtm\u0026gt;\u003c/span\u003e\n\u003c/pre\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003c/li\u003e\u003c/ol\u003e\n\u003c/div\u003e\n\n\u003cdiv id=\"outline-container-org165287f\" class=\"outline-4\"\u003e\n\u003ch4 id=\"org165287f\"\u003e\u003cspan class=\"section-number-4\"\u003e3.1.3\u003c/span\u003e Intermezzo: \u003ccode\u003eosc_c\u003c/code\u003e\u003c/h4\u003e\n\u003cdiv class=\"outline-text-4\" id=\"text-3-1-3\"\u003e\n\u003cp\u003e\nI mentioned Extempore's \u003ccode\u003eosc_c\u003c/code\u003e briefly as an alternative for hand-rolled\nsine wave generator. Now it's time to write down (and hear!) difference\nbetween the two. \u003ccode\u003eosc_c\u003c/code\u003e encloses phase, and our \u003ccode\u003esine\u003c/code\u003e takes it implicitly\nas a timestamp. But in this case it's not just a question of style (FP-ish\nexplicit argument passing vs OOP-y mixing state with code), but a subtle\ndifference in behavior. Waves produced by both oscillators are the same when\nfrequency stays constant. But \u003ccode\u003esine\u003c/code\u003e goes glitchy when frequency changes,\nthat's why usually \u003ccode\u003eosc_c\u003c/code\u003e is the way to go (though sometimes you want to\nproduce glitches on purpose).\n\u003c/p\u003e\n\n\u003cp\u003e\nTo hear the difference let's apply frequency modulation to our \u003ccode\u003etuner\u003c/code\u003e and\nmake\u0026#x2026; hmmm\u0026#x2026; \u003ccode\u003efm_tuner\u003c/code\u003e instrument ;-)\n\u003c/p\u003e\n\n\u003cdiv class=\"org-src-container\"\u003e\n\u003cpre class=\"src src-extempore\" id=\"orgf3afb54\"\u003e\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;fm-tuner-note\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #707183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003ebind-func\u003c/span\u003e \u003cspan style=\"color: #006699;\"\u003efm_tuner_note\u003c/span\u003e\n  \u003cspan style=\"color: #7388D6;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elambda\u003c/span\u003e \u003cspan style=\"color: #909183;\"\u003e()\u003c/span\u003e\n    \u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003ehere you can put init of entire instrument\u003c/span\u003e\n    \u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elambda\u003c/span\u003e \u003cspan style=\"color: #709870;\"\u003e(\u003c/span\u003edata\u003cspan style=\"color: #6434A3;\"\u003e:NoteData*\u003c/span\u003e nargs\u003cspan style=\"color: #6434A3;\"\u003e:i64\u003c/span\u003e dargs\u003cspan style=\"color: #6434A3;\"\u003e:SAMPLE*\u003c/span\u003e\u003cspan style=\"color: #709870;\"\u003e)\u003c/span\u003e\n      \u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003ehere init of certain note\u003c/span\u003e\n      \u003cspan style=\"color: #709870;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elet\u003c/span\u003e \u003cspan style=\"color: #907373;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #6276BA;\"\u003e(\u003c/span\u003efrequency \u003cspan style=\"color: #858580;\"\u003e(\u003c/span\u003enote_frequency data\u003cspan style=\"color: #858580;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #6276BA;\"\u003e)\u003c/span\u003e\n            \u003cspan style=\"color: #6276BA;\"\u003e(\u003c/span\u003eamplitude \u003cspan style=\"color: #858580;\"\u003e(\u003c/span\u003enote_amplitude data\u003cspan style=\"color: #858580;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #6276BA;\"\u003e)\u003c/span\u003e\n            \u003cspan style=\"color: #6276BA;\"\u003e(\u003c/span\u003estarttime \u003cspan style=\"color: #858580;\"\u003e(\u003c/span\u003enote_starttime data\u003cspan style=\"color: #858580;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #6276BA;\"\u003e)\u003c/span\u003e\n            \u003cspan style=\"color: #6276BA;\"\u003e(\u003c/span\u003eduration \u003cspan style=\"color: #858580;\"\u003e(\u003c/span\u003enote_duration data\u003cspan style=\"color: #858580;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #6276BA;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #907373;\"\u003e)\u003c/span\u003e\n        \u003cspan style=\"color: #907373;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elambda\u003c/span\u003e \u003cspan style=\"color: #6276BA;\"\u003e(\u003c/span\u003etime\u003cspan style=\"color: #6434A3;\"\u003e:i64\u003c/span\u003e chan\u003cspan style=\"color: #6434A3;\"\u003e:i64\u003c/span\u003e\u003cspan style=\"color: #6276BA;\"\u003e)\u003c/span\u003e\n          \u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003ehere we produce samples for this note\u003c/span\u003e\n          \u003cspan style=\"color: #6276BA;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003eif\u003c/span\u003e \u003cspan style=\"color: #858580;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003e\u0026lt;\u003c/span\u003e \u003cspan style=\"color: #80A880;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003e-\u003c/span\u003e time starttime\u003cspan style=\"color: #80A880;\"\u003e)\u003c/span\u003e duration\u003cspan style=\"color: #858580;\"\u003e)\u003c/span\u003e\n              \u003cspan style=\"color: #858580;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003e*\u003c/span\u003e amplitude\n                 \u003cspan style=\"color: #80A880;\"\u003e(\u003c/span\u003esine time \u003cspan style=\"color: #887070;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003e+\u003c/span\u003e frequency\n                               \u003cspan style=\"color: #707183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003e*\u003c/span\u003e \u003cspan style=\"color: #D0372D;\"\u003e50.0\u003c/span\u003e\n                                  \u003cspan style=\"color: #7388D6;\"\u003e(\u003c/span\u003esine time \u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003e*\u003c/span\u003e \u003cspan style=\"color: #D0372D;\"\u003e0.1\u003c/span\u003e frequency\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #7388D6;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #707183;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #887070;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #80A880;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #858580;\"\u003e)\u003c/span\u003e\n              \u003cspan style=\"color: #D0372D;\"\u003e0.0\u003c/span\u003e\u003cspan style=\"color: #6276BA;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #907373;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #709870;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #7388D6;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #707183;\"\u003e)\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;/fm-tuner-note\u0026gt;\u003c/span\u003e\n\u003c/pre\u003e\n\u003c/div\u003e\n\n\u003cp\u003e\nAnd \u003ccode\u003efm_tuner_fx\u003c/code\u003e will still do nothing (but don't hesitate to edit it by\nyour taste!)\n\u003c/p\u003e\n\n\u003cdiv class=\"org-src-container\"\u003e\n\u003cpre class=\"src src-extempore\" id=\"orga2d621d\"\u003e\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;fm-tuner-fx\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #707183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003ebind-func\u003c/span\u003e \u003cspan style=\"color: #006699;\"\u003efm_tuner_fx\u003c/span\u003e\n  \u003cspan style=\"color: #7388D6;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elambda\u003c/span\u003e \u003cspan style=\"color: #909183;\"\u003e()\u003c/span\u003e\n    \u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elambda\u003c/span\u003e \u003cspan style=\"color: #709870;\"\u003e(\u003c/span\u003ein\u003cspan style=\"color: #6434A3;\"\u003e:SAMPLE\u003c/span\u003e time\u003cspan style=\"color: #6434A3;\"\u003e:i64\u003c/span\u003e chan\u003cspan style=\"color: #6434A3;\"\u003e:i64\u003c/span\u003e dat\u003cspan style=\"color: #6434A3;\"\u003e:SAMPLE*\u003c/span\u003e\u003cspan style=\"color: #709870;\"\u003e)\u003c/span\u003e\n      in\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #7388D6;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #707183;\"\u003e)\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;/fm-tuner-fx\u0026gt;\u003c/span\u003e\n\u003c/pre\u003e\n\u003c/div\u003e\n\n\u003cp\u003e\nThe moment of truth, our poor-man FM-synth sound:\n\u003c/p\u003e\n\n\u003cdiv class=\"org-src-container\"\u003e\n\u003cpre class=\"src src-extempore\" id=\"orgf293a1f\"\u003e\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;xtm/07-fm-tuner-sine.xtm\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;load-instruments\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #707183;\"\u003e(\u003c/span\u003esys\u003cspan style=\"color: #6434A3;\"\u003e:load\u003c/span\u003e \u003cspan style=\"color: #008000;\"\u003e\"libs/core/instruments.xtm\"\u003c/span\u003e\u003cspan style=\"color: #707183;\"\u003e)\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;/load-instruments\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;define-sine\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #707183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003ebind-val\u003c/span\u003e \u003cspan style=\"color: #006699;\"\u003eomega\u003c/span\u003e \u003cspan style=\"color: #6434A3;\"\u003eSAMPLE\u003c/span\u003e \u003cspan style=\"color: #7388D6;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003e/\u003c/span\u003e STWOPI SRf\u003cspan style=\"color: #7388D6;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #707183;\"\u003e)\u003c/span\u003e\n\n\u003cspan style=\"color: #707183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003ebind-func\u003c/span\u003e \u003cspan style=\"color: #006699;\"\u003esine\u003c/span\u003e\n  \u003cspan style=\"color: #7388D6;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elambda\u003c/span\u003e \u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003etime\u003cspan style=\"color: #6434A3;\"\u003e:i64\u003c/span\u003e freq\u003cspan style=\"color: #6434A3;\"\u003e:SAMPLE\u003c/span\u003e\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e\n    \u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003esin\u003c/span\u003e \u003cspan style=\"color: #709870;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003e*\u003c/span\u003e omega freq \u003cspan style=\"color: #907373;\"\u003e(\u003c/span\u003econvert time\u003cspan style=\"color: #907373;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #709870;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #7388D6;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #707183;\"\u003e)\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;/define-sine\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;fm-tuner-note\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #707183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003ebind-func\u003c/span\u003e \u003cspan style=\"color: #006699;\"\u003efm_tuner_note\u003c/span\u003e\n  \u003cspan style=\"color: #7388D6;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elambda\u003c/span\u003e \u003cspan style=\"color: #909183;\"\u003e()\u003c/span\u003e\n    \u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003ehere you can put init of entire instrument\u003c/span\u003e\n    \u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elambda\u003c/span\u003e \u003cspan style=\"color: #709870;\"\u003e(\u003c/span\u003edata\u003cspan style=\"color: #6434A3;\"\u003e:NoteData*\u003c/span\u003e nargs\u003cspan style=\"color: #6434A3;\"\u003e:i64\u003c/span\u003e dargs\u003cspan style=\"color: #6434A3;\"\u003e:SAMPLE*\u003c/span\u003e\u003cspan style=\"color: #709870;\"\u003e)\u003c/span\u003e\n      \u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003ehere init of certain note\u003c/span\u003e\n      \u003cspan style=\"color: #709870;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elet\u003c/span\u003e \u003cspan style=\"color: #907373;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #6276BA;\"\u003e(\u003c/span\u003efrequency \u003cspan style=\"color: #858580;\"\u003e(\u003c/span\u003enote_frequency data\u003cspan style=\"color: #858580;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #6276BA;\"\u003e)\u003c/span\u003e\n            \u003cspan style=\"color: #6276BA;\"\u003e(\u003c/span\u003eamplitude \u003cspan style=\"color: #858580;\"\u003e(\u003c/span\u003enote_amplitude data\u003cspan style=\"color: #858580;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #6276BA;\"\u003e)\u003c/span\u003e\n            \u003cspan style=\"color: #6276BA;\"\u003e(\u003c/span\u003estarttime \u003cspan style=\"color: #858580;\"\u003e(\u003c/span\u003enote_starttime data\u003cspan style=\"color: #858580;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #6276BA;\"\u003e)\u003c/span\u003e\n            \u003cspan style=\"color: #6276BA;\"\u003e(\u003c/span\u003eduration \u003cspan style=\"color: #858580;\"\u003e(\u003c/span\u003enote_duration data\u003cspan style=\"color: #858580;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #6276BA;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #907373;\"\u003e)\u003c/span\u003e\n        \u003cspan style=\"color: #907373;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elambda\u003c/span\u003e \u003cspan style=\"color: #6276BA;\"\u003e(\u003c/span\u003etime\u003cspan style=\"color: #6434A3;\"\u003e:i64\u003c/span\u003e chan\u003cspan style=\"color: #6434A3;\"\u003e:i64\u003c/span\u003e\u003cspan style=\"color: #6276BA;\"\u003e)\u003c/span\u003e\n          \u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003ehere we produce samples for this note\u003c/span\u003e\n          \u003cspan style=\"color: #6276BA;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003eif\u003c/span\u003e \u003cspan style=\"color: #858580;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003e\u0026lt;\u003c/span\u003e \u003cspan style=\"color: #80A880;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003e-\u003c/span\u003e time starttime\u003cspan style=\"color: #80A880;\"\u003e)\u003c/span\u003e duration\u003cspan style=\"color: #858580;\"\u003e)\u003c/span\u003e\n              \u003cspan style=\"color: #858580;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003e*\u003c/span\u003e amplitude\n                 \u003cspan style=\"color: #80A880;\"\u003e(\u003c/span\u003esine time \u003cspan style=\"color: #887070;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003e+\u003c/span\u003e frequency\n                               \u003cspan style=\"color: #707183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003e*\u003c/span\u003e \u003cspan style=\"color: #D0372D;\"\u003e50.0\u003c/span\u003e\n                                  \u003cspan style=\"color: #7388D6;\"\u003e(\u003c/span\u003esine time \u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003e*\u003c/span\u003e \u003cspan style=\"color: #D0372D;\"\u003e0.1\u003c/span\u003e frequency\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #7388D6;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #707183;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #887070;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #80A880;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #858580;\"\u003e)\u003c/span\u003e\n              \u003cspan style=\"color: #D0372D;\"\u003e0.0\u003c/span\u003e\u003cspan style=\"color: #6276BA;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #907373;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #709870;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #7388D6;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #707183;\"\u003e)\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;/fm-tuner-note\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;fm-tuner-fx\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #707183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003ebind-func\u003c/span\u003e \u003cspan style=\"color: #006699;\"\u003efm_tuner_fx\u003c/span\u003e\n  \u003cspan style=\"color: #7388D6;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elambda\u003c/span\u003e \u003cspan style=\"color: #909183;\"\u003e()\u003c/span\u003e\n    \u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elambda\u003c/span\u003e \u003cspan style=\"color: #709870;\"\u003e(\u003c/span\u003ein\u003cspan style=\"color: #6434A3;\"\u003e:SAMPLE\u003c/span\u003e time\u003cspan style=\"color: #6434A3;\"\u003e:i64\u003c/span\u003e chan\u003cspan style=\"color: #6434A3;\"\u003e:i64\u003c/span\u003e dat\u003cspan style=\"color: #6434A3;\"\u003e:SAMPLE*\u003c/span\u003e\u003cspan style=\"color: #709870;\"\u003e)\u003c/span\u003e\n      in\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #7388D6;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #707183;\"\u003e)\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;/fm-tuner-fx\u0026gt;\u003c/span\u003e\n\n\u003cspan style=\"color: #707183;\"\u003e(\u003c/span\u003emake-instrument fm_tuner fm_tuner\u003cspan style=\"color: #707183;\"\u003e)\u003c/span\u003e\n\n\u003cspan style=\"color: #707183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003ebind-func\u003c/span\u003e \u003cspan style=\"color: #006699;\"\u003edsp\u003c/span\u003e\u003cspan style=\"color: #6434A3;\"\u003e:DSP\u003c/span\u003e\n  \u003cspan style=\"color: #7388D6;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elambda\u003c/span\u003e \u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003ein time chan dat\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e\n    \u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003efm_tuner in time chan dat\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #7388D6;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #707183;\"\u003e)\u003c/span\u003e\n\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;set-dsp\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #707183;\"\u003e(\u003c/span\u003edsp\u003cspan style=\"color: #6434A3;\"\u003e:set!\u003c/span\u003e dsp\u003cspan style=\"color: #707183;\"\u003e)\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;/set-dsp\u0026gt;\u003c/span\u003e\n\n\u003cspan style=\"color: #707183;\"\u003e(\u003c/span\u003eplay-note \u003cspan style=\"color: #7388D6;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003enow\u003c/span\u003e\u003cspan style=\"color: #7388D6;\"\u003e)\u003c/span\u003e fm_tuner \u003cspan style=\"color: #D0372D;\"\u003e60\u003c/span\u003e \u003cspan style=\"color: #D0372D;\"\u003e90\u003c/span\u003e \u003cspan style=\"color: #D0372D;\"\u003e44100\u003c/span\u003e\u003cspan style=\"color: #707183;\"\u003e)\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;/xtm/07-fm-tuner-sine.xtm\u0026gt;\u003c/span\u003e\n\u003c/pre\u003e\n\u003c/div\u003e\n\n\u003cp\u003e\nDo you hear? It's not even glitchy, it's just a noise. Let's do the same\nsynth using \u003ccode\u003eosc_c\u003c/code\u003e:\n\u003c/p\u003e\n\n\u003cdiv class=\"org-src-container\"\u003e\n\u003cpre class=\"src src-extempore\" id=\"org350262d\"\u003e\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;fm-tuner-note-osc\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #707183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003ebind-func\u003c/span\u003e \u003cspan style=\"color: #006699;\"\u003efm_tuner_note\u003c/span\u003e\n  \u003cspan style=\"color: #7388D6;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elambda\u003c/span\u003e \u003cspan style=\"color: #909183;\"\u003e()\u003c/span\u003e\n    \u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003ehere you can put init of entire instrument\u003c/span\u003e\n    \u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elambda\u003c/span\u003e \u003cspan style=\"color: #709870;\"\u003e(\u003c/span\u003edata\u003cspan style=\"color: #6434A3;\"\u003e:NoteData*\u003c/span\u003e nargs\u003cspan style=\"color: #6434A3;\"\u003e:i64\u003c/span\u003e dargs\u003cspan style=\"color: #6434A3;\"\u003e:SAMPLE*\u003c/span\u003e\u003cspan style=\"color: #709870;\"\u003e)\u003c/span\u003e\n      \u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003ehere init of certain note\u003c/span\u003e\n      \u003cspan style=\"color: #709870;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elet\u003c/span\u003e \u003cspan style=\"color: #907373;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #6276BA;\"\u003e(\u003c/span\u003efrequency \u003cspan style=\"color: #858580;\"\u003e(\u003c/span\u003enote_frequency data\u003cspan style=\"color: #858580;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #6276BA;\"\u003e)\u003c/span\u003e\n            \u003cspan style=\"color: #6276BA;\"\u003e(\u003c/span\u003eamplitude \u003cspan style=\"color: #858580;\"\u003e(\u003c/span\u003enote_amplitude data\u003cspan style=\"color: #858580;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #6276BA;\"\u003e)\u003c/span\u003e\n            \u003cspan style=\"color: #6276BA;\"\u003e(\u003c/span\u003estarttime \u003cspan style=\"color: #858580;\"\u003e(\u003c/span\u003enote_starttime data\u003cspan style=\"color: #858580;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #6276BA;\"\u003e)\u003c/span\u003e\n            \u003cspan style=\"color: #6276BA;\"\u003e(\u003c/span\u003eduration \u003cspan style=\"color: #858580;\"\u003e(\u003c/span\u003enote_duration data\u003cspan style=\"color: #858580;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #6276BA;\"\u003e)\u003c/span\u003e\n            \u003cspan style=\"color: #6276BA;\"\u003e(\u003c/span\u003ecarrier \u003cspan style=\"color: #858580;\"\u003e(\u003c/span\u003eosc_c \u003cspan style=\"color: #D0372D;\"\u003e0.0\u003c/span\u003e\u003cspan style=\"color: #858580;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #6276BA;\"\u003e)\u003c/span\u003e\n            \u003cspan style=\"color: #6276BA;\"\u003e(\u003c/span\u003emodulator \u003cspan style=\"color: #858580;\"\u003e(\u003c/span\u003eosc_c \u003cspan style=\"color: #D0372D;\"\u003e0.0\u003c/span\u003e\u003cspan style=\"color: #858580;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #6276BA;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #907373;\"\u003e)\u003c/span\u003e\n        \u003cspan style=\"color: #907373;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elambda\u003c/span\u003e \u003cspan style=\"color: #6276BA;\"\u003e(\u003c/span\u003etime\u003cspan style=\"color: #6434A3;\"\u003e:i64\u003c/span\u003e chan\u003cspan style=\"color: #6434A3;\"\u003e:i64\u003c/span\u003e\u003cspan style=\"color: #6276BA;\"\u003e)\u003c/span\u003e\n          \u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003ehere we produce samples for this note\u003c/span\u003e\n          \u003cspan style=\"color: #6276BA;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003eif\u003c/span\u003e \u003cspan style=\"color: #858580;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003e\u0026lt;\u003c/span\u003e \u003cspan style=\"color: #80A880;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003e-\u003c/span\u003e time starttime\u003cspan style=\"color: #80A880;\"\u003e)\u003c/span\u003e duration\u003cspan style=\"color: #858580;\"\u003e)\u003c/span\u003e\n              \u003cspan style=\"color: #858580;\"\u003e(\u003c/span\u003ecarrier amplitude\n                       \u003cspan style=\"color: #80A880;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003e+\u003c/span\u003e frequency\n                          \u003cspan style=\"color: #887070;\"\u003e(\u003c/span\u003emodulator \u003cspan style=\"color: #D0372D;\"\u003e50.0\u003c/span\u003e \u003cspan style=\"color: #707183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003e*\u003c/span\u003e \u003cspan style=\"color: #D0372D;\"\u003e0.1\u003c/span\u003e frequency\u003cspan style=\"color: #707183;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #887070;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #80A880;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #858580;\"\u003e)\u003c/span\u003e\n              \u003cspan style=\"color: #D0372D;\"\u003e0.0\u003c/span\u003e\u003cspan style=\"color: #6276BA;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #907373;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #709870;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #7388D6;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #707183;\"\u003e)\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;/fm-tuner-note-osc\u0026gt;\u003c/span\u003e\n\u003c/pre\u003e\n\u003c/div\u003e\n\n\u003cp\u003e\nAnd the file:\n\u003c/p\u003e\n\n\u003cdiv class=\"org-src-container\"\u003e\n\u003cpre class=\"src src-extempore\" id=\"org13dfcc0\"\u003e\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;xtm/08-fm-tuner-osc.xtm\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;load-instruments\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #707183;\"\u003e(\u003c/span\u003esys\u003cspan style=\"color: #6434A3;\"\u003e:load\u003c/span\u003e \u003cspan style=\"color: #008000;\"\u003e\"libs/core/instruments.xtm\"\u003c/span\u003e\u003cspan style=\"color: #707183;\"\u003e)\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;/load-instruments\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;fm-tuner-note-osc\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #707183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003ebind-func\u003c/span\u003e \u003cspan style=\"color: #006699;\"\u003efm_tuner_note\u003c/span\u003e\n  \u003cspan style=\"color: #7388D6;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elambda\u003c/span\u003e \u003cspan style=\"color: #909183;\"\u003e()\u003c/span\u003e\n    \u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003ehere you can put init of entire instrument\u003c/span\u003e\n    \u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elambda\u003c/span\u003e \u003cspan style=\"color: #709870;\"\u003e(\u003c/span\u003edata\u003cspan style=\"color: #6434A3;\"\u003e:NoteData*\u003c/span\u003e nargs\u003cspan style=\"color: #6434A3;\"\u003e:i64\u003c/span\u003e dargs\u003cspan style=\"color: #6434A3;\"\u003e:SAMPLE*\u003c/span\u003e\u003cspan style=\"color: #709870;\"\u003e)\u003c/span\u003e\n      \u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003ehere init of certain note\u003c/span\u003e\n      \u003cspan style=\"color: #709870;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elet\u003c/span\u003e \u003cspan style=\"color: #907373;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #6276BA;\"\u003e(\u003c/span\u003efrequency \u003cspan style=\"color: #858580;\"\u003e(\u003c/span\u003enote_frequency data\u003cspan style=\"color: #858580;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #6276BA;\"\u003e)\u003c/span\u003e\n            \u003cspan style=\"color: #6276BA;\"\u003e(\u003c/span\u003eamplitude \u003cspan style=\"color: #858580;\"\u003e(\u003c/span\u003enote_amplitude data\u003cspan style=\"color: #858580;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #6276BA;\"\u003e)\u003c/span\u003e\n            \u003cspan style=\"color: #6276BA;\"\u003e(\u003c/span\u003estarttime \u003cspan style=\"color: #858580;\"\u003e(\u003c/span\u003enote_starttime data\u003cspan style=\"color: #858580;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #6276BA;\"\u003e)\u003c/span\u003e\n            \u003cspan style=\"color: #6276BA;\"\u003e(\u003c/span\u003eduration \u003cspan style=\"color: #858580;\"\u003e(\u003c/span\u003enote_duration data\u003cspan style=\"color: #858580;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #6276BA;\"\u003e)\u003c/span\u003e\n            \u003cspan style=\"color: #6276BA;\"\u003e(\u003c/span\u003ecarrier \u003cspan style=\"color: #858580;\"\u003e(\u003c/span\u003eosc_c \u003cspan style=\"color: #D0372D;\"\u003e0.0\u003c/span\u003e\u003cspan style=\"color: #858580;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #6276BA;\"\u003e)\u003c/span\u003e\n            \u003cspan style=\"color: #6276BA;\"\u003e(\u003c/span\u003emodulator \u003cspan style=\"color: #858580;\"\u003e(\u003c/span\u003eosc_c \u003cspan style=\"color: #D0372D;\"\u003e0.0\u003c/span\u003e\u003cspan style=\"color: #858580;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #6276BA;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #907373;\"\u003e)\u003c/span\u003e\n        \u003cspan style=\"color: #907373;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elambda\u003c/span\u003e \u003cspan style=\"color: #6276BA;\"\u003e(\u003c/span\u003etime\u003cspan style=\"color: #6434A3;\"\u003e:i64\u003c/span\u003e chan\u003cspan style=\"color: #6434A3;\"\u003e:i64\u003c/span\u003e\u003cspan style=\"color: #6276BA;\"\u003e)\u003c/span\u003e\n          \u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003ehere we produce samples for this note\u003c/span\u003e\n          \u003cspan style=\"color: #6276BA;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003eif\u003c/span\u003e \u003cspan style=\"color: #858580;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003e\u0026lt;\u003c/span\u003e \u003cspan style=\"color: #80A880;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003e-\u003c/span\u003e time starttime\u003cspan style=\"color: #80A880;\"\u003e)\u003c/span\u003e duration\u003cspan style=\"color: #858580;\"\u003e)\u003c/span\u003e\n              \u003cspan style=\"color: #858580;\"\u003e(\u003c/span\u003ecarrier amplitude\n                       \u003cspan style=\"color: #80A880;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003e+\u003c/span\u003e frequency\n                          \u003cspan style=\"color: #887070;\"\u003e(\u003c/span\u003emodulator \u003cspan style=\"color: #D0372D;\"\u003e50.0\u003c/span\u003e \u003cspan style=\"color: #707183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003e*\u003c/span\u003e \u003cspan style=\"color: #D0372D;\"\u003e0.1\u003c/span\u003e frequency\u003cspan style=\"color: #707183;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #887070;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #80A880;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #858580;\"\u003e)\u003c/span\u003e\n              \u003cspan style=\"color: #D0372D;\"\u003e0.0\u003c/span\u003e\u003cspan style=\"color: #6276BA;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #907373;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #709870;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #7388D6;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #707183;\"\u003e)\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;/fm-tuner-note-osc\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;fm-tuner-fx\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #707183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003ebind-func\u003c/span\u003e \u003cspan style=\"color: #006699;\"\u003efm_tuner_fx\u003c/span\u003e\n  \u003cspan style=\"color: #7388D6;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elambda\u003c/span\u003e \u003cspan style=\"color: #909183;\"\u003e()\u003c/span\u003e\n    \u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elambda\u003c/span\u003e \u003cspan style=\"color: #709870;\"\u003e(\u003c/span\u003ein\u003cspan style=\"color: #6434A3;\"\u003e:SAMPLE\u003c/span\u003e time\u003cspan style=\"color: #6434A3;\"\u003e:i64\u003c/span\u003e chan\u003cspan style=\"color: #6434A3;\"\u003e:i64\u003c/span\u003e dat\u003cspan style=\"color: #6434A3;\"\u003e:SAMPLE*\u003c/span\u003e\u003cspan style=\"color: #709870;\"\u003e)\u003c/span\u003e\n      in\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #7388D6;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #707183;\"\u003e)\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;/fm-tuner-fx\u0026gt;\u003c/span\u003e\n\n\u003cspan style=\"color: #707183;\"\u003e(\u003c/span\u003emake-instrument fm_tuner fm_tuner\u003cspan style=\"color: #707183;\"\u003e)\u003c/span\u003e\n\n\u003cspan style=\"color: #707183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003ebind-func\u003c/span\u003e \u003cspan style=\"color: #006699;\"\u003edsp\u003c/span\u003e\u003cspan style=\"color: #6434A3;\"\u003e:DSP\u003c/span\u003e\n  \u003cspan style=\"color: #7388D6;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elambda\u003c/span\u003e \u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003ein time chan dat\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e\n    \u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003efm_tuner in time chan dat\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #7388D6;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #707183;\"\u003e)\u003c/span\u003e\n\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;set-dsp\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #707183;\"\u003e(\u003c/span\u003edsp\u003cspan style=\"color: #6434A3;\"\u003e:set!\u003c/span\u003e dsp\u003cspan style=\"color: #707183;\"\u003e)\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;/set-dsp\u0026gt;\u003c/span\u003e\n\n\u003cspan style=\"color: #707183;\"\u003e(\u003c/span\u003eplay-note \u003cspan style=\"color: #7388D6;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003enow\u003c/span\u003e\u003cspan style=\"color: #7388D6;\"\u003e)\u003c/span\u003e fm_tuner \u003cspan style=\"color: #D0372D;\"\u003e60\u003c/span\u003e \u003cspan style=\"color: #D0372D;\"\u003e90\u003c/span\u003e \u003cspan style=\"color: #D0372D;\"\u003e44100\u003c/span\u003e\u003cspan style=\"color: #707183;\"\u003e)\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;/xtm/08-fm-tuner-osc.xtm\u0026gt;\u003c/span\u003e\n\u003c/pre\u003e\n\u003c/div\u003e\n\n\u003cp\u003e\nThis one is so nice, isn't it? Viva la \u003ccode\u003eosc_c\u003c/code\u003e ;-) Let's redo our \u003ccode\u003etuner\u003c/code\u003e\ninstrument with it:\n\u003c/p\u003e\n\n\u003cdiv class=\"org-src-container\"\u003e\n\u003cpre class=\"src src-extempore\" id=\"org0993f47\"\u003e\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;tuner-note-osc\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #707183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003ebind-func\u003c/span\u003e \u003cspan style=\"color: #006699;\"\u003etuner_note\u003c/span\u003e\n  \u003cspan style=\"color: #7388D6;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elambda\u003c/span\u003e \u003cspan style=\"color: #909183;\"\u003e()\u003c/span\u003e\n    \u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003ehere you can put init of entire instrument\u003c/span\u003e\n    \u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elambda\u003c/span\u003e \u003cspan style=\"color: #709870;\"\u003e(\u003c/span\u003edata\u003cspan style=\"color: #6434A3;\"\u003e:NoteData*\u003c/span\u003e nargs\u003cspan style=\"color: #6434A3;\"\u003e:i64\u003c/span\u003e dargs\u003cspan style=\"color: #6434A3;\"\u003e:SAMPLE*\u003c/span\u003e\u003cspan style=\"color: #709870;\"\u003e)\u003c/span\u003e\n      \u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003ehere init of certain note\u003c/span\u003e\n      \u003cspan style=\"color: #709870;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elet\u003c/span\u003e \u003cspan style=\"color: #907373;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #6276BA;\"\u003e(\u003c/span\u003efrequency \u003cspan style=\"color: #858580;\"\u003e(\u003c/span\u003enote_frequency data\u003cspan style=\"color: #858580;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #6276BA;\"\u003e)\u003c/span\u003e\n            \u003cspan style=\"color: #6276BA;\"\u003e(\u003c/span\u003eamplitude \u003cspan style=\"color: #858580;\"\u003e(\u003c/span\u003enote_amplitude data\u003cspan style=\"color: #858580;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #6276BA;\"\u003e)\u003c/span\u003e\n            \u003cspan style=\"color: #6276BA;\"\u003e(\u003c/span\u003estarttime \u003cspan style=\"color: #858580;\"\u003e(\u003c/span\u003enote_starttime data\u003cspan style=\"color: #858580;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #6276BA;\"\u003e)\u003c/span\u003e\n            \u003cspan style=\"color: #6276BA;\"\u003e(\u003c/span\u003eduration \u003cspan style=\"color: #858580;\"\u003e(\u003c/span\u003enote_duration data\u003cspan style=\"color: #858580;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #6276BA;\"\u003e)\u003c/span\u003e\n            \u003cspan style=\"color: #6276BA;\"\u003e(\u003c/span\u003ecarrier \u003cspan style=\"color: #858580;\"\u003e(\u003c/span\u003eosc_c \u003cspan style=\"color: #D0372D;\"\u003e0.0\u003c/span\u003e\u003cspan style=\"color: #858580;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #6276BA;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #907373;\"\u003e)\u003c/span\u003e\n        \u003cspan style=\"color: #907373;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elambda\u003c/span\u003e \u003cspan style=\"color: #6276BA;\"\u003e(\u003c/span\u003etime\u003cspan style=\"color: #6434A3;\"\u003e:i64\u003c/span\u003e chan\u003cspan style=\"color: #6434A3;\"\u003e:i64\u003c/span\u003e\u003cspan style=\"color: #6276BA;\"\u003e)\u003c/span\u003e\n          \u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003ehere we produce samples for this note\u003c/span\u003e\n          \u003cspan style=\"color: #6276BA;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003eif\u003c/span\u003e \u003cspan style=\"color: #858580;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003e\u0026lt;\u003c/span\u003e \u003cspan style=\"color: #80A880;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003e-\u003c/span\u003e time starttime\u003cspan style=\"color: #80A880;\"\u003e)\u003c/span\u003e duration\u003cspan style=\"color: #858580;\"\u003e)\u003c/span\u003e\n              \u003cspan style=\"color: #858580;\"\u003e(\u003c/span\u003ecarrier amplitude frequency\u003cspan style=\"color: #858580;\"\u003e)\u003c/span\u003e\n              \u003cspan style=\"color: #D0372D;\"\u003e0.0\u003c/span\u003e\u003cspan style=\"color: #6276BA;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #907373;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #709870;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #7388D6;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #707183;\"\u003e)\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;/tuner-note-osc\u0026gt;\u003c/span\u003e\n\u003c/pre\u003e\n\u003c/div\u003e\n\n\u003cdiv class=\"org-src-container\"\u003e\n\u003cpre class=\"src src-extempore\" id=\"org15c2226\"\u003e\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;setup-tuner-osc\u0026gt;\u003c/span\u003e\n\u0026lt;\u0026lt;load-instruments\u0026gt;\u0026gt;\n\u0026lt;\u0026lt;tuner-note-osc\u0026gt;\u0026gt;\n\u0026lt;\u0026lt;tuner-fx\u0026gt;\u0026gt;\n\u0026lt;\u0026lt;make-tuner\u0026gt;\u0026gt;\n\u0026lt;\u0026lt;tuner-dsp\u0026gt;\u0026gt;\n\u0026lt;\u0026lt;set-dsp\u0026gt;\u0026gt;\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;/setup-tuner-osc\u0026gt;\u003c/span\u003e\n\u003c/pre\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\n\u003cdiv id=\"outline-container-orged10707\" class=\"outline-3\"\u003e\n\u003ch3 id=\"orged10707\"\u003e\u003cspan class=\"section-number-3\"\u003e3.2\u003c/span\u003e Keys \u0026amp; Scales\u003c/h3\u003e\n\u003cdiv class=\"outline-text-3\" id=\"text-3-2\"\u003e\n\u003c/div\u003e\u003cdiv id=\"outline-container-org98eb7ba\" class=\"outline-4\"\u003e\n\u003ch4 id=\"org98eb7ba\"\u003e\u003cspan class=\"section-number-4\"\u003e3.2.1\u003c/span\u003e Pentatonic scale\u003c/h4\u003e\n\u003cdiv class=\"outline-text-4\" id=\"text-3-2-1\"\u003e\n\u003cp\u003e\nFive notes with simple ratios forms pentatonic scale. This scale one of the\nmost ancient and it has a nice property \"easy to learn, hard to master\".\nPlaying in pentatonic scale you would create more or less pleasant melody\nwithout any effort, though making anything really impressive require the\nsame amount of work, or even more, as using other scales.\n\u003c/p\u003e\n\n\u003cp\u003e\nLet's make up our scale from the ground to get used with it. For musings\nyou'd better use Extempore standard library,  \"pitch\nclass and interval sets\" module.\n\u003c/p\u003e\n\n\u003cp\u003e\nFirst things first, let's resurrect our simple instrument playing sine wave\nby using \u003ccode\u003e\u0026lt;\u0026lt;setup-tuner\u0026gt;\u0026gt;\u003c/code\u003e block.\n\u003c/p\u003e\n\n\u003cdiv class=\"org-src-container\"\u003e\n\u003cpre class=\"src src-extempore\"\u003e\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;load-pc\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #707183;\"\u003e(\u003c/span\u003esys\u003cspan style=\"color: #6434A3;\"\u003e:load\u003c/span\u003e \u003cspan style=\"color: #008000;\"\u003e\"libs/core/pc_ivl.xtm\"\u003c/span\u003e\u003cspan style=\"color: #707183;\"\u003e)\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;/load-pc\u0026gt;\u003c/span\u003e\n\u003c/pre\u003e\n\u003c/div\u003e\n\n\u003cp\u003e\nAs long as start note of the scale could be any, let's make it a parameter\nfor our scale-building function. I'm going to use 0-based indexing because\nit's easier to align with list indices in Extempore. Our scale would be just\na list of frequencies.\n\u003c/p\u003e\n\n\u003cdiv class=\"org-src-container\"\u003e\n\u003cpre class=\"src src-extempore\"\u003e\u003cspan style=\"color: #707183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003edefine\u003c/span\u003e \u003cspan style=\"color: #006699;\"\u003emake-pentatonic-scale\u003c/span\u003e\n  \u003cspan style=\"color: #7388D6;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elambda\u003c/span\u003e \u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003efreq0\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e\n    \u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003ehere is our code\u003c/span\u003e\n    \u003cspan style=\"color: #7388D6;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #707183;\"\u003e)\u003c/span\u003e\n\u003c/pre\u003e\n\u003c/div\u003e\n\n\u003cp\u003e\n\u003ccode\u003efreq3\u003c/code\u003e relates to \u003ccode\u003efreq0\u003c/code\u003e as \u003ccode\u003e3:2\u003c/code\u003e, \u003ccode\u003efreq2\u003c/code\u003e as \u003ccode\u003e5:4\u003c/code\u003e, \u003ccode\u003efreq4\u003c/code\u003e as \u003ccode\u003e5:3\u003c/code\u003e,\n\u003ccode\u003efreq1\u003c/code\u003e as \u003ccode\u003e9:8\u003c/code\u003e\n\u003c/p\u003e\n\n\u003cdiv class=\"org-src-container\"\u003e\n\u003cpre class=\"src src-extempore\" id=\"org2ed3de7\"\u003e\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;make-pentatonic-scale-freq\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #707183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003edefine\u003c/span\u003e \u003cspan style=\"color: #006699;\"\u003emake-pentatonic-scale-freq\u003c/span\u003e\n  \u003cspan style=\"color: #7388D6;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elambda\u003c/span\u003e \u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003efreq0\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e\n    \u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003emap\u003c/span\u003e \u003cspan style=\"color: #709870;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elambda\u003c/span\u003e \u003cspan style=\"color: #907373;\"\u003e(\u003c/span\u003ex\u003cspan style=\"color: #907373;\"\u003e)\u003c/span\u003e \u003cspan style=\"color: #907373;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003e*\u003c/span\u003e x freq0\u003cspan style=\"color: #907373;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #709870;\"\u003e)\u003c/span\u003e\n         '\u003cspan style=\"color: #709870;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #D0372D;\"\u003e1\u003c/span\u003e \u003cspan style=\"color: #D0372D;\"\u003e9/8\u003c/span\u003e \u003cspan style=\"color: #D0372D;\"\u003e3/2\u003c/span\u003e \u003cspan style=\"color: #D0372D;\"\u003e5/4\u003c/span\u003e \u003cspan style=\"color: #D0372D;\"\u003e3/2\u003c/span\u003e \u003cspan style=\"color: #D0372D;\"\u003e5/3\u003c/span\u003e\u003cspan style=\"color: #709870;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #7388D6;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #707183;\"\u003e)\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;/make-pentatonic-scale-freq\u0026gt;\u003c/span\u003e\n\u003c/pre\u003e\n\u003c/div\u003e\n\n\u003cp\u003e\nIf we want to work with MIDI notes, some extra calculations are required:\n\u003c/p\u003e\n\n\u003cdiv class=\"org-src-container\"\u003e\n\u003cpre class=\"src src-extempore\" id=\"org641a3e8\"\u003e\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;make-pentatonic-scale\u0026gt;\u003c/span\u003e\n\u0026lt;\u0026lt;make-pentatonic-scale-freq\u0026gt;\u0026gt;\n\n\u003cspan style=\"color: #707183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003edefine\u003c/span\u003e \u003cspan style=\"color: #006699;\"\u003emake-pentatonic-scale\u003c/span\u003e\n  \u003cspan style=\"color: #7388D6;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elambda\u003c/span\u003e \u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003estart-note\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e\n    \u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003emap\u003c/span\u003e frq2midi \u003cspan style=\"color: #709870;\"\u003e(\u003c/span\u003emake-pentatonic-scale-freq \u003cspan style=\"color: #907373;\"\u003e(\u003c/span\u003emidi2frq start-note\u003cspan style=\"color: #907373;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #709870;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #7388D6;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #707183;\"\u003e)\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;/make-pentatonic-scale\u0026gt;\u003c/span\u003e\n\u003c/pre\u003e\n\u003c/div\u003e\n\n\u003cp\u003e\nNow let's try to play scale in sequence and in chord:\n\u003c/p\u003e\n\n\u003cdiv class=\"org-src-container\"\u003e\n\u003cpre class=\"src src-extempore\" id=\"org4a5ad90\"\u003e\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;play-pentatonic-scale\u0026gt;\u003c/span\u003e\n\u0026lt;\u0026lt;play-chord\u0026gt;\u0026gt;\n\n\u003cspan style=\"color: #707183;\"\u003e(\u003c/span\u003eplay-chord \u003cspan style=\"color: #7388D6;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003enow\u003c/span\u003e\u003cspan style=\"color: #7388D6;\"\u003e)\u003c/span\u003e tuner \u003cspan style=\"color: #7388D6;\"\u003e(\u003c/span\u003emake-pentatonic-scale \u003cspan style=\"color: #D0372D;\"\u003e60\u003c/span\u003e\u003cspan style=\"color: #7388D6;\"\u003e)\u003c/span\u003e *second*\u003cspan style=\"color: #707183;\"\u003e)\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;/play-pentatonic-scale\u0026gt;\u003c/span\u003e\n\u003c/pre\u003e\n\u003c/div\u003e\n\n\u003cdiv class=\"org-src-container\"\u003e\n\u003cpre class=\"src src-extempore\" id=\"org72d1c04\"\u003e\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;xtm/09-pentatonic-scale.xtm\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;setup-tuner-osc\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;load-instruments\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #707183;\"\u003e(\u003c/span\u003esys\u003cspan style=\"color: #6434A3;\"\u003e:load\u003c/span\u003e \u003cspan style=\"color: #008000;\"\u003e\"libs/core/instruments.xtm\"\u003c/span\u003e\u003cspan style=\"color: #707183;\"\u003e)\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;/load-instruments\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;tuner-note-osc\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #707183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003ebind-func\u003c/span\u003e \u003cspan style=\"color: #006699;\"\u003etuner_note\u003c/span\u003e\n  \u003cspan style=\"color: #7388D6;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elambda\u003c/span\u003e \u003cspan style=\"color: #909183;\"\u003e()\u003c/span\u003e\n    \u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003ehere you can put init of entire instrument\u003c/span\u003e\n    \u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elambda\u003c/span\u003e \u003cspan style=\"color: #709870;\"\u003e(\u003c/span\u003edata\u003cspan style=\"color: #6434A3;\"\u003e:NoteData*\u003c/span\u003e nargs\u003cspan style=\"color: #6434A3;\"\u003e:i64\u003c/span\u003e dargs\u003cspan style=\"color: #6434A3;\"\u003e:SAMPLE*\u003c/span\u003e\u003cspan style=\"color: #709870;\"\u003e)\u003c/span\u003e\n      \u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003ehere init of certain note\u003c/span\u003e\n      \u003cspan style=\"color: #709870;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elet\u003c/span\u003e \u003cspan style=\"color: #907373;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #6276BA;\"\u003e(\u003c/span\u003efrequency \u003cspan style=\"color: #858580;\"\u003e(\u003c/span\u003enote_frequency data\u003cspan style=\"color: #858580;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #6276BA;\"\u003e)\u003c/span\u003e\n            \u003cspan style=\"color: #6276BA;\"\u003e(\u003c/span\u003eamplitude \u003cspan style=\"color: #858580;\"\u003e(\u003c/span\u003enote_amplitude data\u003cspan style=\"color: #858580;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #6276BA;\"\u003e)\u003c/span\u003e\n            \u003cspan style=\"color: #6276BA;\"\u003e(\u003c/span\u003estarttime \u003cspan style=\"color: #858580;\"\u003e(\u003c/span\u003enote_starttime data\u003cspan style=\"color: #858580;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #6276BA;\"\u003e)\u003c/span\u003e\n            \u003cspan style=\"color: #6276BA;\"\u003e(\u003c/span\u003eduration \u003cspan style=\"color: #858580;\"\u003e(\u003c/span\u003enote_duration data\u003cspan style=\"color: #858580;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #6276BA;\"\u003e)\u003c/span\u003e\n            \u003cspan style=\"color: #6276BA;\"\u003e(\u003c/span\u003ecarrier \u003cspan style=\"color: #858580;\"\u003e(\u003c/span\u003eosc_c \u003cspan style=\"color: #D0372D;\"\u003e0.0\u003c/span\u003e\u003cspan style=\"color: #858580;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #6276BA;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #907373;\"\u003e)\u003c/span\u003e\n        \u003cspan style=\"color: #907373;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elambda\u003c/span\u003e \u003cspan style=\"color: #6276BA;\"\u003e(\u003c/span\u003etime\u003cspan style=\"color: #6434A3;\"\u003e:i64\u003c/span\u003e chan\u003cspan style=\"color: #6434A3;\"\u003e:i64\u003c/span\u003e\u003cspan style=\"color: #6276BA;\"\u003e)\u003c/span\u003e\n          \u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003ehere we produce samples for this note\u003c/span\u003e\n          \u003cspan style=\"color: #6276BA;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003eif\u003c/span\u003e \u003cspan style=\"color: #858580;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003e\u0026lt;\u003c/span\u003e \u003cspan style=\"color: #80A880;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003e-\u003c/span\u003e time starttime\u003cspan style=\"color: #80A880;\"\u003e)\u003c/span\u003e duration\u003cspan style=\"color: #858580;\"\u003e)\u003c/span\u003e\n              \u003cspan style=\"color: #858580;\"\u003e(\u003c/span\u003ecarrier amplitude frequency\u003cspan style=\"color: #858580;\"\u003e)\u003c/span\u003e\n              \u003cspan style=\"color: #D0372D;\"\u003e0.0\u003c/span\u003e\u003cspan style=\"color: #6276BA;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #907373;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #709870;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #7388D6;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #707183;\"\u003e)\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;/tuner-note-osc\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;tuner-fx\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #707183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003ebind-func\u003c/span\u003e \u003cspan style=\"color: #006699;\"\u003etuner_fx\u003c/span\u003e\n  \u003cspan style=\"color: #7388D6;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elambda\u003c/span\u003e \u003cspan style=\"color: #909183;\"\u003e()\u003c/span\u003e\n    \u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003ehere put fx init\u003c/span\u003e\n    \u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elambda\u003c/span\u003e \u003cspan style=\"color: #709870;\"\u003e(\u003c/span\u003ein\u003cspan style=\"color: #6434A3;\"\u003e:SAMPLE\u003c/span\u003e time\u003cspan style=\"color: #6434A3;\"\u003e:i64\u003c/span\u003e chan\u003cspan style=\"color: #6434A3;\"\u003e:i64\u003c/span\u003e dat\u003cspan style=\"color: #6434A3;\"\u003e:SAMPLE*\u003c/span\u003e\u003cspan style=\"color: #709870;\"\u003e)\u003c/span\u003e\n      in\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #7388D6;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #707183;\"\u003e)\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;/tuner-fx\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;make-tuner\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #707183;\"\u003e(\u003c/span\u003emake-instrument tuner tuner\u003cspan style=\"color: #707183;\"\u003e)\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;/make-tuner\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;tuner-dsp\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #707183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003ebind-func\u003c/span\u003e \u003cspan style=\"color: #006699;\"\u003edsp\u003c/span\u003e\u003cspan style=\"color: #6434A3;\"\u003e:DSP\u003c/span\u003e\n  \u003cspan style=\"color: #7388D6;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elambda\u003c/span\u003e \u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003ein time chan dat\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e\n    \u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003etuner in time chan dat\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #7388D6;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #707183;\"\u003e)\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;/tuner-dsp\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;set-dsp\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #707183;\"\u003e(\u003c/span\u003edsp\u003cspan style=\"color: #6434A3;\"\u003e:set!\u003c/span\u003e dsp\u003cspan style=\"color: #707183;\"\u003e)\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;/set-dsp\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;/setup-tuner-osc\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;make-pentatonic-scale\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;make-pentatonic-scale-freq\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #707183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003edefine\u003c/span\u003e \u003cspan style=\"color: #006699;\"\u003emake-pentatonic-scale-freq\u003c/span\u003e\n  \u003cspan style=\"color: #7388D6;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elambda\u003c/span\u003e \u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003efreq0\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e\n    \u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003emap\u003c/span\u003e \u003cspan style=\"color: #709870;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elambda\u003c/span\u003e \u003cspan style=\"color: #907373;\"\u003e(\u003c/span\u003ex\u003cspan style=\"color: #907373;\"\u003e)\u003c/span\u003e \u003cspan style=\"color: #907373;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003e*\u003c/span\u003e x freq0\u003cspan style=\"color: #907373;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #709870;\"\u003e)\u003c/span\u003e\n         '\u003cspan style=\"color: #709870;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #D0372D;\"\u003e1\u003c/span\u003e \u003cspan style=\"color: #D0372D;\"\u003e9/8\u003c/span\u003e \u003cspan style=\"color: #D0372D;\"\u003e3/2\u003c/span\u003e \u003cspan style=\"color: #D0372D;\"\u003e5/4\u003c/span\u003e \u003cspan style=\"color: #D0372D;\"\u003e3/2\u003c/span\u003e \u003cspan style=\"color: #D0372D;\"\u003e5/3\u003c/span\u003e\u003cspan style=\"color: #709870;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #7388D6;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #707183;\"\u003e)\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;/make-pentatonic-scale-freq\u0026gt;\u003c/span\u003e\n\n\u003cspan style=\"color: #707183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003edefine\u003c/span\u003e \u003cspan style=\"color: #006699;\"\u003emake-pentatonic-scale\u003c/span\u003e\n  \u003cspan style=\"color: #7388D6;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elambda\u003c/span\u003e \u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003estart-note\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e\n    \u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003emap\u003c/span\u003e frq2midi \u003cspan style=\"color: #709870;\"\u003e(\u003c/span\u003emake-pentatonic-scale-freq \u003cspan style=\"color: #907373;\"\u003e(\u003c/span\u003emidi2frq start-note\u003cspan style=\"color: #907373;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #709870;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #7388D6;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #707183;\"\u003e)\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;/make-pentatonic-scale\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;play-pentatonic-scale\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;play-chord\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #707183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003edefine\u003c/span\u003e \u003cspan style=\"color: #006699;\"\u003eplay-chord\u003c/span\u003e\n  \u003cspan style=\"color: #7388D6;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elambda\u003c/span\u003e \u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003et inst pitches dur\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e\n    \u003cspan style=\"color: #909183;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elet\u003c/span\u003e \u003cspan style=\"color: #709870;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #907373;\"\u003e(\u003c/span\u003etogether-time \u003cspan style=\"color: #6276BA;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003e+\u003c/span\u003e t \u003cspan style=\"color: #858580;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003e*\u003c/span\u003e \u003cspan style=\"color: #D0372D;\"\u003e2\u003c/span\u003e \u003cspan style=\"color: #80A880;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003elength\u003c/span\u003e pitches\u003cspan style=\"color: #80A880;\"\u003e)\u003c/span\u003e dur\u003cspan style=\"color: #858580;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #6276BA;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #907373;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #709870;\"\u003e)\u003c/span\u003e\n      \u003cspan style=\"color: #709870;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003efor-each\u003c/span\u003e\n       \u003cspan style=\"color: #907373;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #0000FF;\"\u003elambda\u003c/span\u003e \u003cspan style=\"color: #6276BA;\"\u003e(\u003c/span\u003ei pitch\u003cspan style=\"color: #6276BA;\"\u003e)\u003c/span\u003e\n         \u003cspan style=\"color: #6276BA;\"\u003e(\u003c/span\u003eplay-note \u003cspan style=\"color: #858580;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003e+\u003c/span\u003e t \u003cspan style=\"color: #80A880;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003e*\u003c/span\u003e \u003cspan style=\"color: #D0372D;\"\u003e2\u003c/span\u003e i dur\u003cspan style=\"color: #80A880;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #858580;\"\u003e)\u003c/span\u003e inst pitch \u003cspan style=\"color: #D0372D;\"\u003e100\u003c/span\u003e dur\u003cspan style=\"color: #6276BA;\"\u003e)\u003c/span\u003e\n         \u003cspan style=\"color: #6276BA;\"\u003e(\u003c/span\u003eplay-note together-time inst pitch \u003cspan style=\"color: #D0372D;\"\u003e100\u003c/span\u003e dur\u003cspan style=\"color: #6276BA;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #907373;\"\u003e)\u003c/span\u003e\n       \u003cspan style=\"color: #907373;\"\u003e(\u003c/span\u003erange \u003cspan style=\"color: #6276BA;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003elength\u003c/span\u003e pitches\u003cspan style=\"color: #6276BA;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #907373;\"\u003e)\u003c/span\u003e\n       pitches\u003cspan style=\"color: #709870;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #909183;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #7388D6;\"\u003e)\u003c/span\u003e\u003cspan style=\"color: #707183;\"\u003e)\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;/play-chord\u0026gt;\u003c/span\u003e\n\n\u003cspan style=\"color: #707183;\"\u003e(\u003c/span\u003eplay-chord \u003cspan style=\"color: #7388D6;\"\u003e(\u003c/span\u003e\u003cspan style=\"color: #006699;\"\u003enow\u003c/span\u003e\u003cspan style=\"color: #7388D6;\"\u003e)\u003c/span\u003e tuner \u003cspan style=\"color: #7388D6;\"\u003e(\u003c/span\u003emake-pentatonic-scale \u003cspan style=\"color: #D0372D;\"\u003e60\u003c/span\u003e\u003cspan style=\"color: #7388D6;\"\u003e)\u003c/span\u003e *second*\u003cspan style=\"color: #707183;\"\u003e)\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;/play-pentatonic-scale\u0026gt;\u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\n\u003cspan style=\"color: #8D8D84;\"\u003e;; \u003c/span\u003e\u003cspan style=\"color: #8D8D84; font-style: italic;\"\u003e\u0026lt;/xtm/09-pentatonic-scale.xtm\u0026gt;\u003c/span\u003e\n\u003c/pre\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv id=\"postamble\" class=\"status\"\u003e\n\u003cp class=\"author\"\u003eAuthor: Ruslan Prakapchuk\u003c/p\u003e\n\u003cp class=\"date\"\u003eCreated: 2017-08-13 Sun 18:06\u003c/p\u003e\n\u003cp class=\"validation\"\u003e\u003ca href=\"http://validator.w3.org/check?uri=referer\"\u003eValidate\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n\u003c/body\u003e\n\u003c/html\u003e\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ful%2Flightnote","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ful%2Flightnote","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ful%2Flightnote/lists"}