⌈⌋ ⎇ branch:  Bitrhythm


Artifact Content

Artifact 9927a59e4371333cbe42d083708253de2e786c47873c9e569a3596f9dc652eb2:



<!DOCTYPE html>

<html>
  <head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Alternate Implementations &#8212; Bitrhythm&#39;s literate documentation</title>
    
  <link href="_static/css/theme.css" rel="stylesheet" />
  <link href="_static/css/index.c5995385ac14fb8791e8eb36b4908be2.css" rel="stylesheet" />

    
  <link rel="stylesheet"
    href="_static/vendor/fontawesome/5.13.0/css/all.min.css">
  <link rel="preload" as="font" type="font/woff2" crossorigin
    href="_static/vendor/fontawesome/5.13.0/webfonts/fa-solid-900.woff2">
  <link rel="preload" as="font" type="font/woff2" crossorigin
    href="_static/vendor/fontawesome/5.13.0/webfonts/fa-brands-400.woff2">

    
      

    
    <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
    <link rel="stylesheet" href="_static/sphinx-book-theme.e8e5499552300ddf5d7adccae7cc3b70.css" type="text/css" />
    <link rel="stylesheet" type="text/css" href="_static/custom.css" />
    
  <link rel="preload" as="script" href="_static/js/index.1c5a1a01449ed65a7b51.js">

    <script id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
    <script src="_static/jquery.js"></script>
    <script src="_static/underscore.js"></script>
    <script src="_static/doctools.js"></script>
    <script src="_static/sphinx-book-theme.12a9622fbb08dcb3a2a40b2c02b83a57.js"></script>
    <script src="_static/analytics.js"></script>
    <link rel="index" title="Index" href="genindex.html" />
    <link rel="search" title="Search" href="search.html" />
    <link rel="next" title="Saving / Recording / Streaming" href="saving.html" />
    <link rel="prev" title="Code Walkthrough" href="main.html" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <meta name="docsearch:language" content="en" />
    
  </head>
  <body data-spy="scroll" data-target="#bd-toc-nav" data-offset="80">
    
    <div class="container-fluid" id="banner"></div>

    

    <div class="container-xl">
      <div class="row">
          
<div class="col-12 col-md-3 bd-sidebar site-navigation show" id="site-navigation">
    
        <div class="navbar-brand-box">
    <a class="navbar-brand text-wrap" href="index.html">
      
      
      <h1 class="site-logo" id="site-title">Bitrhythm's literate documentation</h1>
      
    </a>
</div><nav class="bd-links" id="bd-docs-nav" aria-label="Main navigation">
    <div class="bd-toc-item active">
        <p class="caption">
 <span class="caption-text">
  Table of Contents
 </span>
</p>
<ul class="current nav bd-sidenav">
 <li class="toctree-l1">
  <a class="reference internal" href="what.html">
   What is bitrhythm about ?
  </a>
 </li>
 <li class="toctree-l1">
  <a class="reference internal" href="source-code.html">
   Source Code and License
  </a>
 </li>
 <li class="toctree-l1">
  <a class="reference internal" href="demo.html">
   Getting Started
  </a>
 </li>
 <li class="toctree-l1">
  <a class="reference internal" href="samples.html">
   Samples
  </a>
 </li>
 <li class="toctree-l1">
  <a class="reference internal" href="tweaking.html">
   Core Features
  </a>
 </li>
 <li class="toctree-l1">
  <a class="reference internal" href="early-attempts.html">
   Early Attempts
  </a>
 </li>
 <li class="toctree-l1">
  <a class="reference internal" href="changelog.html">
   Changelog
  </a>
 </li>
 <li class="toctree-l1">
  <a class="reference internal" href="main.html">
   Code Walkthrough
  </a>
 </li>
 <li class="toctree-l1 current active">
  <a class="current reference internal" href="#">
   Alternate Implementations
  </a>
 </li>
 <li class="toctree-l1">
  <a class="reference internal" href="saving.html">
   Saving / Recording / Streaming
  </a>
 </li>
 <li class="toctree-l1">
  <a class="reference internal" href="credits.html">
   Credits
  </a>
 </li>
 <li class="toctree-l1">
  <a class="reference internal" href="bookmarks.html">
   Bookmarks
  </a>
 </li>
</ul>

    </div>
</nav> <!-- To handle the deprecated key -->

<div class="navbar_extra_footer">
  
<a target="_blank" href="/">Bitrhythm App Home</a><br>
<a target="_blank" href="https://xyzzyapps.link">Xyzzy Apps Home</a><br>
<p class='custom-nav-footer'>(c) Xyzzy Apps, 2021</p>

</div>

</div>


          


          
<main class="col py-md-3 pl-md-4 bd-content overflow-auto" role="main">
    
    <div class="topbar container-xl fixed-top">
    <div class="topbar-contents row">
        <div class="col-12 col-md-3 bd-topbar-whitespace site-navigation show"></div>
        <div class="col pl-md-4 topbar-main">
            
            <button id="navbar-toggler" class="navbar-toggler ml-0" type="button" data-toggle="collapse"
                data-toggle="tooltip" data-placement="bottom" data-target=".site-navigation" aria-controls="navbar-menu"
                aria-expanded="true" aria-label="Toggle navigation" aria-controls="site-navigation"
                title="Toggle navigation" data-toggle="tooltip" data-placement="left">
                <i class="fas fa-bars"></i>
                <i class="fas fa-arrow-left"></i>
                <i class="fas fa-arrow-up"></i>
            </button>
            
            
            <!-- Source interaction buttons -->

            <!-- Full screen (wrap in <a> to have style consistency -->

<a class="full-screen-button"><button type="button" class="btn btn-secondary topbarbtn" data-toggle="tooltip"
        data-placement="bottom" onclick="toggleFullScreen()" aria-label="Fullscreen mode"
        title="Fullscreen mode"><i
            class="fas fa-expand"></i></button></a>

            <!-- Launch buttons -->

        </div>

        <!-- Table of contents -->
        <div class="d-none d-md-block col-md-2 bd-toc show">
            
            <div class="tocsection onthispage pt-5 pb-3">
                <i class="fas fa-list"></i> Contents
            </div>
            <nav id="bd-toc-nav">
                <ul class="visible nav section-nav flex-column">
 <li class="toc-h2 nav-item toc-entry">
  <a class="reference internal nav-link" href="#elementary">
   Elementary
  </a>
 </li>
</ul>

            </nav>
        </div>
    </div>
</div>
    <div id="main-content" class="row">
        <div class="col-12 col-md-9 pl-md-3 pr-md-0">
        
              <div>
                
  <div class="section" id="alternate-implementations">
<h1>Alternate Implementations<a class="headerlink" href="#alternate-implementations" title="Permalink to this headline">¶</a></h1>
<p>Here’s some more demo songs from other systems</p>
<ul class="simple">
<li><p><a href="https://www.youtube.com/watch?v=xXNB1BbKY8A">Foxdot and Python</a></p></li>
<li><p><a href="https://www.youtube.com/watch?v=ALrgudRS2AQ">Csound</a></p></li>
</ul>
<p>The core ideas of bitrhythm are transferable to other languages as well. At most all you need is a music loop and samples to get started.</p>
<p>A basic port to JUCE can be found <a class="reference external" href="https://xyzzyapps.link/bitrhythm-alt">here</a>.</p>
<p>Here’s a demo by SunVox’s author ?</p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/8r8wsvHUbCo" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
<p>An example in C with raylib</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span>brew install raylib
cc ray.c  `pkg-config --libs --cflags raylib` -o ray
</pre></div>
</div>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="cp">#include</span> <span class="cpf">&quot;raylib.h&quot;</span><span class="cp"></span>
<span class="cp">#include</span> <span class="cpf">&lt;unistd.h&gt;</span><span class="cp"></span>
<span class="cp">#include</span> <span class="cpf">&lt;stdio.h&gt;</span><span class="cp"></span>
<span class="cp">#include</span> <span class="cpf">&lt;time.h&gt;</span><span class="cp"></span>
<span class="cp">#include</span> <span class="cpf">&lt;stdlib.h&gt;</span><span class="cp"></span>

<span class="kt">void</span> <span class="nf">setTimeout</span><span class="p">(</span><span class="kt">int</span> <span class="n">milliseconds</span><span class="p">)</span>
<span class="p">{</span>
    <span class="c1">// If milliseconds is less or equal to 0</span>
    <span class="c1">// will be simple return from function without throw error</span>
    <span class="k">if</span> <span class="p">(</span><span class="n">milliseconds</span> <span class="o">&lt;=</span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span>
        <span class="n">fprintf</span><span class="p">(</span><span class="n">stderr</span><span class="p">,</span> <span class="s">&quot;Count milliseconds for timeout is less or equal to 0</span><span class="se">\n</span><span class="s">&quot;</span><span class="p">);</span>
        <span class="k">return</span><span class="p">;</span>
    <span class="p">}</span>

    <span class="c1">// a current time of milliseconds</span>
    <span class="kt">int</span> <span class="n">milliseconds_since</span> <span class="o">=</span> <span class="n">clock</span><span class="p">()</span> <span class="o">*</span> <span class="mi">1000</span> <span class="o">/</span> <span class="n">CLOCKS_PER_SEC</span><span class="p">;</span>

    <span class="c1">// needed count milliseconds of return from this timeout</span>
    <span class="kt">int</span> <span class="n">end</span> <span class="o">=</span> <span class="n">milliseconds_since</span> <span class="o">+</span> <span class="n">milliseconds</span><span class="p">;</span>

    <span class="c1">// wait while until needed time comes</span>
    <span class="k">do</span> <span class="p">{</span>
        <span class="n">milliseconds_since</span> <span class="o">=</span> <span class="n">clock</span><span class="p">()</span> <span class="o">*</span> <span class="mi">1000</span> <span class="o">/</span> <span class="n">CLOCKS_PER_SEC</span><span class="p">;</span>
    <span class="p">}</span> <span class="k">while</span> <span class="p">(</span><span class="n">milliseconds_since</span> <span class="o">&lt;=</span> <span class="n">end</span><span class="p">);</span>
<span class="p">}</span>


<span class="kt">int</span> <span class="nf">main</span><span class="p">(</span><span class="kt">void</span><span class="p">)</span>
<span class="p">{</span>

    <span class="n">InitAudioDevice</span><span class="p">();</span>      <span class="c1">// Initialize audio device</span>

    <span class="n">Sound</span> <span class="n">fxWav</span> <span class="o">=</span> <span class="n">LoadSound</span><span class="p">(</span><span class="s">&quot;Music/Kick01.wav&quot;</span><span class="p">);</span>
    <span class="n">Sound</span> <span class="n">fxWav2</span> <span class="o">=</span> <span class="n">LoadSound</span><span class="p">(</span><span class="s">&quot;Music/Clap01.wav&quot;</span><span class="p">);</span>

    <span class="kt">int</span> <span class="n">bpm</span><span class="p">;</span>
    <span class="n">printf</span><span class="p">(</span><span class="s">&quot;Enter bpm: &quot;</span><span class="p">);</span>
    <span class="n">scanf</span><span class="p">(</span><span class="s">&quot;%d&quot;</span><span class="p">,</span> <span class="o">&amp;</span><span class="n">bpm</span><span class="p">);</span>
    <span class="kt">float</span> <span class="n">time_per_beat</span> <span class="o">=</span> <span class="p">(</span><span class="mf">60.0</span> <span class="o">/</span> <span class="n">bpm</span><span class="p">)</span> <span class="o">*</span> <span class="mi">4</span><span class="p">;</span>
    <span class="kt">int</span> <span class="n">delay</span> <span class="o">=</span> <span class="p">(</span><span class="n">time_per_beat</span> <span class="o">*</span> <span class="mi">1000</span><span class="p">)</span> <span class="o">/</span> <span class="mi">16</span><span class="p">;</span>
    <span class="n">printf</span><span class="p">(</span><span class="s">&quot;%d</span><span class="se">\n</span><span class="s">&quot;</span><span class="p">,</span> <span class="n">delay</span><span class="p">);</span>

    <span class="k">while</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span> <span class="p">{</span>

        <span class="kt">int</span> <span class="n">i</span><span class="p">;</span>
        <span class="k">for</span> <span class="p">(</span><span class="n">i</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span> <span class="n">i</span> <span class="o">&lt;=</span> <span class="mi">16</span><span class="p">;</span> <span class="n">i</span><span class="o">++</span><span class="p">)</span> <span class="p">{</span>
            <span class="k">if</span> <span class="p">((</span><span class="n">i</span> <span class="o">==</span> <span class="mi">1</span><span class="p">)</span> <span class="o">||</span> <span class="p">(</span><span class="n">i</span> <span class="o">==</span> <span class="mi">5</span><span class="p">)</span> <span class="o">||</span> <span class="p">(</span><span class="n">i</span> <span class="o">==</span> <span class="mi">9</span><span class="p">)</span> <span class="o">||</span>  <span class="p">(</span><span class="n">i</span> <span class="o">==</span> <span class="mi">13</span><span class="p">))</span> <span class="p">{</span>
                <span class="n">PlaySound</span><span class="p">(</span><span class="n">fxWav</span><span class="p">);</span>
            <span class="p">}</span>
            <span class="k">if</span> <span class="p">((</span><span class="n">i</span> <span class="o">==</span> <span class="mi">5</span><span class="p">)</span> <span class="o">||</span>  <span class="p">(</span><span class="n">i</span> <span class="o">==</span> <span class="mi">13</span><span class="p">))</span> <span class="p">{</span>
                <span class="n">PlaySound</span><span class="p">(</span><span class="n">fxWav2</span><span class="p">);</span>
            <span class="p">}</span>
            <span class="n">setTimeout</span><span class="p">(</span><span class="n">delay</span><span class="p">);</span>
        <span class="p">}</span>
    <span class="p">}</span>


    <span class="n">UnloadSound</span><span class="p">(</span><span class="n">fxWav</span><span class="p">);</span>     <span class="c1">// Unload sound data</span>
    <span class="n">UnloadSound</span><span class="p">(</span><span class="n">fxWav2</span><span class="p">);</span>     <span class="c1">// Unload sound data</span>

    <span class="n">CloseAudioDevice</span><span class="p">();</span>     <span class="c1">// Close audio device</span>


    <span class="k">return</span> <span class="mi">0</span><span class="p">;</span>
<span class="p">}</span>
</pre></div>
</div>
<div class="section" id="elementary">
<h2>Elementary<a class="headerlink" href="#elementary" title="Permalink to this headline">¶</a></h2>
<p>Elementary is a javascript runtime - <a class="reference external" href="https://github.com/nick-thompson/elementary">https://github.com/nick-thompson/elementary</a>.</p>
<p>The following is a basic incomplete example that makes use of the sample. Need to update it to the latest Elementary version to simplify tick logic.</p>
<div class="highlight-js notranslate"><div class="highlight"><pre><span></span><span class="kd">const</span> <span class="nx">el</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="s1">&#39;@nick-thompson/elementary&#39;</span><span class="p">);</span>

<span class="kd">const</span> <span class="nx">kick02</span> <span class="o">=</span> <span class="s1">&#39;./Music/Kick01.wav&#39;</span><span class="p">;</span>
<span class="kd">const</span> <span class="nx">hh02</span> <span class="o">=</span> <span class="s1">&#39;./Music/HH02.wav&#39;</span><span class="p">;</span>
<span class="kd">const</span> <span class="nx">clap01</span> <span class="o">=</span> <span class="s1">&#39;./Music/Clap01.wav&#39;</span><span class="p">;</span>

<span class="kd">let</span> <span class="nx">voices</span> <span class="o">=</span> <span class="p">{</span>
  <span class="s1">&#39;60&#39;</span><span class="o">:</span> <span class="p">{</span><span class="nx">gain</span><span class="o">:</span> <span class="mf">1.0</span><span class="p">,</span> <span class="nx">gate</span><span class="o">:</span> <span class="mf">0.0</span><span class="p">,</span> <span class="nx">path</span><span class="o">:</span> <span class="nx">kick02</span><span class="p">,</span> <span class="nx">key</span><span class="o">:</span> <span class="s1">&#39;v1&#39;</span><span class="p">},</span>
  <span class="s1">&#39;61&#39;</span><span class="o">:</span> <span class="p">{</span><span class="nx">gain</span><span class="o">:</span> <span class="mf">1.0</span><span class="p">,</span> <span class="nx">gate</span><span class="o">:</span> <span class="mf">0.0</span><span class="p">,</span> <span class="nx">path</span><span class="o">:</span> <span class="nx">hh02</span><span class="p">,</span> <span class="nx">key</span><span class="o">:</span> <span class="s1">&#39;v2&#39;</span><span class="p">},</span>
  <span class="s1">&#39;62&#39;</span><span class="o">:</span> <span class="p">{</span><span class="nx">gain</span><span class="o">:</span> <span class="mf">0.6</span><span class="p">,</span> <span class="nx">gate</span><span class="o">:</span> <span class="mf">0.0</span><span class="p">,</span> <span class="nx">path</span><span class="o">:</span> <span class="nx">clap01</span><span class="p">,</span> <span class="nx">key</span><span class="o">:</span> <span class="s1">&#39;v3&#39;</span><span class="p">},</span>
<span class="p">};</span>

<span class="kd">function</span> <span class="nx">updateVoiceState</span><span class="p">(</span><span class="nx">e</span><span class="p">)</span> <span class="p">{</span>
  <span class="k">if</span> <span class="p">(</span><span class="nx">e</span> <span class="o">&amp;&amp;</span> <span class="nx">e</span><span class="p">.</span><span class="nx">hasOwnProperty</span><span class="p">(</span><span class="s1">&#39;type&#39;</span><span class="p">)</span> <span class="o">&amp;&amp;</span> <span class="nx">e</span><span class="p">.</span><span class="nx">type</span> <span class="o">===</span> <span class="s1">&#39;noteOn&#39;</span><span class="p">)</span> <span class="p">{</span>
    <span class="k">if</span> <span class="p">(</span><span class="nx">voices</span><span class="p">.</span><span class="nx">hasOwnProperty</span><span class="p">(</span><span class="nx">e</span><span class="p">.</span><span class="nx">noteNumber</span><span class="p">))</span> <span class="p">{</span>
      <span class="nx">voices</span><span class="p">[</span><span class="nx">e</span><span class="p">.</span><span class="nx">noteNumber</span><span class="p">].</span><span class="nx">gate</span> <span class="o">=</span> <span class="mf">1.0</span><span class="p">;</span>
    <span class="p">}</span>
  <span class="p">}</span>

  <span class="k">if</span> <span class="p">(</span><span class="nx">e</span> <span class="o">&amp;&amp;</span> <span class="nx">e</span><span class="p">.</span><span class="nx">hasOwnProperty</span><span class="p">(</span><span class="s1">&#39;type&#39;</span><span class="p">)</span> <span class="o">&amp;&amp;</span> <span class="nx">e</span><span class="p">.</span><span class="nx">type</span> <span class="o">===</span> <span class="s1">&#39;noteOff&#39;</span><span class="p">)</span> <span class="p">{</span>
    <span class="k">if</span> <span class="p">(</span><span class="nx">voices</span><span class="p">.</span><span class="nx">hasOwnProperty</span><span class="p">(</span><span class="nx">e</span><span class="p">.</span><span class="nx">noteNumber</span><span class="p">))</span> <span class="p">{</span>
      <span class="nx">voices</span><span class="p">[</span><span class="nx">e</span><span class="p">.</span><span class="nx">noteNumber</span><span class="p">].</span><span class="nx">gate</span> <span class="o">=</span> <span class="mf">0.0</span><span class="p">;</span>
    <span class="p">}</span>
  <span class="p">}</span>
<span class="p">}</span>

<span class="kd">function</span> <span class="nx">samplerVoice</span><span class="p">(</span><span class="nx">voice</span><span class="p">)</span> <span class="p">{</span>
  <span class="kd">let</span> <span class="nx">gate</span> <span class="o">=</span> <span class="nx">el</span><span class="p">.</span><span class="kd">const</span><span class="p">({</span><span class="nx">key</span><span class="o">:</span> <span class="nx">voice</span><span class="p">.</span><span class="nx">key</span><span class="p">,</span> <span class="nx">value</span><span class="o">:</span> <span class="nx">voice</span><span class="p">.</span><span class="nx">gate</span><span class="p">});</span>
  <span class="k">return</span> <span class="nx">el</span><span class="p">.</span><span class="nx">mul</span><span class="p">(</span><span class="nx">voice</span><span class="p">.</span><span class="nx">gain</span><span class="p">,</span> <span class="nx">el</span><span class="p">.</span><span class="nx">sample</span><span class="p">({</span><span class="nx">path</span><span class="o">:</span> <span class="nx">voice</span><span class="p">.</span><span class="nx">path</span><span class="p">},</span> <span class="nx">gate</span><span class="p">));</span>
<span class="p">}</span>

<span class="nx">elementary</span><span class="p">.</span><span class="nx">core</span><span class="p">.</span><span class="nx">on</span><span class="p">(</span><span class="s1">&#39;load&#39;</span><span class="p">,</span> <span class="kd">function</span><span class="p">()</span> <span class="p">{</span>
        <span class="kd">let</span> <span class="nx">i</span> <span class="o">=</span> <span class="mf">0</span><span class="p">;</span>
        <span class="kd">let</span> <span class="nx">step</span> <span class="o">=</span> <span class="mf">0</span><span class="p">;</span>
        <span class="kd">function</span> <span class="nx">function2</span><span class="p">()</span> <span class="p">{</span>
            <span class="nx">step</span> <span class="o">=</span> <span class="nx">i</span> <span class="o">%</span> <span class="mf">16</span><span class="p">;</span>
            <span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="nx">step</span><span class="p">)</span>
            <span class="k">if</span> <span class="p">(</span><span class="nx">i</span> <span class="o">%</span> <span class="mf">4</span> <span class="o">==</span> <span class="mf">0</span><span class="p">)</span> <span class="p">{</span>
              <span class="nx">updateVoiceState</span><span class="p">({</span><span class="nx">type</span><span class="o">:</span> <span class="s1">&#39;noteOn&#39;</span><span class="p">,</span> <span class="nx">noteNumber</span><span class="o">:</span> <span class="s1">&#39;60&#39;</span><span class="p">});</span>
            <span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
              <span class="nx">updateVoiceState</span><span class="p">({</span><span class="nx">type</span><span class="o">:</span> <span class="s1">&#39;noteOff&#39;</span><span class="p">,</span> <span class="nx">noteNumber</span><span class="o">:</span> <span class="s1">&#39;60&#39;</span><span class="p">});</span>
            <span class="p">}</span>

            <span class="k">if</span> <span class="p">((</span><span class="nx">i</span> <span class="o">!==</span> <span class="mf">0</span><span class="p">)</span> <span class="o">&amp;&amp;</span> <span class="p">(</span><span class="nx">i</span> <span class="o">%</span> <span class="mf">8</span> <span class="o">==</span> <span class="mf">0</span><span class="p">))</span> <span class="p">{</span>
              <span class="nx">updateVoiceState</span><span class="p">({</span><span class="nx">type</span><span class="o">:</span> <span class="s1">&#39;noteOn&#39;</span><span class="p">,</span> <span class="nx">noteNumber</span><span class="o">:</span> <span class="s1">&#39;62&#39;</span><span class="p">});</span>
            <span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
              <span class="nx">updateVoiceState</span><span class="p">({</span><span class="nx">type</span><span class="o">:</span> <span class="s1">&#39;noteOff&#39;</span><span class="p">,</span> <span class="nx">noteNumber</span><span class="o">:</span> <span class="s1">&#39;62&#39;</span><span class="p">});</span>
            <span class="p">}</span>

            <span class="kd">let</span> <span class="nx">out</span> <span class="o">=</span> <span class="nx">el</span><span class="p">.</span><span class="nx">add</span><span class="p">(</span><span class="nb">Object</span><span class="p">.</span><span class="nx">keys</span><span class="p">(</span><span class="nx">voices</span><span class="p">).</span><span class="nx">map</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">n</span><span class="p">)</span> <span class="p">{</span>
                <span class="k">return</span> <span class="nx">samplerVoice</span><span class="p">(</span><span class="nx">voices</span><span class="p">[</span><span class="nx">n</span><span class="p">]);</span>
            <span class="p">}));</span>

            <span class="kd">let</span> <span class="nx">filtered</span> <span class="o">=</span> <span class="nx">el</span><span class="p">.</span><span class="nx">lowpass</span><span class="p">(</span><span class="mf">1800</span><span class="p">,</span> <span class="mf">1.414</span><span class="p">,</span> <span class="nx">out</span><span class="p">);</span>
            <span class="nx">elementary</span><span class="p">.</span><span class="nx">core</span><span class="p">.</span><span class="nx">render</span><span class="p">(</span><span class="nx">filtered</span><span class="p">,</span> <span class="nx">filtered</span><span class="p">);</span>
            <span class="nx">i</span><span class="o">++</span><span class="p">;</span>
        <span class="p">}</span>
        <span class="nx">setInterval</span><span class="p">(</span><span class="nx">function2</span><span class="p">,</span> <span class="mf">60000</span> <span class="o">/</span> <span class="mf">120.0</span> <span class="o">/</span> <span class="mf">2</span><span class="p">);</span>
<span class="p">});</span>
</pre></div>
</div>
</div>
</div>


              </div>
              
        
        <div class='prev-next-bottom'>
            
    <a class='left-prev' id="prev-link" href="main.html" title="previous page">Code Walkthrough</a>
    <a class='right-next' id="next-link" href="saving.html" title="next page">Saving / Recording / Streaming</a>

        </div>
        
        </div>
    </div>
    <footer class="footer mt-5 mt-md-0">
    <div class="container">
      <p>
        
          By Xyzzy Apps<br/>
        
            &copy; Copyright (c) Xyzzy Apps, 2021.<br/>
      </p>
    </div>
  </footer>
</main>


      </div>
    </div>
  
  <script src="_static/js/index.1c5a1a01449ed65a7b51.js"></script>

  
  </body>
</html>